2

这个问题以前发布在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();
    }
}
4

0 回答 0