续篇:同一个密钥家族还能解读递信省截获档案中孙中山圈子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/).
