質問

これは、DH キーペアの生成に使用しているコードです。

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(1024, new SecureRandom());
KeyPair ackp = keyGen.generateKeyPair();

(もちろん、必要な try/catch は必要ありません)。

このようなコードを繰り返し実行し、キーサイズを変更していくつかのテストを実行しました(特に、128から128ステップで1024まで増加します)。1024 が望ましいサイズになります。

まず、結果の標準偏差を最小限に抑えるために各サイズの生成を 10 回実行すると、平均して結果の変動が大きくなり、とにかくキーの作成に必要な時間がかかります (1024ビット) は:683027ms (およそに切り上げ) 11分 キーを作成するため。

質問は次のとおりです。

  1. 他に同じ結果を得ている人はいますか?
  2. 時間を短縮するために何らかの最適化を実行する必要はありますか?
  3. 変動が大きいのは何に依存しているのでしょうか?(すなわち、1024 ビット鍵の生成には 18 秒から 30 分かかる場合があります...)

テストは Nexus-One 携帯電話で実行されました

「問題」に光を当ててくれてありがとう

よろしく

役に立ちましたか?

解決

私はさらにいくつかの符号化/研究を行なったし、明らかにほとんどの時間(バッテリー?)消費だ呼び出しがあります:

new SecureRandom()
DHのパラメータ(G、P、L)は事前に計算することができるので、

具体的には、しかし、その意志(そのように予め行い、鍵のペアを生成するために生成された値を使用するのが賢明提案のハードコードされ)はほぼ瞬間的ます。

例コード:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(new DHParameterSpec(p, g, l));
KeyPair ackp = keyGen.generateKeyPair();

P、G、およびLは、ここで、

final BigInteger p = new BigInteger("X");
final BigInteger g = new BigInteger("Y");
final int l = 1023;

そして、XとYはでオフラインで生成することができます:

AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(1024, new SecureRandom());
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class);
System.out.println("p: " + dhSpec.getP() + "\ng: " + dhSpec.getG() + " \nl: " + dhSpec.getL());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top