2012-11-10 55 views
2

生成DH參數時,使用Bouncy Castle Provider時性能出現問題。任何人都知道爲什麼下面的Bouncy Castle示例比使用標準提供程序慢50倍左右?Java中充氣城堡的性能

使用充氣城堡供應商:

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()); 
} 

回答

3

的原因速度不同的是,BC提供商正在尋找一個「安全素」,即黃金p:p = 2q + 1,其中q也是素數。

正如您注意到的,這比僅僅發現一個素數要慢很多。標準提供商沒有這樣做,因爲可以很容易地驗證。

尋找一個安全的素數可能是矯枉過正的,因爲對於某些R來說,p = 2Rq + 1就足夠了,因爲它可以實現相當快的實現,同時還能確保(p-1)的一個很大的素數因子。

不需要經常自己生成這些參數(如果有的話)。單組可以用於許多密鑰對,並且有一組標準化的參數可以讓你使用更好。