4

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

1 に答える 1

4

速度差の理由は、BCプロバイダーが「安全素数」、つまり素数p:p = 2q + 1を検索しているためです。ここで、qも素数です。

お気づきのように、これは単に素数を見つけるよりもはるかに遅いです。簡単に確認できるように、標準プロバイダーはそれを行っていません。

安全素数を探すのはやり過ぎかもしれません。いくつかのRに対してp=2Rq + 1で十分な場合があります。これにより、(p-1)の大きな素因数を確保しながら、かなり高速な実装が可能になります。

これらのパラメータを自分で頻繁に生成する必要はありません(あるとしても)。単一のセットを多くのキーペアに使用できます。また、標準化されたパラメータセットがあり、使用したほうがよい場合があります。

于 2012-11-13T10:40:12.767 に答える