次の方法を試して、キーの長さが 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は、より大きなキーをサポートすることを明らかにしています。そのため、来年まで待つ必要があるかもしれません。