Какую кривую использует SHA1 с ECDSA? - PullRequest
0 голосов
/ 25 мая 2019

Я использую SHA1 с ECDSA для проверки подписанных сообщений в моем Java-приложении.Теперь я хочу создать второе приложение на другом языке программирования (node ​​/ js), которое создает эти подписанные сообщения.

Однако я не смог найти API, который имеет "SHA1withECDSA".Все они поддерживают только ECDSA с выбранной кривой.Итак, мой вопрос: Какая кривая ec используется в java?

Keyfactory: final KeyFactory keyFactory = KeyFactory.getInstance("EC");

Подпись: final Signature dsa = Signature.getInstance("SHA1withECDSA");

1 Ответ

0 голосов
/ 26 мая 2019

Алгоритмы {hash}withECDSA в Java поддерживают любую кривую, которая может быть выражена в объекте ECPrivateKey, переданном в Signature.initSign(key) или (в вашем случае), в объект ECPublicKey, переданный в Signature.initVerify(key), который для стандартного поставщика SunEC: любая кривая, выраженная в форме X9.62 (Вейерштрасса) . В основном это все, что используется в настоящее время , за исключением Bernstein et al. {Curve, X, Ed} {25519,448} (EdDSA - это алгоритм подписи эллиптической кривой, но не алгоритм с именем ECDSA).

Стандартные кривые X9 / NIST и TLS предопределены, хотя доступ к ним (правка), отличный от ключа генерация , немного неуклюж; см. Как преобразовать общедоступную кодовую точку EC и имя кривой в PublicKey? .

Обычно пара ключей должна быть сгенерирована подписывающей стороной, и (только) publickey передан верификатору (ам) либо до, либо вместе с подписью (ями) и подписанные данные; часто это делается в форме сертификата, который позволяет избежать ручных усилий и ручных ошибок, которые создают уязвимости. Java напрямую поддерживает сертификаты X.509 и используемый ими формат publickey (SubjectPublicKeyInfo aka SPKI); см. Javadoc для java.security.spec.X509EncodedKeySpec и java.security.Key. Для EC SPKI включает идентификацию кривой, но, к сожалению, API Java не предоставляет удобного способа вернуть его обратно.

Если у вас есть сертификат X.509 или только SPKI X.509 для publickey в файле в формате DER или PEM, и у вас есть OpenSSL, он может декодировать и отображать эту информацию:

 openssl x509 -in certfile -inform {der|pem} -text 
 openssl pkey -in spkifile -inform {der|pem} -pubin -text # 1.0.0 up
 openssl ec -in spkifile -inform {der|pem} -pubin -text # 0.9.x 
 # look at the line labelled ASN1 OID:
...