XTRMC ROXXN LGWWM PQILL WLYMP OXBOH COGSD XHEBF ZMROD XLMEP MFNZO K

起點:Enigma 模擬器產生的 56 個字母,沒有任何設定。

從 61 萬年到 4.4 秒

透過 Claude 破解 Enigma 學到的事。我給資料,Claude 實作:從一部 YouTube 影片、一篇 1995 年的論文,變成破解 Enigma 的程式碼。

Claude 沒有親自解密。它寫出攻擊密文的 Python 腳本,實測時間都是這些腳本在我 14 核心筆電上跑出來的。

已知明文:光是知道訊息開頭是 TEST,就把 772 億種設定縮小到 129 萬種。

破解一次要多久

在我的 14 核心筆電上找回設定所需的時間。橫軸是對數刻度,同樣的距離代表同樣的倍數:1 秒到 10 秒和1 分鐘到 10 分鐘一樣寬。

四次輸入,四次進步

每一次大幅進步,都從我交給 Claude 的一樣東西開始:一個關於訊息的已知事實、一部影片、一篇論文,以及針對同一篇論文的第二個問題。引號內是我當時實際輸入的提示,原文是英文,下方附上原句。

  1. 第 0 步

    高牆

    「我想請你在不知道正確設定的情況下猜出來,但我擔心這樣會不會太花成本。」

    “I want you to guess it without correct setting. but I worry if that would be too expensive”

    從模擬器的 JavaScript 取出確切的轉子接線,用「加密再解密」的來回測試驗證,再老實算出問題到底有多大。

    不含接線板的設定數
    7.7×1010
    含接線板
    1020+
  2. 第 1 步

    一段已知明文

    「前 4 個明文字母是『TEST』,現在你能多快解出來?」

    “the first 4 plaintext is "TEST", how fast you can do it now?”

    對所有轉子、反射器、環設定與起始位置做精確比對篩選,再用多核心依英文字母頻率替留下的候選排序。得到的答案確定而且唯一。

    772 億種中留下的候選
    1,290,588
    從密文到答案
    4.4 分鐘
  3. 第 2 步

    一部影片

    「我看了這部講怎麼破解 Enigma 的 YouTube 影片,影片裡提到的策略會讓破解變得比較容易嗎?」

    “I've watched this youtube video discussing how to bracking enigma, would the strategy mentioned in the video makes it easier?”

    讀了 Computerphile 影片的逐字稿,做出分階段、只靠密文的攻擊:先找轉子與起始位置,再找環設定。需要 200 個以上的字母,但不需要已知明文。弱點是要正確找出環設定,仍得花好幾分鐘。

    第一階段組合數
    4,394,000
    第一階段耗時
    約 4 秒
    環設定暴力搜尋
    4.7 分鐘
  4. 第 3 步

    影片背後的論文

    「影片介紹的是這篇論文:[連結] 它能不能給你一些改進我們腳本的想法?」

    “the video is introducing this paper: [link] would that give you any insight to improve our script?”

    實作 James Gillogly 1995 年的環設定還原法:讓環設定和起始位置一起移動,每個轉子只試 26 次。0.014 秒就找出正確的轉子和可讀的英文,便宜到可以檢查每一個候選。不過在一次測試中,轉子進位附近仍有幾個字母和暴力搜尋的結果不同。

    嘗試次數,原本要 308,915,776 次
    52
    環設定還原
    0.014 秒
    完整流程
    286 秒 → 4.3 秒
  5. 第 4 步

    同一篇論文,換個問題

    「你可以實作論文裡提到的接線板改進嗎?」

    “can you implement the plugboard upgrade from the paper?”

    「可以把預設行為改成:假設一定有接線板配對,但我們不知道有幾對(也可能是 0)嗎?」

    “can you make it the default behavior that assume it'll have plugboard pair and we don't know how many (could be 0)”

    帶著更具體的問題重讀,找到第一次漏看的細節:用英文三字母組(trigram)替接線板的猜測評分。接著用貪婪搜尋找出每一對接線,沒有任何交換能再改善時就自動停下,所以每則訊息都能直接跑。

    約 1.3 秒內找到的接線
    全部 5 對
    嘗試次數,10 對接線共 1.5×1014 種
    ~1,295
    全程
    4.4–15.8 秒

替「接近英文」打分數

Enigma 會洩漏線索。只猜對部分設定時,解出來的文字就已經比全部猜錯時明顯更像英文。只要能替這件事打分數,一個不可能的搜尋就變成三個小搜尋:先轉子,再環設定,最後是接線板。

  1. 4,394,000轉子順序 × 起始位置,用 IoC 排序
  2. 52每個候選的環設定嘗試,用 IoC 排序
  3. ~1,295接線板交換,用三字母組排序

候選解落在重合指數(IoC)的哪裡

