この質問は以前にcrypto.exchangeに投稿されましたが、私の問題はまだ残っているため、おそらくこれはプログラミングの詳細であり、理論的なものではなく、見落としている可能性があると思いました。
したがって、基本的に私の問題は、JavaでECDHキーを生成するのにかかる時間とDHキーを生成するのにかかる時間を測定するときに得られる奇妙な結果です。
生成にかかる時間を比較します。
- 192 ビットの ECDH キーから 512 ビットの DH キーへ
- 1024 DH キーへの 224 ビット ECDH キー
ここで、キー サイズの違いにより、ECDH キー ペアの生成が通常の DH キーよりも優れていると予想していましたが、そうではありませんでした。おそらく私はこれを間違って測定しているか、別の説明があります。
public void generateKeyPair() {
try {
keyfactory = KeyFactory.getInstance("ECDH");
keyPairGenerator = KeyPairGenerator.getInstance("ECDH", "BC");
//NIST EC-Curve P-224"
org.bouncycastle.jce.spec.ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(EllipticCurveDiffieHellman.curveNames.get(new Integer(224)));
keyPairGenerator.initialize(ecSpec, new SecureRandom());
int num = 10;
/* Warm up */
for (int wRound = 0; wRound < 200; wRound++) {
keyPairGenerator.generateKeyPair();
}
/*
* Finding the right number of iterations such that we iterate for
* at least 2s
*/
for (;;) {
long begin = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
keypair = keyPairGenerator.generateKeyPair();
}
long end = System.currentTimeMillis();
long time = end - begin;
if (time >= 2000) {
System.out.printf("Average keygen time: %.2f ms\n",
(double) time / num);
break;
}
num *= 2;
}
} catch (Exception e) {
e.printStackTrace();
}
}