Featured image of post 破解密碼的人類最強數學「一般數體篩法(GNFS)」淺顯解說

破解密碼的人類最強數學「一般數體篩法(GNFS)」淺顯解說

解說破解保護網際網路通訊的 RSA 加密之人類最強數學「一般數體篩法(GNFS)」的機制。省略專業術語,逼近僅用國中數學知識就能理解的如魔法般的演算法手法。

什麼是打破網際網路加密的人類最強數學「一般數體篩法(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\),有 ** 50%(二分之一) ** 的數學機率,會分開進入不同的房間: ** 「\(p\) 進入 \((X - Y)\) 的房間」和「\(q\) 進入 \((X + Y)\) 的房間」 ** 。

在只有質數 \(p\) 進入 \((X - Y)\) 房間的狀態下,讓我們計算 \((X - Y)\) 和 \(N\) 的 ** 「最大公因數(共通的最大零件)」 ** 。

  • \((X - Y)\) 的內容 = \(p \times\) 某個數字
  • \(N\) 的內容 = \(p \times q\) 共通的零件只有 ** 「\(p\)」 ** !

也就是說,在計算出最大公因數的瞬間,隱藏的質數 \(p\) 就會掉出來,密碼就被完全破解了。(※最大公因數只要使用「輾轉相除法」,用手機也能瞬間計算出來)

** 【小專欄:為什麼是 2 次方?3 次方或 2 倍不行嗎?】 **

如果是「\(2X - 2Y\)」會變成 \(2(X - Y)\),因為只有一個房間,所以無法將質數分開。如果是「\(X^3 - Y^3\)」,房間的大小會變得不平衡,計算會變得不必要的繁重。為了將質數漂亮地分開到兩個房間,「2 次方」是成本效益最高的。


第 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\) ** 這個算式(裏世界)。

這個算式有趣的地方在於,它具有 ** 「只要將字母 \(x\) 代入 \(m\)(在上面的例子中是 4),隨時都能瞬間移動回到現實數字 \(N\)」 ** 的特性。

在兩個世界中同時尋找沙金

GNFS 製造出許多隨機的整數對 \((a, b)\),並同時進行以下兩個計算:

  1. ** 現實世界 ** : \(a - b \times m\)
  2. ** 代數式的世界 ** : 依照代數式規則計算 \(a - b \times x\) 的值

藉由將問題分成兩個世界,處理的數字大小會戲劇性地變小(變輕)。這就像是把巨大的岩石劈成兩半,變成容易處理的石塊一樣的概念。

然後,我們用篩子過濾,只收集那些在 ** 「現實世界和代數式的世界中,兩者都是『只由小質數組成(沙金)』」 ** 的奇蹟整數對 \((a, b)\)。這就是「數體篩法」名稱的由來。

密碼終於被破解的瞬間

當從兩個世界收集到數千萬張「沙金卡片」後,就會使用超級電腦的巨大矩陣計算,找出在第 2 章做過的「質數個數全部變成偶數的組合」。

找到組合後,

  • 將現實世界中產生的平方數設為 ** \(X^2\) **
  • 將代數式世界中產生的平方算式設為 ** \(Y(x)^2\) **

最後,將代數式 \(Y(x)\) 中的 \(x\) 代入 \(m\),使其瞬間移動到現實世界並會合。 這樣一來,宛如數學魔法般, ** 「\(X^2\) 和 \(Y^2\) 的餘數相同」 ** 的狀態就嚴格地完成了!

接下來只要按照第 1 章的說明,計算 \(X - Y\) 和 \(N\) 的最大公因數,堅不可摧的 RSA 加密就會應聲瓦解,秘密質數也將隨之現身。


結語:數學永無止境

你可能會想:「太好了,只要用 GNFS 就能破解任何密碼了吧!」。 然而,RSA 加密也沒有認輸。目前網際網路上使用的是被稱為「RSA-2048(約 617 位數)」這種怪物級的巨大數字。

儘管 GNFS 號稱是人類最強的演算法,但要解開 270 位數(RSA-270),據說即使將全世界的電腦連線在一起,也需要數千年甚至數萬年。就目前而言,我們的 LINE 或銀行資料還是安全的。

不過,如果出現了 ** 「能瞬間找出任何巨大數字 \(X\) 和 \(Y\) 的魔法」 ** 會怎麼樣呢? 事實上,最接近這個存在的,就是目前正在開發的 ** 「量子電腦(Shor 演算法)」 ** 。數學上已經證明,只要利用量子力學波的特性,就能無視麻煩的卡片收集拼圖,一次就抽出正確答案。

製造密碼的人(防禦)與製造破解密碼演算法的人(攻擊)之間,無止盡的鬥智。 當你知道國中學到的「質因數分解」和「代數式」,其實是在世界資安最前線激烈交鋒的武器時,是否覺得數學課變得稍微有趣一點了呢?

發現未來最強演算法的人,或許就是正在讀這篇文章的你!


(※本文為了讓中學生能理解,將密碼破解的數學魅力概念化。實際的 GNFS 是使用了代數體的理想類群、同態映射等高等大學數學來進行嚴格計算的)

comments powered by Disqus