2012-11-10 19 views
2

У меня возникают проблемы с производительностью с использованием Bouncy Castle Provider при создании параметров DH. Кто-нибудь знает, почему пример Bouncy Castle ниже примерно в 50 раз медленнее, чем при использовании стандартного провайдера?Производительность Bouncy Castle в 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 ищет "Safe Prime", т.е. штрихом p: p = 2q + 1, где q также просто.

Как вы заметили, это намного медленнее, чем просто найти премьер. Стандартный поставщик не делает этого, поскольку это легко проверить.

Поиск безопасного числа может быть излишним, так как может быть достаточно, чтобы p = 2Rq + 1 для некоторого R, что допускает значительно более быструю реализацию, сохраняя при этом большой простой коэффициент (p - 1).

Не обязательно создавать эти параметры самостоятельно (если вообще). Один набор может использоваться для многих пар ключей, и есть стандартизированные наборы параметров вокруг, которые вам могут быть лучше использовать.

Смежные вопросы