- 密碼簡史:穿越遠古 展望未來
- 楊義先
- 4708字
- 2021-01-07 18:29:49
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歲。時年忽必烈采納了劉整的計策,取襄陽以滅宋;于是,南宋的滅亡就進入了倒計時。
最后,秦九韶的歷史待遇也很奇葩。如此著名的科學家,在《宋史》中竟然無傳!這絕非搖搖欲墜的南宋不重視科學家,而是這位貪官撿了芝麻,丟了西瓜。