密码的起源
凯撒密码:史上第一个被记录的加密算法
公元前58年,尤利乌斯·凯撒正带着他的军团在高卢(今天的法国一带)打仗。他手下八个军团,分布在几百公里的战线上,命令要靠信使骑马传递。问题是,信使要穿越敌占区,一旦被抓住,命令泄露,整场仗就可能输掉。
凯撒的解决办法简单粗暴:他把每个字母往后挪三位。A变D,B变E,C变F,一直下去,X变A,Y变B,Z变C。比如拉丁文的"HELLO"就变成了"KHOOR"。收到信的人,只要反过来挪三位,就能读懂。
这个办法今天看简直幼稚。可在两千多年前,识字的本来就少,能读拉丁文的人更是凤毛麟角,再加上这层字母替换,安全性已经够用了。苏维托尼乌斯在《罗马十二帝王传》里专门记下了这件事,说凯撒"用密文给朋友和官员写信",特别是军事机密。这是人类历史上第一个有明确文字记载的加密算法,被后人叫做"凯撒密码"。
凯撒密码的意义不在于它多难破——它一点都不难。它的意义在于,这是人类第一次有意识、有系统地用数学变换来保护信息。从这一刻开始,密码学和数学就紧紧绑在了一起,再也没分开过。
凯撒这个人有个特点,他干什么都讲究"标准化"。他改历法(儒略历),他统一度量,他搞城市规划。密码也一样,他不是临时拍脑袋编一套,而是固定用位移3这个参数。这种"算法化"的思维,比密码本身更超前。
顺便说一句,凯撒密码的位移不一定是3。后世有人用位移1到25的各种变体。但因为是凯撒先记录在案的,所以这一类位移密码统统被冠上了他的名字。一个人的名字能挂在一个算法头上两千年,也算是一种不朽。
比凯撒还早的斯巴达密码棒
但凯撒密码真是人类最早的加密术吗?其实还要更早。
公元前5世纪,斯巴达人就发明了一种叫"密码棒"(scytale)的工具。说起来原理特别朴素:找一根木棍,把一条窄羊皮纸紧紧缠在上面,沿着木棍的长度方向写消息。写完之后把羊皮纸取下来,上面就是一串乱七八糟的字母——只有拿着同样粗细的木棍重新缠上去,才能读出原文。
这玩意儿看上去像玩具,但它背后的数学思想其实挺高级。它是一种"换位密码"(transposition cipher)——字母的顺序被打乱了,但每个字母本身没变。今天的密码学分类里,换位密码和替换密码是两大基础门类。斯巴达人两千四百年前就把其中一门的门给推开了。
普鲁塔克在《希腊罗马名人传》里详细描述过scytale的用法。斯巴达的将军们用它给前线的指挥官发命令,特别是海军将领。当时的希腊世界,斯巴达和雅典打伯罗奔尼撒战争,情报战打得热火朝天,密码棒就是斯巴达人的看家本领之一。
密码棒有个致命的弱点:你只要试遍各种粗细的木棍,总能找到对的那根。公元前的"暴力破解"虽然笨,但不是做不到。可即便如此,它已经是那个时代能做到的最高水平了。
阿拉伯密码学的黄金时代
凯撒之后一千多年,欧洲的密码学基本停滞。真正把密码学推进到"科学"层面的,是中世纪的阿拉伯世界。
公元9世纪,阿拉伯学者肯迪(Abu Yusuf al-Kindi,约801-873年)干了一件惊天动地的事:他写了一本叫《破译加密信息手稿》的书,第一次系统地阐述了频率分析法。这是个革命性的突破——它意味着替换密码不再是安全的。
频率分析的道理简单得让人拍大腿。在任何一种语言里,字母出现的频率是有规律的。英语里E出现得最多,大约占12.7%;其次是T、A、O、I。阿拉伯语里,字母Alef出现得最多。你只要数一数密文里每个字母出现了多少次,猜出哪个字母对应原文里最常出现的那个,密码就破了一大半。
肯迪不仅提出了频率分析,还给出了具体的方法步骤。他建议:先找最常出现的字母,再找双字母组合、三字母组合的规律,结合上下文推断。这套方法今天听起来理所当然,但在9世纪,这是天才级别的洞见。
阿拉伯世界对密码学的兴趣不是凭空来的。当时的阿拔斯王朝(首都巴格达)是世界上最繁华的地方,行政、税收、外交、军事,哪个都需要保密。统治者雇了大批抄写员(katib),这些人精通书法、文牍,也精通加密。历史学家伊本·阿德兰(Ibn Adlan,1187-1268)甚至写过一篇论文,专门讨论密码分析里"样本量"的问题——他指出,要可靠地破译,密文至少要有一定长度,否则频率分析不准确。这已经是非常现代的统计学思维了。
阿拉伯密码学家还有一个贡献:分类。他们把密码分成替换、换位、符号替换(用特殊符号代替字母)等多种类型,对不同类型给出不同的破译方法。这种系统化的知识体系,让密码学第一次有了"学科"的样子。
可惜的是,阿拉伯世界的这些成果,欧洲人直到几百年后才知道。中世纪欧洲的密码学水平,比阿拉伯差得不是一星半点。
文艺复兴的密码术:从手艺到科学
到了13到16世纪,欧洲终于缓过劲来。意大利的城邦——佛罗伦萨、威尼斯、热那亚——商业发达,外交频繁,对保密通信的需求一下子暴涨。密码学在意大利迎来了真正的黄金时代。
1412年,意大利学者兰贝蒂(Raniero Lamberini,后来的教皇乌尔班五世的秘书)写了一本叫《组合术》的书,里面用阿拉伯数字给字母编码,做出了一份"密码表"。这份表格化的思路,把密码学从"经验"推向了"方法"。
1466到1467年间,意大利建筑师、博学家阿尔伯蒂(Leon Battista Alberti)发明了"密码盘"。这是两个同心圆盘,一个写明文字母,一个写密文字母,两个盘可以相对旋转。每加密几个字母,就转一下盘,密码表就变了。这在密码学史上是革命性的——它意味着同一个字母在不同位置会被加密成不同字符,破译难度陡增。阿尔伯蒂被后人尊称为"西方密码学之父",靠的就是这个发明。
阿尔伯蒂的密码盘引入了"多表替换"(polyalphabetic substitution)的概念。简单替换密码里,A永远对应某个固定字母;多表替换里,A在不同位置对应不同字母,规律只有发送方和接收方知道。频率分析对这种密码失效了——因为字母频率被打散了,你数出来的统计分布是平均的,看不出哪个字母是E。
1553年,意大利人贝拉索(Giovan Battista Bellaso)提出了"密钥词"(key word)的概念——用一个单词或短语作为加密的密钥,反复使用来选择替换表。这个思路一直沿用到今天。
到了19世纪,法国人维吉尼亚(Blaise de Vigenère)在贝拉索的基础上完善了一套多表替换密码,后被命名为"维吉尼亚密码"。这套密码在当时被认为是"无法破译"的(le chiffre indéchiffrable),统治了欧洲外交和军事通信将近三百年。直到19世纪中叶,英国人巴贝奇(Charles Babbage,那个造差分机的人)和普鲁士军官卡西斯基(Friedrich Kasiski)才先后找到了破译它的方法。
案例:苏格兰玛丽女王的密码
讲古代密码学,绕不开苏格兰玛丽女王(Mary, Queen of Scots,1542-1587)。这是一个用密码学的真实案例改写历史的故事。
1586年,玛丽被表姐英格兰女王伊丽莎白一世关在牢里已经18年了。玛丽是天主教徒,伊丽莎白是新教徒,英格兰国内有一大批天主教徒想推翻伊丽莎白、扶玛面上位。一个叫巴宾顿(Anthony Babington)的年轻贵族,组织了一个刺杀伊丽莎白、营救玛丽的密谋团伙。
巴宾顿和玛丽之间的通信,全部用密码加密。他们用的是替换密码——字母换成特殊符号,再加上一些"空字符"(无意义的符号)和"诱饵词"(代表常用词汇的代号,比如用某个符号代表"女王")。这套密码在当时算相当复杂了,有23个字母符号和35个替代符号,总共将近60个字符。巴宾顿他们觉得万无一失。
问题是,伊丽莎白的国务大臣沃尔辛厄姆(Francis Walsingham)是个搞情报的天才。他手里有个密码分析专家菲利普斯(Thomas Phelippes)。菲利普斯是个瘸腿的小个子,但对密码有近乎病态的敏感。他拿到密信之后,用频率分析法一个符号一个符号地猜。几个星期下来,密码被攻破了。
更狠的是,沃尔辛厄姆还想拿到"实锤"。他让菲利普斯在破译后的信件末尾,用巴宾顿他们用的密码符号,加了一段伪造的"附言"——大意是请玛丽把刺杀计划的具体细节再讲讲。玛丽收到后,回信详细描述了刺杀方案。这下,谋反罪板上钉钉。
1586年10月,巴宾顿团伙被处决——绞刑、剖腹、分尸,惨不忍睹。1587年2月8日,玛丽在福瑟林黑城堡被砍头。
玛丽女王的故事之所以在密码学史上反复被提起,是因为它揭示了一个深刻的道理:密码的安全不在于密文看起来多乱,而在于数学上有多难破。 玛丽的密码有60个符号,看着复杂,但本质上还是单表替换,频率分析一上就垮。一旦密码被破,阴谋就成了请君入瓮的陷阱。
本章小结
回到这一章的主线:人类从什么时候开始用数学保护信息?
答案是从两千多年前开始。凯撒用位移,斯巴达人用换位,阿拉伯人发明了频率分析,意大利人搞出了多表替换。每一次进步,都是数学思维的进步——从简单的字母搬动,到统计规律的发现,到表格化的密钥系统。
密码学这个词本身来自希腊语"kryptos"(隐藏)和"graphein"(书写),意思就是"隐藏的书写"。但隐藏只是表象,真正撑起这门学科的,是数学。位移、置换、频率、组合,这些抽象的数学操作,几千年前就被人类用来打仗、搞外交、搞阴谋。
到16世纪末为止,密码学还停留在"手艺"阶段——会的人靠师徒传承、靠经验积累,破译主要靠运气和耐心。但从17世纪开始,情况要变了。工业革命、民族国家、世界大战,每一次巨变都把密码学往前推一大步。下一章,我们就跳到第一次世界大战,看看一份加密电报是怎么把美国拖进战争、改变20世纪走向的。