> 技术文档 > 深入浅出 区块链密码学(学习笔记4.0)——数字签名_区块链数字签名

深入浅出 区块链密码学(学习笔记4.0)——数字签名_区块链数字签名


引言

上一篇文章我们说到密码学中的非对称加密,这篇文章向大家介绍什么是数字签名,以及数字签名在区块链的应用。希望对大家有帮助,也希望大家在评论指出文章存在问题及不足。


1. 概述

1.1 基本概念

数字签名(Digital Signature),也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造。

为了满足在网络环境中身份认证数据完整性不可否认性等需求,数字签名应具有以下特点:

  • 可信性信:签名使文件的接收者相信是签名者在文件上签名的。
  • 不可重用性:签名不可重用,即同一消息在不同时刻的签名是有区别的。
  • 不可改变性:在文件签名后,文件不能改变。
  • 不可伪造性:签名能够证明是签名者而不是其他人在文件上签名,任何人都不能伪造签名。
  • 不可否认性:在签名者否认自己的签名时,签名接收者可以请求可信第三方进行仲裁。

1.2 签名原理

1.2.1 数字签名的工作原理

签名生成过程:

  1. 消息哈希:发送者将要签名的消息(M)通过哈希函数(如SHA-256)生成固定长度的消息摘要(hash(M))。哈希函数的作用是将任意长度的消息映射为固定长度的字符串,同时具有单向性和抗碰撞性。

  2. 加密消息摘要:发送者使用自己的私钥(SK)对消息摘要(hash(M))进行加密,生成数字签名(S)。这个过程使用非对称加密算法(如RSA、DSA、ECDSA)。数字签名公式:𝑆=Encrypt𝑆𝐾(hash(𝑀))S=EncryptSK​(hash(M))

  3. 发送消息和签名:发送者将原始消息(M)和数字签名(S)一起发送给接收者。

1.2.2 签名验证过程

  1. 接收消息和签名:接收者接收到包含原始消息(M)和数字签名(S)的数据包。

  2. 消息哈希:接收者对接收到的消息(M)使用相同的哈希函数生成消息摘要(hash(M))。

  3. 解密签名:接收者使用发送者的公钥(PK)对数字签名(S)进行解密,得到发送者加密前的消息摘要(hash(M))。解密公式:hash(𝑀)=Decrypt𝑃𝐾(𝑆)hash(M)=DecryptPK​(S)

  4. 比较消息摘要:接收者将解密得到的消息摘要与自己计算的消息摘要进行比较。如果两个摘要相同,则验证通过,说明消息是由合法的发送者签名,且未被篡改;否则,验证失败。

1.2.3详细步骤示例

假设Alice要发送一条消息给Bob,并使用数字签名来保证消息的真实性和完整性。

签名生成
  1. Alice生成消息摘要

    • 消息:\"Hello,