把一个数做质因数分解,为什么大一点就算不动了?
最朴素的试除法要试到根号那么多,位数一涨工作量就指数上升——这正是现代公钥密码的地基。
因为朴素的试除法要试到根号那么大。一个 n 位的数,根号大致相当于 2 的 n/2 次方,所以工作量随位数指数上升。对一个 2048 位的数,这意味着 2 的 1024 次方量级的尝试——不是慢一点,是任何可预见的计算机都做不完。
更聪明的算法确实存在:Pollard 的 rho 方法用伪随机序列找因子,期望量级降到四次方根;二次筛法和数域筛法进一步压到亚指数。但对精心挑选的大数,它们依然不可行。乘法容易、分解难,这个不对称正好可以用来造锁。
一个数乘起来很快,拆回去可能极慢。小学生都知道 15 等于 3 乘 5,但换成一个几百位的数,目前人类最快的算法也要天文时间。
算术基本定理保证了每个合数都能分解,它没有保证分解很快。这个缝隙就是公钥密码学站住的地方。
1几种算法的工作量对比
每一代算法都是在用更聪明的办法减少尝试次数。
| 算法 | 思路 | 量级 | 2048 位可行吗 |
|---|---|---|---|
| 试除法 | 从 2 试到根号,逐个除 | 根号 N,约位数的二分之一次方 | 不可行 |
| Pollard rho | 伪随机序列找循环,用最大公约数提因子 | N 的四分之一次方 | 不可行 |
| 二次筛法 | 找平方同余的数对,从差里提出因子 | 亚指数 | 实用上限约几百位,再大不可行 |
| 数域筛法 | 当前最强的经典算法 | 亚指数 | 不可行 |
注意亚指数的意思:指数虽然仍比线性慢得多,但已经比纯指数好很多,这让几百位的数变得可以挑战、上千位依然安全。
2为什么位数一涨就这么夸张
关键是位数,而不是数值大小给人的直觉。
- 位数在指数位置上
- 工作量的公式里,位数出现在指数里。所以每多一位,难度不是加一点,而是乘一档。
- 历史纪录就是标尺
- 一个四百多位的挑战数在九十年代动用上千台机器跑了几个月;六百多位用了两年;再往上只在学术团队手里偶尔被攻破。
- 安全参数按年份留余量
- 当前的共识是 2048 位属于可接受的下限,十年以上寿命的系统建议用 3072 位,最敏感的场景用 4096 位。1024 位已经不再推荐。
- 真正难的是两个大素数的积
- 对随机的大合数,它的因子可能很小、很容易被试除出来;而密码学用的是两个大小相当的素数相乘,这种数最难拆。
所以「大数分解难」这句话要精确成:对特定结构的大合数难,而不是对所有大数都难。
3这个难度是怎么变成加密的
不对称性本身就是可以拿来用的资源。
| 操作 | 谁做 | 代价 |
|---|---|---|
| 把两个素数相乘得到模数 | 生成密钥的人 | 一次乘法,瞬间完成 |
| 用公开信息加密 | 任何人 | 若干次模幂运算,很快 |
| 用私钥解密 | 持有者 | 同样快 |
| 只凭公开模数求出私钥 | 旁观者 | 等价于分解这个大数,不可行 |
安全性建立在「除此之外没有更快的路」这个假设上。所以密钥长度要跟着分解算法的进步不断上调。
4还有一个变量:量子计算机
这不是更快的经典算法,而是完全不同的计算模型。
- Shor 算法在多项式时间内分解整数
- 在足够大且容错的量子计算机上,整数分解从难变易,整套基于这个假设安全的技术都会失效。
- 目前尚不具备条件
- 需要的量子比特规模和纠错能力远超现有设备,所以威胁是前瞻性的而非当下的。
- 因此有了后量子迁移
- 业界正在推进不依赖大数分解假设的新算法,这也是当前密码学最重要的工程方向之一。
- 对普通用户意味着什么
- 不用恐慌,但要关注自己使用的服务是否在按计划更新加密套件。
一句话:经典算法让分解够难,量子算法让这个假设有了明确的到期日。
顺着这个问题往下用
全部工具总览 →相关疑问
为什么不能只判断一个数是不是素数就够了?
判断是不是素数(素性测试)和把它分解,是两件难度完全不同的事。判断通常很快,分解很难——这正是 RSA 能成立的前提。
计算器里能分解多大的数?
日常用的工具通常只做试除法,几百到几千亿量级的数就明显吃力了。这属于教学演示的范围,和密码学意义上的大数差着好几个数量级。
把两个大素数改小一点,速度不就快了?
会快,但安全性下降得非常快:位数减半,攻击成本下降的幅度远大于此。所以密钥长度不能用来做性能妥协。
这跟哈希算法的安全性是一回事吗?
不是。哈希的安全性主要依赖单向性和抗碰撞,而 RSA 依赖的是分解难。两类问题、两套假设,但都属于计算困难性密码学。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-09。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