#java #elliptic-curve
#java #эллиптическая кривая
Вопрос:
Java 7 поставляется с SunEC, который обеспечивает операции ECDH и ECDSA. Я пытался выполнить основные операции EC (сложение точек, скалярное умножение).
Я начинаю с
ECParameterSpec p256 = NamedCurve.getECParameterSpec("secp256r1");
ECPoint generator = p256.getGenerator();
BigInteger scalar = new BigInteger("23");
Но оттуда я не вижу следующего шага. Нет ECPoint.scalarMultiply()
или ECPoint.add()
или EllipticCurve.multiply()
.
Я что-то упускаю, или ответ просто «вы не можете сделать это без сторонней библиотеки?»
Ответ №1:
Вы не можете сделать это напрямую без сторонней библиотеки. Я думаю, что ситуация с эллиптическими кривыми в JCE в основном аналогична ситуации с RSA. Классы представляют экземпляры различных ключей и кодировок. Вы можете переключаться между кодировками и спецификациями ключей с помощью KeyFactory, вы можете генерировать открытые и закрытые ключи с помощью KeyPairGenerator и т. Д. Но точно так же, как нет RSAPublicKey.exponentiate(), также нет ECPoint.add() . Эти вещи происходят под капотом в классах Signature, KeyAgreement и Cipher.
Комментарии:
1. Но есть
BigInteger.modPow()
. Я надеялся на что-то подобное, даже если не в JCE.