續篇:同一個金鑰家族還能解讀遞信省截獲檔案中孫中山圈子1916–17年的另外約六十封電報:電報線上的孫中山圈子。
01 文獻
JACAR B03050738800 是外務省1916年4月29日至5月11日關於孫中山密碼電報的一份檔案。其中包括:(i)孫中山從東京發給漢口領事館一名警察的五封電報,用四位數碼組,即 Tomokiyo 已經解讀過的“+111”程式碼;(ii)一份急件,機密送第一號,由外務大臣石井發給駐汕頭代理領事——此人本人就叫 Tanaka(田中)——詢問這個“Tanaka”是誰、為何給孫中山發電報、是否冒用領事的名義,並要求“如有可能”解讀這封電報;(iii)這封電報本身;以及(iv)漢口總領事5月11日關於孫中山下一套方案的報告(五位數碼組,數字倒序,減去111)。檔案中沒有任何內容解讀了汕頭電報。
Twelve baxuxupeja qicijinati bemigasiqi jakebiqoye kufohemige tuxaboboba gedocijiga poyevayoxa
leyoleveke biromapesa vorobenife xikebiqoye qekufiyaqa tijaqixiqo xitonatula xopavajejo
ropezpo ngobunibai tanaka
按表格轉錄。Tomokiyo 的轉錄作 gedoeijiga 和 xitohatula;筆跡實為 c 和 n,而解讀恰恰需要這個讀法。“Twelve”是表的標識(山田的電報以“Sixtyfour”開頭,指他的六十四號表)。
02 結構
- 字母表。子音 b c d f g h j k l m n p q r s t v x y z(二十個,沒有 w)和母音 a e i o u:即兩位數程式碼壓縮表的 20 × 5 = 100 個音節:每個音節代表一對數字,兩個音節代表碼本中的一個四位數碼組,音節連在一起,切成十字母的“詞”,每個按一個詞計費。177個字母 → 88個音節 → 44個碼組,丟了一個字母。
- 母音 u 很少見(89個音節中只有7個,其他母音各約20個)。在按列排列的表中,每個母音佔據一個二十個數字的區塊;81–99、00這一區塊幾乎從不是碼本中的頁號(碼本到80多頁就結束了),所以 u 是高位區塊。這一點已經確定了表的排列方式。
- 已知的壓縮表。山田的國史館表橫排 x y z b c … v,豎排 u o i e a,逐行編號01–99、00;他的密歇根表按字母順序排 b … z 和 o u a e i,從00開始逐列編號。兩者都是純規則表。對“第十二號表”的自然假設是:它是同一家族的另一個成員——按字母順序的子音經過輪轉(或反轉),母音重新排列,兩種填充順序之一,兩種起點之一,或許還像孫中山自己的電報那樣帶一個加數。
03 金鑰
把該家族全部 40 × 120 × 2 × 2 × 3 = 57 600 把金鑰用在乾淨的音節串上,得到的四位數碼組用一個繁體漢字頻率模型打分(未知程式碼扣分)。最佳金鑰(子音輪轉至從l開始,母音e a i o u,按列排列,從01起,無加數)得分 −360.6,而總體均值為 −553.6,標準差23.8;第二名落後49分。這張表是:
| e | a | i | o | u | |
|---|---|---|---|---|---|
| l | 01 | 21 | 41 | 61 | 81 |
| m | 02 | 22 | 42 | 62 | 82 |
| n | 03 | 23 | 43 | 63 | 83 |
| p | 04 | 24 | 44 | 64 | 84 |
| q | 05 | 25 | 45 | 65 | 85 |
| r | 06 | 26 | 46 | 66 | 86 |
| s | 07 | 27 | 47 | 67 | 87 |
| t | 08 | 28 | 48 | 68 | 88 |
| v | 09 | 29 | 49 | 69 | 89 |
| x | 10 | 30 | 50 | 70 | 90 |
| y | 11 | 31 | 51 | 71 | 91 |
| z | 12 | 32 | 52 | 72 | 92 |
| b | 13 | 33 | 53 | 73 | 93 |
| c | 14 | 34 | 54 | 74 | 94 |
| d | 15 | 35 | 55 | 75 | 95 |
| f | 16 | 36 | 56 | 76 | 96 |
| g | 17 | 37 | 57 | 77 | 97 |
| h | 18 | 38 | 58 | 78 | 98 |
| j | 19 | 39 | 59 | 79 | 99 |
| k | 20 | 40 | 60 | 80 | 00 |
綠色:該格由一個說得通的詞確認(41格)。琥珀色:只用於存疑的碼組。暗色:本電報未用到。注意 u 列:k-u = 00 被確認了兩次(亦 0076、力 0500),從而確定了整列。
04 解讀
碼本 = 電報新編 / 明密碼電報書 的編號(這些字的編號與現代標準電報碼相同)。虛線 = 校改過的字母 · 紅色 = 未能確定
ba xu · xe pe · ja qi · ci ji · na ti · be mi · ga si · qi ja · ke bi · qo ye · ku fo · ne mi · ge tu · xa bo · bo ba · ge do 3390 1004 3945 5459 2348 1342 3747 4539 2053 6511 0076 0342 1788 3073 7333 1775 潮 城 由 莫 擎 宇 獨 立 我 軍 亦 光 復 汕 頭 後 ci ji · ga po · ye va · yo xa · le yo · le ve · ke bi · ro ma · pe sa · vo ro · be ni · fe xi · ke bi · qo ye · qe ku · fi ya 5459 3764 1129 7130 0171 0109 2053 6622 0427 6966 1343 1650 2053 6511 0500 5631 莫 率 大 隊 來 令 我 退 出 鎮 守 府 我 軍 力 薄 qa ti · ja qi · xi qo · xi to · na tu · la xo · pa va · je jo · ro pe · za no · [ngobunibai] 2548 3945 5065 5068 2388 2170 2429 1979 6604 3263 暫 由 翼 □ 支 持 文 慧 返 港 …
潮城由莫擎宇獨立。我軍亦光復汕頭。後莫率大隊來,令我退出鎮守府。我軍力薄,暫由翼□支持。文慧返港……
事件經過。1916年3月26日,龍濟光潮梅鎮守使屬下駐潮州的團長莫擎宇被陳炯明、林虎、何海鳴和當地革命黨人爭取過來;27日他佔領潮州城,致電省當局“率師佔領潮城,宣佈獨立”:潮城,與電報中用的是同一個詞。30日汕頭的守備部隊宣佈擁護他,他以汕頭為司令部正式宣佈獨立。與此同時,孫中山自己的中華革命黨人已佔領了該城的鎮守使署;“Tanaka”是隨他們行動的日本浪人之一,他在4月3日報告說,莫率大軍前來,命令他們撤出,他們力量太弱無法抵抗,還有某人正在返回,大概是回東京報告。外務省懷疑發報人借用了汕頭領事的名義;那位領事也姓 Tanaka(田中)。
05 仍不確定的部分
- 城。表格上寫的是
baxuxupeja→90 04,而沒有哪本碼本有第90頁。只差一筆母音的是xe pe= 1004 城,歷史背景幾乎非它不可(潮州 1558、潮梅 2734 和 潮汕 3073 都無法從這些字母得到)。第二個 u 很可能是 e。 - 翼□(5065 5068)。翼的兩個音節都在別處得到確認;第二個碼組的
to則沒有,而5068(翿)不成詞。這裡預期是莫把革命黨人趕走後“支援”他們的某個人名或某支部隊,可能是汕頭的守備部隊,或湯廷光艦隊的某艘船。 - 文慧(2429 1979)。按解讀結果照錄;大概是某個“返回”的人。文也是孫文的署名字。
- 末尾。返之後,表格上是
zpo ngobunibai:在這個體制中不可能出現七個字母的“詞”,而且ng,ai都不是音節。對三處合理編輯(h/n、u/n、c/e 混淆,漏字母)以內的所有字串進行窮舉搜尋,沒有得到任何能解成有效程式碼的結果。這頁表格本身很清楚,所以錯誤出在傳輸中,而電報是在莫爾斯電碼裡出錯的,不是在手寫中。p(.--.)就是a(.-)與n(-.)連發、中間漏掉了空格:zpoisza no= 3263 港,香港(M,2026年9月30日)。把zpo的莫爾斯電碼挪動一個空格重新切分,只得到四個有效程式碼(彼、砉、港、嫗),而在返之後說得通的只有港:革命黨人在汕頭行動的基地正是香港。對ngobunibai做同樣的重新切分搜尋,允許丟失或增加至多四個空格,也得不到任何說得通的有效解讀。ng(-. --.)可能是y(-.--)多了一個點,那樣開頭就是yo bu= 電“電報”(如電示、電知),但後面接不上;大約兩個字仍然缺失。 - 轉錄中的兩個h音節(
he,ha)解出來都是無意義的,而在表格上都可以讀作n(光、支)。因此表中的h行沒有實際例證,但這種排列方式讓它別無他處可放。
06 方法
- 為了解背景並核對字母,逐頁查閱了 JACAR 檔案(檔案館的影象伺服器拒絕自動訪問;PDF 是手工提供的)。
- 音節統計:20 + 5 的字母表和u的短缺,指向一種規則化的、按列排列的壓縮表。
- 對整個規則家族(57 600把金鑰)進行暴力搜尋,用基於標準碼本的單字頻率打分(Unihan 電報碼錶;1916年的編號已用 Tomokiyo 解讀的孫中山電報核實)。
- 對四個存疑碼組逐一檢查單字母替代讀法;光復、支援、莫、潮城這些讀法先按文意選定,然後在筆跡中得到印證。
- 對錯亂的末尾進行編輯距離搜尋(結果為否定),然後進行莫爾斯重新切分搜尋,復原了港,最後一個詞仍未解決。再對照莫擎宇起事3月26–30日的時間線做歷史核驗。
07 試用金鑰
輸入壓縮字母(忽略空格)。每個子音–母音對按上表變成兩位數字;每兩個音節組成一個碼本碼組,在標準電報碼中查詢。
08 資料來源
- JACAR(日本亞洲歷史資料中心),編號B03050738800,外務省記録:孫逸仙ト電報往復ノ件 / 孫逸仙宛電報ニ関スル件(1916年4–5月),卷盤1-0959,第0288–0298幀。
- S. Tomokiyo,“Chinese Cryptography: 1871–1945”(cryptiana),提供了山田的兩張壓縮表、+111 電報和電報圖片;“Sun Yat-sen's Coded Telegram (1916)”,部落格,2021年12月12日。
- Unicode Unihan 資料庫,kTaiwanTelegraph / kMainlandTelegraph 欄位(經由kirklin/chinese-telegraph-code),用於標準電報碼。
- 黃浩瀚,「百年前莫擎宇在汕宣佈反袁獨立」,汕頭特區晚報,轉載於辛亥革命網,2017年12月6日:1916年3月26–30日的時間線及莫的電報。
分析指令碼、碼本表和語言模型都在程式碼倉庫中(targets/sunyatsen/).
