小编rom*_*lot的帖子

使用 openssl 验证 ECDSA 签名类型时出现 ASN1 编码例程错误

我正在尝试验证外部方提供给我们的 SHA256 ECDSA 数字签名。他们已经在内部验证了他们的签名过程,但我们的尝试没有成功。我们asn1 encoding routines在 openssl 验证期间反复收到错误,但我无法看到签名或我们的流程有什么问题。

这是测试设置......公钥(pubkey.pem):

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOorVp0M8xien/r1/1Ln7TkSpzzcX
BL/MGRz66J1HSlEgBD5FwwpO1vo6jf/9azcrrrDdCi2NH9/cSDfv5D8gTA==
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

被签名的消息是明文字符串:

HELLO
Run Code Online (Sandbox Code Playgroud)

数字签名(signature.sig):

JJhwReHev8cxOsNKCR5t/Ee3WU9c7tkf9RuGNamXdpXQu9OL8ZKnsrblCO7vEmOXGKGrk6NsgA5JZpQhXO3A1Q==
Run Code Online (Sandbox Code Playgroud)

我们采取的一般方法是:

# create message file
echo "HELLO" > hello.txt

#VERIFY
openssl dgst -sha256 -verify pubkey.pem -signature signature.sig hello.txt
Run Code Online (Sandbox Code Playgroud)

响应是

Error Verifying Data
4655195756:error:0DFFF09B:asn1 encoding routines:CRYPTO_internal:too long:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/asn1/asn1_lib.c:143:
4655195756:error:0DFFF066:asn1 encoding routines:CRYPTO_internal:bad object header:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/asn1/tasn_dec.c:1113:
4655195756:error:0DFFF03A:asn1 encoding routines:CRYPTO_internal:nested asn1 error:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.260.1/libressl-2.6/crypto/asn1/tasn_dec.c:306:Type=ECDSA_SIG

Run Code Online (Sandbox Code Playgroud)

或者,我们对签名进行 base64 编码,base64 -D signature.sig > signature.bin但得到相同的错误响应。我也尝试使用openssl pkeyutl,但这也会导致asn1 encoding routines错误。使用 ans1parse 解析签名产生:

openssl asn1parse -in …
Run Code Online (Sandbox Code Playgroud)

openssl cryptography ecdsa

3
推荐指数
1
解决办法
3257
查看次数

标签 统计

cryptography ×1

ecdsa ×1

openssl ×1