6

次の方法を試して、キーの長さが 2048 ビットの DSA 秘密 (および公開) キーを生成しました。

キーツール経由

keytool -genkeypair -alias MyKeyPair -keyalg DSA -keysize 2048 -validity 365 -keystore MyKeyStore.ks

その結果:

keytool エラー: java.lang.IllegalArgumentException: モジュラス サイズは 512 から 1024 の範囲で、64 の倍数でなければなりません

コード経由

KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyAlgorithm,"BC");
keyGen.initialize(numBits);

その結果:

Exception in thread "main" java.security.InvalidParameterException: strength must be from 512 - 1024 and a multiple of 64
    at org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyPairGeneratorSpi.initialize(Unknown Source)
    at java.security.KeyPairGenerator.initialize(KeyPairGenerator.java:340)

上記の例では、Bouncy Castle の実装を使用しています。これは、どこかで 2048 ビットの DSA キーをサポートする必要があることを読んだためです。同じエラーでデフォルトのものも試しました。

(JCE) Unlimited Strength Jurisdiction Policy Files をインストールしました。この出力によると、大きなキーが可能であることが予想されます。

System.out.println("DSA Max key length: " + Cipher.getMaxAllowedKeyLength("DSA"));
DSA Max key length: 2147483647

ただし、JCE Providers DocsのKeysize Restrictionsを確認すると、1024 ビットが最大です。

2048 ビットの秘密鍵が単に Java 7 でサポートされていないかどうか、誰が判断できますか? または、このサイズのキーを作成して Java キーストアにインポートする別の方法がある場合は?

Java 8 APIは、より大きなキーをサポートすることを明らかにしています。そのため、来年まで待つ必要があるかもしれません。

4

3 に答える 3

2

Java 8 ではこれが修正されています。 SHA224withDSA や SHA256withDSA などの 2048 ビット DSA キー。」

于 2014-09-11T10:33:48.787 に答える