中文 English

EnigmaBenchmark

二戰德國頂級密碼系統 × 你書桌上這顆 GPU

當年十萬人、一整座秘密城市、為此誕生的第一台電子電腦;現在,你按一下 Start,不到一秒鐘。

這是什麼?

EnigmaBenchmark 用 四種不同的運算路徑去暴力破解二戰德軍最著名的幾款密碼機。你會在同一個視窗裡直接看到:

重點不是「秀 benchmark 數字」,而是把同一件有歷史份量的計算工作放在四個硬體選項上實際跑一遍,讓你看到:

同一段 SkSL shader,在 GPU 上 0.2 秒搞定的事情, 單核 C# 要 11 秒

這是 AprNes CRT 為什麼非走 GPU 不可的具象化。


六場密碼歷史對決

1917 Jan · Auswärtiges Amt Berlin → Mexico City

Zimmermann Telegram / Code 0075 已實作

1917 年 1 月 16 日,德國外交秘書 Arthur Zimmermann 發給駐墨西哥大使 Heinrich von Eckardt 一封電報。內容:若美國參戰,德國將資助墨西哥對美開戰, 歸還德州、新墨西哥州、亞利桑那州。這是一戰情報戰的最大單次翻盤。

密碼結構

為什麼 codebook 不能被暴力破解

幾千個詞 × 多個 code group variants = keyspace 超出 10⁴⁰⁰ 量級, 完全無法窮舉。能破是因為 Room 40 已經累積數年德國外交電報, 靠重複片段(「AN SEINER EXZELLENZ」、「ZIMMERMANN」簽名)慢慢拼出 codebook 的局部。這是情報數量與耐心的勝利,不是計算力的勝利。

本專案的實作

簡化為一份約 70 詞的 pseudo-0075 codebook,把 Zimmermann 式電報編為 4 位數 code group。cracker 模擬 Room 40 方法:給它幾則「已破解」的前期電報作 crib, 單執行緒 linear pass 對齊後反推 codebook 條目,再把 target 訊息盡量解出來。 通常在毫秒級回報 70–90% 解碼率(decoded ratio)。

Keyspace = 無限(codebook 本身是金鑰) · Cracker path = crib-based dictionary recovery

這張牌的存在就是為了提醒一個冷酷事實:演算法再強,只要金鑰載體(codebook、 設定表、Kenngruppenbuch)外洩或可累積重建,整套系統崩潰。Bletchley 時代 同樣如此——擄獲的 U-Boat Wetterkurzschlüssel 比 Turing 的 Bombe 值錢得多。

1918 Mar–Jun · Kaiserliches Heer Western Front

ADFGVX 已實作

Fritz Nebel 上校 1918 年 3 月為德軍 Spring Offensive 設計。兩階段密碼, 強度理論上很高——直到 Capt. Georges Painvin(法軍 Bureau du Chiffre) 6 月 2 日破譯第一則,直接改變了戰爭走向。

加密流程

  1. Polybius 代換:6×6 格塞入 26 字母 + 10 數字, 每個明文字元 ↦ 一對 ADFGVX 字母(row, col)。 字母選 A D F G V X 是因為它們的摩斯碼彼此差異最大, 無線電傳輸錯誤率最低
  2. Columnar transposition:把代換結果寫進 keyword 下的列陣, 按 keyword 字母字典順序重排欄位,行序讀出

Painvin 的破口

雙階段密碼本應很硬,但德軍 operator 紀律鬆散——同一天、同一 keyword 下重複發送相近訊息(正式公文常用「An das Hauptquartier…」開頭)。 Painvin 用 "superimposition attack":同長度候選對齊後, 從格式化前綴統計反推 transposition 的欄序,再回推 Polybius 格內容。 三週硬操,體重掉 15 公斤。

決定性的那則訊息

"Munitionierung beschleunigen Punkt soweit nicht eingesehen auch bei Tag"
— 加速運送彈藥,即使白天也繼續

這則電報讓法軍精準預判 Montdidier–Compiègne 之間的主攻軸線,調動預備隊堵上缺口。 德軍 Spring Offensive 就此停滯。史稱「Radiogram of Victory」。

本專案的實作

Benchmark 假設 Polybius 格已知(Painvin 當年還得順帶破,難度更高), 暴力搜 transposition 的欄序。keyword 長度 8 → 40,320 個排列, 單執行緒幾秒內解出。用 26-字母 IC 評分選最優。

Keyspace = K! = 8! = 40,320 排列 · 評分 = 標準 26-bucket IC

現代的眼光看這根本不是硬仗——但 1918 年當時,這是人類首次用純統計方法 單點破掉整台外場密碼機的工程實例。Painvin 的技術路線(從重複模式反推置換結構) 後來 Rejewski、Tutte、Beurling 都走過。


三場 WWII 機械 × 電子戰

