深入浅出 区块链密码学(学习笔记4.0)——数字签名_区块链数字签名
引言
上一篇文章我们说到密码学中的非对称加密,这篇文章向大家介绍什么是数字签名,以及数字签名在区块链的应用。希望对大家有帮助,也希望大家在评论指出文章存在问题及不足。
1. 概述
1.1 基本概念
数字签名(Digital Signature),也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造。
为了满足在网络环境中身份认证、数据完整性和不可否认性等需求,数字签名应具有以下特点:
- 可信性信:签名使文件的接收者相信是签名者在文件上签名的。
- 不可重用性:签名不可重用,即同一消息在不同时刻的签名是有区别的。
- 不可改变性:在文件签名后,文件不能改变。
- 不可伪造性:签名能够证明是签名者而不是其他人在文件上签名,任何人都不能伪造签名。
- 不可否认性:在签名者否认自己的签名时,签名接收者可以请求可信第三方进行仲裁。
1.2 签名原理
1.2.1 数字签名的工作原理
签名生成过程:
-
消息哈希:发送者将要签名的消息(M)通过哈希函数(如SHA-256)生成固定长度的消息摘要(hash(M))。哈希函数的作用是将任意长度的消息映射为固定长度的字符串,同时具有单向性和抗碰撞性。
-
加密消息摘要:发送者使用自己的私钥(SK)对消息摘要(hash(M))进行加密,生成数字签名(S)。这个过程使用非对称加密算法(如RSA、DSA、ECDSA)。数字签名公式:𝑆=Encrypt𝑆𝐾(hash(𝑀))S=EncryptSK(hash(M))
-
发送消息和签名:发送者将原始消息(M)和数字签名(S)一起发送给接收者。
1.2.2 签名验证过程
-
接收消息和签名:接收者接收到包含原始消息(M)和数字签名(S)的数据包。
-
消息哈希:接收者对接收到的消息(M)使用相同的哈希函数生成消息摘要(hash(M))。
-
解密签名:接收者使用发送者的公钥(PK)对数字签名(S)进行解密,得到发送者加密前的消息摘要(hash(M))。解密公式:hash(𝑀)=Decrypt𝑃𝐾(𝑆)hash(M)=DecryptPK(S)
-
比较消息摘要:接收者将解密得到的消息摘要与自己计算的消息摘要进行比较。如果两个摘要相同,则验证通过,说明消息是由合法的发送者签名,且未被篡改;否则,验证失败。
1.2.3详细步骤示例
假设Alice要发送一条消息给Bob,并使用数字签名来保证消息的真实性和完整性。
签名生成
-
Alice生成消息摘要:
- 消息:
\"Hello,
- 消息: