1

重複の可能性:
Javaでのネットワーク通信の暗号化

私はクライアントサーバーアプリケーションを設計しています。セッション全体を暗号化する必要があります。私はそれを行うために次の予防策を考えていました(公開鍵暗号化にはRSAを使用し、対称暗号化にはAES-128を使用):

クライアントはサーバーに接続し、「hello」メッセージを送信します。サーバーは公開鍵で応答します。クライアントは128ビットのAESキーを生成し、サーバーの公開キーで暗号化して送信します。残りのアプリケーションプロトコルは、AESキーを使用して暗号化されます。

このロジックは大丈夫ですか?欠陥はありますか?大丈夫ですか、それともSSLを使用する方が良いですか?基本的に私が懸念しているのは、リプレイ攻撃とmitmです。

4

1 に答える 1

2

あなたがしていることはSSLの根底にある考えを説明することです、そしてあなたがスキームを実装することを犯すことができる多くの小さな間違いがあるので、あなたはSSLを使うほうがはるかに良いでしょう。

サーバーの公開鍵を検証する方法がないため、説明するときにスキームに欠陥があります。誰でもそれを送ることができたでしょう。さらに、暗号化されたAESキーが実際にクライアントによって生成されていることをどのようにして知ることができますか?誰でも公開鍵を傍受する可能性があります。これが、SSL(または現在のTLS)が他のトリックの中でも特にトラストストアとDiffie-Hellmanを使用する理由です。

自己署名証明書は、購入したくない場合は、帯域外の手順(クライアントアプリでの配布など)で信頼できるものを使用できます。

于 2012-10-27T21:51:59.107 に答える