歡迎光臨
每天分享高質量文章

古代密碼學與資訊保安

(點選上方公號,快速關註我們)


來源智人世界

二次元世界的小夥伴對“風林火山”這個詞不會感到陌生,日本戰國時期的一方諸侯武田信玄把“疾如風、徐如林、侵掠如火、不動如山”印在自己的軍旗上,幾百年後又透過影視劇和動漫作品變得廣為人知。這句話實際上出自《孫子兵法·軍爭》中的名句“其疾如風、其徐如林、侵掠如火、不動如山”,意思也不難理解——一支理想的軍隊,就應該做到進攻時要像風和火一樣迅疾,防守時要像樹林和大山一樣整齊和穩定。

▲其實後面沒有出現的兩句可能更加重要

不過,這段話後面還有兩句——“難知如陰,動如雷震”,說的就不僅僅是戰爭上的事了,要做到“難知如陰”,除了臨場戰術意義上的隱蔽之外,對己方資訊的保密是更為重要的環節。因為戰爭打的就是突然性,展開陣勢打堂堂之陣,是成本最高的一種,如果能隱藏好自己的真實意圖,打對方一個措手不及,就可以用小的代價換取大勝利。所以,在保密方面下點功夫,花點成本,是很划算的。

這個道理,自從有戰爭以來,就為天下的兵家所懂得——不懂的都被滅了,《孫子兵法·用間》中總結:“事莫密於間”、“間事未發而先聞者,間與所告者皆死”。道理不難懂,不過應該以怎樣的具體措施來落地,那辦法可就多啦。

▲“陰符”記載於古兵書《六韜》中相傳為姜太公所發明

相傳在中國周朝,就出現了“陰符”和“陰書”兩種保密方法。所謂陰符,就是事先製作一些長度不同的竹片,然後約定好每個長度的竹片代表的內容,比如,三寸表示潰敗,四寸表示將領陣亡,五寸表示請求增援,六寸表示堅守……一尺表示全殲敵軍等等。這種“陰符”無文字,無圖案,只有前方少數將領和後方指揮人員瞭解含義,即使傳令兵被俘或叛變,敵人也搞不懂幾張長短不一的竹片到底代表了什麼。

▲竹簡可拆,使陰書成為可能

陰符保密性肯定不錯,不過能傳達的資訊也有限,要是戰場有超出事先預料的情況,陰符也就表達不了。為了彌補這個缺點,又出現了“陰書”,即把資訊以明文寫在竹簡或木簡上,然後將竹簡或木簡隨機分為三份,由三名傳令兵各執一份分別送達。收件人收齊後,再把三份“陰書”拼合起來,完整內容就出現了。這種“陰書”能傳遞更為複雜的資訊,即使某一信使被敵方抓住,敵方也得不到完整的情報。

“陰書”兼顧了保密性和靈活性,但也同時也是為了靈活性而降低了保密性,因為如果其中一份落入敵手,雖然資訊不全,但敵人也可以猜到一二,總歸是有隱患。到了宋代,為了避免這種情況,出現了升級版的陰符——字驗。這種方法見於宋代軍事類書《武經總要》,大致過程是這樣的——

先收集軍事中常用的40個短語,然後給每個短語分別編碼,比如:1.請弓;2.請箭;3.請刀;4.請甲……35.戰大捷;36.將士投降;37.將士叛;38.士卒病;39.都將病;40.戰小勝。將領帶兵出發前,後方指揮機關同這位將領約定用一首四十字的五言律詩作為金鑰,併發給將領一本有40個短語編碼順序的密碼本,編碼順序可變化,不同的編碼順序可形成若干不同的密碼本。

