公钥加密
约 5 分钟阅读
最后更新: 2026-02-05
什么是公钥加密
公钥加密 (Public Key Cryptography) 是一种使用两个不同密钥 - - 公钥和私钥 - - 进行加密和解密的加密方式。1976 年 Diffie 和 Hellman 发表了这一概念,1977 年以 RSA 算法实现了实用化。
公钥可以公开给任何人,私钥仅由所有者保管。用公钥加密的数据只能用对应的私钥解密。这一特性消除了事先共享密钥的需要,解决了对称加密的根本性密钥分发问题。
公钥加密的两大用途
公钥加密有两个主要应用。
1. 加密 (确保机密性)
发送方用接收方的公钥加密数据,接收方用自己的私钥解密。由于公钥可以自由获取,无需事先共享密钥。
实际应用:加密邮件 (PGP) 用收件人的公钥加密消息,只有收件人能读取。
2. 数字签名 (确保真实性)
签名者用私钥创建签名,任何人都可以用对应的公钥验证。这证明数据由私钥持有者创建且未被篡改。
实际应用:数字证书使用 CA 的私钥签署证书,浏览器用 CA 的公钥验证。
主要算法
- RSA:历史上使用最广泛的算法。安全性基于大素数乘积的因式分解困难性。推荐密钥长度 2048 位以上。历史悠久、实绩丰富,但由于密钥较大,处理速度较慢。
- 椭圆曲线加密 (ECC):安全性基于椭圆曲线离散对数问题。以更短的密钥实现与 RSA 同等的安全性 (ECC 256 位 ≈ RSA 3072 位),处理速度更快,带宽占用更少。TLS 1.3 中作为标准采用。
- EdDSA (Ed25519):基于扭曲 Edwards 曲线的签名算法。速度快,抗实现错误能力强。广泛用于 SSH 密钥和加密货币钱包。
面对量子计算机的潜在威胁,后量子密码学 (PQC) 研究正在推进。NIST 于 2024 年选定了基于格的算法 (CRYSTALS-Kyber、CRYSTALS-Dilithium) 作为标准,迁移规划已在进行中。
TLS 中公钥加密的使用方式
每次在浏览器中访问 HTTPS 网站时,公钥加密都在发挥作用。但并非所有数据都用公钥加密。
- 密钥交换:在 TLS 握手过程中,使用公钥加密 (如 ECDHE) 安全地交换共享密钥。
- 对称加密:后续所有数据使用共享密钥通过快速的对称加密算法 (AES) 加密。公钥加密对于大量数据加密来说太慢。
这种混合方式结合了公钥加密的密钥分发优势和对称加密的速度优势。TLS 1.3 强制要求使用 ECDHE 进行密钥交换,确保前向保密。
实用注意事项与密钥管理
安全运用公钥加密,密钥长度选择和密钥生命周期管理与算法选择同样重要。
推荐密钥长度:RSA 最低要求 2048 位,2030 年以后的长期使用推荐 3072 位以上。ECDSA 中 P-256 (secp256r1) 是标准选择,安全性等同于 RSA 3072 位但性能远优。
密钥生命周期:私钥应定期轮换。如果密钥被泄露,用该密钥加密的所有数据都面临风险。证书有效期 (目前最长 398 天) 强制定期更新密钥。
安全存储:私钥应存储在 HSM (硬件安全模块) 或安全密钥库中。以明文文件存储私钥是严重的安全风险。
常见误解
- 公开公钥很危险
- 公钥顾名思义就是用来公开的。从公钥推算私钥在计算上是不可行的 (以当前技术),因此广泛分发公钥不会损害安全性。只有私钥需要保护。
- 密钥越长越好
- 更长的密钥提高安全性但降低处理速度。RSA 2048 位和 ECC 256 位具有同等安全性,但 ECC 快得多。算法选择与密钥长度的平衡才是关键。
公钥加密与对称加密对比
公钥加密 (非对称)
加密和解密使用不同密钥。无需事先共享密钥。处理速度较慢。用于密钥交换和数字签名。代表:RSA、ECC。
对称加密
加密和解密使用相同密钥。需要事先安全共享密钥。处理速度快。用于大量数据加密。代表:AES。