這個 benchmark 選了三款德軍最引以為豪、盟軍最頭痛、戰後才解密的密碼系統。每一個都有自己的傳奇與殤。

1932 – 1945 · Wehrmacht / Heer / Luftwaffe

Enigma M3 已實作

德軍標準三轉輪 Enigma。海陸空三軍、指揮部、外交部、情報單位——整個第三帝國的神經系統都跑在這台鐵盒子上。德國統帥部對 Enigma 的信心近乎宗教:他們到戰敗都不相信 Enigma 被破解。

機器組態

轉輪庫(Walzen)I / II / III / IV / V(Wehrmacht 五顆)
轉輪位置(Walzenlage)從 5 顆選 3 顆排列 = 5×4×3 = 60
反射器(Umkehrwalze)UKW-B 或 UKW-C
環位設定(Ringstellung)每個轉輪 A–Z,共 26³
起始位置(Grundstellung)每個轉輪 A–Z,共 26³
插線板(Steckerbrett)10 組字母對調
機械怪癖Double-step anomaly — 中輪到 notch 時,左輪、中輪同時前進

Keyspace

完整組合空間是 60 × 26³ × 26³ × 150,738,274,937,250(plugboard)≈ 1.58 × 10²⁰。 但插線板部分無法靠 IC 打分區分,實戰中戰後的 Rejewski / Turing 攻擊也是繞過它。

Benchmark 假設插線板已知(模擬 crib-based attack 或 Turing Bombe 的效果),只暴力搜 wheel order × grundstellung,這就是四個 scope 的定義:

Scope鎖定Keyspace
Quickwheel × 26³1,054,560
Normal+ 右環27,418,560
Hard+ 中環712,882,560
Extreme+ 左環(完整 wheel × pos³ × ring³)18,534,946,560

歷史

1942 Feb – 1945 · Kriegsmarine U-Boot (M4 "Shark")

Enigma M4 已實作

1942 年 2 月 1 日,德國海軍把 U-Boat 通訊升級到四轉輪 M4。Bletchley Park 瞬間瞎掉,此後 整整十個月無法解讀 U-Boat 命令。那十個月叫「Second Happy Time」,德國 U-Boat 狼群在北大西洋撕裂盟軍補給線。

歷史學者估計,那 10 個月沉了約 600 艘盟軍商船,載 3.5 百萬噸物資。如果 M4 沒被破,英國可能在 1943 年就斷糧。

M4 跟 M3 的差別

怎麼被破的

1942 年 10 月,英國驅逐艦 HMS Petard 在地中海攔截 U-559,Able Seaman Colin Grazier 和 Lieutenant Tony Fasson 跳進正在下沉的潛艇搶出了 Wetterkurzschlüssel(氣象短信碼本)。兩人隨潛艇沉沒殉職。

Bletchley 靠這本碼本在 1942 年 12 月 13 日重新破開 M4。那一天起,大西洋戰役的天平倒過來了。

1941 – 1945 · Oberkommando der Wehrmacht(最高統帥部)

Lorenz SZ42 "Tunny" — χ-wheel recovery 已實作(Colossus 第 1 階段)

Enigma 是戰術層級。Lorenz 是戰略層級——希特勒、OKW、OKH 跟前線集團軍司令之間的直接通訊。一台 Lorenz 的破譯價值超過一百則 Enigma。

機器結構(真實 SZ42b)

Lorenz SZ42(Schlüsselzusatz,「密碼附加器」)不是像 Enigma 那種單字替換機,而是電傳串流密碼

完整 keyspace(含所有 pin pattern)≈ 2501

純暴力是數學上絕對不可能的。Bletchley 不是靠算力破 Lorenz——是靠兩個天才的統計攻擊:

Bletchley 的三階段 pipeline

Lorenz 不是一口氣破掉。Tutte 把攻擊拆成三階段,每階段針對結構的一部分:

  1. Stage 1:χ-輪起始位置回復(Colossus 做的事)
    對 41 × 31 × 29 × 26 × 23 = 22,041,682 個候選,每個生成 χ stream,跟密文計算 Δ-statistic(Z ⊕ χ 的 bit 1 XOR bit 2 分佈偏差),找出最吻合「德文電傳 1+2 dottage」的那組。Colossus Mk II ~1 小時
  2. Stage 2:χ 輪 pin pattern 推導
    Stage 1 拿到 χ 起始位置後,用手工 + 統計方法反推 pin 本身(設計時才選的那組 0/1)
  3. Stage 3:ψ 與 μ 輪回復
    剝除 χ 後,殘餘 = P ⊕ ψ;Testery 的人員純手工做統計加 crib 攻擊,最終還原明文

Benchmark 對應的是哪一段?

Stage 1:χ-wheel recovery。這正是 Colossus 存在的唯一理由——Tommy Flowers 設計它就是為了在一小時內跑完這 22 M 個候選。我們的 GPU shader 在幾秒內完成同樣的工作。

