技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 算法 --> Diffie-Hellman算法的效率

Diffie-Hellman算法的效率

浏览:965次  出处信息

    我之前一直有个误解,以为DH的私钥的长度必须跟公钥一样。

    今天调试flash的时候发现,它的DH算法用的私钥长度竟然是128位,虽然它采用的同余群的p是1024位的。我然后翻了些资料,看DH算法对私钥的长度有何要求。从Sun JDK的代码来看,对私钥x只有一个要求,1 <= x <= p-2,那么也就是说只要它的长度小于1024就没有问题。

    BigInteger pMinus2 = p.subtract(BigInteger.valueOf(2));

    do {

     // generate random x up to 2^lSize bits long

     x = new BigInteger(lSize, random);

     } while ((x.compareTo(BigInteger.ONE) < 0) ||

     ((x.compareTo(pMinus2) > 0)));

    其中无论是生KeyPair,还是计算secret,其中最耗时的无非是大整数的次幂再求余的运算,即BigInteger的modPow。

    我想拿google的caliper测试一下DH的性能,结果,当private key的长度稍微大一点的时候,caliper就不干了,说Got no response。

    1 of 2 measurements complete: 50.0%.java.lang.RuntimeException: Got no response!

     at com.google.caliper.runner.CaliperRun.measure(CaliperRun.java:234)

     at com.google.caliper.runner.CaliperRun.run(CaliperRun.java:132)

     at com.google.caliper.runner.CaliperMain.exitlessMain(CaliperMain.java:88)

     at com.google.caliper.runner.CaliperMain.main(CaliperMain.java:58)

     at com.google.caliper.runner.CaliperMain.main(CaliperMain.java:47)

    可能是因为运行的时间太长了,于是我就自己写代码测,结果是,当private key长度等于128位的时候,在我的笔记本上每次生keypair或者计算secret所需要的时间大约是3ms左右。而当key长度等于1024位的时候,这个值则增长到22ms左右。l的默认值是384,那么大约是9ms左右,也就是说1个CPU 1秒钟最多只能建立50个连接。不过我的笔记本比较老,拿到公司的服务器上去试一试也许不一样,可能会好3-4倍。

    Caliper的那个问题依然没解决,我在配置文件中找遍了所有选项也没有找到解决办法。求达人指点。另外,能不能在自己的server上跑那个webapp,而不是在GAE上面?因为GAE总是抽风啊。

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1