公钥密码学
本文约需 2 分钟阅读
公钥密码 (非对称密码) 是指在加密和解密时使用两个不同密钥 - 公钥和私钥 - 的密码方式。公钥可以分发给任何人,私钥仅由所有者持有。用公钥加密的数据只能用对应的私钥解密,用私钥创建的签名可以用公钥验证。这种非对称性构成了互联网上安全通信与数字签名的基础。
历史背景 - 密码学的革命
1976 年,Whitfield Diffie 与 Martin Hellman 在论文《New Directions in Cryptography》中提出了公钥密码的概念。在此之前的密码要求发送方与接收方事先共享相同的密钥,密钥的安全配送是最大的难题。次年的 1977 年,Ron Rivest 、 Adi Shamir 、 Leonard Adleman 三人设计出 RSA 密码,使公钥密码得以实用化。 RSA 将其安全性的依据置于大素数乘积的素因数分解困难这一数学性质之上。 1985 年,Neal Koblitz 与 Victor Miller 各自独立提出了椭圆曲线密码 (ECC),以比 RSA 更短的密钥长度实现了同等的安全性。当前的 TLS 1.3 已将 ECC 作为标准使用。
工作原理
公钥密码的核心在于「单向函数」。将大素数相乘很容易,但要从其乘积求出原始素数 (素因数分解) 却极为困难。 RSA 利用了这一性质,而 ECC 则利用了椭圆曲线上离散对数问题的困难性。无论哪种,在当前的计算机上只要有足够的密钥长度,破解都需要耗费天文数字般的时间。
与对称密钥密码的比较
| 观点 | 对称密钥密码 (如 AES) | 公钥密码 (RSA / ECC) |
|---|---|---|
| 密钥数量 | 收发双方相同的 1 个 | 公钥与私钥共 2 个 |
| 处理速度 | 高速 (100 倍以上) | 低速 |
| 密钥配送问题 | 需要安全通道 | 公钥可以公开 |
| 主要用途 | 大量数据的加密 | 密钥交换、签名、认证 |
在实际通信中,结合两者的混合方式是主流。在 TLS 握手中,首先用公钥密码安全地交换共享密钥,之后的数据通信则使用高速的对称密钥密码进行。通过这一机制,同时兼顾了密钥配送的安全性与通信的高速性。加密基础一文中也有详细解说。
与数字签名的关系
公钥密码不仅用于加密,还用于数字签名。签名时,密钥的使用方向与加密相反。发送方用私钥对数据的哈希值进行签名,接收方用公钥进行验证。由此可同时实现数据篡改检测与发送方的身份确认。PKI (公钥基础设施) 是一种通过证书保证公钥正当性的机制,支撑着网站的 HTTPS 通信。
现场使用案例
“在全公司导入 SSH 密钥认证时,我们从 RSA 4096 位切换到了 Ed25519 (基于椭圆曲线)。密钥长度变短、认证速度提升的同时,安全强度也得到了提高。”
量子计算机的威胁与抗量子密码
一旦量子计算机实用化,Shor 算法就有可能高效地求解作为 RSA 和 ECC 安全性依据的素因数分解、离散对数问题。为此,NIST 已于 2024 年正式发布 ML-KEM (基于格密码的密钥封装) 与 ML-DSA (基于格密码的数字签名) 作为抗量子密码的标准。 Google Chrome 已在 TLS 连接中默认启用混合密钥交换 (传统 ECC + ML-KEM)。抗量子密码与密码安全一文中详细解说了今后的影响。
常见误解
有一种「公钥密码比对称密钥密码更安全」的误解,但二者安全性的种类不同。 AES-256 即便面对量子计算机也具备一定的抵抗力,而 RSA-2048 则有可能被量子计算机破解。此外,「公开公钥没有问题」的说法虽然正确,但若不验证公钥的正当性,就存在中间人攻击的风险。正因如此,通过证书验证公钥才不可或缺。对于希望系统学习密码技术的人,密码技术入门书 (Amazon)可作为参考。
这篇文章对您有帮助吗?