1

秘密鍵暗号化を使用するJavaのクライアントサーバーアプリケーションに取り組んでいます。

Cipher現在、次のように初期化するクラスの静的オブジェクトを持つクラスがありますmyCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);

ここで私の質問は次のとおりです。私は双方向通信を行っていCipherますが、各方法 (暗号化用と復号化用) に個別のオブジェクトを用意し、同じ初期化ベクトルを使用する必要がありますか? または、同じオブジェクトと呼び出しを使用して、Cipher.init()暗号化するか復号化するかに応じてモードを変更する必要がありますか?

頭の中に別々のオブジェクトがあるのは理にかなっていますが、確認したかっただけです。私はグーグルを試しましたが、ほとんどの例は一方向の暗号化しか示していません。

現在、初期化ベクトルを暗号化せずにサーバーに送信していますが、これは正しいですか、それともセキュリティ上の欠陥がありますか?

それとも、完全に間違った方法でアプローチしていますか?

ありがとう。

4

1 に答える 1

2

あなたの質問は2つあります:

  1. 1 つのオブジェクトを使用する必要があります。これにより、メモリが節約されます。ただし、メモリを消費できる場合は、2 つにしてください。少なくとも、コードが読みやすくなります。

  2. IV は暗号化する必要はありません。IV はランダムな値で、送信側と受信側の両方で同期されます。IV について最も重要なことは、同じキーを繰り返したり、再利用したりしてはならないということです。

于 2011-05-16T12:02:27.130 に答える