3

これは、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電話でテストが実行されました

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

よろしく

4

1 に答える 1

7

私はさらにいくつかのコーディング/調査を行いましたが、明らかに最も時間(バッテリー?)を消費している呼び出しは次のとおりです。

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());
于 2010-03-24T17:54:00.907 に答える