You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YubiKey签名SHA512摘要返回无效签名问题排查

问题排查方向

1. OpenPGP签名格式与常规secp256k1签名的差异

OpenPGP的ECDSA签名并非直接输出r和s的原始字节,而是包裹在ASN.1 DER编码结构中:

SEQUENCE {
  r INTEGER,
  s INTEGER
}

多数加密货币工具、库期望的是原始r+s拼接的64字节格式(或带恢复ID的65字节),你从YubiKey拿到的DER编码签名直接给这些库验证自然失败。而noble-secp256k1支持解析DER格式,所以部分场景能通过。

2. SHA512摘要的额外处理

OpenPGP签名时会对哈希值做拼接处理:将哈希算法的OID前缀与SHA512哈希值组合后再签名。比如secp256k1搭配SHA512时,OID前缀为0x3051300d060960864801650304020305000440,加上64字节的SHA512哈希,总长度为91字节。如果你直接把原始SHA512哈希传给YubiKey签名,但验证时用原始哈希去校验,就会出现不匹配——因为实际签名的是带OID前缀的组合数据。

3. s值的规范化差异

ECDSA签名要求s值必须小于曲线阶的一半(low-s规范),部分库严格遵循该规则,但OpenPGP实现可能不强制做s值规范化。如果YubiKey返回的s值大于曲线阶的一半,那些严格校验的库会判定签名无效,而noble-secp256k1可能自动处理了s值的规范化,所以能通过验证。

4. 公钥格式不匹配

你用于验证的公钥格式可能与YubiKey导出的OpenPGP格式不一致。OpenPGP公钥是包含曲线OID、公钥点等信息的ASN.1编码结构,而多数加密货币库期望的是压缩/非压缩的原始公钥字节(33或65字节),直接用OpenPGP公钥验证会因格式错误失败。

内容的提问来源于stack exchange,提问作者Bruno Zell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:00:01