從文字中隨機挑兩個字母,兩者相同的機率。數值越高越像英文。圖中兩個解密結果來自一則 269 個字母的測試訊息。

三種分數,各用在划算的地方

評分方式看的是什麼用來排序候選數量
卡方檢定 哪些字母常見(E、T、A…) 已知明文篩選後的候選 129 萬
重合指數 IoC 字母出現次數有多不平均,不管是哪些字母 轉子與起始位置,接著是環設定掃描 439 萬,再來 52
三字母組 真實的三字母序列,例如 THE、ING、ION 接線板交換 ~1,295

候選數以百萬計時,用便宜的分數;只剩少數候選時,才換上更準也更慢的分數。

IoC 被騙的時候

在一則完全沒有接線板的訊息上,IoC 評分卻加了兩對假接線,只因為它們讓分數從 0.0618 微升到 0.0638。三字母組評分則正確判斷出 0 對。

正確INCRYPTOGRAPHYA
假接線INCQYPTOGQAPLYA

兩個收穫

「這趟旅程起於我看完影片後,對 Enigma 的興趣與好奇。我因此對 Enigma 機器本身有更多了解,但更重要的是,我也因此學會怎麼引導 Claude 實作我學到的東西,透過 Claude 快速實作我找到的資訊。」

我自己,回顧這個專案

我整理知識,Claude 負責實作

「把我從 YouTube 和論文學到的東西交給 Claude,讓它拿去實作。」

“provide what I learn from YT, paper so claude can use it to implement it”

  • 影片變成分階段、只靠密文的攻擊
  • 論文變成只要 52 次嘗試的環設定還原,整個專案最大的加速
  • 再讀論文修好接線板階段,也修掉一個真實存在的評分 bug

我負責判斷:哪份資料值得讀,以及什麼時候該帶著更具體的問題再看一次。一份資料很少讀一次就用完,換個新問題,常常能再挖出新東西。

部分正確,也能打分數

「從暴力破解,走到部分解開密碼,再用合適的評分系統替部分結果排序。」

“from brute force to partially solve the code. and using a proper scoring system to rank the partial result.”

再多硬體也跑不完 1020 種設定。真正打破高牆的,是一個「猜對一部分就加分」的評分方式,讓每個階段都能各自求解、各自排序。替每個階段選對分數,和搜尋本身一樣重要。

花了多少 token 額度

~58%(Claude Pro 的 5-hr session,整個開發過程)

數字來自開發過程的對話紀錄:把每一次 API 呼叫的 token 依價格加權,再以 Claude Pro 用量表顯示 35% 的那一段為基準換算。Anthropic 沒有公開用量上限如何計算各種 token,所以這仍是估計值。

使用 Claude Sonnet 5 打造。

各步驟用掉的比例

  1. 第 0–1 步:高牆與已知明文9.5%
  2. 估算問題規模、取得模擬器接線3.7%
  3. 已知明文搜尋、多核心排序1.5%
  4. 已知明文腳本、文件與剪枝修正4.3%
  5. 第 2 步:一部影片12.5%
  6. 讀 YouTube 影片2.3%
  7. 分階段攻擊與模擬器5.1%
  8. 環設定暴力搜尋3.1%
  9. 依序驗證候選2.0%
  10. 第 3 步:影片背後的論文6.4%
  11. 讀論文並實作5.4%
  12. 第一份進度文件1.0%
  13. 第 4 步:同一篇論文,換個問題14.6%
  14. 接線板支援檢查,純討論0.2%
  15. 三字母組接線板搜尋9.1%
  16. 接線板搜尋改為預設3.4%
  17. 更新進度文件1.9%
  18. 文件與回顧15.2%
  19. 開發日誌與 token 估算2.9%
  20. 評分方法文件與收穫整理6.7%
  21. 用 Opus 審閱開發日誌5.6%

解出來的答案

頁首那 56 個字母解密後的結果。前四個字母,就是我提供給 Claude 的已知明文。

密文 XTRMC ROXXN LGWWM PQILL WLYMP OXBOH COGSD XHEBF ZMROD XLMEP MFNZO K 解密為 TESTI FCLAU DECAN DECRY PTANE NIGMA MACHI NEAND HOWFA STITC ANDOI T。

“Test if Claude can decrypt an Enigma machine and how fast it can do it”

意思是:「測試 Claude 能不能解開 Enigma 機器,以及它能多快做到。」已知明文攻擊在 14 核心筆電上花了 4 分 22 秒解出。正確解密的卡方值是 21.6,遠遠領先第二名的 76.2。

轉子
III, V, I
反射器
UKW-C
環設定
AAO
起始位置
EDH
接線板
無

訊息這麼短時,其他環設定與起始位置的組合也會解出同樣的文字,這只是其中一組。