Знак ECDSA, использующий OpenSSL без ASN1, кодирующий хеш
Я делаю ECDSA подписи, используя dgst
Команда с OpenSSL выглядит следующим образом:
openssl dgst -sha256 -sign key.pem -out my_signature data_file
который работает просто отлично. Однако я прочитал в этом ответе SO, что сначала SHA256 хэширует data_file, а ASN.1 кодирует хэш перед его подписанием.
Я хотел бы создать хеш данных SHA256 и заставить ECDSA подписывать только необработанные байты этого хеша. (Так как это подпись ECDSA, я не могу использовать rsautl
как в упомянутом SO ответе.)
Как мне добиться этого с помощью OpenSSL?
1 ответ
Вы можете сделать это с openssl pkeyutl
которая является заменой openssl rsautl
который поддерживает ECDSA.
Предположим, вы хотите хэшировать и подписать файл data.txt с помощью openssl. Сначала вам нужно хешировать файл:
openssl dgst -sha256 -binary -out data.sha256 data.txt
после того, как вы можете подписать его:
openssl pkeyutl -sign -inkey private.pem -in data.sha256 -out data.sig
Однако подпись все еще в формате ASN.1. Для получения r и s значений подписи используйте openssl asn1parse
:
openssl asn1parse -inform DER -in data.sig