1918年11月27日发出的一条德军无线电密文,在 scienceblogs.de 网站所列的《史上50大未解密码》名单中躺了一百多年。与这条短消息一同位列榜单的,还有充满神秘色彩的黄道十二宫杀手密文。那本连文字系统都无法确认的 Voynich 手稿也名列其中。几天前,这条引发无数专家头疼的百年悬案,被一个没有操作过发报机的语言模型 GPT-6 Astra 直接破译。
在 Hacker News 社区,这则消息迅速累积了 349 个赞和 160 条深度技术评论,Lobsters 社区也给出了 11 个赞的跟帖关注。对于大语言模型而言,密码学是一场不需要主观解释的硬核测试。模型无法依靠似是而非的文本生成来应对,它给出的结果必须在严格的加密结构中完美还原出历史事实。
只用六个字母建构系统,剔除传输物理噪音
一战期间,德军采用的 ADFGVX 密码系统在设计理念上表现得十分克制。它摒弃了完整的英文字母表,规定电文的内容仅仅由 A、D、F、G、V、X 这六个字母构成。这六个字母在莫尔斯电码的收发中具备很高的声学区分度。它们能够最大限度保证疲惫的发报员在嘈杂炮火中不会抄写错误。在系统工程视角下,这就如同在网络协议底层抛弃了不稳定的宽带链路,转而用低带宽但高容错率的基带信号,从物理层强制过滤多余的输入噪音。
系统的核心部件是一个 6×6 的网格。这 36 个格子刚好装下 26 个英文字母加上 10 个阿拉伯数字。使用者需要依赖一个预先设定好的密钥词,来决定每一个明文字母放入网格的具体坐标。发送方会通过「行字母 + 列字母」的二维坐标法则,将一个原始字符转化为两个密文字符。
假设密钥词是 HOUSE,在由它生成的网格里,行坐标 A 与列坐标 A 的交点对应字母 H。行坐标 A 与列坐标 D 对应 O,行坐标 D 与列坐标 A 对应 B。因此,像 PRINZ 这样的单词经过查表,就会变成 FX GD DX FV VD 这样毫无规律的字符流。这种二维坐标映射等同于给应用层加上了一道动态哈希锁,哪怕底层替换一个配置参数,输出的数据流也会发生雪崩式的整体变异。
在过去的一个世纪里,人类密码破译专家凭借积累的统计学经验和数学直觉,陆续拆解了几百条同类的德军电报。著名的密码专家 George Lasry 曾在其职业生涯中,攻克过名单中的部分密文。偏偏有十多条残留的短消息如同黑盒一般,拒绝向常规的逆向推导妥协。
图:1918 年 11 月 27 日那条未解德军电文。来源:prinz / Klausis Krypto Kolumne
170个字符切割非对称矩阵,算力替代逆向推导
Astra 在面对这条由 170 个符号组成的死锁密文时,直接提取了德语单词 TRUPPENVERSCHIEBUNG 作为破译的密钥词。这个长达 19 个字母的词汇意为「部队调动」。它被详实记录在 J. Rives Childs 的专著《The History and Principles of German Military Ciphers, 1914–1918》的第 214 至 215 页中。ADFGVX 的加密流程除了坐标替换,还叠加了基于密钥词的列置换操作。解密的第一步,Astra 需要将这个密钥词按照 A 到 Z 的字母表顺序进行重排。
在这串词组中,T 是原本单词排列中的第 16 个字符,R 是第 13 个字符。这种针对字符的词典序重排,相当于在数据写入前加入了乱序调度的策略,直接切断了攻击者试图依靠字符连续频率进行暴力破解的路径。
模型在横向写出密钥词后,把 170 个密文符号按行填入,构成了 19 列的矩阵。其中前 8 行填满了符号,每行 19 个。最后一行只填入了 18 个符号。整体重排之后,有 18 列各自包含 9 个密文符号,唯独 G 字母对应的那 1 列只装了 8 个符号。
模型推导出的核心逻辑,在于计算每一列的数据偏移量。以重排后的字母 T 为例,它排在第 16 列的位置。在它的前面,排列着 14 个装满 9 符号的列,以及那 1 个只装了 8 符号的短列。
按照 9 乘以 14 加上 8 等于 134 的计算,字母 T 所管辖的列片段恰好从密文数组的第 135 个符号开始。对于现代软件架构而言,这种对非对称矩阵做切片寻址的处理方式,本质上是一次精确的内存页偏移计算,错开一个比特就会导致解密栈的段错误。
图:密钥词 TRUPPENVERSCHIEBUNG 生成的 ADFGVX 表。来源:prinz
Astra 通过严密的数学还原,依次组装出了完整的密钥排列。它根据初始网格推导出了隐蔽百年的德语明文:EIN ENGLISCHER KREUZER EINLIEG X SEWASTOPOL X S4STEN X EIN GESCHWADER DER X ALLIIERTEN FOLGT 26STEN X。这条电文的英文翻译是:AN ENGLISH CRUISER ARRIVED AT SEVASTOPOL ON THE ?4TH AN ALLIED SQUADRON FOLLOWS ON THE 26TH。电报内容证实德军当时正在汇报一艘英国巡洋舰抵达塞瓦斯托波尔的情报。另外,它确认一支盟军分舰队将在 26 日跟进,仅有 4 日的具体十位数字未能确定。百年悬案在多层神经网络的前向传播里,收敛成了一个无需因果的模式匹配结果,专家耗费数年的逻辑穷举直接被机器运算周期抹平。
越过12天时序断层,模型没有因果包袱
Astra 除了吐出最终的明文,还定位出了人类专家在这个密文上集体折戟的具体病因。根据 Klausis Krypto Kolumne 资料第 217 页的准确记录,这封密文的发报时间是 1918 年 11 月 27 日。Astra 用来解密的核心密钥词 TRUPPENVERSCHIEBUNG,按照德军档案规定,要等到当年的 12 月 9 日才正式投入战场。这 12 天的时间误差构筑了一堵隐形的防御墙,困住了密码学界近百年。
我们可以用一张表格还原这场密码学悬案的关键要素:
| 密码要素 | 密文载体特征 | 破译匹配参数 |
|---|---|---|
| 时间基准 | 1918年11月27日 | 1918年12月9日 |
| 密文总长度 | 170个符号 | 匹配19列矩阵 |
| 矩阵形态 | 8行满列加1行缺省 | - |
| 异常列属性 | G列容量仅为8个 | - |
| 映射表原语 | A/D/F/G/V/X | TRUPPENVERSCHIEBUNG |
人类专家在进行破译排查时,潜意识里遵守了物理时间线的前后定律。没有严谨的研究者,会为了解开 11 月底拦截到的一条电文,去尝试两周之后才会发放给一线部队的密码本。这种基于常识的预设条件,在防御机制中相当于一个苛刻的隐式断言,一旦排查逻辑陷入了错误的条件分支,后续的算力投入全变为徒劳。
大语言模型在抓取和匹配训练语料时,不具备这种人类独有的历史经验和时序包袱。它不在乎时间线的先后定律,只在茫茫的数据维度中寻找能在数学规律上扣合的那把钥匙。放弃对业务因果的执念去遍历全局参数空间,使得 AI 越过了专家经验的天然防御盲区。
密码学验证 AI 能力底线,结果无法靠话术伪装
密码学始终是检验大型语言模型能力的一块试金石。这里的规则非常直接,答案的对错具备唯一的可验证性。模型在这里无法通过模糊的修辞来掩盖运算的瑕疵,更不能靠上下文的话术糊弄过去。一百多年前德军前线的一场发报失误,凭借着时间的掩护,成功骗过了依赖常识逻辑推导的人类专家,最终却被一个从不读取电报系统的模型强制破解。
Astra 这次解密还原出了一段德文档案,同时用实际行动越过了人类认知体系中的隐性屏障。模型无视了业务系统的合理性,用纯粹的数学结构穿透了专家的思维定势。这种基于算力遍历和概率碰撞带来的解题路径,早已超出了人类传统经验能覆盖的防御射界。
参考链接:
- prinz 博客文章
- HN 社区讨论
- Lobsters 社区讨论