数字签名(Digital Signature)
数字签名(Digital Signature)是一种用来验证数据完整性、身份认证和防抵赖性的加密技术,广泛用于电子合同、区块链、软件发布、电子邮件等场景。
✍️ 一、数字签名的作用
身份认证
确保消息确实来自某个特定的发送者。完整性校验
检查消息是否在传输过程中被篡改。防抵赖(不可否认性)
发送者不能否认其发送的内容,因为只有他持有私钥。
🔐 二、数字签名的工作原理
数字签名基于非对称加密(如 RSA、ECDSA)和哈希算法(如 SHA-256),流程如下:
✅ 签名过程(发送端):
原始数据 → 使用哈希算法 → 生成消息摘要。
消息摘要 → 使用发送者的私钥加密 → 得到数字签名。
将:
原始数据 + 数字签名
一起发送给接收者。
🔎 验签过程(接收端):
接收到原始数据和数字签名。
用发送者的公钥解密数字签名 → 得到签名时的消息摘要。
对收到的原始数据重新计算哈希 → 得到本地摘要。
比较两者摘要:
若一致,则说明数据未被篡改,签名者身份可信;
若不一致,则签名无效或数据已被篡改。
🧠 三、举个简单例子
假设 Alice 向 Bob 发送一份文件,并用她的私钥签名:
Alice 计算文件哈希值,比如得到:
A1B2C3...
Alice 用她的私钥加密这个哈希值,生成签名
她将文件 + 签名 一起发给 Bob
Bob 的验证过程:
Bob 对文件重新计算哈希 → 得到
A1B2C3...
Bob 用 Alice 的公钥解密签名 → 得到一个哈希值
两个哈希值一致 → 签名合法 ✅
🔧 四、常见的数字签名算法
算法名称 | 描述 | 安全性 |
---|---|---|
RSA | 经典的非对称加密算法,支持签名 | 安全但密钥长 |
DSA | 数字签名标准,美国政府认证 | 安全但签名速度慢 |
ECDSA | 椭圆曲线数字签名算法 | 更快更短密钥,广泛使用 |
EdDSA | 新一代签名算法 | 快速、安全、现代 |
📦 五、应用场景
✅ 软件发布(验证软件未被篡改,如
.sig
文件)✅ HTTPS(SSL/TLS 证书背后就用了数字签名)
✅ 区块链/比特币(每笔交易都需要签名)
✅ 电子合同、电子发票(确保合同合法有效)
✅ 邮件加密(如 OpenPGP、S/MIME)
📌 六、数字签名 vs 手写签名
项目 | 手写签名 | 数字签名 |
---|---|---|
安全性 | 易伪造 | 基于数学难题,难伪造 |
可验证性 | 需要人工判断 | 自动验证、可追溯 |
抵赖性 | 可否认 | 不可否认 |
应用场景 | 纸质文档 | 电子文档/通信/金融 |