χ keyspace = 41 × 31 × 29 × 26 × 23 ≈ 22,041,682 組合

為了專心比較硬體,scenario 的加密用簡化式 Z = P ⊕ χ(ψ = 0),ψ 與 μ 的完整 encryption + 解密會改變 signal 結構,把有效暴力搜尋 keyspace 壓縮成 χ₁+χ₂ pair 的 ~900 種——那就失去 GPU 秀肌肉的意義了。Colossus 當年在 Stage 1 看到的 Δ-signal 本質上跟我們 shader 看到的一樣;差別是 ψ/μ 的處理被推到 Stage 2/3 交給人。

統計 scorer

shader 每 key 候選對密文前 180 字元做一個簡化 dottage——計數「空格」(Baudot 4) 和 "E" (Baudot 1) 的出現次數。德文電傳這兩個字元合計約 29%,隨機只有 6.25%,信號強度 10σ+。GPU 粗篩後 CPU 再用 32-bucket full-text IC 重排決選,確保正解不會被噪音淹沒。

1943 – 1945 · Luftwaffe / Kriegsmarine 戰略通訊

Siemens & Halske T52e "Sturgeon" 已實作(Scalar + Parallel + SIMD + GPU 全 backend)

T52 家族最後一代、也是**整個家族裡唯一在戰時未被作戰性破解**的型號。德國空軍與海軍的戰略層級電傳—— Luftflotte 司令部、U-Boat 艦隊指揮、固定駐軍通訊。比 Enigma 戰術、又比 Lorenz 普及,夾在中間的戰略-戰術混合層級。

機器結構

完整起始位置空間 = 47·53·59·61·64·65·67·69·71·73 ≈ 8.94 × 10¹⁷ · 每日金鑰總空間 ≈ 10²⁴(含 pin pattern + switch + 起始位置 + KTF)

為什麼 T52e 「戰時未被破」

瑞典的 Arne Beurling 在 1940 年 5 月用紙筆兩週搞定 T52a,接下來三年 FRA 讀遍了所有經瑞典中繼的德軍電傳——攔截 50 萬則、解密 35 萬則。 1943 年中德國升級 T52e 加上 KTF 後,瑞典解密量**瞬間歸零**。

關鍵變化有二:

  1. H 繼電器層的加入讓 SR 變成 4-X 的 XOR 組合(T52a/d 直接用 X,有統計偏差),密文統計特性接近均勻分布
  2. KTF 開啟後 M-magnet 步進變成明文相依——depth(重複金鑰加密不同訊息)不再對齊,所有 depth-based 攻擊失效

Bletchley Park 同時期從西西里 → 利比亞鏈路攔到 T52 流量(代號 "Sturgeon"),由 Michael Crum 組攻擊,靠 operator 紀律鬆散產生的 depths 偶有突破,但從未達到 Enigma / Tunny 的規律程度。加上德國空軍有把 Sturgeon 訊息用較弱的 Enigma 重發的壞習慣,Bletchley 直接從 Enigma 拿明文就夠了——T52 的完整戰時 traffic 分析從未完成。

Benchmark 對應情境

全鍵空間 10²⁴ 暴力不可行。參考歷史 Bletchley Testery 作法:**假設已知 pin patterns、switch map、以及 10 個輪中的 6 個起始位置**(由 depths、cribs、或另一條側通道回復得到),只暴力搜尋剩下 4 個輪子(W7、W8、W9、W10,銷數 67×69×71×73)。

縮減搜索空間 = 67 × 69 × 71 × 73 = 23,951,289 ≈ 24 M 候選

這個規模與 Lorenz χ-only 的 22 M 相當,跑起來 Scalar ~9 min、Parallel ~1 min、SIMD 稍快、GPU shader ~1 s。四個 backend 都通過 24M 全搜索並正確回復金鑰。

為什麼 T52e 的 SIMD 比較複雜

T52e 每字元的核心工作有 10 次 pin 讀取 + 10 次 H/SR XOR + 32-entry 置換查表 + 10 次 M-magnet AND/NOT + 10 條輪的條件前進——比 Lorenz chi-only 每字元 5 次 XOR 多了 ~10×。 本專案 SIMD 版用 Vector128 lane-parallel(一次 4 candidate):SR 計算用 20 條 Vector128.Xor 取代 scalar SR-LUT(vector XOR 在 SIMD 裡幾乎免費,gather 反而貴);Fig9 置換表保留 LUT 形式用 5 次軟體 gather;M-magnet 與 Vernam 全部 Vector128 邏輯運算;wheel stepping 用 compare-equal-zero 做遮罩條件前進。x86 走 AVX2、ARM 走 NEON(第 2 條 JIT 選用 Vector128 的好處——一份 code 跑雙平台)。

研究文件與實作規格

