语言密码
本科上数论课,讲到密码学,具体数学细节都忘了,只记得老师讲过一个核心机制,就是找到一种正过程与逆过程完全不对等的运算。例如我们最早学习的加法与减法,在运算性质上几乎是同质的,而幂与开方,难度就不那么对称了。 当然,这样的难度差距来建立高级密 …
Dreaming as the summers die
Eager eye and willing ear to guide
No thought of me shall find a place
Golden afternoon we glide
Autumn frosts have slain July
In a Wonderland they lie
In my young life’s hereafter——
Still she haunts me, phantomwise
Beneath the setting sun
A tale begun in other days
Child of the pure unclouded brow
Kingdom never seen by waking eyes
这首诗的本意不是藏头,而是致献爱丽丝。这些诗句都不是我做的,不过混摘了两部爱丽丝里的三首诗歌,一些略微的缀玉连珠,以遐应离开时所言的“兔子洞”。
这三首诗中我最喜爱的最后一首,是镜遇记的卷尾诗——
A boat, beneath a sunny sky
Lingering onward dreamily
In an evening of July
Children three that nestle near
Eager eye and willing ear
Pleased a simple tale to hear
Long has paled that sunny sky
Echoes fade and memories die
Autume frosts have slain July
Still she haunts me, phantomwise
Alice moving under skies
Never seen by waking eyes
Children yet, the tale to hear
Eager eye and willing ear
Lovingly shall nestle near
In a Wonderland they lie
Dreaming as the days go by
Dreaming as the summers die
Ever drifting down the stream
Lingering in the golden gleam
Life, what is it but a dream?
平白的修辞,悠长的意境,梦竟幻终的怅惘感,无比契合这个故事的终章,在陪伴爱丽丝历险完后,哪怕离开了兔子洞,依然魂牵不尽,梦绕不绝。
同时它也是致敬的思缘所起——这首诗藏头字母组成了爱丽丝的全名:Alice Pleasance Liddell。
曾经发过这么一段话(https://mp.weixin.qq.com/s/OHI4Bq9Z4H_TRlnHtjAiyw),关于周知世界的明文,关于私属知音的密钥。
刚进入大学,在一门叫《高等代数与解析几何》的课上,讲到行列式时,那位白发和蔼的老教授提到过爱丽丝的创作者,刘易斯·卡罗尔。
卡罗尔不仅是一位诗人,作家,是一位数学家与逻辑学家,爱丽丝中也穿行着许多文字,语法,逻辑乃至数学的玲珑游戏,极难翻译,本书的第一位中文译者,也是通识数学与语言学的赵元任说,“书里头顽字的笑话太多,本来已经是似通的不通,再翻译了变成不通的不通了,所以没有人敢动它”。赵最后翻译时,为尽可能还原机巧,还附了特别词汇对照表与《凡例》作注。
赵译版“阿丽思”扉页有一句孟子的话,“大人者,不失其赤子之心”。
后来数论课,也就是前述微博提到和密码有关的那门课,老师提到了两个作家,一个是爱伦·坡,另一个又是刘易斯·卡罗尔。
对于英语(以及其他拉丁字母语言),有一类在思路非常原始而自然的密码,就是把字母按字母表顺序错移,例如,A后移一位成为B,B成为C,依此类推。
DENGAI IS BACK »»> EFOHBJ JT CBDL
偏移量也可以是2或者其他数字,这样A后移两位成为C,也可以往前,A前移一位成为Z。
这一类密码叫凯撒密码。它实在是过于简单了,因为所有的字母都按同一偏移量位移,也就是只可能有25种步长,方向也只有两个,就算穷举,试也能试出来。何况在文本足够多且有意义的情况下,用频率分析(接下来会详述),很快就能确定某个关键字母的映射,由于偏移量一样,相当于所有的字母映射都确定了。
到了这里,人们自然会想,字母到字母的映射,不必都按同一种方式,比如A到B时,C不必到D,可以到H,可以是完全无规律的,只要双方约定好这个映射表,而不被他人获知,就能进行逆运算而破译。这时候用穷举法,可能性空间就不是25种,而是25!种,在没有计算机的时代,这是非常艰巨的任务。
这类单表密码虽然穷举破译难度大,但由于字母到字母的映射是确定且唯一的,A不管在何种规则下约定映射到哪个字母,这篇文本里所有的A都会映射到这个字母。这种特征在英语世界会遇到一个有趣的天敌,频率分析。
感觉一下,英文中出现频率最高的字母是哪个?
答案是e。在这个事实前提下,面对有意义的英语文本时,我们统计密文出现频率最高的字母,倾向于认为它映射到e,这个结论未必总是正确,但文本量越大,这种推断的可靠性越高。而且,在字母的频率分析基础上,还可以辅助以单词的频率分析,例如the是出现频率极高的三字单词,如果密文中有三个字母固定组合反复出现,可以推断它们就是the的映射,还有,以 ESDT结尾的单词在日常英语中超过一半。这种方法没有固定的步骤,只是一种综合性角度。
爱伦·坡也是一位很喜欢在小说中使用密码学的作家,他的作品《金甲虫》中曾体现了这种频率分析的思维,在一段数字与字符构成的密码中,统计出频率最高的是数字8,然后认为它指向了e。福尔摩斯探案《跳舞的小人》中也有类似情节,更广义地,某个出现次数最多的跳舞小人符号,也是对应e。
如果要对抗频率分析,很顺势的想法是要打破某个字母只能固定映射到某个字母的模式,譬如A在一句话中,在这里被加密到B,在后一处被加密到C,这样统计单个字母的出现次数,便毫无意义,因为它未必是由同一个密文字母映射而来的。
刘易斯·卡罗尔曾独立但非首次提出过一种加密方法(其他人也创造过),他将其称为“字母表密码”,现在更通用的名字是维吉尼亚密码。这种密码某种程度上说,是凯撒密码的拓维,相当于每个字母都配套一张单独的并不断变化的位移映射表,而这些表的确定,则服从某种循环规则。
我在前面有写过——
“有些加密具有这样的特征:即使公开明文与运算规则,直接逆向运算也难度艰巨到几乎不可能实现。密文的破译需要借助密钥,密钥可以让逆运算成为可能,且简单易行。”
“言语复杂到一定程度,的确是会引发某种粘连到人格的质变,并得以天然自加密地定向传递到能够触及的心灵,被破译,被理解,哪怕用的是公开的运算规则,那些人人都掌握的语法。
因为不是每一个读者都拥有把表达逆向还原到感受与意义的密钥,他们丢失在不屑回看自我的狂妄中。”
在没有技术解释下,我想很多人对“公开明文与运算规则”,甚至公开映射表,但没有密钥则很难逆运算这件事可能只有一种感受性的理解,刘易斯·卡罗尔的字母表密码,则能非常清晰又简明地体现这一特征。
我找到一个很直观的字母表密码演示器(网站名就是lewiscarrollresources,网站小图标就是爱丽丝与三月兔)。
字母表密码的映射表很简单,如下图,就是一张26x26的字母矩阵,它表示,任何一个字母都有可能映射到其它26个字母上,对,是26个,不是25个,因为每个字母的映射规则都不同,所以单独的字母投向自己,也没有关系。
在加密与解密一条文本前,首先要确定一个密钥,因为加密规则是人尽皆知的,所以密钥只有发起者与接收者能够知道。
首先随便选择一个单词作为密钥,比如Alice,如果我要加密明文,dengai is back,则第一个字母d,由密钥第一个字母a确定映射表(如下图,a对应的绿色行即是),将d按这一行映射到……哦,就是d本身,第二个字母e,按密钥第二个字母l那一行,确定映射到p……依次类推。当密钥Alice5个字母用完后,到denga后的i了,则循环该密钥。
DENGAI IS BACK »»> DPVI EI TA DECV
下图很清晰地展示了每一个字母在对应Alice密钥下的映射过程。可以看到,明文中出现了两个i,但由于对应的密钥字母一个是a,一个是l,所以分别映射到了不同的字母i和t。
由于密钥的内容完全随意,甚至长度都不确定,可以映射的随机性极大,但只要知道密钥是alice,对着映射表逆推回去,则非常轻松。
好了,我真的写得很累了,我这样热爱感受,厌恶逻辑的人,让我有条理长篇幅地讲述事理,真是折磨。开头时只想写爱丽丝,兔子洞与刘易斯·卡罗尔,不知道怎么走偏了,唉,其实到凯撒密码那里我就觉得极无聊而想停止,但总要让卡罗尔出场吧……
又,爱伦·坡也是一位妙人,《莫格街凶杀案》开头有一段对聪明类型的小议论,令明晓之人感慨“表达出了我一直感受到但不知如何表达的事情”。他的洞见与观察非凡,非天文专业的背景,只是几句诗意化的感慨,就最早给出了奥伯斯佯谬“夜空为什么是黑暗的”的正确思路。
最后,祝大家不要丢失兔子洞与星空,永葆奇异想象力与原初好奇心,在现实世界的挤压中能够随时闪身进骤得的月台,晴朗的眉不堆阴云,梦醉的眼看见奇境,庸碌与幻妙穿错一生后,在老去的金色午后喃喃自语——Life, what is it but a dream?
本科上数论课,讲到密码学,具体数学细节都忘了,只记得老师讲过一个核心机制,就是找到一种正过程与逆过程完全不对等的运算。例如我们最早学习的加法与减法,在运算性质上几乎是同质的,而幂与开方,难度就不那么对称了。 当然,这样的难度差距来建立高级密 …