2017-02-03 8 views
0

私は現在、ユーザーが自分のデータを取得するために掻き集める別のWebサービスの資格情報を入力するWebサイトを構築しています。資格情報を暗号化して安全に再利用する

私のデータベースに資格情報を保存する際には、最高レベルのセキュリティを確保するために最高の暗号化と最高のアーキテクチャを使用しています。

私が心に持っていた最初のアイデアは、RSAパブキー(PBKDF2、PKCS1_OAEP、AES 256bit ... ???)を使用してデータを暗号化し、私のスクラップスクリプトが秘密鍵を使用して資格情報を入力して使用します。

  • 私のサーバーがハッキングされている場合、ハッカーはデータベースと秘密鍵の両方にアクセスできます。これは、スクラップスクリプトを実行し、DBをホストするサーバー上に保持されるためです。これを解決するアーキテクチャパターンはありますか?
  • 最高のセキュリティを実現するためにハッシングと暗号化が混在している必要がありますが、ハッシュは単方向性であり、資格情報を再利用する必要があるため、ユースケースには合致しません。最高の暗号化サイファー/パターンで私にアドバイスできれば、素晴らしいかもしれません。

私はPythonでコーディングしています。私はPyCryptoが暗号化のためのgo-toライブラリだと信じています。 (私は混乱の技術であるかもしれないので、申し訳ありませんが、私は暗号についてほとんど知識を持っている)

+0

サーバーがハッキングされている場合、おそらくあまりできることはありません。おそらく、追加のセキュリティとして、プライベートキーを第3のサーバーに格納して、メインサーバーから必要なときにのみフェッチすることもできます。そうすれば、ハッカーはメインサーバーとdbをダンプしてデータにアクセスすることができます。しかし、Pythonアプリケーションを監視しているサーバー上にいる場合は、取得時にキーを見ることができるため、何もできません。 –

+0

ありがとうございます@ this.lau_、ええ、それはDBとプライベートキーが別のサーバー上にある必要がありますようです。私はこの可能性を探求します。 – mandok

+2

私はこれについて悪い気持ちになる。 SE.Cryptoのサイトにアクセスし、専門家にこの計画について何を考えるか尋ねてください。しかし、その間にhttps://en.wikipedia.org/wiki/OAuthを見てください –

答えて

-2
from cryptography.fernet import Fernet 
class Crypt(): 
    def __init__(self, key): 
     self.cipher = Fernet(key) 

    def encrypt(self, my_message): 
     return self.cipher.encrypt(my_message) 

    def decrypt(self, my_message): 
     return self.cipher.decrypt(my_message) 

    @staticmethod   
    def key_maker(): 
     return Fernet.generate_key()    

if __name__ == '__main__': 
    KEY = Crypt.key_maker() 
    crypt = Crypt(KEY) 
    msg = crypt.encrypt(b'hi') 
    msg = crypt,decrypt(msg) 
+0

ありがとう! PyCryptoのようなよく知られたライブラリから来るものよりも、この実装を使うほうがますます安全ですか? – mandok

+1

@mandokいいえ、これはひどい解決策です。暗号化が必要な場合は、AESを使用してください。 – zaph

+0

@mandok正当な理由がありますか?please –

0

は、第二のサーバ(暗号化サーバ)上の暗号化と復号化を行います。

暗号化のためのIDとともに暗号化サーバーにパスワードを渡し、暗号化されたパスワードを返してDBに格納します。

パスワードが必要な場合は、復号化のために暗号化されたパスワードを暗号化サーバーに渡します。

異常な数の要求が受信されたときにアラームを鳴らし、極端な場合に処理要求を停止すると、暗号化サーバーは要求アクティビティを監視します。

第2のサーバーを非常に安全にします。インターネットアクセスなし、最小限のアクセスアカウント、2要素認証。

暗号化サーバーは、貧しい人のHSM(ハードウェア暗号化モジュール)になります。

関連する問題