T52e 正式技術規格在戰後解密一直未完整流出,我們的實作基於 NPL Donald W. Davies 1982 年內部技術備忘錄(examined Munich & Science Museum 兩台倖存機器)。Git 倉庫 docs/research-t52e/ 目錄存有完整反向工程記錄、Davies 原始 PDF、以及我們自己整理的 EN / ZH 技術報告:


破解的人們 — 電影沒拍到的故事

《The Imitation Game》把整段二戰密碼破解的榮耀幾乎都算在 Alan Turing 一個人頭上。 真實故事遠比那部電影複雜:三條獨立的攻擊鏈、四個國家、跨越十多年、 數百位數學家工程師女性操作員,共同撕開了德國「永遠安全」的密碼系統。 以下是電影沒拍到、書本沒賣到的那些人。

〇、一戰的先聲(1914–1918)

Georges Painvin (1886–1980)

法軍砲兵上尉,巴黎理工學院礦業工程師出身,業餘研究密碼學。 1914 年戰爭爆發被徵召進 Bureau du Chiffre,從此進入密碼生涯。

1918 年 6 月德軍發起 Spring Offensive,更新 ADFGVX 的 Polybius 格與 keyword, 法軍密碼組瞬間瞎掉。Painvin 關在巴黎一間辦公室三週,把兩則同日、同 keyword 的深度電文強行重疊比對,一格一格反推出 keyword 欄序與 Polybius 本身。 6 月 2 日破譯的「Radiogram of Victory」揭露德軍主攻軸線在 Montdidier–Compiègne 之間。

出關時 Painvin 體重掉 15 公斤,頭髮花白,身體徹底垮掉, 戰後他自己說:「那是一生中最痛苦的幾天,我幾乎是靠意志力在跟那疊紙筆死磕。」 戰後他婉拒留在情報界,回到工業界當鍋爐公司 Compagnie des Compteurs 的總裁, 活到 93 歲。法國 1973 年授 Grand Officer of the Legion of Honour, 1978 年美國 NSA 也公開承認他的貢獻——那時距離他破 ADFGVX 已經 60 年。

"Blinker" Hall (Admiral Sir Reginald Hall, 1870–1943)

皇家海軍情報局 (NID) 局長,Room 40 的推手與政治保護傘。 眨眼成癖(Blinker)但政治手腕極精。1917 年 Zimmermann 電報到手, Hall 面臨兩難:直接交給美國會洩漏英國竊聽美國海底電纜的事實。 他設計了墨西哥電報局偷竊版本的假故事,讓美國以為情報是 第三國意外得到,保住了 Room 40 的竊聽源。

Hall 的政治運作能力可能比 Room 40 的技術能力更重要。他對時任國務卿 Walter Page 的說服文件至今還是情報史課程的教材。

Nigel de Grey & Rev. William Montgomery (1886–1951 / 1871–1930)

Room 40 的兩位 Zimmermann 電報解譯者。de Grey 是 Heinemann 出版社編輯出身, Montgomery 是長老會牧師、基督教神學學者——兩人都不是傳統軍情報人員, 靠累積德國外交電報逐詞重建 codebook。

1917 年 1 月 17 日上午他們手上是部分解出的 Zimmermann 訊息片段—— 看到「MEXIKO」、「TEXAS」、「ARIZONA」這幾個詞時, de Grey 衝去找 Hall:「Do you want to bring America into the war?」 史上最重要的外交解碼對話之一。

兩人戰時工作 30 年後才得公開。Montgomery 1930 年過世時家屬仍不知他戰時做過什麼; de Grey 戰後繼續在 GCHQ 服務,1951 年退休。

一、波蘭人:故事真正的起點(1932–1939)

Marian Rejewski (1905–1980)

華沙大學數學系畢業,22 歲被吸收進波蘭密碼局 Biuro Szyfrów。 1932 年 12 月他做到了當時所有歐洲密碼專家都失敗的事—— 破譯 Enigma。用的不是窮舉,是置換群論:他從 Enigma 日鑰 指示碼的循環結構(他稱為 "characteristic")反推出整台機器的內部接線。

這是前無古人的數學突破。法國情報員 Gustave Bertrand 透過德國叛徒 Hans-Thilo Schmidt 提供的操作手冊只描述 Enigma 的外觀—— Rejewski 必須從雜訊般的密文指示碼反推內部每條線的接法。 他當時 27 歲。

1938 年 Rejewski 與 Henryk Zygalski、Jerzy Różycki 三人搭檔打造了 「Bomba kryptologiczna」——電機式 Enigma 破譯機, 領先英國 Bombe 整整兩年。

1939 年 7 月 25–26 日,華沙南郊 Pyry 森林秘密會議, 波蘭人把所有成果——理論、Bomba 設計圖、仿造 Enigma 實機——交給了 英法情報代表。兩個月後德國入侵波蘭。整個 Bletchley Park 的 Enigma 計畫 完全建立在波蘭人的基礎上

