Java中的Bouncy Castle的性能

时间:2012-11-10 03:56:58

标签: java performance bouncycastle diffie-hellman

在生成DH参数时,我在使用Bouncy Castle Provider时遇到了一些性能问题。任何人都知道为什么下面的Bouncy Castle示例比使用标准提供程序慢大约50倍?

使用Bouncy Castle提供者:

Security.addProvider(new BouncyCastleProvider());
AlgorithmParameterGenerator generator = AlgorithmParameterGenerator.getInstance("DH", "BC");
for (int i = 0; i < 3; i++) {
    generator.init(1024, new SecureRandom());
    AlgorithmParameters params = generator.generateParameters();
    DHParameterSpec dhSpec = (DHParameterSpec) params.getParameterSpec(DHParameterSpec.class);
    System.out.println("P: " + dhSpec.getP() + ", G:" + dhSpec.getG());
}

使用标准提供者:

AlgorithmParameterGenerator generator = AlgorithmParameterGenerator.getInstance("DH");
for (int i = 0; i < 3; i++) {
    generator.init(1024, new SecureRandom());
    AlgorithmParameters params = generator.generateParameters();
    DHParameterSpec dhSpec = (DHParameterSpec) params.getParameterSpec(DHParameterSpec.class);
    System.out.println("P: " + dhSpec.getP() + ", G:" + dhSpec.getG());
}

1 个答案:

答案 0 :(得分:4)

速度差异的原因是BC提供商正在搜索“Safe Prime”,即素数p:p = 2q + 1,其中q也是素数。

正如你所注意到的,这比找到素数慢得多。标准提供商没有这样做,因为很容易验证。

寻找安全素数可能是过度的,因为对于某些R而言p = 2Rq + 1可能就足够了,这允许实现相当快的速度,同时仍然确保(p-1)的大素因子。 / p>

没有必要经常自己生成这些参数(如果有的话)。单个集合可以用于许多密钥对,并且有一些标准化的参数集可以更好地使用。