📖 数字签名(digital signature)
🎯 课程摘要:数字签名(digital signature)用于证明计算机网络中报文的真实来源,采用公钥密码算法实现:发送方用自己的私钥(SK)对报文"签名"(解密运算),接收方用发送方的公钥(PK)"验证"(加密运算)。数字签名可实现报文来源鉴别、防伪造和防抵赖。将数字签名与公钥加密结合,即可实现既保密又认证的通信。
📝 详细笔记
1. 数字签名的基本概念
日常生活中的书信或文件可依据亲笔签名或印章来证明其真实来源;类似地,计算机网络中传送的报文可使用**数字签名(digital signature)**来证明其真实来源。
数字签名必须保证以下三点:
| 要求 | 说明 |
|---|---|
| 可核实 | 接收方能够核实发送方对报文的数字签名 |
| 防伪造 | 包括接收方在内的任何人都不能伪造 |
| 防抵赖 | 发送方事后不能抵赖对报文的数字签名 |
2. 数字签名的实现
采用公钥密码算法比采用对称密钥密码算法更容易实现数字签名。
关于"未加密就解密"的疑问:
- 报文 m 还没有加密,怎么就进行解密了?
- 其实这没有关系,因为解密运算 D 仅仅是一个数学运算,运算结果只是将报文 m 变成了某种不可读的密文
- 此时的运算并非想将报文 m 加密,而是为了数字签名
安全性分析:
- 除 A 外的其他任何人都没有 A 的私钥 SK_A,所以除 A 外没有其他任何人能产生用 A 的私钥 SK_A 进行签名的报文
- 任何伪造的报文在使用 A 的公钥 PK_A 核实数字签名时都不会得到可理解的内容
- 因此 B 可通过这种方式核实报文 m 的确是 A 签名发送的
防抵赖与防伪造:
若 A 抵赖曾发送报文 m 给 B,B 可把报文 m 和经过数字签名的报文 m 出示给第三方,第三方很容易用 A 的公钥 PK_A 证实 A 确实发送过报文 m
反之,若 B 把报文 m 伪造成 m',则 B 不能在第三方前出示经过数字签名的报文 m',因为 B 不可能具有 A 的私钥 SK_A,这样就证明 B 伪造了报文
⚠️ 重点:数字签名实现了对报文来源的鉴别
3. 对报文摘要进行数字签名
- ⚠️ 重点/考点:由于公钥密码算法的计算代价非常高,对整个报文进行数字签名非常耗时
- 更有效的方法:仅对报文摘要进行数字签名
4. 具有保密性的数字签名
之前介绍的数字签名过程仅对报文 m 进行了数字签名,但对报文 m 本身并没有保密——知道发送方 A 身份的任何人,通过查阅手册就可获得 A 的公钥 PK_A,截获用 A 的私钥 SK_A 进行数字签名的报文 m 后,就可使用 A 的公钥 PK_A 还原出原报文 m。
同时实现数字签名与保密性的方法:
- 保密性依据:其他人无法知道接收方 B 的私钥 SK_B,因此无法对加密后的带签名报文 m 进行解密
- 结论:这样就实现了既对报文进行数字签名,又确保了报文的保密性
5. 数字签名与报文鉴别的区别
| 对比项 | 报文鉴别 | 数字签名(digital signature) |
|---|---|---|
| 目的 | 验证报文完整性(真伪) | 证明报文来源 + 防伪造 + 防抵赖 |
| 密钥使用 | 共享密钥加密摘要 | 私钥签名、公钥验证 |
| 第三方仲裁 | 不支持 | 支持(可用公钥验证签名) |
| 防抵赖 | 不能 | 能 |
| 计算开销 | 较小 | 较大(公钥算法慢) |
💡 核心总结
- 数字签名(digital signature)用私钥(SK)签名、公钥(PK)验证,实现报文来源鉴别
- 数字签名必须满足可核实、防伪造、防抵赖三点
- 由于公钥算法计算代价高,常仅对报文摘要进行数字签名
- 数字签名本身不保证保密性,需结合公钥加密才能既保密又认证
- 私钥签名 + 对方公钥加密 = 既签名认证又保密的完整安全通信
❓ 课后思考 / 经典考题
- 数字签名必须保证哪三点?分别对应什么安全需求?
- 为什么用私钥"解密"就能实现签名?这种"解密"的真正含义是什么?
- 为什么仅对报文摘要进行数字签名是更有效的方法?
- 画图说明"具有保密性的数字签名"的完整过程,并指出哪一步保证保密性、哪一步保证认证。
- 数字签名与报文鉴别有什么区别?数字签名为何能防抵赖而报文鉴别不能?