戰爭期間 Rejewski 流亡法國、西班牙、葡萄牙、最後到英國空軍做一般通訊工作。 英國從沒邀請他加入 Bletchley——怕盟友人員洩密。戰後他 回到波蘭,在共產政權下低調當保險公司會計,直到 1967 年才公開談及戰時工作。 英國官方直到 1976 年才正式承認波蘭人的貢獻。Rejewski 1980 年在華沙去世, 終生未獲得他應得的榮譽。

Jerzy Różycki (1909–1942)

Rejewski 的同事,發明「clock method」——從 indicator 推 Enigma 右輪身份的技巧。1942 年 1 月 9 日他搭乘的客輪 Lamoricière 在地中海失蹤,享年 32 歲。戰前破譯三巨頭裡唯一沒活到戰後的。

Henryk Zygalski (1908–1978)

發明「Zygalski sheets」——打孔穿疊的紙板,疊合後能 幾何式消去不可能的 rotor 組合。戰後留在英國當數學老師,從沒被英國政府 正式致謝過。

二、Bletchley 的內圈(1939–1945)

Alan Turing (1912–1954)

Hut 8 首席密碼分析師,King's College 研究員。最重要的貢獻是把 Rejewski 的 Bomba 邏輯重新架構成英國 Bombe——並加上 「crib attack」(猜明文含有「wetter」「eins」等常見字), 破解速度從「週」壓到「小時」。

1942 年 M4 Shark 出現後,Turing 與 Joan Clarke、Hugh Alexander 組隊 重新攻入 U-Boat 通訊。戰後他設計 ACE(世界最早的儲存程式電腦之一), 寫下現代計算理論與人工智慧奠基文獻。1952 年因同性戀罪 被定罪接受化學閹割,1954 年氰化物自殺,享年 41。

2009 年英國首相 Brown 公開道歉,2013 年女王赦免,2019 年他的頭像印上 £50 英鎊鈔票。但這一切都來得太晚。

Gordon Welchman (1906–1985)

Hut 6 主管,劍橋數學家。Turing 原版 Bombe 只測一個 stecker pair 的假設;Welchman 加上「diagonal board」——26×26 的電路 網格,讓 Bombe 能同時測多個 plugboard 矛盾,整體加速 10× 以上。 沒有 diagonal board,Bombe 不會快到有實戰價值。

Welchman 也設計了 Bletchley 的整體流程組織。戰後他到 MIT 工作; 1982 年出版 The Hut Six Story,被英美情報界嚴厲批評「洩密」, 美國安全許可被撤銷,鬱鬱以終。

Dilly Knox (Alfred Dillwyn Knox, 1884–1943)

GC&CS 老一代元老,一戰時破過德國海軍密碼。Bletchley 時期他帶領 「the Cottage」小組專攻非商用 Enigma 變體: 義大利海軍 Enigma(1940 年 3 月破)、 Abwehr Enigma(1941 年 12 月破)。

1941 年 3 月 Knox 小組破出的義大利訊息讓英國艦隊在 Matapan 海角 伏擊並殲滅義大利地中海艦隊——盟軍第一場大型 Ultra 情報勝利。

Knox 終身為淋巴瘤所苦,1943 年 2 月病逝。臨終拒絕去醫院——要繼續解碼。 他的組員多為女性(Mavis Lever、Margaret Rock),戰時被稱 「Dilly's fillies」(Dilly 的小馬),實際上都是劍橋頂尖語言學才女。

Mavis Batey(née Lever) (1921–2013)

Knox 的 Cottage 小組成員,19 歲入 Bletchley。1941 年她個人破掉 義大利海軍 Enigma 的關鍵訊息——operator 測試鍵盤打了一連串 L, 暴露 Enigma「字母不能加密成自己」的結構性弱點。 這則訊息直接引爆 Matapan 海戰。

她後來也破解 Abwehr Enigma 與 D-Day 前西班牙 Abwehr 通訊——這些 解讀確認了「德軍相信盟軍會在 Calais 登陸」,是 Operation Fortitude(諾曼第欺敵)成功的關鍵驗證。 戰後成為英國知名園林史學家。

Joan Clarke (1917–1996)

Hut 8 數學家,Turing 最親密的工作夥伴。兩人 1941 年短暫訂婚, Turing 坦白同性傾向後解除婚約。Clarke 獨立優化了 「Banburismus」——深度分析 U-Boat 密信的核心技術, M4 Shark 的破譯主要靠她把原始手續壓到可規模化程度。

因為是女性,Clarke 薪資遠低於男同事,職稱被迫叫「linguist」而非 「cryptanalyst」(因為當時「女人不做密碼分析」)。戰後她嫁給 GCHQ 同事 Jock Murray,一生留在英國情報界。

三、Lorenz / Tunny 的三位天才(1941–1945)

John Tiltman (1894–1982)

Bletchley 的「首席密碼分析師」頭銜正式授予人。 1941 年 8 月 30 日兩則 Lorenz 訊息因 operator 誤操作共用同一金鑰 (depth),Tiltman 從這個 depth 手工逆推出 4000 字符長度的完整金鑰流 ——但他不知道機器結構,只有金鑰本身。

