非对称密码学(Public-Key Cryptography)
非对称密码学使用数学关联的公钥/私钥对构造公钥加密、数字签名与密钥协商等不同原语;公钥加密、私钥解密只描述其中一种能力,不能概括整个公钥密码体系。
[!info] related notes
非对称密码学(Public-Key Cryptography)
一句话定义
非对称密码学使用一对数学关联的 key:
- Public Key:可以公开;
- Private Key:必须由持有者保护。
但这对 key 可以用于不同 cryptographic primitive。
最重要的边界是:
Public-Key Cryptography 不等于 Public-Key Encryption。
公钥密码体系至少包含:
- public-key encryption;
- digital signature;
- key agreement / key establishment。
这些原语的目标和算法并不完全相同。
它解决了什么问题
对称密码要求通信双方事先共享 secret key。
公钥密码学通过 public information + private secret + hard mathematical problem,构造新的信任与密钥建立能力。
它没有消除信任问题,而是改变了信任建立方式。
1. Public-Key Encryption
公钥加密解决 confidentiality:
sender → encrypt with recipient public key → ciphertext
recipient → decrypt with recipient private key → plaintext
只有拥有对应 private key 的主体才能完成正常解密。
典型方案包括 RSA-OAEP 等标准化 public-key encryption scheme。
不要只写“RSA = 公钥加密私钥解密”,因为 RSA 只是数学基础;真正安全性来自具体 padding、encoding 与 protocol。
2. Digital Signature
数字签名主要解决:
- authenticity;
- integrity;
- 某些 non-repudiation 场景中的证据基础。
基本方向是:
signer → sign with private key → signature
verifier → verify with public key → valid / invalid
这里不是“用私钥加密,公钥解密”。
签名和加密是不同 primitive。
例如:
- RSA-PSS 是 signature scheme;
- Ed25519 是 signature scheme;
- ECDSA 是 signature scheme。
它们的安全定义和 encryption 不同。
3. Key Agreement
Diffie-Hellman / ECDH 的核心目标不是把一段明文加密。
它们让双方通过公开交换信息,导出共享 secret。
Alice private + Bob public → shared secret
Bob private + Alice public → same shared secret
然后再经过 KDF 生成实际 session keys。
所以 Diffie-Hellman 属于 key agreement,不是普通 public-key encryption。
为什么实际通信通常使用 Hybrid Encryption
非对称算法通常不适合直接加密大量业务数据。
现实系统更常见:
Public-key crypto → establish / wrap a symmetric key
Symmetric AEAD → encrypt bulk data
原因包括:
- 对称密码性能更高;
- 更适合大规模数据;
- AEAD 适合 record/message encryption;
- 公钥算法负责 key establishment / identity。
TLS 就是典型混合密码系统,而不是全程使用 RSA 加密网页内容。
公钥为什么可以公开
安全设计要求 public key 已知时,攻击者仍无法在可行计算成本内恢复 private key。
不同算法家族依赖不同数学困难问题和安全假设。
RSA
与大整数分解相关。
Diffie-Hellman 类
与有限群上的离散对数问题相关。
ECC
与椭圆曲线群上的离散对数问题相关。
不要笼统把所有公钥密码都写成完全相同的数学构造。
公钥真实性问题
即使 encryption 算法安全,如果攻击者把自己的 public key 冒充成 Bob 的,仍可能发生 MITM。
所以还需要回答:
这个 public key 到底属于谁?
常见解决方式:
- PKI / certificate;
- trust root;
- certificate pinning;
- out-of-band fingerprint verification;
- Web of Trust 等。
详见 PKI。
Public Key 不等于 Identity
拿到一个 public key 只能说明某个 private key 与它数学对应。
不能自动证明:
- 这是某个人;
- 这是某个域名;
- 这是某家公司。
身份绑定必须来自额外 trust mechanism。
对称 vs 非对称
| 维度 | 对称密码 | 非对称密码 |
|---|---|---|
| key | shared secret | public/private pair |
| bulk encryption | 非常适合 | 通常不直接承担 |
| key distribution | 需要安全共享 | public key 可公开,但需验证归属 |
| digital signature | 不提供公钥可验证签名模型 | 可以 |
| key agreement | 需要已有共享秘密或其他机制 | 可以构造 |
| 性能 | 通常更高 | 通常更昂贵 |
这不是谁更安全的排名;两者承担不同角色,现代协议通常组合使用。
RSA 不是整个非对称密码学
RSA 可以构造 encryption scheme 和 signature scheme。
ECC 更像一组椭圆曲线数学构造基础,可以进一步构造 ECDH、ECDSA、EdDSA 系列等不同协议/算法。
因此比较 RSA vs ECC 时,必须先明确是在比较:
- key agreement;
- signature;
- encryption;
- key size;
- implementation ecosystem。
Key Size 不能跨算法直接比较
256-bit ECC key 不能因为数字小于 2048-bit RSA 就直接得出 ECC 更弱。
不同数学问题的攻击复杂度不同,key size 只能在对应算法和安全强度模型中解释。
Private Key 泄漏意味着什么
Private Key 泄漏的影响取决于用途。
Signature key
攻击者可能伪造新签名。
Decryption key
攻击者可能解密能够由该 key 解密的数据。
Key agreement key
是否能恢复历史 session,还取决于协议是否具有 Forward Secrecy。
因此不能把“私钥泄漏 = 所有历史通信全部可解密”作为统一结论。
Forward Secrecy
现代 TLS 常用 ephemeral Diffie-Hellman / ECDHE。
目标之一是长期身份 private key 未来泄漏,也不自动恢复过去每个 session 的临时密钥。
这进一步说明:身份签名 key 与 session encryption key 不是同一个对象。
常见误区
公钥加密,私钥解密;反过来就是签名
过度简化且容易误导。Signature 有自己的 scheme 和安全定义。
非对称密码比对称密码更安全
没有这种通用排名,它们承担不同角色。
Public key 可以公开,所以不需要保护
Public key 不需要保密,但需要真实性与完整性;被替换的 public key 会破坏身份信任。
非对称密码可以直接加密任意大文件
通常不会这样设计,现代系统使用 hybrid encryption。
学习检查
- Public-Key Cryptography 与 Public-Key Encryption 有什么区别?
- 加密、签名、密钥协商分别解决什么安全目标?
- 为什么“私钥加密、公钥解密 = 签名”是危险心智模型?
- Diffie-Hellman 为什么属于 key agreement 而不是普通 encryption?
- 为什么真实系统通常采用 hybrid encryption?
- Public key 不需要保密,为什么仍然必须验证真实性?
- RSA key size 与 ECC key size 为什么不能直接按数字大小比较?
- Forward Secrecy 为什么能减少长期 private key 泄漏对历史 session 的影响?
- 给 TLS 场景区分 certificate public key、ephemeral key agreement、symmetric session key 各自职责。