ECDH VS. DH在JAVA中进行基准测试

时间:2013-02-05 16:19:03

标签: java cryptography diffie-hellman

此问题之前发布在crypto.exchange,但是由于我的问题仍然存在,我想也许这可能更像是一个我可能忽略的编程细节而不是理论问题。

所以基本上我的问题是在测量在java中生成ECDH密钥所需的时间与生成DH密钥所需的时间之间得到的奇怪结果。

我比较生成所需的时间:

  • 192bit ECDH-key转换为512bit DH-key
  • 224bit ECDH-key to 1024 DH-key

现在我期望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();
    }
}

0 个答案:

没有答案