数字签名(Digital Signature)是利用非对称加密算法与哈希算法结合的一种数据安全机制,能实现:
- 数据完整性校验
- 身份认证(确认来源)
- 抗否认性(防止抵赖)
详细流程
发送端:生成签名
- 消息摘要:
对原始数据 M
使用哈希算法(如 SHA-256)生成消息摘要 H(M)
。 - 签名生成:
使用发送者的私钥 SK
对摘要 H(M)
进行加密,生成数字签名 S = Encrypt(SK, H(M))
。 - 发送数据:
将原始数据 M
和签名 S
一起发送给接收者。
原始消息 M ───► Hash ───► H(M)│Encrypt(SK, H(M)) ───► 数字签名 S
发送: M + S
接收端:验证签名
- 消息摘要:
对收到的原始数据 M
重新使用同样的哈希算法,得到 H'(M)
。 - 签名解密:
使用发送者的公钥 PK
解密签名 S
,得到 H(M)
。 - 比对摘要:
比较 H'(M)
与解密后的 H(M)
,若一致,说明: - 消息未被篡改(完整性)
- 签名者为私钥持有者(身份认证)
收到:M + S
→ Hash(M) = H'(M)
→ Decrypt(PK, S) = H(M)
→ H'(M) == H(M)? → 是则验证通过 ✅
流程简表总结
步骤 | 发送方操作 | 接收方操作 |
---|
哈希处理 | 使用哈希算法生成 H(M) | 使用哈希算法生成 H'(M) |
加/解密处理 | 用私钥加密 H(M) ,生成签名 S | 用公钥解密签名 S ,还原出 H(M) |
验证签名 | —— | 对比 H'(M) 与 H(M) 是否一致 |
技术要素
技术 | 用途 |
---|
哈希算法 | 生成摘要,确保数据完整性 |
非对称加密 | 私钥签名、公钥验签 |
私钥(发送者持有) | 生成签名(加密摘要) |
公钥(公开) | 验证签名(解密摘要) |
应用场景
应用场景 | 描述 |
---|
邮件签名 | 保证邮件内容未被篡改,并确认发件人身份 |
软件发布签名 | 确保下载的软件包来源可信、未被植入病毒 |
数字证书(如 SSL) | 浏览器用服务器公钥验证签名,确保安全通信 |
区块链交易签名 | 用钱包私钥签署交易,确保不可否认与唯一性 |
数字签名与加密的区别
项目 | 数字签名 | 加密(对称/非对称) |
---|
目的 | 验证身份、防抵赖、校验完整性 | 保密传输、避免泄露 |
使用密钥 | 私钥签名,公钥验签 | 对称用相同密钥,非对称用公私钥 |
作用对象 | 对数据的摘要加密 | 对完整数据加密 |
可逆性 | 是(验签过程是还原摘要) | 是(加密后可解密) |