弹力城堡在Java中的性能
作者:互联网
生成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());
}
解决方法:
速度差异的原因是BC提供者正在搜索“安全素数”,即素数p:p = 2q 1,其中q也是素数.
您已经注意到,这比找到质数要慢得多.标准提供者没有这样做,因为很容易验证.
寻找安全的质数可能是过大的,因为对于某些R而言,使p = 2Rq 1足够了,这承认实现起来速度明显加快,同时仍确保了(p-1)的较大质数.
不必经常自己生成这些参数(如果有的话).一组可以用于许多密钥对,并且周围有标准化的参数集,您最好使用它们.
标签:performance,diffie-hellman,bouncycastle,java 来源: https://codeday.me/bug/20191031/1977462.html