这是代码,我在使用来产生DH密钥对:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(1024, new SecureRandom());
KeyPair ackp = keyGen.generateKeyPair();

(而不需要尝试/抓住,然)。

我已经做了一些测试运行这样的代码迭代变化的关键尺寸(特别是增加从128个128步骤达到1024。1024将是所期望的大小。

首先,运行,每个小生成10倍到有一些最起码的标准偏差的结果给予高波动的结果,平均来说,无论如何,所需的时间,用于创建的钥匙(1024位)是:683027ms,其轮到周围 11分钟 为创建一个关键。

问题是:

  1. 是其他任何人得到同样的结果?
  2. 是有一些优化运行,以便实现下的时间?
  3. 什么是高波动的依赖吗?(即对于产生一个1024bit关键,它可以从18秒钟到30分钟...)

测试已经运行一个承上启下-一个电话

预先感谢脱落的一些"问题"

关于

有帮助吗?

解决方案

我做了一些进一步编的研究和显然的话这是最多的时间(电池?) 消费是:

new SecureRandom()

特别是,虽然,由于对DH的参数(g,p,l)可以预计和硬编码这是一个明智的建议,这样做事先和使用所产生的价值观来生成密钥对(将几乎是瞬时的).

例编码:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(new DHParameterSpec(p, g, l));
KeyPair ackp = keyGen.generateKeyPair();

其中p和我是:

final BigInteger p = new BigInteger("X");
final BigInteger g = new BigInteger("Y");
final int l = 1023;

和X和Y可以产生的离线有:

AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(1024, new SecureRandom());
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class);
System.out.println("p: " + dhSpec.getP() + "\ng: " + dhSpec.getG() + " \nl: " + dhSpec.getL());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top