深入浅出 区块链密码学(学习笔记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, Bob"
    • 哈希函数(如SHA-256)计算消息摘要:hash("Hello, Bob")
  2. Alice使用私钥加密消息摘要

    • 私钥:SK_Alice
    • 加密摘要生成数字签名:S = Encrypt_{SK_Alice}(hash("Hello, Bob"))
  3. Alice发送消息和签名给Bob

            发送内容:{"message": "Hello, Bob", "signature": S}
签名验证
  1. Bob接收消息和签名

            收到内容:{"message": "Hello, Bob", "signature": S}
  2. Bob计算消息摘要

    • 消息:"Hello, Bob"
    • 哈希函数(如SHA-256)计算消息摘要:hash("Hello, Bob")
  3. Bob使用Alice的公钥解密签名

    • 公钥:PK_Alice
    • 解密数字签名:hash(M) = Decrypt_{PK_Alice}(S)
  4. Bob比较两个消息摘要

    • 比较hash("Hello, Bob")与解密得到的摘要。
    • 如果相同,验证通过;如果不同,验证失败。
签名过程 

  • 发送方A将消息用Hash算法产生一个消息摘要(Message Digest)
  • 发送方A用自己的私钥对消息摘要进行加密,这个加密后的息摘要就是数字签名
  • 发送方A将消息与签名发给接收方B
  • 接收方B接收到消息及其名后,用发送方A的公钥解密这个签名,获得由发送方A生成的消息摘要
  • 接收方B用发送方A所用Hash算法重新生成所获得消息的摘要,对比这两个摘要。若相同说明签名是发送方A针对这个消息的有效签名,否则签名无效。

 2. 数字签名的安全性

  • 私钥保密:签名者的私钥必须严格保密,任何泄露都会导致签名的安全性丧失。
  • 公钥信任:接收者必须确保公钥的可信性,通常通过公钥基础设施(PKI)和数字证书实现。
  • 算法强度:使用强大的哈希算法和加密算法,防止暴力破解和伪造签名。

 数字签名的安全性是确保其有效性和可靠性的核心因素。以下是有关数字签名安全性的详细知识点:

1. 基本安全属性
  • 身份验证:数字签名确认消息的发送者是合法持有私钥的人,防止伪装。
  • 数据完整性:确保消息在传输过程中未被篡改,任何改动都会导致签名验证失败。
  • 不可否认性:发送者无法否认已发送的消息,具有法律效力。
 2. 私钥安全
  • 私钥保密:私钥的安全存储是数字签名安全的基础。如果私钥泄露,任何人都可以伪造签名。
  • 硬件安全模块(HSM):私钥可以存储在HSM中,提供硬件级别的安全保护。
  • 密钥管理系统(KMS):使用KMS管理和保护密钥,提供集中化的密钥管理和访问控制。
3. 公钥基础设施(PKI)
  • 证书颁发机构(CA):CA负责颁发和管理公钥证书,确保公钥的合法性和可信性。
  • 数字证书:公钥绑定到数字证书上,证书由CA签名和颁发,提供公钥的认证信息。
  • 证书吊销列表(CRL)和在线证书状态协议(OCSP):用于检查证书的有效性和吊销状态。
4. 安全算法和密钥长度
  • 安全算法:选择强大的加密和哈希算法,如RSA、DSA、ECDSA、SHA-256、SHA-3。
  • 密钥长度:适当的密钥长度是安全性的关键,短密钥容易被暴力破解。常见推荐:
  1.   - RSA:2048位或以上
  2.   - ECC:256位或以上(如secp256k1)
  • 哈希函数:使用安全的哈希函数生成消息摘要,防止碰撞攻击。如SHA-256、SHA-3。
 5. 随机数生成
  • 高质量随机数:签名过程需要高质量的随机数,特别是在生成私钥和临时密钥时,防止通过猜测随机数来破解签名。
  • 安全随机数生成器:使用密码学安全的随机数生成器(CSPRNG)生成随机数。
6. 抗攻击能力
  • 抗暴力破解:加密算法和密钥长度要足够强大,防止通过穷举法破解密钥。
  • 抗碰撞攻击:哈希函数必须防止碰撞攻击,即难以找到两个不同的输入生成相同的哈希值。
  • 抗重放攻击:确保签名中包含时间戳或唯一标识符,防止攻击者重放旧的有效签名。
  • 抗侧信道攻击:防范通过物理手段(如功耗分析、电磁泄漏)获取私钥信息。
7. 多重签名和门限签名
  • 多重签名:需要多个私钥签名才有效,提高安全性。常用于高安全性需求的场景,如企业级账户。
  • 门限签名:结合门限密码学,实现分布式签名,只有达到特定数量的签名者同意才能生成有效签名,进一步提高安全性。
8. 安全协议和标准
  • 安全协议:使用SSL/TLS、SSH等安全协议保护数字签名的传输过程。
  • 国际标准:遵循国际标准和最佳实践,如NIST、ISO标准,确保数字签名系统的安全性和兼容性。
9. 实践中的安全措施
  • 密钥轮换:定期更换私钥和公钥,降低密钥泄露的风险。
  • 双因素认证(2FA):结合双因素认证保护私钥的使用。
  • 定期安全审计:对数字签名系统进行定期安全审计,发现并修复潜在的安全漏洞。

通过以上措施和技术,确保数字签名的安全性,使其在各种应用场景中可靠地提供身份验证、数据完整性和不可否认性。

3. 三种常见签名体制的对比

由于采用的签名算法各不相同,三种方案的签名验证等式和过程也不尽相同。根据计算量和签名长度,量对比和分析这3种方案的效率如下。其中,由于模加、模减、求逆运算所用时间远远低于求幂、乘积、Hash求值等运算所需时间,可忽略不计。

签名体制签名    验证 签名长度
ElGamalTe​+Th​+2Tm​3Te +Th+Tm∣p∣+∣p−1∣
SchnorrTe+Th+Tm2Te+Th+Tm∣q∣+∣2H(m)∣
DSATe​+Th​+2Tm​2Te +Th+3Tm2∣q∣

其中,Te:幂运算的计算量;Th:散列计算的计算量;Tm :乘积运算的计算量。

可以看出,Schnorr方案的签名过程计算量相对较少,速度较快,尤其有些计算与消息无关,可预先完成,这也能够减少签名的时间。Schnorr方案的验证过程计算量也相对较少,生成的签名值长度也较短(取决于∣ q ∣ + ∣ 2 H ( m ) ∣ |q|+|2H(m)|∣q∣+∣2H(m)∣)。因此,Schnorr比较适合在智能卡等环境中应用。

另外两种方案中的个别计算也可以预先进行,而RSA方案是不可预先计算的。

4. 数字签名在区块链中的应用

数字签名在区块链技术中的应用至关重要,它确保了交易的真实性、完整性和不可否认性。以下是数字签名在区块链上的具体应用:

1. 交易验证
  • 签名交易:每笔交易都必须由交易发起者用其私钥签名。这确保了只有合法的私钥持有者才能发起交易。
  • 验证交易:矿工或验证者在将交易打包进区块前,会使用发起者的公钥验证签名,确保交易的合法性和未被篡改。
2. 区块链中的具体应用场景

比特币

        交易签名:

  •   在比特币网络中,用户发起的每笔交易都使用ECDSA(椭圆曲线数字签名算法)进行签名。
  •   比特币地址是公钥的哈希值,通过私钥签名交易,确保只有拥有该私钥的人才能使用相应的比特币。

        交易验证:

  •   节点验证交易时,会使用交易发起者的公钥来验证签名的有效性。

以太坊

        智能合约:

  •   以太坊使用ECDSA算法对交易和智能合约调用进行签名。
  •   每次调用智能合约或发起交易,都需要签名,确保调用者的身份。

        账户模型:

  •    以太坊的账户模型基于公钥和私钥,每个账户的交易和状态更改都通过数字签名进行保护。
 3. 共识机制中的应用

工作量证明(PoW)

        矿工奖励:

  •   挖矿过程中,矿工找到合适的哈希值后,会用私钥签名新的区块,确保区块是由合法的矿工创建的。

        区块验证:

  •   其他节点在验证新区块时,会验证矿工的签名,确保区块的有效性。

权益证明(PoS)

        验证者选举:

  •    在PoS共识机制中,验证者使用私钥签名他们的区块提案。
  •    其他验证者会验证这些签名,以确保选举过程的公正和安全。
4. 智能合约和DApps中的应用

        签名授权:

  •    智能合约中经常需要多重签名授权,只有满足签名要求的交易才能执行。
  •    多重签名钱包需要多个私钥签名,确保资金安全。
5. 区块链安全和隐私

        防止双重支付:

  •    数字签名确保每笔交易的唯一性和真实性,防止双重支付攻击。

        隐私保护**:

  •   零知识证明等高级密码学技术结合数字签名,实现隐私保护交易,如Zcash中的zk-SNARKs。
6. 区块链上的身份认证和访问控制

        去中心化身份认证(DID):

  •    用户可以通过数字签名证明自己的身份,而无需依赖中心化的身份认证机构。
  •    在去中心化应用(DApps)中,用户使用私钥签名进行登录和授权。

        访问控制:

  •    智能合约可以通过验证数字签名来控制对资源的访问权限,确保只有授权用户才能进行特定操作。
7. 多重签名和门限签名

        多重签名钱包:

  •   需要多个签名(私钥)才能进行交易,提升安全性。
  •   常用于企业账户和高安全性要求的应用场景。

        门限签名:

  •    结合门限密码学,实现分布式签名方案,只有达到特定数量的签名者同意才能生成有效签名。
8. 合规和审计

        法律合规:

  •   数字签名具有法律效力,确保在法律和合规审计中可追溯性和不可否认性。

        审计跟踪:

  •   区块链上的每笔交易都有数字签名,提供完整的审计跟踪记录,确保数据的完整性和透明性。

通过以上方式,数字签名在区块链中扮演了核心角色,确保系统的安全性、完整性和信任性。


结语 

本次笔记理论偏多,大家可能难以理解,推荐解释的比较好的csdn文章:密码学系列之七:数字签名-CSDN博客

大家可以对比学习,查漏补缺,也希望各位在评论区积极留言哦~

 

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值