<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>密码 on kenji.blog</title><link>http://kenji.blog/zh-cn/tags/%E5%AF%86%E7%A0%81/</link><description>Recent content in 密码 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 02:09:08 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-cn/tags/%E5%AF%86%E7%A0%81/index.xml" rel="self" type="application/rss+xml"/><item><title>破解互联网密码的人类最强数学“一般数域筛选法（GNFS）”是什么？</title><link>http://kenji.blog/zh-cn/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</link><pubDate>Sat, 05 Sep 2026 02:09:08 +0900</pubDate><guid>http://kenji.blog/zh-cn/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/gnfs_two_worlds_1788542142485.jpg" alt="Featured image of post 破解互联网密码的人类最强数学“一般数域筛选法（GNFS）”是什么？" />&lt;h1 id="破解互联网密码的人类最强数学一般数域筛选法gnfs是什么">破解互联网密码的人类最强数学“一般数域筛选法（GNFS）”是什么？
&lt;/h1>&lt;p>我们每天使用的互联网，无论是LINE消息、YouTube还是在Amazon上购物，所有的通信都受到“密码”的保护。
目前，全世界使用最广泛的密码代表就是“RSA密码”。&lt;/p>
&lt;p>RSA密码防御的核心非常简单。那就是利用了 &lt;strong>“即使是计算机也无法解开巨大数字的质因数分解”&lt;/strong> 这一数学性质。
例如，如果是“15”，我们很快就能知道是“3 × 5”，但如果这变成一个“270位的数字”，即使把全世界的超级计算机联合起来，也需要几亿年才能解开。&lt;/p>
&lt;p>然而，数学家们也没有沉默。为了打破这个坚不可摧的密码，人类创造出了一种如同魔法般的算法（计算步骤）——&lt;strong>“一般数域筛选法（GNFS：General Number Field Sieve）”&lt;/strong>。&lt;/p>
&lt;p>在这篇文章中，我们将不使用任何专业术语，仅凭 &lt;strong>初中学的数学知识（质因数分解、代数式、最大公约数）&lt;/strong>，分步为您完全解析这个“人类最强算法”破解密码的奥秘！&lt;/p>
&lt;hr>
&lt;h2 id="第1章密码破译的目标是初三的公式">第1章：密码破译的目标是“初三的公式”
&lt;/h2>&lt;p>面对巨大的质因数分解，最大的必杀技就是初三年级学的这个公式。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>$X^2 - Y^2 = (X + Y)(X - Y)$&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>你可能会想：“哎，这么基础的公式就能破解密码吗？”但正是这个公式，是解开一切的大师级钥匙。&lt;/p>
&lt;p>破解密码的最大目标，是对于一个巨大的数字 $N$，
找到 &lt;strong>“将 $X^2$ 和 $Y^2$ 除以 $N$ 后的余数相同的数字（$X$ 和 $Y$）”&lt;/strong>。&lt;/p>
&lt;h3 id="为什么余数相同就能解开密码">为什么“余数相同”就能解开密码？
&lt;/h3>&lt;p>假设有两个数字 $X^2$ 和 $Y^2$，“除以 $N$ 的余数相同”。
余数相同意味着，&lt;strong>做减法得到的“$X^2 - Y^2$”，必定能被 $N$ 整除（成为 $N$ 的倍数）&lt;/strong>，这是一个法则。&lt;/p>
&lt;p>这里，假设用于密码的巨大数字 $N$ 是由两个秘密的质数（$p$ 和 $q$）相乘得到的（$N = p \times q$）。&lt;/p>
&lt;p>将 $X^2 - Y^2$ 进行因式分解，就变成了 &lt;strong>$(X - Y)(X + Y)$&lt;/strong>。
这既然是 $N$ 的倍数，就意味着在这个乘法中的某个地方，隐藏着秘密的质数 $p$ 和 $q$。&lt;/p>
&lt;p>奇迹在此发生。
这两个质数 $p$ 和 $q$，&lt;strong>“$p$ 进入 $(X - Y)$ 的房间”、“$q$ 进入 $(X + Y)$ 的房间”&lt;/strong>，被分到不同房间的概率，在数学上是 ** 50%（二分之一）**。&lt;/p>
&lt;p>在只有质数 $p$ 进入了 $(X - Y)$ 房间的状态下，让我们来计算 $(X - Y)$ 和 $N$ 的 &lt;strong>“最大公约数（最大的共同部分）”&lt;/strong>。&lt;/p>
&lt;ul>
&lt;li>$(X - Y)$ 的内容 ＝ $p \times$ 某个数&lt;/li>
&lt;li>$N$ 的内容 ＝ $p \times q$
共同的部分只有 &lt;strong>“$p$”&lt;/strong> 吧！&lt;/li>
&lt;/ul>
&lt;p>也就是说，在计算出最大公约数的瞬间，隐藏着的质数 $p$ 就会掉落出来，密码也就被完全破译了。（※使用“辗转相除法”，即使在智能手机上也能瞬间计算出最大公约数）&lt;/p>
&lt;p>&lt;strong>【小专栏：为什么是平方？三次方或两倍不行吗？】&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>如果是“$2X - 2Y$”，就会变成 $2(X - Y)$，因为只有一个房间，所以无法分离出质数。如果是“$X^3 - Y^3$”，房间的大小会变得不平衡，计算量会无谓地增加。为了将质数分离成两个，能优美地分成两个房间的“平方”性价比最高。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="第2章如何寻找x和y收集质数卡片的拼图">第2章：如何寻找X和Y？“收集质数卡片的拼图”
&lt;/h2>&lt;p>目标已经明确。然而，即使盲目地去寻找“余数相同的 $X^2$ 和 $Y^2$”，直到宇宙寿命结束也找不到。
于是，数学家们想出了一个极其天才的方法，称为 &lt;strong>“收集质数卡片的拼图”&lt;/strong>。&lt;/p>
&lt;h3 id="step-1用筛子只收集沙金平滑数">Step 1：用筛子只收集沙金（平滑数）
&lt;/h3>&lt;p>首先，准备一个随意的数字 $Z$，计算其平方后除以 $N$ 的余数 $W$。
（$Z^2 = W$ 的余数世界）&lt;/p>
&lt;p>将得到的余数 $W$ 进行质因数分解。这里，只有当出现 &lt;strong>“仅由 2, 3, 5, 7 等小质数组成的 $W$”&lt;/strong> 时，才将该式子作为“中奖卡片”保留下来；如果混杂了大的质数就丢掉。
这就好比在河里用筛子把大石头过滤掉，只收集沙金一样的作业。&lt;/p>
&lt;h3 id="step-2全部变成偶数个的拼图">Step 2：全部变成“偶数个”的拼图
&lt;/h3>&lt;p>例如，假设收集到了以下 3 张沙金卡片：&lt;/p>
&lt;ul>
&lt;li>卡片A： $Z_1^2 = 2^3 \times 3^1$&lt;/li>
&lt;li>卡片B： $Z_2^2 = 2^1 \times 5^1$&lt;/li>
&lt;li>卡片C： $Z_3^2 = 3^1 \times 5^1$&lt;/li>
&lt;/ul>
&lt;p>我们把它们全部相乘看看。
右侧变成 $(2^3 \times 3^1) \times (2^1 \times 5^1) \times (3^1 \times 5^1)$，
整理后变成 &lt;strong>“$2^4 \times 3^2 \times 5^2$”&lt;/strong>。&lt;/p>
&lt;p>不可思议的是，质数的个数变成了“4个、2个、2个”，&lt;strong>全部都是偶数个&lt;/strong>！
全部都是偶数个，意味着把整体的个数减半，就会变成“某个数的平方”。
也就是说，$(2^2 \times 3^1 \times 5^1)^2 = (60)^2$。&lt;/p>
&lt;p>左侧是 $(Z_1 \times Z_2 \times Z_3)^2$，这样一来，终于
&lt;strong>$X = (Z_1 \times Z_2 \times Z_3)$&lt;/strong>
&lt;strong>$Y = 60$&lt;/strong>
这组期待已久的“$X^2 = Y^2$”就完成了！&lt;/p>
&lt;p>对于计算机来说，计算质数个数是“偶数还是奇数（0还是1）”的拼图是它非常擅长的，所以用这种方法能高速地找到 $X$ 和 $Y$。&lt;/p>
&lt;hr>
&lt;h2 id="第3章阻挡在前的绝望之墙">第3章：阻挡在前的绝望之墙
&lt;/h2>&lt;p>这样就能解开任何密码了！……正当这么想时，大问题发生了。
如果密码数字 $N$ 在“100位”左右，用这个方法（称为二次筛选法）还能解开；但如果 $N$ 变成“200位、300位”，计算途中出现的 $W$ 就会变得太大。&lt;/p>
&lt;p>数字太大的话，“仅由小质数组成的数（沙金）”就会彻底不再出现。这会变得比在沙漠里找隐形眼镜还难，完全收集不到用来解开拼图的卡片。&lt;/p>
&lt;p>在这里，人类的终极武器 &lt;strong>“一般数域筛选法（GNFS）”&lt;/strong> 终于登场了。&lt;/p>
&lt;hr>
&lt;h2 id="第4章人类最强的点子创造两个世界">第4章：人类最强的点子，创造“两个世界”
&lt;/h2>&lt;p>GNFS 的天才构想是：&lt;strong>“因为只在现实世界里计算，所以数字才会变大。那么，就创造一个使用多项式（代数式）的『里世界』，把计算的负担分散成两份吧。”&lt;/strong>&lt;/p>
&lt;h3 id="代数式的魔法">代数式的魔法
&lt;/h3>&lt;p>GNFS 利用一个基准数 $m$，将巨大的数字 $N$ 转换为代数式。
例如，如果 $N=100$，设 $m=4$，则 $100 = 4^3 + 2(4^2) + 4$。
使用字母 $x$，将其变为 &lt;strong>$f(x) = x^3 + 2x^2 + x$&lt;/strong> 这样一个式子（里世界）。&lt;/p>
&lt;p>这个式子有趣的地方在于，它具有 &lt;strong>“只要将 $m$（上例中是4）代入字母 $x$，就随时能穿越回到现实的数字 $N$”&lt;/strong> 这一性质。&lt;/p>
&lt;h3 id="在两个世界同时寻找沙金">在两个世界同时寻找沙金
&lt;/h3>&lt;p>GNFS 会制造许多随意的整数对 $(a, b)$，并同时进行以下两个计算：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>现实世界&lt;/strong>： $a - b \times m$&lt;/li>
&lt;li>&lt;strong>代数式世界&lt;/strong>： 用代数式的规则计算出的 $a - b \times x$ 的值&lt;/li>
&lt;/ol>
&lt;p>通过将问题分为两个世界，所处理的数字尺寸就会剧烈减小（变轻）。这就像是把一块巨岩劈成两半，变成易于处理的石块的感觉。&lt;/p>
&lt;p>然后，只有当 &lt;strong>“在现实世界和代数式世界中，两边都『仅由小质数组成（沙金）』”&lt;/strong> 时，才用筛子把这种奇迹般的数对 $(a, b)$ 筛选出来并收集。这就是“数域筛选法”这个名字的由来。&lt;/p>
&lt;h3 id="密码终于被破译的瞬间">密码终于被破译的瞬间
&lt;/h3>&lt;p>当从两个世界收集到数千万张“沙金卡片”后，就利用超级计算机庞大的矩阵计算，找出在第2章做过的“质数个数全部变成偶数的组合”。&lt;/p>
&lt;p>找到组合后：&lt;/p>
&lt;ul>
&lt;li>将在现实世界中形成的平方数设为 &lt;strong>$X^2$&lt;/strong>&lt;/li>
&lt;li>将在代数式世界中形成的平方代数式设为 &lt;strong>$Y(x)^2$&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>最后，将 $m$ 代入代数式 $Y(x)$ 的 $x$ 中，使其穿越到现实世界并汇合。
于是，就像数学魔法一样，&lt;strong>“$X^2$ 和 $Y^2$ 的余数相同”&lt;/strong> 的状态就严密地完成了！&lt;/p>
&lt;p>剩下的就如第1章所述，只要计算 $X - Y$ 和 $N$ 的最大公约数，坚不可摧的RSA密码就会轰然崩塌，秘密的质数就会显露出来。&lt;/p>
&lt;hr>
&lt;h2 id="结语数学永无止境">结语：数学永无止境
&lt;/h2>&lt;p>你可能会想：“太好了，用 GNFS 就能破解任何密码了吧！”
但是，RSA 密码也没有认输。目前互联网上使用的是被称为“RSA-2048（约 617 位）”的怪物般的巨大数字。&lt;/p>
&lt;p>不管 GNFS 作为人类最强算法有多厉害，据说仅仅是解开 270 位数（RSA-270），即使把全世界的计算机连接起来，也需要几千年、几万年。就目前而言，我们的 LINE 和银行数据是安全的。&lt;/p>
&lt;p>然而，如果出现了 &lt;strong>“无论多巨大的数字，都能瞬间找到 $X$ 和 $Y$ 的魔法”&lt;/strong>，那会怎么样呢？
其实，最接近这种魔法的存在就是目前正在开发中的 &lt;strong>“量子计算机（Shor 算法）”&lt;/strong>。在数学上已经证明，如果利用量子力学的波动性质，就能无视麻烦的卡片收集拼图，一击命中答案。&lt;/p>
&lt;p>制造密码的人（防御）与制造破解密码算法的人（攻击）之间无止境的智慧较量。
当你知道初中学到的“质因数分解”和“代数式”，其实是活跃在世界安全最前线激烈交锋的武器时，是不是觉得数学课稍微变得有趣了一点呢？&lt;/p>
&lt;p>发现未来最强算法的，也许就是正在读这篇文章的你！&lt;/p>
&lt;hr>
&lt;p>&lt;em>(※本文是为了向初中生概念化地展示密码破译的数学魅力而写的。实际的 GNFS 使用了代数域的理想类群、同态映射等高级大学数学知识进行严密计算。)&lt;/em>&lt;/p></description></item></channel></rss>