数字签名
数字签名的生成、验证与常见算法说明
#status / growing
#type / concept
#tech / security / crypto
数字签名
1. 概念
数字签名是手写签名的数字化模拟,用于确认数字信息的来源以及信息的完整性。 它必须满足:
- 可验证性:接收者可以验证签名者的身份。
- 不可伪造性:只有私钥持有者才能生成签名。
- 不可抵赖性:签名者事后不能否认自己的签名。
2. 签名与验证过程
签名过程 (发送方)
-
对原始消息 $M$ 进行 Hash 计算,得到摘要 $H(M)$。
-
使用发送方的私钥 (SK) 对摘要进行加密,生成的密文即为数字签名 $S$。
$$
S = Enc_{SK}(H(M))
$$ 3. 将消息 $M$ 和签名 $S$ 一起发送给接收方。
验证过程 (接收方)
- 接收方收到消息 $M$ 和签名 $S$。
- 使用发送方的公钥 (PK) 对签名 $S$ 进行解密,得到摘要 $h’$。
$$
h’ = Dec_{PK}(S)
$$
- 对收到的消息 $M$ 使用相同的 Hash 算法计算摘要 $h$。
- 对比:如果 $h = h’$,则证明消息未被篡改,且确实由私钥持有者发送。
3. 常见签名算法
- RSA 签名:基于 RSA 算法的签名方案。
- DSS (Digital Signature Standard):美国国家标准,包含 DSA 算法。
- ECDSA:基于椭圆曲线的签名算法(比特币/以太坊中使用)。
相关链接:
- rsa
- [[Hash]]
- [[公钥基础设施PKI]]
Related notes
- 所属 MOC: 密码学
- 相关概念: RSA
- 相关概念: 非对称密码学(Asymmetric-Encryption)
- 相关概念: 椭圆曲线密码ECC