破解互联网密码的人类最强数学“一般数域筛选法(GNFS)”是什么?
我们每天使用的互联网,无论是LINE消息、YouTube还是在Amazon上购物,所有的通信都受到“密码”的保护。 目前,全世界使用最广泛的密码代表就是“RSA密码”。
RSA密码防御的核心非常简单。那就是利用了 “即使是计算机也无法解开巨大数字的质因数分解” 这一数学性质。 例如,如果是“15”,我们很快就能知道是“3 × 5”,但如果这变成一个“270位的数字”,即使把全世界的超级计算机联合起来,也需要几亿年才能解开。
然而,数学家们也没有沉默。为了打破这个坚不可摧的密码,人类创造出了一种如同魔法般的算法(计算步骤)——“一般数域筛选法(GNFS:General Number Field Sieve)”。
在这篇文章中,我们将不使用任何专业术语,仅凭 初中学的数学知识(质因数分解、代数式、最大公约数),分步为您完全解析这个“人类最强算法”破解密码的奥秘!
第1章:密码破译的目标是“初三的公式”
面对巨大的质因数分解,最大的必杀技就是初三年级学的这个公式。
$X^2 - Y^2 = (X + Y)(X - Y)$
你可能会想:“哎,这么基础的公式就能破解密码吗?”但正是这个公式,是解开一切的大师级钥匙。
破解密码的最大目标,是对于一个巨大的数字 $N$, 找到 “将 $X^2$ 和 $Y^2$ 除以 $N$ 后的余数相同的数字($X$ 和 $Y$)”。
为什么“余数相同”就能解开密码?
假设有两个数字 $X^2$ 和 $Y^2$,“除以 $N$ 的余数相同”。 余数相同意味着,做减法得到的“$X^2 - Y^2$”,必定能被 $N$ 整除(成为 $N$ 的倍数),这是一个法则。
这里,假设用于密码的巨大数字 $N$ 是由两个秘密的质数($p$ 和 $q$)相乘得到的($N = p \times q$)。
将 $X^2 - Y^2$ 进行因式分解,就变成了 $(X - Y)(X + Y)$。 这既然是 $N$ 的倍数,就意味着在这个乘法中的某个地方,隐藏着秘密的质数 $p$ 和 $q$。
奇迹在此发生。 这两个质数 $p$ 和 $q$,“$p$ 进入 $(X - Y)$ 的房间”、“$q$ 进入 $(X + Y)$ 的房间”,被分到不同房间的概率,在数学上是 ** 50%(二分之一)**。
在只有质数 $p$ 进入了 $(X - Y)$ 房间的状态下,让我们来计算 $(X - Y)$ 和 $N$ 的 “最大公约数(最大的共同部分)”。
- $(X - Y)$ 的内容 = $p \times$ 某个数
- $N$ 的内容 = $p \times q$ 共同的部分只有 “$p$” 吧!
也就是说,在计算出最大公约数的瞬间,隐藏着的质数 $p$ 就会掉落出来,密码也就被完全破译了。(※使用“辗转相除法”,即使在智能手机上也能瞬间计算出最大公约数)
【小专栏:为什么是平方?三次方或两倍不行吗?】
如果是“$2X - 2Y$”,就会变成 $2(X - Y)$,因为只有一个房间,所以无法分离出质数。如果是“$X^3 - Y^3$”,房间的大小会变得不平衡,计算量会无谓地增加。为了将质数分离成两个,能优美地分成两个房间的“平方”性价比最高。
第2章:如何寻找X和Y?“收集质数卡片的拼图”
目标已经明确。然而,即使盲目地去寻找“余数相同的 $X^2$ 和 $Y^2$”,直到宇宙寿命结束也找不到。 于是,数学家们想出了一个极其天才的方法,称为 “收集质数卡片的拼图”。
Step 1:用筛子只收集沙金(平滑数)
首先,准备一个随意的数字 $Z$,计算其平方后除以 $N$ 的余数 $W$。 ($Z^2 = W$ 的余数世界)
将得到的余数 $W$ 进行质因数分解。这里,只有当出现 “仅由 2, 3, 5, 7 等小质数组成的 $W$” 时,才将该式子作为“中奖卡片”保留下来;如果混杂了大的质数就丢掉。 这就好比在河里用筛子把大石头过滤掉,只收集沙金一样的作业。
Step 2:全部变成“偶数个”的拼图
例如,假设收集到了以下 3 张沙金卡片:
- 卡片A: $Z_1^2 = 2^3 \times 3^1$
- 卡片B: $Z_2^2 = 2^1 \times 5^1$
- 卡片C: $Z_3^2 = 3^1 \times 5^1$
我们把它们全部相乘看看。 右侧变成 $(2^3 \times 3^1) \times (2^1 \times 5^1) \times (3^1 \times 5^1)$, 整理后变成 “$2^4 \times 3^2 \times 5^2$”。
不可思议的是,质数的个数变成了“4个、2个、2个”,全部都是偶数个! 全部都是偶数个,意味着把整体的个数减半,就会变成“某个数的平方”。 也就是说,$(2^2 \times 3^1 \times 5^1)^2 = (60)^2$。
左侧是 $(Z_1 \times Z_2 \times Z_3)^2$,这样一来,终于 $X = (Z_1 \times Z_2 \times Z_3)$ $Y = 60$ 这组期待已久的“$X^2 = Y^2$”就完成了!
对于计算机来说,计算质数个数是“偶数还是奇数(0还是1)”的拼图是它非常擅长的,所以用这种方法能高速地找到 $X$ 和 $Y$。
第3章:阻挡在前的绝望之墙
这样就能解开任何密码了!……正当这么想时,大问题发生了。 如果密码数字 $N$ 在“100位”左右,用这个方法(称为二次筛选法)还能解开;但如果 $N$ 变成“200位、300位”,计算途中出现的 $W$ 就会变得太大。
数字太大的话,“仅由小质数组成的数(沙金)”就会彻底不再出现。这会变得比在沙漠里找隐形眼镜还难,完全收集不到用来解开拼图的卡片。
在这里,人类的终极武器 “一般数域筛选法(GNFS)” 终于登场了。
第4章:人类最强的点子,创造“两个世界”
GNFS 的天才构想是:“因为只在现实世界里计算,所以数字才会变大。那么,就创造一个使用多项式(代数式)的『里世界』,把计算的负担分散成两份吧。”
代数式的魔法
GNFS 利用一个基准数 $m$,将巨大的数字 $N$ 转换为代数式。 例如,如果 $N=100$,设 $m=4$,则 $100 = 4^3 + 2(4^2) + 4$。 使用字母 $x$,将其变为 $f(x) = x^3 + 2x^2 + x$ 这样一个式子(里世界)。
这个式子有趣的地方在于,它具有 “只要将 $m$(上例中是4)代入字母 $x$,就随时能穿越回到现实的数字 $N$” 这一性质。
在两个世界同时寻找沙金
GNFS 会制造许多随意的整数对 $(a, b)$,并同时进行以下两个计算:
- 现实世界: $a - b \times m$
- 代数式世界: 用代数式的规则计算出的 $a - b \times x$ 的值
通过将问题分为两个世界,所处理的数字尺寸就会剧烈减小(变轻)。这就像是把一块巨岩劈成两半,变成易于处理的石块的感觉。
然后,只有当 “在现实世界和代数式世界中,两边都『仅由小质数组成(沙金)』” 时,才用筛子把这种奇迹般的数对 $(a, b)$ 筛选出来并收集。这就是“数域筛选法”这个名字的由来。
密码终于被破译的瞬间
当从两个世界收集到数千万张“沙金卡片”后,就利用超级计算机庞大的矩阵计算,找出在第2章做过的“质数个数全部变成偶数的组合”。
找到组合后:
- 将在现实世界中形成的平方数设为 $X^2$
- 将在代数式世界中形成的平方代数式设为 $Y(x)^2$
最后,将 $m$ 代入代数式 $Y(x)$ 的 $x$ 中,使其穿越到现实世界并汇合。 于是,就像数学魔法一样,“$X^2$ 和 $Y^2$ 的余数相同” 的状态就严密地完成了!
剩下的就如第1章所述,只要计算 $X - Y$ 和 $N$ 的最大公约数,坚不可摧的RSA密码就会轰然崩塌,秘密的质数就会显露出来。
结语:数学永无止境
你可能会想:“太好了,用 GNFS 就能破解任何密码了吧!” 但是,RSA 密码也没有认输。目前互联网上使用的是被称为“RSA-2048(约 617 位)”的怪物般的巨大数字。
不管 GNFS 作为人类最强算法有多厉害,据说仅仅是解开 270 位数(RSA-270),即使把全世界的计算机连接起来,也需要几千年、几万年。就目前而言,我们的 LINE 和银行数据是安全的。
然而,如果出现了 “无论多巨大的数字,都能瞬间找到 $X$ 和 $Y$ 的魔法”,那会怎么样呢? 其实,最接近这种魔法的存在就是目前正在开发中的 “量子计算机(Shor 算法)”。在数学上已经证明,如果利用量子力学的波动性质,就能无视麻烦的卡片收集拼图,一击命中答案。
制造密码的人(防御)与制造破解密码算法的人(攻击)之间无止境的智慧较量。 当你知道初中学到的“质因数分解”和“代数式”,其实是活跃在世界安全最前线激烈交锋的武器时,是不是觉得数学课稍微变得有趣了一点呢?
发现未来最强算法的,也许就是正在读这篇文章的你!
(※本文是为了向初中生概念化地展示密码破译的数学魅力而写的。实际的 GNFS 使用了代数域的理想类群、同态映射等高级大学数学知识进行严密计算。)