如以《詠史》這首詩為金鑰:“漢家青史上,計拙是和親。社稷依明主,安危託婦人。豈能將玉貌,便擬靜胡塵。地下千年骨,誰為輔佐臣?”假如需要補充箭矢,將領就從密碼本中查出“請箭”的編碼是“2”,詩中第2個字是“家”字,於是,將領就把“家”字寫入一件無關機密的普通訊件中,在“家”字蓋上印章。後方在收到信件後,查出“家”字在詩中的順序是第2個字,再對照密碼本上的編碼譯出“請箭”的資訊,然後就可以決定下一步的行動了。這種辦法非常巧妙,由於信件無關機密,即使關信人叛變或被被俘,均不能從中解讀出有用的資訊,蓋了印章的字更是會使人不明就裡,保密的目的也就達到了。

南宋還出現了密寫的先進技術。據《三朝北盟彙編》記載,公元1126年,開封被金軍圍困之時,宋欽宗“以礬書為詔”。因為“以礬書帛,入水方見”,只有把布帛浸入水中,隱藏其上的字跡才會顯露出來,金人不知道此術,也就無從知道情報的內容了。除此之外,還有譬如將情報寫於絲綢或紙張上,然後搓成圓球用蠟裹住藏在信使身上或將其吞入腹中傳遞,這種保密性傳遞方法一直沿用至清朝。

▲凱撒密碼就是簡單的移位,在當時是夠用了

古代的歐洲文明中,也同樣有保密技術出現。傳說在古希臘時期就用過一種笨辦法——把奴隸的頭髮剃光,在頭上寫字,頭髮長出來後再派出去傳遞秘密情報(奴隸:MD洗頭都不行……),可謂最古老的“加密”了。公元前4世紀的伯羅奔尼撒戰爭期間,希臘人又用了在腰帶上書寫移位後的文字來加密傳遞情報的方法。古羅馬時期發明瞭“愷撒密碼”,就是把明文中的各個字母換成錯開一定間隔,形成秘文傳遞。

到16世紀,西班牙、英、法、意等國家之間相互競爭劇烈,情報活動也就隨之變得非常頻繁,在其利用使館進行情報傳遞的過程,各國使節就已普遍使用編製的密碼書寫信件來向國內報告情況,當時威尼斯公國駐英國使節米凱爾所用的密碼,英國人絞盡腦汁也沒能搞明白,直至3個多世紀後的1863年才被人破譯。對於加密和破譯的需求,甚至直接催生了一門新的學科——“密碼學”。

第三任美國總統傑弗遜對密碼學很有研究,於1795年發明瞭一種加密裝置,被稱為“傑弗遜圓盤”(Jefferson disk),或叫做“傑弗遜轉輪加密器”(Jefferson wheel cipher)。這個裝置有36片同樣大小的木製轉輪,套在一根鐵桿上,每片轉輪上的圓周邊緣上刻有亂序的26個英文字母表。

進行秘密通訊的雙方必須各自擁有完全一樣轉輪加密器。當要把一段文字(不超過36字)秘密通知對方時,只需轉動加密器上的各片轉輪,使這段文字正好出現在同一行上,這時轉輪上排列的其他25行都是無意義的亂碼;此時發信人抄寫其中任意一行的亂碼,關交給信使傳送(加密)。對方收到亂碼信後,只需拿出自己儲存的同樣的裝置,轉動上面各片轉輪,讓它們的排列使得這段亂碼正好出現在同一行上,然後他檢視其他25行上的內容,其中必然有一行會顯示出真正的資訊(解密)。

傑弗遜加密器屬於“多表替換”型加密,很難被破解,除非能得到加密裝置。據說美國軍隊直到上世紀60年代仍然在使用。當然,這種加密器的缺點也是很明顯的,即它每次只能傳送簡單的資訊(字長不能超過轉輪的片數),而且參與通訊的各方不能太多。

▲這種密碼機裝備德國海軍

使英國從1942年2月到12月都沒能解讀德國潛艇的訊號

當然,最為人所知的加密裝置,當非二戰時期德國的“恩尼格瑪”密碼機莫屬。這種密碼機最初並不是軍用品,而是在20年代早期被用於傳遞商業資訊(商場如戰場)。恩尼格瑪的原理並不複雜,主要由鍵盤,擾頻器,顯示屏三部分組成,鍵盤輸入字母,擾頻器為字母加密,顯示屏顯示字母(“顯示屏”是由一系列用燈照亮的字母組成)。

