这个问题以前发布在crypto.exchange上,但是由于我的问题仍然存在,我认为这可能更多是我可能忽略的编程细节,而不是理论上的东西。
所以基本上我的问题是我在测量在 java 中生成 ECDH 密钥所需的时间与生成 DH 密钥所需的时间时得到的奇怪结果。
我比较生成所需的时间:
- 192 位 ECDH 密钥到 512 位 DH 密钥
- 224 位 ECDH 密钥到 1024 DH 密钥
现在,由于密钥大小的不同,我预计 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();
}
}