跳转到正文
buybitcoinsmart

术语表 /开发者参考

SSL 签名

SSL 签名是什么?
SSL 签名是 BIP70 给对支付请求(PaymentRequest)进行签名的字节所起的名称,签名使用的是网络服务器证书的密钥,而这一叫法在当时就已不准确。

规定于 BIP-70。

SSL 签名并不涉及任何 SSL 协议。这些字节是对序列化消息作出的普通 X.509签名,使用 TLS 服务器证书的私钥生成,而 SSL 3.0协议已于2015年6月被 RFC 7568正式禁止。阅读旧版比特币文档时,应把这一说法理解为“证书签名”,不必深究。

运作方式

现状:SSL 签名随定义它的协议 BIP70 一同消亡。Bitcoin Core 自2014年3月起包含 BIP70,直到0.20.0版本将其移除,如今没有任何仍在维护的软件会生成或校验这类签名。这一说法仍保留在 bitcoin.org 的开发者参考文档中,多数人正是在那里看到它。

签名算法由一个相邻字段决定,而不是由签名本身声明。支付请求会把 pki_type 声明为 none、x509+sha256 或 x509+sha1。该值指明证书格式和摘要算法,而签名算法取决于商家证书所带的密钥,实际中是 RSA。验证方会重建商家所签名的确切字节,用指定的摘要算法对其计算哈希,再与随附证书链中第一张证书里的公钥进行比对。

三个选项中有两个老化得很糟。x509+sha1 这一设置在 BIP70 发布之前就已经薄弱,因为 NIST 已规定在2013年12月31日之后不得再使用 SHA-1生成数字签名。到2020年1月,研究人员演示了针对 SHA-1的选择前缀碰撞,成本约为45,000美元的租用 GPU 算力,这恰恰是能够把一份已签名文件替换成另一份的攻击。NIST 此后已将2030年12月31日定为 SHA-1彻底退出其批准算法的时间点。

更深层的一点是,这种签名与比特币签名回答的是不同的问题。比特币交易内部的签名由每个节点依据共识规则校验,基于 secp256k1 曲线,使用 ECDSA,或者自 Taproot 于2021年11月14日在区块709,632激活起,使用 BIP340 所规定的 Schnorr 签名。SSL 签名则由一个钱包对照某个供应商维护的证书库进行校验。前者授权资金的转移,任何人都无法推翻;后者只是关于谁在提出请求的一项声明。

在哪里会遇到它

证书签名并没有消失,消失的只是 BIP70 的字段名称。您的浏览器仍会在 TLS 握手期间观察服务器证明其持有证书密钥,这才是 BIP70 试图借用的那种机制的真实版本。

在您持有比特币时值得关注的是代码签名。钱包软件和硬件钱包固件由制造商掌控的密钥签名,安装前核对该签名,正是发现被篡改下载文件的步骤。Trezor 和 Ledger 设备会在设备本身上验证固件签名,对无法认证的版本予以拒绝或醒目警示。这是一种真正发挥作用的签名,不同于 BIP70 字段,因为它保护的是存放您比特币的密钥,而不是结账页面上印出的名称。

SSL 签名 vs 数字签名

SSL 签名不在区块链上授权任何事项。比特币交易中的数字签名解锁特定输出,并由数千个节点独立验证;BIP70 字段则由单个客户端软件对照证书颁发机构列表验证。丢失密钥的后果同样差别悬殊。证书密钥一旦泄露,当天下午即被吊销并重新签发。比特币密钥一旦泄露,意味着比特币已经丢失。

请勿混淆

常见问题

SSL 签名和比特币签名是一回事吗?

不是。比特币签名基于 secp256k1 曲线生成,在比特币转移之前由每个节点依据共识规则校验。SSL 签名是对支付消息作出的 X.509签名,由单个钱包对照证书颁发机构列表校验。

现在还有钱包验证 SSL 签名吗?

仍在维护的钱包都不再验证。Bitcoin Core 在0.20.0版本中移除了 BIP70,生态系统的其余部分随之跟进,因此您今天安装的任何软件都不会解析支付请求,也不会校验其上的签名。

相关术语

开发者参考中的更多术语

阅读本页英文版