В настоящее время мне нужно сгенерировать пару ключей для алгоритма подписи ГОСТ 34.10-2001. Было приятно обнаружить, что провайдер надувных замков поддерживает этот алгоритм, но я не могу сгенерировать пару ключей и сохранить ее в любом хранилище ключей любого типа. В настоящее время я пробовал эту команду (эта команда отлично работает, если keyalg
равно DSA
, а sigalg равно SHA1withDSA
):
keytool -genkey -alias test1 -keyalg ECGOST3410 -keysize 512 -sigalg GOST3411withECGOST3410 \
-keypass test_1 -validity 1000 -storetype JKS -keystore test1.jks -storepass test_1 -v \
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-1.46.jar"
Но у меня ошибка:
keytool error: java.lang.IllegalArgumentException: unknown key size.
java.lang.IllegalArgumentException: unknown key size.
at sun.security.x509.CertAndKeyGen.generate(CertAndKeyGen.java:134)
at sun.security.tools.KeyTool.doGenKeyPair(KeyTool.java:1156)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:786)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)
Точно такую же ошибку я вижу, когда пытаюсь изменить размер ключа или удалить параметр keysize
из команды. Но есть какой-то особый случай. Когда я устанавливаю keysize
в 256
, у меня появляется другая ошибка:
keytool error: java.lang.IllegalArgumentException: key size not configurable.
java.lang.IllegalArgumentException: key size not configurable.
at sun.security.x509.CertAndKeyGen.generate(CertAndKeyGen.java:134)
at sun.security.tools.KeyTool.doGenKeyPair(KeyTool.java:1156)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:786)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)
В настоящее время я понятия не имею, как сгенерировать пару ключей и как сохранить ее в хранилище ключей. Также у меня есть код Java, который может генерировать пару ключей для алгоритма ГОСТ 34.10-2001:
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECGOST3410", "BC");
kpg.initialize(new ECGenParameterSpec("GostR3410-2001-CryptoPro-A"));
KeyPair kp = kpg.generateKeyPair();
В этом примере кода используется класс ECGenParameterSpec
для инициализации генератора пары ключей, поэтому, может быть, мне следует каким-то образом передать его в keytool (-providerArg provider_arg
или -Jjavaoption
)?
P.S. Я думаю, что я должен указать имя кривой в качестве некоторого параметра, но я не могу определить, какой параметр я должен использовать.