← [ BACK_TO_NOTES ]

数字签名

数字签名使用私钥生成签名、公钥验证签名,用来验证消息完整性和签名者控制相应私钥;它不是“私钥加密”,也不能单独证明现实世界身份,身份绑定需要证书/PKI 等额外信任机制。

#evergreen #concept #crypto

[!info] related notes

数字签名

一句话定义

Digital Signature Scheme 提供:

private key → sign(message) → signature
public key → verify(message, signature) → valid / invalid

它主要帮助验证:

  • 数据未被未授权修改;
  • 签名由对应 private key 的控制者生成。

签名不是“私钥加密”

这是最重要的纠偏。

旧教材常用:

private key encrypt hash
public key decrypt signature

解释 RSA signature。

这会把 encryption 和 signature 混成一件事。

更正确的模型是:

signature algorithm = key generation + signing algorithm + verification algorithm

例如:

  • RSA-PSS;
  • ECDSA;
  • EdDSA。

它们不是普通 encryption API 的反向调用。

Hash 的角色

许多 signature scheme 会先对消息做 hash / encoding,再进入签名算法的核心步骤。

概念上可理解为:

message → digest / encoded representation → signature operation

但真实 scheme 的 encoding 规则属于算法本身。

不要自行定义:

SHA256(message) → raw private-key math

来替代标准 signature scheme。

Integrity 与 Authenticity

签名验证成功说明:

message + signature + public key

满足该 signature scheme 的验证关系。

它提供:

  • integrity;
  • proof of control of the corresponding private key。

但 public key 本身属于谁,需要额外信任机制。

因此签名和 PKI / certificate 经常配合使用。

Non-repudiation 的边界

数字签名常被描述成“不可抵赖”。

更严格地说:

  • 签名可以形成强技术证据;
  • 但法律意义上的不可抵赖还依赖 key custody、身份认证、审计、时间戳、政策和程序。

所以不能把 cryptographic signature 自动等同于法律事实。

当前算法状态

NIST FIPS 186-5 当前规定的签名技术包括:

  • RSA;
  • ECDSA;
  • EdDSA。

旧 DSA 不再用于生成新签名,只保留验证已有签名的用途。

RSA Signature

现代 RSA 签名应使用标准方案,例如 RSA-PSS,而不是 textbook RSA 或“私钥加密 hash”。

ECDSA

ECDSA 基于 elliptic-curve discrete logarithm 结构。

它对 per-signature nonce 非常敏感。

nonce 重复、可预测或泄漏可能直接暴露 private key。

EdDSA

EdDSA 使用 Edwards-curve 系列设计,并采用与 ECDSA 不同的签名构造。

Ed25519 是常见实例。

不要把 Ed25519 简化成“另一条 ECDSA 曲线”。

Signature ≠ Encryption

目标EncryptionSignature
confidentiality是否
integrity/authenticity不是主要目标是
public key roleencrypt / scheme dependentverify
private key roledecrypt / scheme dependentsign

一个 signed message 仍然可以是完全公开的。

Certificate Signature

X.509 certificate 本身也使用 digital signature:

CA private key → sign certificate contents
client → verify using issuer public key

这建立的是证书链中的 trust relation。

详见 PKI。

常见失败模式

签名后还能修改未覆盖字段

如果 protocol 没有把所有安全关键字段纳入 signed representation,攻击者可能修改未签名部分。

验证了签名但没验证身份

public key 可能就是攻击者自己的。

自定义签名格式

自行组合 hash + raw RSA/ECC math,容易产生严重漏洞。

私钥存储不安全

签名算法本身安全,也无法挽救已泄漏 private key。

学习检查

  1. 为什么“私钥加密 = 签名”是错误模型?
  2. signature scheme 与 hash function 是什么关系?
  3. 签名验证成功能证明什么,不能证明什么?
  4. 为什么 public key 真实性仍需要 PKI 或其他 trust mechanism?
  5. ECDSA nonce 为什么属于高风险安全边界?
  6. RSA-PSS 与 RSA-OAEP 分别解决什么问题?
  7. 为什么数字签名的技术不可伪造性不自动等于法律上的不可抵赖?
创建于 2026/1/6 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本