Bill Tutte (1917–2002)

Tiltman 的 4000 字元金鑰落到年輕數學家 Tutte 手上。接下來 三個月,Tutte 純用鉛筆、方格紙、與統計直覺 反推出 Lorenz SZ40 的完整內部結構——12 個 pinwheel 的接線、步進邏輯、 全部 keystream 生成公式。他從沒看過機器一眼

這是 20 世紀密碼學最純粹的推理成就之一,被與 Rejewski、Beurling 並列 「憑統計與邏輯手工破解完整密碼機」的三人。戰後 Tutte 到加拿大 Waterloo 大學任教,在圖論(matroid theory)留下奠基性貢獻。 2002 年才有英國官方正式承認他的 Lorenz 工作。

Max Newman (1897–1984)

劍橋拓撲學家,Turing 的博士指導老師。1942 年在 Bletchley 建立「Newmanry」小組,任務是機械化 Tutte 的統計攻擊。 他指導設計 "Heath Robinson" 機器——雙紙帶光學同步讀取 跑 χ-wheel 差分統計,但紙帶時常燒斷。

Tommy Flowers (1905–1998)

電影從來沒好好拍過這個人。Flowers 來自 Post Office Research Station, Dollis Hill——一個修電話交換機的工程師, 沒有大學學位,不是「Bletchley 那種劍橋菁英」。他看了 Newman 的 Heath Robinson 覺得「根本不對,應該全電子」,主動提案。

Bletchley 委員會拒絕:「1500 個真空管的機器?光熱身就會燒」。 Flowers 自掏腰包、用自己的錢,帶 GPO 同事在 Dollis Hill 加班祕密打造,1943 年 12 月造出 Colossus Mark I。 1944 年 2 月第一次實戰跑 Tutte 攻擊,幾小時解完以前需要 幾週的 χ-wheel 復原。

到 D-Day 前夕共造了 10 台 Colossus。1944 年 6 月 5 日 Eisenhower 發出 登陸命令前,他親眼看了 Colossus 剛解出的 Hitler 命令—— 「Panzergruppe West 調往 Normandy」方向,證明德軍仍相信 Calais 才是主攻—— 才下令 D-Day 照原計畫 6 月 6 日執行。

戰後 Churchill 下令拆毀所有 Colossus、銷毀圖紙。 Flowers 連自己設計的機器都不能談。他戰後繼續在 GPO 做電子交換機, 默默無聞幾十年。英國政府直到2000 年才正式承認 Colossus 是世界第一台可程式化電子電腦——比美國 ENIAC 早兩年——但那時 Flowers 已經 95 歲、失智,兩年後過世。

四、瑞典的 Sturgeon:被遺忘的 T52 破譯者

Arne Beurling (1905–1986)

瑞典烏普薩拉大學數學教授,分析學與調和分析領域世界級大師。1940 年 5 月 德國佔領挪威、丹麥後,經瑞典中繼的電傳都轉為密碼——瑞典 FRA(國家 通信情報局)攔截到一堆看不懂的訊息,那是 Siemens & Halske T52a "Sturgeon"。

Beurling 被徵召到 FRA,關在房間裡兩週,只給他紙、筆、和一疊密文。 兩週後他走出來,手上是 T52 的完整內部結構:10 個 pinwheel 的 XOR 網路、 步進邏輯、甚至反推出 key-setting switch 接線。他從沒看過機器、 沒有任何技術文件——純憑密文統計特性重建整台機器。

這是密碼分析史上最瘋狂的成就之一。連 Bletchley 聽說後都半信半疑。 Beurling 從沒公開談過方法,他著名金句:

"A magician doesn't reveal his tricks."

瑞典接下來三年(1940–1943)讀遍了所有經瑞典轉發的德軍 電傳——柏林跟奧斯陸、赫爾辛基、斯德哥爾摩德國大使館間所有通訊。 攔截 50 萬則、解密 35 萬則——跟 Bletchley 幾年的 Enigma 產出相當。1943 年中德國換裝 T52e 並啟用 KTF(明文相關步進)後, 瑞典解密量驟降到零。Beurling 晚年到普林斯頓高等研究院,戰時工作 要到 1980 年代才逐漸公開。

Michael Crum (1910–1977)

Bletchley Park 對 Sturgeon 的主要攻擊者。1942 年夏英軍首次攔截 西西里 → 利比亞鏈路(代號 "Sturgeon")與愛琴海 → 西西里鏈路("Mackerel")。operator 紀律鬆散,常常 用同一金鑰發多則訊息產生 depths——Crum 小組靠這些 depths 陸續破入 T52d/e。

