跳转到正文
buybitcoinsmart

术语表 /交易与手续费

数字签名

又称签名、ECDSA 签名、Digital signature。

数字签名是什么?
数字签名是用私钥生成的证明,表明授权某笔比特币交易的人掌控着这些币所锁定的密钥,并且交易详情未被篡改。

比特币已不再只使用 ECDSA。以1、3或 bc1q 开头的地址中的币,用71或72字节的 ECDSA 签名解锁;以 bc1p 开头的地址中的币,使用64字节的 Schnorr 签名,自2021年11月起生效。无论哪种方式,签名证明的都是对某个密钥的掌控,而不能证明持有者是谁。

运作方式

生成签名需要三个要素:一个私钥、一个称为 nonce 的一次性随机数,以及按该输入所选标志裁剪后的交易摘要。

结果是在椭圆曲线 secp256k1 上计算得出的一对数字,比特币自首个版本起一直使用这条曲线。验证时使用公钥反向执行同样的运算,节点在脚本操作码 OP_CHECKSIG 中完成这一过程。整个过程中没有任何内容被加密,签名也不会泄露其背后私钥的任何信息。

目前使用的两种方案对这对数字的封装方式不同。ECDSA 签名采用 DER 封装,因此长度是71或72字节而不是固定长度,其最后一个字节根本不属于签名本身:它是说明交易哪些部分被覆盖的标志。BIP340 规定的 Schnorr 签名固定为64字节,没有封装,适用默认值时标志字节完全省略,因此只有签名者想要特殊设置时才会出现65字节。

nonce 是容易出问题的环节。同一个密钥两次使用相同的 nonce,私钥就能用中学代数推算出来,这并非理论上的担忧:2013年8月11日,bitcoin.org 发布了一份公告,说明 Android 的一个缺陷导致受影响手机上的钱包应用生成重复的数值,并因此造成了币被盗。如今钱包根据密钥和消息以确定性方式生成 nonce,ECDSA 遵循 RFC 6979,BIP340 中则有等效规则。

在哪里会遇到它

您发出的每一笔支出都至少包含一个签名。在区块浏览器中,它是隔离见证输入的见证数据中,或传统输入的解锁脚本中那一长串十六进制字符串,ECDSA 签名末尾的 01 是标志,不属于数学运算的一部分。

签名也可以用在交易之外。用某个地址背后的密钥对一条普通消息签名,无需转移一聪,即可证明您掌控该地址,交易所借此核实提币目的地,储备金证明的声明也是这样编制的,点对点交易平台上的卖家则借此表明某个地址确实属于自己。最初的格式只适用于以1开头的地址;BIP322 将消息签名推广到了如今使用的所有地址类型。

每当有人要求您签署某样东西时,这一区别都很重要。签署的消息无法转移币。对交易的签名却可以转移全部的币,而要分辨对方要求的是哪一种,唯一可靠的办法是看硬件钱包的屏幕,而不是网站的页面。

数字签名 vs 签名哈希

签名哈希是输入,签名是输出。钱包先构建一个覆盖交易特定部分的摘要,再对该摘要签名,因此对于摘要未涵盖的部分,签名完全不能说明任何问题。这不是技术细节,而正是 sighash 标志存在的全部原因,也说明了同一笔交易上的两个签名为何可能在保护完全不同的内容。

请勿混淆

常见问题

比特币签名能证明某人的身份吗?

不能。它证明生成签名的人在那一刻持有某个特定私钥。密钥会被共享、被盗和被继承,因此有效签名提供的是关于某个密钥的证据,而不是关于某个人的证据。

签署别人发来的消息安全吗?

签署纯文本消息无法转移您的币,但签署交易可以转移全部的币。如果对方告诉您只是签署一条消息,而硬件钱包屏幕上却显示金额或地址,请不要批准。

比特币仍在使用 ECDSA 吗?

是的,所有以1、3或 bc1q 开头的地址都使用,流通中的大部分币就在这些地址中。以 bc1p 开头的 Taproot 地址则改用 Schnorr 签名,因此两种方案并行运行,许多钱包两种签名都能生成。

接着阅读

相关术语

交易与手续费中的更多术语

阅读本页英文版