把一个数做质因数分解,为什么大一点就算不动了?

4 个讲解板块 · 关联 3 款站内工具 · 内容最后核对 2026-10-09

最朴素的试除法要试到根号那么多,位数一涨工作量就指数上升——这正是现代公钥密码的地基。

直接答案

因为朴素的试除法要试到根号那么大。一个 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。若发现错误,欢迎通过页脚反馈入口告知。