攻擊從未達到 Enigma/Tunny 的規律程度:T52 太複雜,而且德國空軍 有個壞習慣——把 Sturgeon 訊息用較弱的 Enigma 重發,Bletchley 直接從 Enigma 拿明文就好,沒必要硬啃 T52。Crum 戰後加入英國 GCHQ 並參與設計 SAVILLE 密碼演算法——至今仍是英美機密。

五、幕後的人

Hans-Thilo Schmidt (1888–1943)

德國外交部密碼局員工,代號「Asche」。1931–1938 年為了 還債、支撐奢華生活,把 Enigma 操作手冊、日鑰表、軍用型號接線資料 持續賣給法國情報局——Gustave Bertrand 上尉再轉手給 波蘭 Rejewski。沒有 Schmidt 提供的「rotor 日鑰格式」,Rejewski 的 置換群攻擊無從下手。

1943 年 3 月 Schmidt 被 Gestapo 識破被捕,同年在獄中服毒自殺。 他的叛變是盟軍情報優勢的真正起點——但動機是錢而非反法西斯理念, 歷史對他的評價複雜。

Gustave Bertrand (1896–1976)

法國軍情報 SR 二局上尉,整個 1930 年代親手經營 Hans-Thilo Schmidt 這條 線人。1938 年他理解到法國自己破不了 Enigma,主動把 Schmidt 提供的文件 全部轉給波蘭——這個決定是 Enigma 被破的起點。戰後寫 Enigma ou la plus grande énigme de la guerre 1939–1945 (1973),是最早揭露 Bletchley 波蘭淵源的公開著作,比英國官方解密早 3 年。

Bletchley 的女性工作者(~7,500 位)

戰爭最高峰 Bletchley Park 僱用超過 10,000 人,其中 75% 是女性 ——Wrens(海軍女子部隊)、WAAF(空軍女子部隊)、牛津和劍橋徵召的女大生。 她們操作 Bombe 與 Colossus、值夜班、校對密文、做流量分析。

Joan Clarke、Mavis Batey、Margaret Rock、Jane Fawcett (她破譯的訊息讓英國海軍追上並擊沉 Bismarck)、Ruth Briggs、 Pamela Rose……大多數人一輩子無法對配偶、父母、子女提起戰時做過什麼。 直到 1990 年代英國 Public Record Office 陸續解密,許多家屬才在老太太 過世後從遺物得知媽媽或奶奶破過 Enigma。

六、保密 30 年

這些人從 1945 年 5 月 8 日起必須徹底閉嘴。 Official Secrets Act 讓 Bletchley 的一切維持機密 直到 1974 年——Churchill 個人命令: 「Never ever, EVER, speak of this」。戰後英國安全部門甚至 秘密監視前 Bletchley 員工是否有洩密傾向。

電影拍了 Turing——因為他的結局最戲劇化。 但 Turing 本人會第一個告訴你:Rejewski 才是真正開始這一切的人。 Tutte 的 Lorenz 手解比我的 Enigma 攻擊更困難。Beurling 用兩週解完 T52 的 事情沒人做到過第二次。Flowers 蓋的 Colossus 是現代電腦的起點。


四條運算路線

同一個暴力搜尋問題,四種實作。演算法相同,只有「怎麼把它攤在硬體上」不同:

Scalar

單一 C# 執行緒、標準迴圈、沒有優化。這是你想像中「C# 跑起來大概多快」的樣子。

Parallel

Parallel.ForEach 把外層 wheel-order × ring 當工作單元丟給 thread pool。16 核 CPU 大約線性加速到 7–9×。

SIMD (AVX2)

Vector256<int> 一次算 8 個 grundstellung lane,rotor table 用 Avx2.GatherVector256 讀。比 Parallel 快 3–4×。

SkSL GPU

把 Enigma 寫成 Skia runtime effect shader,一個 pixel = 一把 key 的完整試解。透過 Avalonia ISkiaSharpApiLease 拿 D3D11/OpenGL context。這就是 AprNes CRT 濾鏡用的同一條 shader pipeline。

SkSL 的 GPU 路徑

Avalonia GUI 下透過 ISkiaSharpApiLease 拿到真實的 GRContext, shader 直接在 GPU(D3D11 / OpenGL)上執行 — 跟寫 CUDA / Metal 的部署成本差了一個量級, 但拿到的計算吞吐卻是同一個數量級。


歷史 vs 現在

Quick scope(~1,054,560 把 key,285-char 密文)

實作 時間 K keys/s 相對速度
Scalar(單執行緒) 11.06 s 95 1.00×
Parallel(16 核) 1.59 s 662 6.94×
SIMD + Parallel 0.51 s 2,059 21.59×
SkSL GPU(OpenGL) 0.25 s ~4,200 44×

Enigma M4 Quick scope(1,054,560 keys,~270-char 密文)

實作 時間 K keys/s 相對速度
Scalar M4(單執行緒) 14.81 s 71 1.00×
Scalar M4 Parallel(16 核) 1.94 s 544 7.64×
SIMD M4 + Parallel 0.58 s 1,818 25.52×
SkSL M4 GPU(OpenGL) 0.044 s 24,005 337×

