(原文搞错了,我已经把前两章修改了一下,柒柒月把我废稿抄了一遍,难绷,依旧罚抄柒柒月)
克劳德把铅笔往桌上一搁,深吸了一口气。
“我现在就试试,我想到了一个可能性。”
克劳德拿起那两份并排摊开的密文,手指点在第一份的前半段上:
“维吉尼亚密码本质上是好几种规则混用,一段话用周期循环但不同的凯撒密码加密,所以会有周期性,而这里没有。”
“现在我们已知不是凯撒移位,也不是多表替换。这里一共69个字母……刚好是3的倍数,可以试一下矩阵密码。”
“它的核心方式是通过坐标建系打乱单词,以某种规则将乱码重组成可读的明文。”
他一边说一边开始把前九个字母按3x3填入方格
v q v……e l e……g r a
“……veg qlr vea……”他念出来,眉头立刻皱了起来,“这什么玩意儿。”
中尉凑过来看了一眼,也摇头道。
“不行,没规律……”
克劳德不死心,又试了按行读取、按对角线读取,按螺旋顺序读取,每一种排列组合出来的字母串都像天书,拼不出任何有意义的法语单词。
“不对,找不出任何正常的句子。看来不是3x3。”
瓦尔特皱着眉,开口提醒道:
“你的想法是好的,这的确可能是矩阵密码,但3这种周期太小了……”
“矩阵密码的周期如果只有3,那打乱的幅度根本不足以把一段正常法文彻底搅成乱码,这封信的词频异常程度远超3x3能造成的效果。”
克劳德听完点了点头,他拿起铅笔,在便签上重新写下69的因数分解:
“69 = 3 x 23。如果3不行,那可能是更大的矩阵,但69不是完全平方数,没法排成正方形。除非……”
“除非不是正方形矩阵,而是长方形矩阵。3行23列,或者23行3列。”
“但23列意味着每行塞23个字母,那打乱的范围太大了,几乎等于完全随机置换,那就已经不是矩阵密码的范畴,而是单纯的置换密码了……”
瓦尔特·尼古拉上校又开口道:“置换密码?你是说字母位置被打乱但字母本身不变?”
“对,就像把一段明文按某种规则重新排列,但每个字母还是原来的字母,这种加密方式不需要密钥本。”
“只需要一个排列规则,比如按字母在原文中的位置编号,然后按另一组编号重新排序。”
克劳德拿起那封情书,翻到正文部分,目光快速扫过前几行。
“但问题是……如果这是置换密码,那密文里的字母频率和原文应该完全一致。这里又不符合这个特征……”
他突然停住了。
“等等……”
他猛地低头去看中尉之前统计的那列频率数字。
“a和q并列最多,各出现11次……”
“正常法文里a不可能和q并列最多。q在法语里是极低频字母,正常文本里出现一次都算多了。但这里q出现了11次,和a一样多。”
“说明密文里的字母根本不是从原文里直接置换来的。这些字母是被替换过的,每个字母被换成了另一个字母……这应该是棋盘密码!”
“什么?”中尉没听清。
“棋盘密码就是把字母表排进一个5x5的棋盘里,每个字母用它的行号和列号代替。比如a在第1行第1列就写成11,b是12,以此类推。”
例子
他拿起铅笔,在便签上飞快地画了一个5x5的方格。
“如果发信人用的是棋盘密码,那密文里应该全是两位数字。但我们现在看到的是字母,所以不是直接棋盘加密,他们又在这个基础上加密了一道。”
他停下来,咬着铅笔尾端,眼神放空了几秒。
“棋盘密码把每个字母变成两个数字,比如a变成11,b变成12。如果他把这些数字再通过某种互换之后再映射回字母表 那就会是一个打乱了的字母乱码。”
“……不对,密文长度是69,奇数,棋盘密码要求每两个字母对应一个原始字母,密文长度应该是偶数才对。69是奇数,说明至少最后有一个字母是多余的,或者……”
“中尉!帮我重新数一下,有没有遗漏……”
中尉赶紧拿起信纸,从头开始数,嘴里念念有词,手指在纸面上逐字划过。
如果棋盘密码不对,那会不会是棋盘密码的变体,比如不是5x5而是别的维度?或者……不是棋盘,而是某种字母-数字双向映射,把明文和数字互转之后再套一层替换?
又或者……
他目光落在那封情书的最后几行上。
“……跟着我重复:我爱你,我爱你,我爱你……”
他注意到一个细节。
这封信里我爱你这个词组出现了不止一次。在法语原文里是je t'aime,但信里用的是各种变体,比如mon amour、ie t'adore、ie t'aime混着来。
如果加密者需要把特定字母按特定顺序塞进文本里,那他会不会在某些固定位置反复使用同一个单词,来确保某个关键字母出现在密文里的特定位置?
这或许是棋盘密码的变体……比他原本想的还要复杂……
中尉数完了,手指从信纸末尾抬起来,抬头看向克劳德。
“六十九个,没错。”
啧……六十九。要么最后多了一个字母,要么……
“等等!不是缺了一个,是多了九个。”
他抓起铅笔,在便签上把那串字母按五个一组重新排开:
vqvel egran dprot ectur etlae tlato tepar laqrs qlala gnema qtreq nfran caqse caqxa tqoon fqrm
“你们看,如果去掉最后九个字母,前面刚好是六十个,六十是偶数,刚好可以两两分组。”
他飞快地把前六十个字母两两配对:
vq ve le gr an dp ro te ct ur et la et la to te pa rl aq rs ql al ag ne ma qt re qn fr an ca qs ec aq xa
“vq、ve、le、gr,你们看!”
“le!这是法语里的定冠词!gr,grand!大的!prot,protecteur!保护者!这些拼得出来”
会议室里几个人同时把脑袋凑过来,盯着那排两两分组的字母。
“而且vqve……这会不会是vive?万岁?法国人的文件是不是开头先来一句什么万岁?法兰西万岁?祖国万岁?就和我们的皇帝万岁一样?”
瓦尔特·尼古拉上校猛地从椅子上站起来,立马激动的开口道:
“对!之前截获的一份残缺电文,密码组只翻出来一两个词,头一个就是万岁,但后面接什么我们一直不知道!”
克劳德心中一喜,立马下结论道:
“我知道了!这就是棋盘密码的变体!他们把明文字母转化成5x5棋盘里的坐标(x,y),然后把x和y互换位置,再映射回字母表!”
“比如v在普通棋盘里是第5行第1列,坐标就是(5,1)。互换之后变成(1,5),再查表,第1行第5列是e!所以v加密后变成了e!”
“但如果某个字母的x坐标恰好等于y坐标,比如第3行第3列的字母是n,n的坐标(3,3),互换之后还是(3,3),所以n加密后还是n!”
“v在正常情况下不会出现不变的情况,但如果密钥排序让某些v的x和y碰巧相等……”
“这就是为什么密文里v出现了这么多次却略显突兀,不像是被替换掉的,正是它的xy碰巧相等!”
“快试!用vive、法兰西、拿破仑这些可能作为密钥的词试!”
瓦尔特扑回自己的桌子,翻出密码组之前整理的法国常用词表,哗哗地翻页。
“如果vive对应vqve……v加密后是v,i加密后是q,v加密后是v,e加密后是e……”
他手指在纸上颤抖着推算:
“v的xy相等……i变成了q……标准棋盘里i是(2,3),互换应该是(3,2),但密文里是q……”
就在这时,克劳德突然又发现了一个事情,除开v没有变化之外,p的位置似乎也没变,比如prot等……
这明显是这个字母原来的位置,这说明p在棋盘中应该处于对角线上,xy是相等的。
“各位……p好像也在对角线上,p的xy坐标是相等的!我们现在开始推算,假设p是(1,1)一直试到(5,5)”
众人对视一眼,的确,p的位置也像是没有打乱的情况……他出现的位置像是原词存在的地方。
如果p是(1,1)的话,也就是密钥词的首位……
小毛奇沉思着,过了一会开口道:“法语有什么p开头的,和民族或者荣耀相关的口号词?”
众人沉默……
克劳德也暂时想不到,他的目光扫过那串已经两两分组的前六十个字母……
gr——grand,prot——protecteur,fran——france,ca——ça……
这些词已经浮出水面了……看来这次发报的这个间谍是个新手,虽然明面上打乱的很厉害,但是一些词根却因为加密不当可以看出端倪。
不过……克劳德看了下旁边的一份文件,里面称呼护国主为protecetur?这是不是拼错了?
“呃……这个……protecteur……保护者。但正常法语里这个词拼作protecteur,t后面是e,u,r。这里却是protecetur,多了一个e。”
会议室里安静了一瞬。
“这是拼写错误吗?还是……有什么别的缘由?”
“不,”瓦尔特摇头,“法国人为了区分克伦威尔那位英国护国公,也是为了神化他,专门给戴鲁莱德造了一个新词,protecetur”
克劳德猛的转头看向瓦尔特:“那戴鲁莱德在法国被称为什么?就是这个?他的正式头衔是什么?”
瓦尔特愣了一下,随即反应过来:
“protecetur de la republique……共和国的护国主。”
克劳德抓起铅笔,在棋盘里写下护国主的称号,再刨去重复的字母……
他心算了一下,现在又有个新问题,前面对的上后面又对不上了……
他记得后世有一种密码为了防止词频异常被看出端倪,如果他们通过将一个字母重复填入棋盘,或者让一个词有好几个对应密文来混淆视听……
如果关键词密钥允许重复填入棋盘呢?
也就是密钥是protecetur?!第五位和第七位是e,那e的第二个密码在棋盘的位置岂不是(2,2)?!所以e不变!
刚好密文的开头是vqve,而正常的原文是万岁vive,这其中v不变!e也不变?!
“各位!我知道了!密钥是protectur!密钥词就是护国主的称号!”