1985 - Blum–Micali 偽隨機產生器#
案件摘要#
1985 年,Manuel Blum 與 Silvio Micali 發表《How to Generate Cryptographically Strong Sequences of Pseudorandom Bits》:如果單向函數存在,就能用少量真隨機種子( \(O(\log n)\) 位元)產生任何多項式時間演算法都無法區別的偽隨機序列。這是計算隨機性理論的奠基之作:第一次給「偽隨機」一個嚴格定義,並證明偽隨機性與密碼學(單向函數)等價。
前因 -- 為什麼會有這個案子#
隨機算法(Miller–Rabin 等)需要真隨機位元,但電腦只有偽隨機數產生器(PRNG)——線性同餘法等「看起來隨機」。問題:演算法的機率分析還成立嗎? 若敵人(或問題實例)能利用 PRNG 的規律,錯誤率分析就崩潰。Blum–Micali 的問題:能否證明某種 PRNG 「足夠隨機」——隨機到任何多項式時間演算法都分不出真假?
線索與推理 -- 數學式、程式、理論#
單向函數#
定義:函數 \(f\) 是單向的,若 \(f\) 多項式時間可計算,但對任意多項式時間演算法 \(A\) :
容易算,難逆推。範例:離散對數—— \(f(x) = g^x \bmod p\) ( \(p\) 質數),算 \(f\) 快,逆推 \(x\) 被認為難。
Blum–Micali 產生器#
從種子 \(s_0 \in \mathbb{Z}_p^*\) 出發,迭代:
每步輸出一位元:
定理:若離散對數難,則序列 \(b_1 b_2 \dots b_m\) 通過一切多項式時間統計檢驗——任何多項式時間演算法無法區別它與真隨機序列,優勢可忽略。
證明骨架:預測器 → 離散對數求解器#
反證法:假設多項式時間預測器 \(A\) 能以優勢 \(\epsilon\) 預測 \(b_{i+1}\) 。構造離散對數求解器:把 \(A\) 當子程序,反覆詢問「下一個位元」,逐步重建 \(s_i\) 的最高位元——由 \(b_i\) 判定 \(s_i \in [0, p/2)\) 或 \([p/2, p)\) ,二分搜尋 \(\log p\) 步重建 \(s_0\) 。這違反單向性。 \(\blacksquare\)
偵探筆記:這個「預測器 → 反轉演算法」的歸約成為密碼學證明的標準模式:任何能看出規律的演算法,都能被反轉成破解單向函數的演算法。Yao (1982) 把它一般化為「下一個位元測試」(next-bit test):通過一切統計檢驗 ⟺ 下一個位元不可預測。
Yao 的一般化 (1982)#
Yao 證明:單向函數存在 ⟺ 強偽隨機產生器( stretch \(n \to n+1\) 以上)存在。並給出:
Håstad–Impagliazzo–Levin–Lerman(HILL, 1999)完成最後一步:一般單向函數(不需置換)足以構造 PRG。偽隨機性 = 密碼學,兩者等價。
程式碼:Blum–Micali 骨架#
def blum_micali(seed, p, g, n_bits):
"""s_{i+1} = g^{s_i} mod p;輸出最高位元方向"""
s, bits = seed, []
for _ in range(n_bits):
s = pow(g, s, p)
bits.append(1 if s < p // 2 else 0)
return bits
p = 2**61 - 1 # Mersenne 質數
g = 3
bits = blum_micali(12345, p, g, 10000)
ones = sum(bits) / len(bits)
print(f"1 的比例 = {ones:.3f}") # ≈ 0.5:統計上像真隨機
# 安全性依賴:離散對數難(若有人能預測下一個位元,就能解離散對數)
為什麼重要:去隨機化的種子#
Blum–Micali 的深遠意義:隨機算法只需 \(O(\log n)\) 位真隨機種子——若 PRG 能拉伸到多項式長度,隨機算法(BPP)就能被確定性模擬(窮舉所有種子):
這條線在 Impagliazzo–Wigderson (1997) 達到頂點(見 1997-ImpagliazzoWigderson去隨機化.md)。
結案 -- 後果與影響#
- 現代密碼學的基礎:串流加密(RC4 前身、ChaCha20)、金鑰產生、Nonce 生成——一切密碼學隨機性都建立在「單向函數 → PRG」上。
- 計算隨機性理論:BPP 與 PRG 的關係、去隨機化綱領、HILL 定理。
- Yao 的下一個位元測試:密碼學證明的標準工具。
- 實務警示:2012 年 Debian OpenSSL 弱隨機事件、區塊鏈私鑰重用攻擊——偽隨機性不足的災難。
關鍵人物與文獻#
- Manuel Blum(1938–):圖靈獎 1995(計算複雜度)
- Silvio Micali(1954–):圖靈獎 2012(密碼學)
- Blum & Micali: How to Generate Cryptographically Strong Sequences... (1985, SIAM J. Comput.)
- Andrew Yao:Theory and Applications of Trapdoor Functions (1982)
- Håstad, Impagliazzo, Levin, Luby:HILL 定理 (1999)
- 交叉參照:
1985-Yao計算隨機性.md、1997-ImpagliazzoWigderson去隨機化.md、../計算理論/README.md