椭圆曲线数字签名算法
返回上级
BSV区块链编辑
2022-04-14 17:28
1.06 k

椭圆曲线数字签名算法(ECDSA)的英文全称是Elliptic Curve Digital Signature Algorithm,它是比特币系统中用来确保资金的安全有效性和资金的所有权及控制权的加密算法。
以下为一些与ECDSA有关的概念:
- 私钥:英文private key,它是一串数字且是秘密的,只有生成它的人才知道它具体是什么。私钥可以是一串随机生成的数字,但目前大多数钱包使用的是源自BIP 0032的确定性密钥(deterministic key)方案。在比特币系统中,可以证明UTXO所有权的人就可以使用私钥来花费该笔资金。在比特币中,私钥是一个无符号的256位整数(长度为32字节)。
- 公钥:英文public key,它与私钥是一一对应的,也是一串数字但不需要保密。公钥可以由其对应的私钥计算出来,反之则不行。我们可以通过使用ECDSA来验证一个签名是否由特定私钥生成,而这个特定私钥对应的公钥可用于确定这个签名是否真实,因此,在这个验证签名的过程中我们无需泄露私钥。在比特币中,我们可以使用压缩后的公钥,也可以使用未被压缩的公钥。压缩过的公钥是33字节,由前缀0x02或0x03和一个256位整数(32字节)组成,这个256位的整数我们可以把它称为x。未压缩的公钥为65字节,前缀为 (0x04),接下来是两个256位整数,分别称为x和y(2*32字节)。压缩公钥的前缀允许从x值导出y值。
- 签名:签名是一串字符,用于证明已经使用私钥对消息进行了签名。签名是由被签名的消息的哈希和私钥一起,通过数学运算后生成的。签名本身是两个数字,称为r和s。被签名的消息是比特币交易里去签名部分的数据。有了公钥,可以在签名上使用数学算法(签名验证)来确定它最初是否是从消息哈希和私钥上生成的,这个验证过程无需使用私钥。签名的长度通常为 71、72 或 73 个字节,它们出现的概率分别约为 25%、50% 和 25%。
在比特币系统中,椭圆曲线签名必须是对“交易消息”的哈希值进行签名,该哈希值在验证交易的过程中,可以轻松地被验证签名的节点复制。这里的“交易消息”包含以下元素,它们共同形成一个字符串:
- <交易版本>
- Hash(输入源(可为多个)的串联字符,它由 SIGHASH 定义)
- Hash(输入的nSequence值(可为多个)的串联字符,它由SIGHASH定义)
- 花费输入的输出点(TXID/Vout)
- 花费输入的锁定脚本(由OP_CODESEPARATOR定义)
- 输入的值(以聪为单位)
- 花费的输入的nSequence值
- 被签名的输出(可为多个)的哈希(由SIGHASH定义)
- 交易的nLocktime
- Sighash标志
所有签名都包含SIGHASH标志,这些标志告诉交易验证者消息的哪些部分已用于构建消息哈希。