1994 - Shor 演算法#
案件摘要#
1994 年,Bell 實驗室的 Peter Shor 發表《Algorithms for Quantum Computation: Discrete Logarithms and Factoring:量子電腦可以在多項式時間內分解大數與解離散對數——RSA、Diffie–Hellman、ElGamal、ECC 全部被判死刑**。這是密碼學史的地震:所有現代公鑰密碼的難解假設在量子模型下失效,催生了後量子密碼學(見 2017-後量子密碼學.md)。Shor 的演算法也是量子計算從「玩具」變成「國安議題」的分水嶺。
前因 -- 為什麼會有這個案子#
1994 年量子計算的狀態:Deutsch (1985) 的量子圖靈機、Feynman (1982) 的量子模擬構想、Deutsch–Jozsa (1992) 與 Simon (1994) 的早期量子算法——都是「量子快於經典」的示範,但沒有實用價值。Shor 的問題:量子電腦能否解決一個「重要問題」?
RSA 的安全依賴大數分解難(見 1977-RSA.md);DH/ElGamal 依賴離散對數難(見 1976-DiffieHellman金鑰交換.md)。經典計算下這些問題被認為難(次指數但不可行)——若量子多項式時間可解,密碼學的地基崩塌。
線索與推理 -- 數學式、程式、理論#
關鍵:週期性與傅立葉#
Shor 的洞察:分解與離散對數都可以化為找函數的週期:
分解化為週期:隨機選 \(a\) ,函數 \(f(x) = a^x \bmod n\) 是週期函數(週期 \(r\) 使 \(a^r \equiv 1 \pmod n\) )。找到 \(r\) (偶數且 \(a^{r/2} \ne -1\) )後:
—— \(n\) 的因數出現在 \(\gcd(a^{r/2} \pm 1, n)\) 中!分解問題化為找 \(f\) 的週期。
找週期是量子電腦的強項:經典計算找 \(f\) 的週期需要 \(O(n)\) 次求值;量子計算用量子傅立葉變換(QFT)在疊加態上一次求值全部, \(O(\log^2 n)\) 步。
Shor 演算法#
1. 隨機選 a,gcd(a, n) != 1 則已得因數(機率極小)
2. 準備疊加態:1/sqrt(q) * Σ_x |x⟩|0⟩
3. 計算 f(x) = a^x mod n(量子求冪):|x⟩|a^x mod n⟩
4. 量子傅立葉變換(QFT)於第一暫存器
5. 測量:得週期 r 的近似(連分數還原)
6. gcd(a^{r/2} ± 1, n) —— 因數!
複雜度: \(O((\log n)^3)\) ——多項式時間!
對照:經典數域篩法 \(\exp(O(\sqrt{\log n \log\log n}))\) ——次指數。2048 位元 RSA:經典需數十億年,量子(足夠大的電腦)需數小時。
量子傅立葉變換#
QFT 是經典 DFT 的量子版:
量子加速的本質:經典 FFT 是 \(O(N \log N)\) ( \(N = 2^n\) 輸入),QFT 只用 \(O(n^2)\) 個閘——因為疊加態天然包含全部輸入,QFT 作用於整個疊加。但測量只得到一個樣本——需要疊加 + 週期性 + 連分數的配合才能提取週期。
偵探筆記:Shor 的推理鏈:分解 → 週期性 → 疊加態全體求值 → QFT 提取週期 → GCD 得因數。量子加速不來自「並行試所有答案」,而來自「週期函數的傅立葉結構 + 疊加態的同時求值」——這個洞見與 Simon 演算法(1994,Shor 的直接前身)一脈相承。
Grover 演算法(1996)#
另一個量子算法(Shor 的補充):無結構搜尋的平方加速——
密碼學影響:對稱密碼的金鑰搜尋(AES-128 的 \(2^{128}\) → 量子的 \(2^{64}\) )——不是死刑,是金鑰長度加倍(AES-256 足夠)。與 Shor 的死刑(公鑰密碼)形成對照。
程式碼:Shor 演算法的經典模擬(小數)#
import random, math
def shor_classic(n):
"""小 n 的 Shor 演算法(經典部分模擬:量子週期查找用暴力代替)"""
while True:
a = random.randint(2, n - 1)
g = math.gcd(a, n)
if g != 1:
return g, n // g # 直接得因數
# 找 f(x) = a^x mod n 的週期 r(量子部分:此處暴力模擬)
x, seen = 1, {}
r = 0
for i in range(1, n):
x = x * a % n
if x in seen:
r = i - seen[x] # 週期
break
seen[x] = i
if r % 2 == 1: continue # 週期須偶數
if pow(a, r // 2, n) == n - 1: continue # a^{r/2} != -1
f1 = math.gcd(pow(a, r//2, n) - 1, n)
f2 = math.gcd(pow(a, r//2, n) + 1, n)
if 1 < f1 < n:
return f1, n // f1
if 1 < f2 < n:
return f2, n // f2
random.seed(42)
for n in [15, 21, 35, 91]:
print(f"分解 {n} = {shor_classic(n)}")
# 量子版把「找週期」從 O(n) 降到 O(log^2 n)——多項式時間分解
# Grover 的平方加速:AES-128 的金鑰搜尋 2^128 -> 2^64
print("Grover 演算法:無結構搜尋 O(N) -> O(sqrt(N))")
結案 -- 後果與影響#
- 密碼學的地震:RSA、DH、ElGamal、ECC 的難解假設在量子下失效——現代公鑰密碼需要後量子替代。
- 後量子密碼學:格密碼(LWE)、編碼密碼、多變量密碼——2017 年 NIST 競賽(見
2017-後量子密碼學.md)。 - 量子計算的國安地位:1994 年後量子計算從學術玩具變成情報機構的戰略投資——「先存後解」(harvest now, decrypt later)的威脅。
- 量子計算的譜系:Deutsch–Jozsa (1992) → Simon (1994) → Shor (1994) → Grover (1996)——量子算法的黃金年代。
- 理論意義:BQP(量子多項式時間)與 BPP 的關係——量子計算未推翻 Church–Turing 命題,但改變了複雜度(見
../計算理論/README.md)。 - 現實進度:2024 年最快的量子電腦約千級物理位元——分解 RSA-2048 需數百萬級糾錯位元,尚遠。但威脅是確定的方向。
關鍵人物與文獻#
- Peter Shor(1959–):Algorithms for Quantum Computation... (1994, FOCS);Shor 演算法
- David Deutsch(1953–):量子圖靈機 (1985)
- Daniel Simon:Simon 演算法 (1994)——Shor 的直接前身
- Lov Grover:Grover 演算法 (1996)
- Feynman:量子模擬構想 (1982)
- 交叉參照:
1977-RSA.md、1976-DiffieHellman金鑰交換.md、2017-後量子密碼學.md、../計算理論/README.md