凯撒大帝的加密术:剃光士兵的头 烙上不同印迹 |
2011年01月 来源: 光明日报 |
送上开场诗一首:我用相思作玉杯,真情当酒意相随。爱心已醉何时醒,你似蝴蝶梦里飞。
你可以把这首诗发给女友,聪明的她一定能看出这是藏头诗。其实,藏头诗就是一种加密术,它反映出了加密术的本质——变换坐标系。
加密术最早应用于古代战争,传说凯撒大帝有一个能加密的办法,就是在写命令前做一个对应表,明码:A B…Y Z,密码:D E…B C,如果他想写BABY,就用EDEB来表示。
但是这种简单的加密方法很容易被敌方猜到。敌人从1到25推25次,得到25组新编码,必有一种是真的。把这组编码区别出来非常容易,因为其他24组都是毫无意义的字母组合,找个识字的人就可以看得出来。
有个聪明人给凯撒出了个主意,搞个乱序的。例如A对Q,B对F,只要保证一一对应没重复就行了——这种方法被后人称为“单表系统”。
这招很不错,但它还是有一个漏洞。以英文为例,一篇文档里每个字母出现的次数是不同的(见左图)。例如E出现的最多,如果一份密文中R出现的最多,那会不会就是E?即使不是E,也应是明文中出现次数较多的字母。按照这种思路,天啊,密码解开了。
现在又轮到加密方纠结了。他们想:如果把频次区别消除掉,敌人不就没办法了吗?
有一天加密方终于找到了解决问题的关键——“多表”。就是每个明文都对应多个密文,例如A分别对应着XGV,这三个密文的选择取决于明文的位置,A在第一位时选X,第二位时选G,第三位时选V。将整个一段明话按三位一段进行分组后就可以加密。这个例子是三维的,维数越多就越难破译。这种多表系统虽然也有统计规律可循,但只短短一段密文是不足以找到规律的。
其实凯撒还可以称得上隐写术的鼻祖。他知道自己的加密术并不很安全,有人又给他出了一招:把一批士兵的头发剃光,用火烙铁在脑顶上烙上不同印迹,并做好记录,但士兵们却一头雾水。大战之前,凯撒要求大将们牢记一组对应关系,梅花疤代表“马上率部向我驰援”,三角疤代表“固守阵地”等等。
战斗中凯撒被围困了,情况很危机。他拿来记录本,把烙梅花疤的几个人都点了出来,命令他们沿不同的路线到大将处报到。这些人出发了,有的人成功地找到了大将,二话不说被剃了头发。也有人被俘,严刑拷打也问不出情报,因为他的确不知道情报。距离剃头烙疤的时间已经很久了,士兵新长出的头发已经遮盖了烙疤。
随着计算机的诞生,这些被称为古典密码术的方法全部失效,因为它们根本抵挡不住计算机的穷举分析。现代密码学的思路跟古典密码术非常不同,它是先找出一个数学难题,然后把加密方法归结到这个难题,若解不出这个数学难题就破解不了密码。隐写术也逐渐脱离了物理和化学反应,而是与加密术结合了起来,把秘密隐藏在数据中。现代密码学更加引人入胜。(奥卡姆剃刀)