目标
本节的目的是学习:
- 什么是数字签名
- 数字签名在交易验证中的作用
介绍
在上一章中,我们讨论了非对称加密:用公钥加密,用私钥解密,保证了信息传输的安全性。小明和小红就采用了非对称加密技术,使得两人的机密信件内容在传输过程中保持了安全。
但仅仅使用非对称加密并不足以保护信件的内容,因为小红的公钥是公开的,任何人都可以用它加密信息,冒充小明给小红发信。为了确保小红收到的确实是小明发来的信,还需要另一种机制来验证消息的真实来源——这时数字签名技术就派上用场了。
数字签名
数字签名技术使用私钥进行加密,使用公钥进行解密和验证,可以确认信息是否由指定发送者发送,以及在传输过程中是否被篡改,从而验证信息的完整性并认证发送者的身份。

我们继续以小明给小红发保密信件为例,他们不仅用到了非对称加密技术,还用到了数字签名技术。
- 第一步:签名。小明先用自己的私钥对消息密文进行加密,为消息密文创建一个签名。然后把这个签名附加到消息密文上,发送给小红。
- 第二步:签名恢复。小红收到消息密文和签名后,使用公开获得的小明的公钥对签名进行解密,恢复消息密文。
- 第三步:签名验证。小红将收到的密文与解密后的签名恢复的密文进行比较,如果相符,则签名验证成功,说明这封信确实是小明发来的,在传输过程中没有被修改过。
💡
补充说明
由于公私钥加密算法速度较慢,对较大的消息进行签名可能需要很长时间。因此,在实践中,通常先计算消息的哈希值,然后再对哈希值进行签名,这样可以减少签名所需的时间。还记得我们在前几章中学到的哈希函数吗?无论消息中有多少内容,计算出的哈希值都是固定长度的。
交易验证
在以太坊中,采用数字签名技术进行交易验证,保证交易的真实性和完整性。交易验证主要包括以下步骤:
●用户对交易进行签名。准备好交易数据后,用户计算交易数据的哈希值,使用椭圆曲线数字签名算法(ECDSA)对哈希值进行签名,并附上签名值(v,r,s)广播交易数据。
●矿工验证交易。矿工收到一笔交易后,计算交易数据(不包括签名)的哈希值,然后使用 ECDSA 从签名和哈希值中恢复出用户的公钥。然后将恢复出的公钥与用户的钱包地址进行比较。如果匹配,则交易验证成功。

对于初学者来说,为了简单起见,可以假设用户的钱包地址与公钥相同。但请注意,实际上它们并不相同;用户的钱包地址是通过计算公钥的哈希值,然后取最后 20 个字节得出的。这将在后面的章节中详细解释。
概括
在本节中,我们了解了数字签名的概念及其在交易验证中的关键作用。
简单来说,数字签名是一种使用私钥加密和公钥解密来确保消息真实性和完整性的技术。此方法可以验证信息确实是由发送者发送的,并且在传输过程中没有被更改。这在加密货币交易中尤为重要,以确保交易的安全性。