此问题之前发布在crypto.exchange,但是由于我的问题仍然存在,我想也许这可能更像是一个我可能忽略的编程细节而不是理论问题。
所以基本上我的问题是在测量在java中生成ECDH密钥所需的时间与生成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();
}
}