2012-11-10 4 views
2

DH 매개 변수 생성시 Bouncy Castle Provider를 사용하여 성능에 문제가 있습니다. 아래의 Bouncy Castle 예제가 표준 제공 업체를 사용하는 것보다 약 50 배 더 느린 이유는 누구나 알고 있습니까?Java에서 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()); 
} 

답변

3

속도 차이에 대한 이유는 BC 공급자 즉, 프라임, "안전한 프라임"를 검색한다는 것입니다 p : p = 2q + 1, 여기서 q는 소수 (prime)이다.

눈치 챘 겠지만, 이것은 소수를 찾는 것보다 훨씬 느립니다. 표준 제공자는 쉽게 검증 할 수 있으므로 그렇게하지 않습니다.

(p - 1)의 큰 소수 요소를 보장하면서 상당히 빠른 구현을 인정하는 일부 R에 대해 p = 2Rq + 1을 갖는 것으로 충분할 수 있으므로 안전한 소수를 찾는 것은 과도 할 수 있습니다.

이러한 매개 변수를 자주 생성 할 필요는 없습니다 (있는 경우). 하나의 세트는 많은 키 쌍에 사용될 수 있으며 사용하는 것이 더 나을 수있는 매개 변수 세트가 표준화되어 있습니다.

관련 문제