1

DiffieHellmanの実装で問題が発生しています。私はこのコードを使用しています http://www.java2s.com/Tutorial/Java/0490__Security/DiffieHellmanKeyAgreement.htm

実は私が読んでいる一冊の本の例です。しかし、なぜgenerateSecret()ごとに異なるキーを作成するのか理解できませんKeyAgreementKeyAgreement同じ関数で2回呼び出しても、関数が異なるキーを作成することに気づきました。誰かが提案する何かを持っているなら、私は本当にうれしいです!

御時間ありがとうございます!

4

1 に答える 1

6

例の部分だと思います

private static BigInteger g512 = new BigInteger("1234567890", 16);
private static BigInteger p512 = new BigInteger("1234567890", 16);

完全に偽物です。 p素数でgある必要があり、ジェネレータである必要があります。サンプルを実行しようとすると、例外が発生します。 これはより合理的な例のようです (ただし、まだ自分でテストしていません)。

基本的に、DH 交換への興味深い入力は、p,g生成する必要があり、いくつかの固有のプロパティを持たなければならない ( ) ペアです。明らかに、上記の例は、正しく機能するアルゴリズムを生成しないプレースホルダーの値を示しています (この例では明らかに 10 で割り切れますが、p等しいことはできず、素数である必要がgあります)。pリンクした例は、ライブラリを使用して正しい ( p, g) ペアを生成する方法を示しています。

また、DH パラメータの生成は通常、秘密鍵の生成とは別の手順であることにも注意してください。DH パラメータはある程度非公開ですが、秘密鍵ほど機密ではなく、一度生成してから再利用できます。

(編集:

AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(512); // number of bits
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = params.getParameterSpec(DHParameterSpec.class);

BigInteger p512 = dhSpec.getP();
BigInteger g512 = dhSpec.getG();
int l = dhSpec.getL();
...
于 2012-06-05T18:28:43.750 に答える