2.3 宋元密码
为啥要从上节的周朝突然穿越约2000年,直接跳到宋朝呢?这当然绝不意味着春秋战国、秦汉、三国、隋唐等朝代就没有密码专家,比如,诸葛亮、曹操、司马懿等所有著名的军事家都可算作密码专家;也不意味着这期间就没有密码进展,比如,《孙子兵法》《孙膑兵法》等所有著名兵书,也都或多或少地涉及信息保密。又比如,汉朝时就发明了一种旗语密码,即利用旗帜发送秘密信号:不同的旗帜,代表战场上的不同军队。直到今天,旗语还在广泛使用;比如,利用旗帜在海上传递消息和区分船只的国籍或功能等。当然,系统性的旗语,是在拿破仑战争时期,由英国人发明的,它可实现船与岸间的消息传递。今天所用的国际海洋旗语,是1932年确立的。
但是,从纯粹的密码技术角度来看,从周朝到宋朝之间的密码突破确实不多,至少未留下任何文字方面的证据;当然,在前人基础上所做的相应改进还是非常突出的,比如,伊尹虽是使用间谍的第一人,但《孙子兵法》的第13篇“用间”,才把间谍的作用发挥到了极致。可惜,限于篇幅,本书只关注密码方面的原创技术。
比如,若从兵法角度看,《孙子兵法》的影响肯定远远超过另一本兵书《武经总要》;但是,后者却是中国最早的、涉及密码的官方著作,该书完成于北宋时期,其作者为宋仁宗时的文臣曾公亮和端明殿学士丁度;二人奉皇命于康定元年至庆历四年(1040—1044),花费了整整5年时间,才最终编成。《武经总要》是宋仁宗下令编纂的中国第一部官方兵书,成书之时距宋朝立国已有60多年,但为防止武备松懈,为提倡文武官员研究历代军旅之政及讨伐之事,便编纂了一部集当时及更早期兵器之大成的、内容广泛的军事教科书,仁宗皇帝甚至亲自核定了此书内容,并为它写了序。该书包括军事理论与军事技术两大部分:第一部分共20卷,详细反映了宋朝的军事制度,包括选将用兵、教育训练、部队编成、行军宿营、古今阵法、通信侦察、城池攻防、火攻水战、武器装备等,特别是在营阵、兵器、器械部分,每件都配有详细的插图;第二部分也按卷辑录了历代用兵故事,保存了不少古代战例资料,分析品评了历代战役战例和用兵得失等。
需要特别强调的是,《武经总要》中介绍的一种信息加密方法,叫作“字验”,它的加密、解密原理是:首先,事前约定某首五言律诗,共40个汉字。比如,约定的五言律诗是王勃的《送杜少府之任蜀州》:城阙辅三秦,风烟望五津。与君离别意,同是宦游人。海内存知己,天涯若比邻。无为在歧路,儿女共沾巾。其次,再事前约定,分别用1到40代表40种情况和要求;比如,用“1”代表“粮食将尽,请求增援”,用“2”代表“大获全胜”等。于是,若前方战场缺粮时,指挥官就根据事先约定,找到那首诗的第1个字,即“城”;然后随便写一封无关痛痒的家信,只要其中含有“城”字,并在“城”字上做一个标记。当该家信抵达后方时,收信方先找出带标记的那个“城”字,然后找到该“城”字在那首诗中的字序,即“1”;最后,再根据事先约定便知:“1”代表“粮食将尽,请求增援”,于是,赶紧响应。当然,如果收到前线来信标记的字是“阙”,即诗中的第“2”个字,那么,就该准备庆功了。在“字验”密码中所用到的五言律诗,可以随时更换,只要收发双方事先约定就行了;而五言律诗多如牛毛,所以敌方很难破译该密码。
除信息加密外,《武经总要》还介绍了另外两种密码方法,它们专用于身份验证,分别称为“符契”和“信牌”。这里的“符契”,其实是“阴符”的一种改进。所谓“符”,就是皇帝的调兵凭证;共有5种符,其中虎符最为知名,它一般由铜、银等金属制成,背面刻有铭文,以示级别、身份、调用军队的对象和范围等。各种符的组合,表示调兵的多少;每个符,分左右两段:右段留在京师,左段由各路军队主将收掌。使者带着圣旨和由枢密院封印的相应右符,前往军队调兵;主将听完使者宣读的圣旨后,须启封使者带来的右符,并与自己所藏的左符进行验合,如果左右两段确实吻合,才能接受命令;然后用本将军的官印,重新封好右符,交由使者带回京师。所谓“契”,就是主将派人向镇守各方的下属调兵的凭证;共有3种契,它们都是鱼形,可分为上下两段。上段留在主将处收掌,下段交各处下属收掌。契的使用方法,类似于上述的符。符契的思路,其实一直沿用至今,比如,近代间谍史上,也还常有人把纸币钞票一撕为二,作为接头联络的工具。所谓“信牌”,就是两军阵前交战时,派人传送紧急命令的信物和文件;比如,北宋初期使用的信物,是一分两半的铜钱,后来又改成木牌,上面可以写字,它们其实就是今天各类身份证件的最初样式。
为了纪念《武经总要》对密码的贡献,在此介绍一下该书的两位作者曾公亮和丁度,毕竟他们的名气还不够大,甚至许多理工科读者都没听说过他们;而且他们在密码方面的成就应该充分肯定,不该被遗忘。
曾公亮,公元999年出生于福建省泉州市。他虽是“官二代”,但自少时起就颇有抱负,气度不凡,为人“方厚庄重,沈深周密”。23岁那年,受父命进京祝贺宋仁宗登基,深受皇帝器重,并被破格任命为大理评事;但他却立志要“从正途登官,不愿以斜封入仕”,故未赴任。果然,两年后,就考中了进士甲科及第,被授为越州会稽知县。由于受父亲“以权谋私案”的牵连,曾公亮在29岁左右,被贬到湖州酒厂任监理;数年后,才又咸鱼翻身,入京任国子监老师,后改任诸王府家教,不久升任了一大堆令人眼花缭乱的官职,比如,集贤殿校理、天章阁侍讲、知制诰兼史馆修撰等;甚至,仁宗皇帝都当面赐给他一件金紫衣,并拍着他的肩亲切道:“朕于讲席赏赐你,是由于尊重宠爱儒臣。”再后来,他又升为郑州的长官;其治理才能之高,以至盗贼全都逃窜到其他州县,辖境之内竟“夜不闭户”。曾有外地高官在郑州境内丢失财物,状告到曾公亮处时,他自信道:“我郑州无贼,恐怕是你随从作案吧。”结果,曾公亮真的说对了!62岁那年,曾公亮升为宰相,曾大力支持王安石变法;还代表病弱的英宗皇帝宴请辽国使者,几杯酒下肚后,就圆满解决了双方的边界纠纷;70岁时,曾公亮升为鲁国公,80岁寿终正寝。神宗闻讯后,临丧哭泣,为这位影响极大的三朝元老辍朝三日,追赠太师、中书令,谥号“宣靖”,并准其配享宋英宗庙廷。到下葬时,神宗亲自为曾公亮的墓碑题词:“两朝顾命定策亚勋。”其实,除《武经总要》外,曾公亮还著有许多其他著作;比如,编撰了《新唐书》250卷、《唐兵志》3卷、《唐书直笔新例》等。曾公亮的家族,更是宋朝少见的豪门,他父亲当过刑部郎中,儿子又是右丞相;到了南宋,又有两位四世重孙位极人臣;总之,他一家几代共出了四位宰相和一位状元,人称“曾半朝”或“一门四相”。
《武经总要》的另一位作者,是北宋大臣、训诂学家丁度。他于公元990年生于河南开封,但祖籍却为河北邢台市,因为他祖父当年被契丹人俘虏,后又逃回,并徙居开封祥符县。丁度从小就努力求学,喜读《尚书》,曾草拟《书命》十余篇。21岁那年,丁度荣登进士榜眼,并被任命为大理寺评事。在官场上,他本来顺风顺水:通判通州,监齐州税,太子中允,改直集贤院,调吏部南曹,最终官至端明殿学士。但他的后半生却意外坐上了“过山车”:先是56岁时,被升为枢密副使,57岁官拜参知政事,相当于副宰相;但不久便被降职为中书舍人,数月后,又官复原职;58岁时,再被罢职,后改任观文殿学士。丁度性情淳厚,不故作威仪之态,为人讲求诚信;生活简朴,陋居十余年,身边竟无姬妾服侍;他喜欢议论国事,长年为仁宗讲解经史,以至皇帝只称他为“学士”,反而不呼其名。他不信鬼神,一次仁宗询问他对占卜的看法,他则回答说:“卜筮虽是圣人所为,但只不过是一种技术而已,不如借鉴古代的治乱兴衰案例。”他与皇帝心灵相通,一次仁宗端起水杯说:“朕要用中正公平的方法来统治天下。”丁度则答:“臣更愿事奉陛下不会倾斜。”63岁时,丁度去世,被赠吏部尚书,谥号“文简”。除《武经总要》以外,他的主要作品还有《备边要览》《庆历兵录》《赡边录》;此外,他还参编了《礼部韵略》《集韵》等典籍。
对了,宋朝还有另一项重要的密码成果,即证明了著名的孙子定理,国际上称为中国剩余定理。该定理甚至已成为现代密码学的核心分支,公钥密码学的数学基础定理之一;但在当时,大家并不知道该定理与密码间的关系,仅将它看成是一个纯粹的数学结论。准确地说,它是中国古代求解一次同余式组的方法,也是数论中一个重要定理。它首次出现在公元5世纪的数学著作《孙子算经》卷下的第26题中,名叫“物不知数”问题,其原文为:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》不但首次提出了同余方程组问题,还给出了特例求解法,因此在中文数学文献中,便被称为孙子定理。到了宋朝,数学家秦九韶于1247年在其《数书九章》的《大衍类》中,对“物不知数”问题做出了完整而系统的解答。明朝数学家程大位,更将秦九韶的求解法编成了朗朗上口的《孙子歌诀》:三人同行七十稀,五树梅花廿一支,七子团圆正半月,除百零五使得知。该歌诀给出了模数为3、5、7的同余方程的秦九韶解法。意思是:将除以3得到的余数乘以70,将除以5得到的余数乘以21,将除以7得到的余数乘以15,全部加起来后减去105或其倍数,得到的余数就是答案。比如,在“物不知数”问题中,按歌诀求出的结果就是23。
最后,作为宋朝密码的结尾,简单介绍一下秦九韶,其详细介绍可见拙作《科学家列传》第一册的第29章“宋元数学四大家,混战乱世皆奇葩”。秦九韶是南宋安岳县人,公元1208年出生,他与李冶、杨辉、朱世杰一起,并称为“宋元数学四大家”。就在他出生那年,发生了三件影响中国历史走向的事件:一是宋朝与金朝签订“嘉定和议”,宋朝试图坐山观虎斗,怂恿元金两国鹬蚌相争;果然,金朝第6位皇帝驾崩,无能的绍宗继位,于是,成吉思汗在次年,立即挥戈金朝。二是忽必烈的前任、蒙古大汗蒙哥诞生。三是十字军战争的积极分子、阿拉贡国王海梅一世也紧随诞生。
秦九韶的一生很奇葩。首先,他做事很奇葩。从23岁中进士开始,终生都在当官,先后在湖北、安徽、江苏、浙江等地,当遍了诸如县尉、通判、参议官、州守、同农、寺丞等各种官职。那么,他的众多科研工作是何时做出的呢?一部分是在政务之余和抗击元朝的战争间隙,更主要的是在37至40岁时,为其母亲守孝期间完成的;因此,他的科学巨著《数学九章》完成于1247年。如果此君多有几段类似的长期空闲时间,也许会出更多、更高水平的数学成果,也许中国数学的国际地位会大幅度提高。
其次,更主要的是,这家伙做人很奇葩!当然,这并非指他是官二代,虽然他父亲也确实是南宋的大官,也不是指他本人是官迷,而是指他是一个名副其实的贪官!他在和州当官期间,利用职权贩盐,强行卖给百姓,从中牟利;在定居湖州期间,生活奢华,用度无算;在守孝结束后,又极力攀附和贿赂当朝权贵,并在51岁时,担任琼州长官,于是害得当地百姓“莫不厌其贪暴,作卒哭歌以快其去”,用白话翻译出来的大意就是:“恨不能让这个贪官早点去见阎王”;离开琼州后,他又投靠了另一贪官吴潜,并得到赏识,两人狼狈为奸,关系甚密。反正,当祖国正处于内忧外患,战乱不断,随时都可能被元朝吞并的紧要关头;当老百姓在水深火热之中挣扎时,秦九韶却热衷于贪污腐化,一心谋求官职,追逐功名利禄。终于,在南宋高官的尔虞我诈斗争中,他的靠山吴潜被罢官,秦九韶也受牵连,并在53岁时,被贬至梅州,直到公元1268年郁郁而死,享年61岁。时年忽必烈采纳了刘整的计策,取襄阳以灭宋;于是,南宋的灭亡就进入了倒计时。
最后,秦九韶的历史待遇也很奇葩。如此著名的科学家,在《宋史》中竟然无传!这绝非摇摇欲坠的南宋不重视科学家,而是这位贪官捡了芝麻,丢了西瓜。