1. RSA 公钥体系原理
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,使用公钥加密、私钥解密,或者私钥签名、公钥验签。其安全性基于大数分解的困难性(即很难从 n 分解出 p 和 q)。
核心数学原理
选择两个大素数 p 和 q
计算模数
计算欧拉函数
选择公钥指数 e(通常为 65537),满足 且
计算私钥指数 d,使得 (即 d 是 e 的模逆)
加密 & 解密
加密(使用公钥 (e,n)):
解密(使用私钥 (d,n)):
2. RSA 应用场景
HTTPS/SSL(用于密钥交换)
SSH 登录认证
数字签名(如软件签名、区块链交易)
加密小数据(如加密对称密钥)
3. 注意事项
RSA 不能加密大文件(通常只用于加密对称密钥,如 AES 密钥)。
必须使用填充方案(如 PKCS1_OAEP,避免直接使用 ,否则可能被攻击)。
密钥长度至少 2048 位(1024 位已不安全)。
4. 预计算攻击 RSA 公钥体系
预计算攻击(Precomputation Attack),即预先计算大量大整数的质因数分解并存储,然后在破解 RSA 时直接查询。虽然这个想法理论上可行,但实际上不可行,原因如下:
4.1. 存储空间需求巨大(不可行)
RSA 常用的模数 的位数:
2048-bit RSA:n 是 2048 位(约 617 位十进制数),p 和 q 各约 1024 位。
4096-bit RSA:n 是 4096 位,p 和 q 各约 2048 位。
存储所有可能的 n 需要多少空间?
2048-bit RSA 的 n 数量: 个可能的 n(因为 p 和 q 各约
个可能值)。
存储一个 n 及其分解:假设用 256 字节(存储 n、p、q)。
总存储需求:
对比:可观测宇宙的原子总数约 ,远小于
。
结论:即使使用全宇宙的存储设备,也无法存储所有可能的 n。
4.2. 计算时间不可行
即使只预计算一部分 n,仍然面临:
质因数分解的计算复杂度:
对 1024-bit 的 n,最优算法(如数域筛法,NFS)需要:
对于 1024-bit n,分解需要 数百万 CPU 年。
2048-bit n 的分解时间 远超宇宙年龄(138 亿年)。
结论:预计算所有可能的 n 在计算上不可行。
4.3. 实际攻击方式(替代方案)
虽然“预计算所有 n”不可行,但攻击 RSA 的其他方式包括:
量子计算(Shor 算法):
量子计算机可以在多项式时间内分解大数。
但目前量子计算机的规模不足以破解 2048-bit RSA。
侧信道攻击:
通过测量功耗、电磁辐射等推测私钥。
弱随机数生成:
如果 pp 或 qq 是弱随机数生成的,可能被暴力破解。
共模攻击:
如果多个用户使用相同的 nn,可以恢复私钥。
4.4. 现实世界的防护措施
为了防止 RSA 被破解,现代密码学采用:
足够长的密钥:
2048-bit RSA(推荐),4096-bit(更高安全需求)。
随机且安全的素数生成:
使用强随机数生成器(如 /dev/urandom 或硬件 RNG)。
填充方案(如 OAEP):
避免直接加密,防止数学攻击。
定期更换密钥:
防止长期暴露后被破解。
4.5 结论
“预计算所有大数分解”攻击 RSA 在存储和计算上均不可行。RSA 的安全性仍然依赖于大数分解的困难性,除非量子计算机成熟。现实攻击更可能来自侧信道、实现错误或量子计算,而非暴力分解。如果想研究 RSA 的安全性,建议关注:
量子密码学(Post-Quantum Cryptography)
侧信道防护(如恒定时间算法)
密钥管理最佳实践