- 应用密码学:原理、分析与Python实现
- 刘卓 赵勇焜 黄领才编著
- 2771字
- 2024-12-11 16:52:21
1.1 密码学简史
1.1.1 古代密码学发展
中国古代很早就有使用密码的传统。《孙子兵法》有言:“知彼知已,百战不殆;不知彼而知己,一胜一负;不知彼,不知已,每战必殆。”[1]知彼就是了解对手的实力强弱、作战计划、战略方针等信息,情报的数量及准确性甚至可以直接决定战争的胜负。战争历来是使用密码最频繁的地方,比如“对口令”就是密码校验的过程。因此中国古代的军队中也拥有不少巧妙、规范和系统的保密通信和身份认证方法。比如作为调遣军队凭证的虎符,就是中国古代非常经典的身份认证方法之一。春秋战国时期,魏国信陵君正是通过窃取魏王的虎符,在通信不发达的当时完成了以密码确认身份信息的过程,从而夺取兵权,率兵大破秦军,解了赵国邯郸之围。
春秋战国时期的兵书《六韬・龙韬・阴符》[2]中也介绍了中国古代战争中君王与征战在外的将领是如何进行保密通信的。武王问太公,假如军队深入敌后,遇到紧急情况,该如何保持密切联系?太公回答:使用阴符进行秘密联络。阴符共有8种。
1)长一尺的符,表示大获全胜,摧毁敌人;
2)长九寸的符,表示攻破敌军,杀敌主将;
3)长八寸的符,表示守城的敌人已投降,我军已占领该城;
4)长七寸的符,表示敌军已败退,远传捷报;
5)长六寸的符,表示我军将誓死坚守城邑;
6)长五寸的符,表示请拨运军粮,增派援军;
7)长四寸的符,表示军队战败,主将阵亡;
8)长三寸的符,表示战事失利,全军伤亡惨重。
若奉命传递阴符的使者延误传递,则处死;若阴符的秘密被泄露,则无论是无意泄密者还是有意,传告者都将被处死。只有国君和主将知道这8种阴符的秘密。这就是不会泄露朝廷与军队之间相互联系的内容的秘密通信语言。敌人再聪明也不能识破它。
正是因为阴符的可靠、有效及保密性,后世继续对阴符进行了传承和改进,才有了“符契”和“阴书”等高阶形式。而“符”在实际使用中,作为凭证,是由竹子做的,并做成两部分,使用时一分为二,验证时合二为一。只有同一“符”的两部分才能完美地合在一起,这就是常用词“符合”的来历。
后世的军事家对情报传输做了更多的改进。宋朝天章阁待制曾公亮和工部侍郎丁度在编著《武经总要》时,对阴符做了改进。《武经总要》是中国古代著名的军事著作[3],是中国第一部由官方主持编修的兵书。在该书前集第15卷中有“符契”“信牌”和“字验” 3节,专门介绍了军队中秘密通信和身份验证的方法,如图1-1所示。“符契”源于秦汉时期的调兵虎符,“符”用于朝廷调遣地方军队,“契”为上下两段鱼形,是军队主将向部属调兵的凭证。“符契”由主将掌握,并且使用“符契”后,必须由专人书面记载使用记录,再由专人押递照验。
图1-1 《武经总要》秘密通信方法
“信牌”主要用于两军阵前交战时,传送紧急命令,初期用一分两半的铜钱,后来则用可以写字的木牌。
“字验”是以诗词为载体的军事通信“密码”,类似于现代军队使用密码本进行通信。《武经总要・制度十五・字验》记载了使用方法,即事先将要联络的事项以术语的形式编排好次序,将领们平时均加以熟记,每次作战之前,主将与每个受命出战的副将约定一首无重复的五言律诗为“字验”。若有事报告,就随意写成一封书信,将要报告之事的次序对应该诗中的第几个字,然后在普通书信中的该字旁加一记号即可。
例如,《武经总要・制度十五・字验》记载其规定联络事项的术语及次序是:(1)请弓; (2)请箭;(3)请刀;(4)请甲;(5)请枪旗;(6)请锅幕;(7)请马;(8)请衣赐;(9)请粮料;(10)请草料;(11)请车牛;(12)请船;(13)请攻城守具;(14)请添兵;(15)请移营; (16)请进军;(17)请退军;(18)请固守;(19)未见贼;(20)见贼讫;(21)贼多;(22)贼少; (23)贼相敌;(24)贼添兵;(25)贼移营;(26)贼进兵;(27)胧退军;(28)贼固守;(29)围得贼城;(30)解围城;(31)被贼围;(32)贼围解;(33)战不胜;(34)战大胜;(35)战大捷; (36)将士投降;(37)将士叛;(38)士卒病;(39)都将病;(40)战小胜。
假设主将与副将规定使用《使至塞上》一诗作为“字验”。《使至塞上》共40字,无重复,符合要求。《使至塞上》全文如下:
单车欲问边,属国过居延。
征蓬出汉塞,归雁入胡天。
大漠孤烟直,长河落日圆。
萧关逢候骑,都护在燕然。
假若副将在战争进行中发现敌军增援后,军队被包围了,想把第24项和第31项军情报告给主将,在报告中就需要设法写进“烟”和“萧”这两个字,并在这两个字旁边做好标记,如点一个黑点或洒一滴水等。主将看到后,想请副将坚守再解围城,那么在回复中,主将也需要设法写进“入”和“圆”这两个字并做好标记。主副将之间就完成了沟通,即使被敌人截获,因为古代诗词无数,信使也不知道这封信使用了哪首诗,因此无法破译。相比阴符,它所能表达的军事状况更多,更加方便主将做出决策。后来李淑又将五言律诗改为七言绝句,使用了传播范围不那么广的民间绝句,进一步加强了军事情报传递的安全性。
明朝抗倭名将戚继光在战场上使用了反切码作为加密手段。反切是一种注音方法,戚继光利用“反切注音方法”,编写了密码本。通过该密码本,只有我方的情报人员和将领知道信息的真实含义,传递人员和普通士兵无从知晓。
明末清初著名的军事理论家揭暄所著的《兵经百言》中也详细介绍了军队中的秘密通信方法。《兵经百言》的《术篇・传》下有论述:军队分开行动后,如相互之间不能通信,就要打败仗;如果能通信但不保密,则也要被敌人暗算。所以除了用锣鼓、旌旗、炮声、骑马送信、传令箭、燃火、烽烟等联系手段,两军相遇,还要对暗号。当军队分开有千里之远时,宜用机密信进行通信。机密信分为3种形式,即改变字的通常书写或阅读方式;隐写术;不把书信写在常用的纸上,而是写在特殊的、不引人注意的载体上。使用这些通信方式连送信的使者都不知道信中的内容,但收信人却可以接收到信息。由此可见,在中国古代战场上,秘密通信的受重视程度是非常高的。
密码不仅在中国战场上使用频繁,在国外战争中也是如此,著名的凯撒密码就是古罗马时期为了确保在战争中进行有效、可靠的秘密通信而发明的。根据苏维托尼乌斯的《罗马十二帝王传》:如果需要保密,信中便用暗号,也就是改变字母顺序,使局外人无法组成单词。如果想要读懂和理解它们的意思,得用第4个字母置换第字母,即以D代A,以此类推。当时的人们还没有办法破解这样的密码,直到公元9世纪阿拉伯的阿尔・肯迪才发现可用频率分析来破解凯撒密码,他将方法写在了《破译加密信息手稿》一书中。
大约在公元前700年,斯巴达人使用一种叫作“Scytale”的圆木棍进行保密通信,它也被称作密码棒,如图1-2所示。它使用起来很简单,把长条带状的羊皮纸缠绕在一根圆木棍上,然后写上想要传达的信息,写完后从圆木棍上解下羊皮纸,上面的字符就被打乱顺序了。只有再以同样的方式将纸缠绕到同样粗细的圆木棍上,才能看明白所写的内容。
图1-2 Scytale