4

私は現在、クライアントとサーバー間でデータを送信するシステムを開発していますが、使用する予定の暗号化の強度はどの程度か疑問に思っていました。

私が考えたのは、RSA 秘密鍵と公開鍵のペアを用意し、公開鍵を各クライアントに配布することでした (秘密鍵はサーバーだけに残します)。次に、各クライアントは独自の AES キーを生成し、RSA で暗号化します。次に、データを AES 暗号化し、暗号化されたデータと暗号化された AES キーをサーバーに送信します。次に、サーバーは秘密鍵を使用して AES キーを復号化し、AES キーを使用してデータを復号化します。

私が見逃しているセキュリティ上の欠陥はありますか、またはこれを行うためのより良い方法はありますか?

4

4 に答える 4

19

これは、 SSL/TLSの仕組みとほぼ同じです(ハンドシェイクのセクションを参照してください)。より強力にする唯一の方法は、毎回同じキーを使用するのではなく、接続ごとに AES キーを生成することです。また、中間者攻撃やその他のスプーフィング攻撃を回避するために、やり取りするメッセージにデジタル署名することもできます。

一般的に言えば、優れた暗号システムを作成することは非常に困難です。可能であれば、常に既存の (信頼できる) アプリケーションを優先する必要があります。この場合、独自のシステムを作成するのではなく、HTTPS を使用してメッセージを送信することを検討してください。

于 2009-11-02T23:23:07.667 に答える
2

使用している言語とプラットフォームに関する詳細情報を提供する必要があります。これにより、既に存在し、詳細を処理するライブラリに関する具体的な推奨事項を提供できます。暗号プリミティブを直接使用することは些細なことではなく、正確に正しく行うことは困難です。暗号化では、セキュリティが破られるためには「正しくない」ことが一度だけ必要です。


あなたの質問に答えるには、一般に、Diffie-Hellman交換を介してセッション シークレット (AES キー) を作成し、それぞれの側で秘密の RSA キーを使用してキー交換データに署名することをお勧めします。

それ以外の場合、セッション シークレットが DH 交換によって確立されない場合、秘密 RSA キー (どこかに保存する必要があります) にアクセスできる敵対者は、クライアントとサーバー間で送信されたすべてのトラフィックを復号化できます。

シークレットDH 交換によって確立された場合、プロトコルの認証部分のみが公開されます。秘密 RSA キーを所有している敵対者は、以前の通信を読み取ることはできませんが、クライアント/サーバーとの認証されたダイアログに入るか、中間者攻撃を開始することができます (これは、ネットワークによっては、簡単に実行できない場合があります)。

于 2009-11-02T23:44:44.600 に答える
0

1つの脆弱性は、攻撃者が自分の公開鍵を「実際の」公開鍵に置き換えた場合です。そうすれば、彼らは「中間者」としてトラフィックを傍受できるようになります。

S / MIME、PGP、TLSなどのプロトコルは、RSA暗号化を使用して、提案どおりにキーを転送します。ただし、使用する公開鍵は、信頼できる機関によって署名された証明書に含まれています。

これらの信頼できる機関の完全性は慎重に保護する必要があります。たとえば、改ざん防止のハードウェアトークンに焼き付けられたり、パスワードを使用してMACが計算されたりする場合があります。

于 2009-11-02T23:40:18.737 に答える
-3

あなたのアプローチが何かを保護するかどうかはわかりません!秘密鍵はサーバーに保管し、公開鍵は配布されます。あなたの公開鍵を手に入れたら、あなたのサーバーと自由にやり取りできるようになります。キーの所有権を逆にする必要があると思います。各クライアントは独自の秘密鍵を保持し、サーバーは公開鍵 (ala SSH) のリストを保持します。サーバーは「承認された」公開鍵を追加する必要があり、秘密鍵の所有者のみが接続できます。

お役に立てれば。

于 2010-10-21T16:49:52.810 に答える