M4 shader 每字元 work 比 M3 多一道(greek rotor pass),CAP 從 96 降到 80 才塞得下 Skia 的 program-size limit。且 80 字元的 IC 信號在 1M keyspace 下容易被噪音淹沒,所以 GPU 在 shader 內抓 top-256 候選,CPU 端再以全文 IC 決選——GPU 粗篩、CPU 精選。

Lorenz SZ40 chi-only(22,041,682 keys,~620-char Baudot 密文)

實作 時間 K keys/s 備註
Scalar Lorenz(單執行緒) 90 s+ 90 秒 timeout,單核跑不完完整 22M keyspace
Scalar Lorenz Parallel(16 核) ~20–40 s 500K+ 全核暴力搜
SIMD Lorenz + Parallel ~1–3 s 8M+ Pre-compute χ2⊕χ3⊕χ4⊕χ5 stream,inner loop 只剩 Vector256 XOR
SkSL Lorenz GPU(OpenGL) ~0.5–2 s 10M+ 23 個 render pass + CPU top-512 重排

Lorenz shader 用「空格 + E 字出現次數」的極簡 scorer(SkSL 不允許 bitwise 運算,per-bit XOR 用 a+b−2ab 代替;32-bucket IC 太胖塞不進 program 限制)。這個 scorer 在 German Baudot 文字上有 10σ+ 的信號,truth 一定落在 top-K,CPU 再用全文 32-bucket IC 決選。這是 Colossus 當年做的事情本質——χ 階段靠統計,ψ 與 μ 之後另解。

測試平台:Windows 11 / .NET 10 / 16-core CPU / 消費級 GPU。數字會因硬體不同有明顯差異,但相對倍數大致成立。

歷史尺度的對照

工作1940 年代現在(本 benchmark)
破一個 Enigma M3 key 一台 Turing Bombe 約 15–20 分鐘;Bletchley 高峰有 200 台 0.25 秒
破一則 Enigma M4(Shark)key 1942 Feb–Dec:Bletchley 完全瞎掉 10 個月(U-559 殉職換碼本);之後 Bombe ~15 分鐘 0.044 秒
破一則 Lorenz χ-wheel 對位 一台 Colossus Mark II 約 1 小時;共造 10 台 ~1–2 秒
投入人力 ~10,000 人秘密工作 5 年 你按一下
硬體 電機式 Bombe + 真空管 Colossus 一張遊戲顯卡

為什麼做這個

表面上,這是 AprNes 模擬器 CRT shader 管線的跨域壓力測試。我們想知道同一條 SkSL / SIMD / Scalar pipeline 放到一個完全不同的工作負載(密碼暴力搜尋)上,會不會有類似的相對性能輪廓。結果:會。

但真正的動機比較感性。這幾台密碼機當年是第三帝國戰爭機器的神經,是 10,000 個人用青春保守的秘密,是發明現代電腦的直接原因。把它們放到今天一顆 GPU 面前變成一眨眼的事,不只是「硬體進步了」這種陳腔濫調——

那是一種時間被壓縮的眩暈感。當年幾萬人、幾年、一座秘密城市、幾台為此而生的機器,合力做一件「僅僅可能」的事。現在你打電動的 GPU 在你喝一口咖啡的時間之內處理掉。你踩在他們肩膀上,不是隱喻——就是字面的。

0.25 秒旁邊並列著 1942–1945,那個瞬間就是整個專案存在的理由。


怎麼用

從原始碼執行

cd EnigmaBenchmarkAvalonia
dotnet build -c Release
bin\Release\net10.0\EnigmaBenchmarkAvalonia.exe

視窗開啟後:

  1. 選擇 Scope(Quick / Normal / Hard / Extreme)
  2. Start Benchmark
  3. 等結果出來。GPU 最先跑完(~0.3 秒),CPU 依 SIMD → Parallel → Scalar 順序後續跟上
  4. 右上角的狀態標籤會即時顯示目前在跑哪個 cracker

系統需求


技術備註

Enigma M3 實作正確性

SkSL runtime effect 的限制

GPU thread 規範


致謝 / Credits

Rotor wiring 資料來源:Crypto MuseumDirk Rijmenants' Cipher Machines。 Lorenz 結構參考 Bletchley Park General Report on Tunny(1945,2000 年解密)。 歷史事件交叉確認自 David Kahn《The Codebreakers》、Hinsley《British Intelligence in the Second World War》、以及 Bletchley Park 官方檔案。

本專案為 AprNes NES 模擬器的姊妹作,展示其 CRT shader 管線在非圖形工作負載下的表現。

"We also have sound, incontestable proof of the truth of our observations... I only add that the work I have accomplished was of great importance for the future conduct of the war. If I have helped, I may say I have done my bit." — Marian Rejewski, 1942