Ошибка BouncyCastle: не удается распознать тип ключа в подписывающей стороне на основе ECDSA - PullRequest
3 голосов
/ 12 мая 2011

Я проводил простое тестирование с использованием крипто-библиотеки BouncyCastle и крипто-библиотеки RSA. То, что я делаю, генерирует пару секретный / открытый ключ примерно так:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "JsafeJCE");
kpg.initialize(new ECGenParameterSpec("secp384r1"));
KeyPair kp = kpg.genKeyPair();
PrivateKey priv = kp.getPrivate();
PublicKey pub = kp.getPublic();

Тогда я сгенерирую подпись вот так

Signature sig = Signature.getInstance("SHA384/ECDSA","BC");

и я пытаюсь подписать закрытый ключ:

sig.initSign(priv);

Все это приводит меня к ошибке:

java.security.InvalidKeyException: не удается распознать тип ключа в подписывающей стороне на основе ECDSA

Когда я до н.э. и JsafeJCE, я не получаю ошибки и все в порядке. Работает также, если оба провайдера являются BC. Так почему же я не могу подписать сгенерированный ключом JsafeJCE библиотеку BC?

Ответы [ 2 ]

4 голосов
/ 28 апреля 2016

Я решил ту же проблему, выполнив следующие шаги:

1) Создание статического провайдера:

private static BouncyCastleProvider bouncyCastleProvider;
public static final BouncyCastleProvider BOUNCY_CASTLE_PROVIDER = new BouncyCastleProvider();
static {
    bouncyCastleProvider = BOUNCY_CASTLE_PROVIDER;
}

2) Создать пару ключей:

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", bouncyCastleProvider);
g.initialize(ecSpec, random);
KeyPair keyPair = g.generateKeyPair();

3) Если вы хотите что-то подписать с помощью ключа:

Signature signature = Signature.getInstance("SHA256withECDSA", bouncyCastleProvider);
signature.initSign(privateKey);
signature.update(signedData);
signature.sign();

Это сработало для меня, и, надеюсь, сработает и для вас.

3 голосов
/ 15 мая 2011

Bouncycastle требует, чтобы закрытый ключ, используемый для его реализации подписи, был одним из его собственных. Я не знаю, почему вы выбрали бы разных провайдеров для разных частей в любом случае.

...