▲恩尼格瑪的構造圖

最關鍵的是擾頻器,也有三個主要部分,插線板-轉輪-發射器。透過插線板可以講字母對換,然後經過三個聯接在一起的轉輪,每輸入一次,轉輪往前進一步,則下一個文字轉輪狀態就已經變化了,最後是反射器,將輸入文字變換為另一個文字傳回。最初的恩尼格瑪機透過在插線板中交換6對字母,再加上三個轉輪,總共可以生成的密匙總量是10的16次方。也就是說如果每一秒鐘嘗試一個密匙,也需要3億年時間才能全部嘗試完,可以說恩尼格瑪機實現了加密者的夢想。

▲圖靈用來破譯的機器

可見解密比加密難多了

不過,魔高一尺道高一丈,這個堪稱完美的加密機最後由於情報洩露(構造被賣給了英國)、操作員的失誤、使用步驟錯誤、機器或密碼本被繳獲等原因,再加上英國擁有偉大的數學家圖靈,恩尼格瑪最終還是被成功破譯,這也成為戰爭史乃至科學史上的一段傳奇。

除此以外,歷史上還出現過各種加密的奇招,比如我們非常熟悉的美軍“風語者”——以印第安那瓦霍族人的土語為基礎編製密碼,由於語言的罕見,可謂密上加密。其實美國在一戰時間就使用過這種方法,1918年9月,在第二次索姆河戰役中,美國第30步兵師將一組切諾基族士兵用於電文傳送,開闢了美軍將美洲土著語言用於秘密通訊的先例。美軍第36步兵師也從實踐中發現了印第安語的妙用,安排14名巧克陶族士兵接受電訊訓練,幫助美軍在法國默茲-阿貢戰役中贏得了幾場重要戰鬥。

▲監聽到在正在用印第安語通話的美軍

日軍一臉懵逼

無獨有偶,在抗日戰爭中,來自西南的滇軍同樣用過這種土法,全部使用白族士兵當通訊員,就算直接明語通話被日軍監聽到也聽不懂,在八十年代的對越作戰中,解放軍乾脆讓溫州籍戰士充當通訊員,越軍長年與中國對抗,能聽懂西南方言、粵語和普通話,但依然在溫州話面前敗下陣來——保持我國境內語言的多樣性還是很重要的,因為不知道什麼時候,方言或少數民族語言就會成為自帶加密屬性的“戰略資源”。

加密是為了保住秘密,如果加密強度不夠,或者因為別的原因被破解,後果也就非常嚴重。甲午戰爭中,清政府使用的密碼過於簡單,被日本輕鬆破譯,不光在戰爭中喪師失地,在談判中也被對手牢牢控制。德軍的恩尼格瑪被破譯後,許多U艇也就隨之暴露了位置,被盟軍反潛兵力一艘接一艘的送進了海底,這些教訓不可謂不慘痛。

▲因為暴露位置而遭到追殺的潛艇

在我們今天的生活中,仍然大量充斥著各種密碼,你的銀行卡、手機、郵箱、社交賬號……無不要使用密碼來保證資訊和財產安全,一旦洩露,這後果難以想象。當然,今天我們所使用的加密技術目前還是值得信任的,只要不使用過於簡單的密碼,並且確保不會外洩,通常也不會有什麼問題。

其實,密碼的存在,更多的是需要一層屏障,保護外來入侵,防止有心無心地窺探。願你工作中也處處有安全防護!

【關於投稿】


如果大家有原創好文投稿,請直接給公號傳送留言。


① 留言格式:
【投稿】+《 文章標題》+ 文章連結

② 示例:
【投稿】
《不要自稱是程式員,我十多年的 IT 職場總結》:

http://blog.jobbole.com/94148/


③ 最後請附上您的個人簡介哈~

覺得本文有幫助?請分享給更多人

關註「演演算法愛好者」,修煉程式設計內功

贊(0)

分享創造快樂