一、原理
数字签名是基于公钥密码学(非对称加密),核心是私钥签名、公钥验签。
流程
| 步骤 | 说明 |
|---|---|
| 1️⃣ 哈希 | 对原文使用 Hash 算法(如 SHA-256)生成消息摘要 |
| 2️⃣ 签名 | 用发送者的私钥对摘要加密,生成数字签名 |
| 3️⃣ 发送 | 将原文 + 数字签名一起发给接收者 |
| 4️⃣ 验签 | 接收者用发送者的公钥解密签名,得到摘要;同时对原文计算哈希 |
| 5️⃣ 比对 | 两者一致 → 签名有效;不一致 → 被篡改或来源无效 |
关键点
- 私钥只有签名者持有,不可泄露 → 保证了不可伪造性
- 公钥公开,任何人都能验证 → 保证了可验证性
- 摘要一致说明原文未被篡改 → 保证了完整性
二、常见算法
- RSA --- 最经典,如 "RSA-2048"
- ECDSA --- 椭圆曲线签名,更高效,如 "ECDSA P-256"
- DSA --- 美国政府标准数字签名算法
- SM2 --- 中国国密算法,基于椭圆曲线
三、使用场景
📌 典型场景
| 场景 | 说明 |
|---|---|
| 代码/软件签名 | 微软、苹果要求驱动、软件包数字签名,防止恶意篡改 |
| 文档签名 | PDF、Word 文档数字签名,具有法律效力(电子合同) |
| SSL/TLS 证书 | HTTPS 证书用数字签名验证服务器身份 |
| 区块链/加密货币 | 交易授权,钱包地址用私钥签名证明所有权 |
| 邮件签名 (S/MIME) | 验证邮件发送者身份、保证内容不被篡改 |
| 政务/金融 | 电子证照、政务审批、金融交易防抵赖 |
📌 简单类比
把数字签名想象成**"支票上的手写签名"**:
- 私钥 = 你的笔,只有你能签
- 公钥 = 你的笔迹样本,银行用来核对
- 哈希 = 支票上的防伪底纹
- 签名内容 = 支票上的金额(金额改了就无效)
四、与加密的区别
| -- | 数字签名 | 数据加密 |
|---|---|---|
| 目的 | 证明"是谁发的" + "内容没改" | 保证内容保密 |
| 用什么密钥 | 私钥签名、公钥验签 | 公钥加密、私钥解密 |
| 方向 | 单向,非对称 | 可双向 |