Проверить подпись ECDSA с помощью Openssl - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу создать подпись и проверить ее с помощью openssl. Я хочу получить шестнадцатеричный вывод моей подписи.

это мой код

#create private key
openssl ecparam -genkey -name secp256k1 -rand /dev/urandom -noout -out private.pem

#public key derivation
openssl ec -in private.pem -pubout -out public.pem

#create signature
openssl dgst -sha256 -hex -sign private.pem msg.txt  > signature.hex

#check signature
openssl dgst -sha256 -verify public.pem -signature signature.hex msg.txt

Я получаю эту ошибку:

Error Verifying Data
4573216364:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1220:
4573216364:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:386:Type=ECDSA_SIG

Если я удаляю -hex во время создания подписи , это работает.

$ openssl version
OpenSSL 1.0.2s  28 May 2019

1 Ответ

1 голос
/ 27 февраля 2020

Параметр «-hex» команды openssl dgst означает, что вывод НЕ является двоичным, а представляет собой шестнадцатеричный дамп двоичного вывода.

Цитата:

-hex

Дайджест должен выводиться как шестнадцатеричный дамп. Это случай по умолчанию для «нормального» дайджеста, в отличие от цифровой подписи. См. Примечания ниже для цифровых подписей с использованием -hex.

И раздел примечаний:

Шестнадцатеричные подписи не могут быть проверены с помощью openssl. Вместо этого используйте «xxd -r» или аналогичную программу для преобразования шестнадцатеричной подписи в двоичную подпись до проверки.

Так что, если вы используете опцию -hex для шестнадцатеричного дампа, вам необходимо преобразовать перед тем как передать его в openssl для проверки, верните его в двоичный файл.

...