引言
上一篇文章我们说到密码学中的非对称加密,这篇文章向大家介绍什么是数字签名,以及数字签名在区块链的应用。希望对大家有帮助,也希望大家在评论指出文章存在问题及不足。
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, Bob"
- 哈希函数(如SHA-256)计算消息摘要:
hash("Hello, Bob")
- 消息:
-
Alice使用私钥加密消息摘要:
- 私钥:
SK_Alice
- 加密摘要生成数字签名:
S = Encrypt_{SK_Alice}(hash("Hello, Bob"))
- 私钥:
-
Alice发送消息和签名给Bob:
发送内容:{"message": "Hello, Bob", "signature": S}
签名验证
-
Bob接收消息和签名:
收到内容:{"message": "Hello, Bob", "signature": S}
-
Bob计算消息摘要:
- 消息:
"Hello, Bob"
- 哈希函数(如SHA-256)计算消息摘要:
hash("Hello, Bob")
- 消息:
-
Bob使用Alice的公钥解密签名:
- 公钥:
PK_Alice
- 解密数字签名:
hash(M) = Decrypt_{PK_Alice}(S)
- 公钥:
-
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。
- 密钥长度:适当的密钥长度是安全性的关键,短密钥容易被暴力破解。常见推荐:
- - RSA:2048位或以上
- - ECC:256位或以上(如secp256k1)
- 哈希函数:使用安全的哈希函数生成消息摘要,防止碰撞攻击。如SHA-256、SHA-3。
5. 随机数生成
- 高质量随机数:签名过程需要高质量的随机数,特别是在生成私钥和临时密钥时,防止通过猜测随机数来破解签名。
- 安全随机数生成器:使用密码学安全的随机数生成器(CSPRNG)生成随机数。
6. 抗攻击能力
- 抗暴力破解:加密算法和密钥长度要足够强大,防止通过穷举法破解密钥。
- 抗碰撞攻击:哈希函数必须防止碰撞攻击,即难以找到两个不同的输入生成相同的哈希值。
- 抗重放攻击:确保签名中包含时间戳或唯一标识符,防止攻击者重放旧的有效签名。
- 抗侧信道攻击:防范通过物理手段(如功耗分析、电磁泄漏)获取私钥信息。
7. 多重签名和门限签名
- 多重签名:需要多个私钥签名才有效,提高安全性。常用于高安全性需求的场景,如企业级账户。
- 门限签名:结合门限密码学,实现分布式签名,只有达到特定数量的签名者同意才能生成有效签名,进一步提高安全性。
8. 安全协议和标准
- 安全协议:使用SSL/TLS、SSH等安全协议保护数字签名的传输过程。
- 国际标准:遵循国际标准和最佳实践,如NIST、ISO标准,确保数字签名系统的安全性和兼容性。
9. 实践中的安全措施
- 密钥轮换:定期更换私钥和公钥,降低密钥泄露的风险。
- 双因素认证(2FA):结合双因素认证保护私钥的使用。
- 定期安全审计:对数字签名系统进行定期安全审计,发现并修复潜在的安全漏洞。
通过以上措施和技术,确保数字签名的安全性,使其在各种应用场景中可靠地提供身份验证、数据完整性和不可否认性。
3. 三种常见签名体制的对比
由于采用的签名算法各不相同,三种方案的签名验证等式和过程也不尽相同。根据计算量和签名长度,量对比和分析这3种方案的效率如下。其中,由于模加、模减、求逆运算所用时间远远低于求幂、乘积、Hash求值等运算所需时间,可忽略不计。
签名体制 | 签名 | 验证 | 签名长度 |
ElGamal | Te+Th+2Tm | 3Te +Th+Tm | ∣p∣+∣p−1∣ |
Schnorr | Te+Th+Tm | 2Te+Th+Tm | ∣q∣+∣2H(m)∣ |
DSA | Te+Th+2Tm | 2Te +Th+3Tm | 2∣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博客
大家可以对比学习,查漏补缺,也希望各位在评论区积极留言哦~