越寫悅快樂之《碼書》之讀後感

今天的越寫悅快樂之系列文章爲大家帶來《碼書》之讀後感,副標題《解碼與編碼的戰爭》,看看密碼學在近代歷史上的應用,如何從手工時代,到機械時代,再到智能時代。

密碼決定了戰爭的勝敗,也影響了歷史的走向。

前言

在人類歷史上,不管是君王還是將軍,都需要一套高效的通信手段來治理國家和指揮軍隊。但是他們還有另一個需求,那就是不能讓敵人獲得關鍵的信息,必須儘量保持機密。
連中國古代的《易經》中都有這樣的話:「君不密則失臣,臣不密則失身,幾事不密則害成。」換句話說,如果沒有機密,就會有危險。
《孫子兵法》裏更是說得直接「三軍之親,莫親於間,賞莫厚於間,事莫密於間。」也就是說,戰爭中,沒有比刺探他人情報和保護自己的情報更加重要的事情了。
所以縱觀歷史,有多少權力的爭奪,有多少戰火和硝煙,背後就有多少祕密。
歷史上無數人發揮自己的聰明才智,努力建造更強的保密系統,也努力攻破別人的保密系統。密碼學,就在這場曠日持久的攻防拉鋸戰中應運而生。
甚至有人說,歷史的標點符號,就是密碼打上去的。密碼決定了戰爭的勝敗,也影響了歷史的走向。

密碼的三個階段

手工時代

雖然我們把「密碼」兩個字放在一起說,但是實際上,人類是先花了很多時間研究「密」,之後才轉而研究「碼」。

祕密書信的歷史其實非常悠遠,不過,人們最早的思路,是想方設法把書信的內容直接隱藏起來。

有文獻記載,公元前5世紀,希臘和波斯之間正在打仗。一位希臘人爲了傳遞祕密信息,會把信息寫在木板上,然後用一層蠟把木頭蓋住。收信人拿到木板之後,把蠟刮掉,就能看到祕密的信息。

希臘這邊還用過更絕的方法,他們會把信使的頭髮剃光,把祕密信息寫在信使的頭皮上,等信使頭髮長出來之後再派他去送信,到地方再把頭髮剃了,收信人就能看到密信了。

這種直接掩蓋信息的方法,被稱爲「隱匿法」。這是最早的加密手段,直到近現代還一直在使用。今天我們在看諜戰片的時候,還會經常看到間諜們用隱匿法傳遞情報,像什麼用隱形墨水寫信,或者把信息塞進膠囊裏再讓特工吞下去,都是隱匿法。

隱匿法的壽命這麼長,表示這種方法確實很安全。不過,隱匿法有一個根本弱點,一旦敵人更加謹慎地搜查,情報就會曝光。這就像是在玩捉迷藏的遊戲,只要對方認認真真地去找,總是能找到一些蛛絲馬跡。
於是,人們開始思考另一種方法,有沒有可能,就算敵人找到了白紙黑字的信息,但是依然不明白我想說的是什麼呢?
順着這個思路,各種密碼應運而生。

在密碼的手工時代,誕生了花樣繁多的密碼,不過從原理上,基本可以分成兩類,一類用的是「移位法」,另一類用的是「替代法」。
最簡單的移位法,就是把每個字母都用後邊一位的字母表示,這樣,A就變成了B,B就變成了C,像是「得到」的拼音DEDAO就變成了EFEBP。別人如果看到,就會認爲是毫無意義的單詞,沒法理解其中的含義。傳說這樣的方法,最早是由愷撒發明的,所以用移位法加密又被稱爲「愷撒式密碼」。

另一種方法是替代法。先將字母隨意配對,再用配對字母取代信息裏的原始字母。比如我們可以指定用V代表A,用T代表B,因爲替代的規則是人指定的,所以更加靈活,更難被破解。

不過,不管是移位法還是替代法,都有一個本質上的弱點。那就是這些用字母組成的拼音文字,每個字母出現的頻繁程度是不一樣的。比如在英文裏邊,字母A、字母E出現的頻率,就遠遠高於字母X和字母Z。所以,不管用什麼樣的方式移位或者替代,只要是用一套加密方案進行加密,那麼拿到密文之後,只要統計其中字母的頻率,就能找到破解的方向。

於是人們在移位法和替代法的基礎上,發明了新一代的加密方法,這種方法是由一位名叫維吉尼亞的法國外交官發明的,所以被稱爲「維吉尼亞加密法」。
維吉尼亞加密法的創新之處,在於給每個字母都設置一套加密算法。

字母A可以替換成A也可以替換成Z,一共26個字母,這就是26套加密方案。通信的雙方需要約定一組數字,這樣就知道每一位字母要用哪套加密方案了。
咱們還是拿得到的拼音DEDAO舉例子,咱們約定一組數字,比如10086吧。這樣,第一個字母D就替換成後一位的E,第二個字母E還是E,第三個字母D還是D,第四個字母A替換成後八位I,最後一位字母O替換成後六位的字母U,在10086這個方案下,DEDAO就被加密成EEDIU。

這個10086就叫作「鑰匙」,拿到了鑰匙,才能知道具體要如何解密。
維吉尼亞加密法確實提升了密碼的安全性。不過,安全和方便往往是一對矛盾,維吉尼亞加密法提升了安全性,也提高了使用的門檻,比如咱們剛纔是5個字母,所以鑰匙也只需要5位數就夠了。如果是一封幾百個單詞的長信呢?鑰匙也要變得很長,那如何把鑰匙順利地交到別人的手上呢?這就出現了新的問題。
而且,在手工書寫的時代,要記憶26套加密算法,不僅費時費力,而且容易出錯。所以,維吉尼亞加密法雖然更加安全可靠,但是在手工加密的時代,並沒有被廣泛應用,直到機械時代來臨,這種方法纔開始大放異彩。

機械時代

進入20世紀,戰爭中對於加密和解密的需求就更加強烈了。一方面,各種機械的出現,可以提升我們的效率,像是前邊說到的維吉尼亞加密法,就不用靠手算了,可以用專門的機械來輔助加密了。另一方面,科技的進步也使得需要加密的場合越來越多,比如戰爭中大量使用無線電來通信,戰爭雙方都可以接收到無線電信號,如果沒有強有力的加密手段,那自己就相當於完完全全暴露在對方的眼皮底下了。

有人說,第一次世界大戰可以稱爲是化學家的戰爭,因爲戰場上第一次出現了芥子毒氣;第二次世界大戰可以稱爲是物理學家的戰爭,因爲原子彈的出現終結了戰局;如果有第三次世界大戰的話,一定是數學家的戰爭,數學家將掌控大戰中最關鍵的武器,那就是信息。

其實第二次世界大戰,就已經是數學家的戰爭了,加密和解謎的拉鋸戰直接影響戰爭的走向。這其中最精彩的案例,當屬英國密碼專家破解德國的「恩尼格瑪密碼機」。這也是密碼學歷史上最著名的攻防戰,可以說直接影響了人類歷史的進程。

恩尼格瑪是一種機械電子式的加密機,由一堆齒輪、電線、燈泡、轉盤、搖桿組成。使用機器做繁瑣的加密工作在之前也有過,只是因爲它們都沒有量產,所以也沒有流行。恩尼格瑪機,是第一個大規模量產的加密機。從它開始,密碼學不再依賴紙和筆的運算,使用機械和電子加密的時代正式到來。
恩尼格瑪密碼機的樣子有點像打字機,有鍵盤,有顯示裝置,內部是一大堆機械和電子的零件。

操作員每敲下一個字母,經過機械和電子的轉換,顯示裝置那裏就會顯示一個對應的字母,這就是經過加密之後的編碼了。這聽起來好像沒什麼,恩尼格瑪最厲害的地方在於,核心的加密零件叫編碼器,編碼器的核心是齒輪,每敲下一個字母之後,齒輪就旋轉一格,齒輪的轉動會使得密碼機內部的線路連接發生變化,加密結果就不一樣了。

恩尼格瑪就是延續維吉尼亞加密法的思路,加密的時候,每個字母都換一套加密算法。不過恩尼格瑪的加密方式更加複雜,早期的恩尼格瑪,齒輪只有六個格,也就是有六套加密算法。後一代的恩尼格瑪,齒輪增加到了26個格,還是感覺不夠用,於是又增加了第二個齒輪,上邊也是26個格,這就代表加密算法增加到26乘以26,也就是676套算法,這樣的恩尼格瑪密碼機,還只能供商業使用。德國軍方的密碼機是8個齒輪,換句話說,一臺機器中包含了2000多億套加密算法。
這是什麼概念呢?你要知道,一套最新的大英百科全書包含6000多萬個單詞,咱們就算一個單詞有10個字母,那把大英百科全書打上300遍,也用不完這2000多億套加密算法。

恩尼格瑪密碼機使用的加密方式,實際上還是傳統的方法,也就是替代和移位。雖然從「質」的角度來說,恩尼格瑪密碼機並沒有太大的突破,但是在機械和電子的加持之下,在「量」的角度上,恩尼格瑪密碼機擁有了前所未有的優勢。
單從理論上講,這樣的機器幾乎是無法攻破的。

那英國的情報部門又是如何破解恩尼格瑪的呢?

首先是波蘭、法國和英國的接力合作,通過間諜活動和軍事襲擊,搞到了真正的恩尼格瑪密碼機,後來,法國人甚至弄到了軍用版恩尼格瑪機的使用說明書和操作指南,但是說明書只能幫他們弄清楚恩尼格瑪的工作原理,並不代表就能破譯密碼。因爲2000多億套密碼,你根本不知道德軍用的是哪一套。當初德軍就是假設敵人也有一模一樣的機器,還是不能破解的情況下,才批准使用恩尼格瑪機的。

波蘭密碼學家曾經做過一些嘗試,可以一定程度地破解密碼。這給了盟軍很大的希望,英國開始招募大量的語言學家、人文學者、科學家和數學家,組成了一支7000人密碼破譯隊伍,每天都有軍方截獲的各種德軍通訊代碼,被源源不斷地送到這裏,這些學者夜以繼日地工作,希望從雜亂無章的信息中找到規律。
最終找到這把鑰匙的,是艾倫·圖靈,他是著名的數學家,也是公認的計算機科學的奠基人。

在研究過之前被破解的信息之後,圖靈注意到,截獲的德軍信息裏,其實大有規律可循。比如「希特勒萬歲」這樣的句子就經常出現。還有,每天早上六點,德軍都會發一份當天的天氣報告,而且格式非常固定,甚至單憑經驗,就能確定哪個單詞是德語裏的天氣那個單詞WETTER。這樣,知道了這個單詞是WETTER,也知道加密之後的密文是什麼,圖靈就可以找方法去反推恩尼格瑪的加密算法。
最笨的方法,當然是試着改一改手裏這臺恩尼格瑪的設置,然後把WETTER這個詞輸進去,看看什麼情況下,結果和加密之後的代碼是一樣的。但是咱們說過,加密算法以億計算,一個一個試根本是天方夜譚。

圖靈找到了一種思路,前邊咱們說過,恩尼格瑪密碼機是靠齒輪的轉動調整加密方案,這個方案的調整肯定也是按順序的,在加密WETTER這個單詞的時候,如果加密W用的是方案一,那麼加密後邊的E的時候用的必然是方案二。這樣,圖靈他們要找到的,就是連續的6套方案。而且他們發現,德軍設計恩尼格瑪的時候,還堅持一個原理,那就是加密後的代碼不能和加密前一樣,也就是說,字母E加密之後的代碼,絕不可能還是字母E,這就又縮小了他們要搜索的範圍。
總之,經過一番艱苦的努力之後,圖靈把加密的可能性從上千億種,縮小到了105萬種。

當然,如果是靠人手工計算,105萬仍然是個天文數字。爲此,圖靈專門設計了一種用於破解的機器,可以理解爲早期專用的計算機,代號叫「炸彈」。「炸彈」的數量越多,破解的速度就越快。爲了讓這些「炸彈」發揮出極致的效果,圖靈需要更多的人手和經費,爲此,他和其他科學家甚至聯名給首相丘吉爾寫信求助,丘吉爾很快給英軍的參謀首長下命令,讓軍方務必以最高的優先級,滿足圖靈他們的所有要求。

圖靈和他的同事一共建造了49臺「炸彈」,最快的時候,只要花上1個小時,就能破解出德軍當天使用的密碼。

這邊,英國專家破解了恩尼格瑪密碼機,扭轉了歐洲戰場的局勢。另一邊,美軍也破解了日本最厲害的密碼機「紫色」,讓美軍在太平洋戰場上獲得了巨大的優勢。

比如,1942年的6月,美軍破解了一則日軍信息,日本海軍打算使用聲東擊西的戰術,攻佔美軍中途島海軍基地。於是美軍將計就計,軍艦離開了中途島,但是沒有走遠,日軍原本打算進行一場偷襲,結果反過來被美軍偷襲了。中途島海戰也成了太平洋戰場上的轉折點,自此以後,日本海軍走上了下坡路。
美國太平洋艦隊的總司令尼米茲上將說,美國在中途島的勝利,其實就是情報的勝利。

一年之後,美國又破譯了日軍的一則信息,直接掌握了日本聯合艦隊總司令山本五十六的行程。尼米茲上將派遣了18架戰鬥機,直接擊落了山本五十六的座機。山本之死給日軍的士氣造成了沉重的打擊。

但是,打人家一拳,就要防人家一腳,美國知道,也一定有一大批來自日本的天才,在絞盡腦汁破解美軍的密碼。於是,美軍決定另闢蹊徑,選擇了一條完全不同的道路,就是把少數民族的語言當作密碼。

最早提出這個想法的,是一位叫作約翰斯頓的工程師。約翰斯頓的父親是一名傳教士,爲了傳教,他定居在納瓦霍人的保留區。納瓦霍人是美國原住民其中的一個部落,約翰斯頓在那裏出生長大,完全沉浸在納瓦霍人的文化中。納瓦霍人本身數量就不多,約翰斯頓更是少有的同時掌握英語和納瓦霍語的人才。

當美國參加第二次世界大戰時,約翰斯頓因爲年紀太大已經沒法參軍,但是他仍然想爲國家盡一份力。
他就想到,對於外人來說,納瓦霍語極其複雜難懂,如果每一處戰地都用納瓦霍人來當通訊員,用納瓦霍語來通信,那可以說是無敵了。

於是約翰斯頓跑到了附近的軍營,找到了這個營區的通訊官瓊斯中校,向他提出了自己的構想。瓊斯中校意識到,這個想法確實不錯。於是他讓約翰斯頓做一次示範,並且邀請了海軍陸戰隊的高級軍官來觀摩。
約翰斯頓帶來了兩位懂英語的納瓦霍人,兩個人被安置在兩個地方,軍隊指定了6條英文信息,由一位納瓦霍人翻譯成納瓦霍語,再通過無線電傳送給另一位納瓦霍人,由他轉譯回英文。實驗證明,6條信息都準確無誤。用納瓦霍語來通訊,看來是可行的。那接下來的問題是,使用納瓦霍語真的可以萬無一失嗎?
爲了檢測納瓦霍語的保密性有多強,海軍陸戰隊把納瓦霍語的錄音交給海軍情報部,請他們當作密碼來破譯。你要知道,就是海軍情報部的專家們,破解了日軍最難纏的密碼系統「紫色」。但是這些解碼專家,不眠不休地忙了三個星期,還是對納瓦霍語束手無策。用他們的原話說,納瓦霍語就是「一連串奇怪的喉音、鼻音、饒舌的聲音」,專家們甚至無法用普通的文字做記錄,更不要說破解了。納瓦霍密碼成功通過檢驗。

其實當時在美國境內,還有很多原住民的部落,但是在二戰之前,有很多德國的人類學者來美國研究原住民,換句話說,很多原住民的語言已經不再是祕密。只有納瓦霍族沒有被國外的人類學家研究過,除了二三十個像約翰斯通這樣的美國人以外,這個世界上,只有納瓦霍人才能聽得懂納瓦霍語。
種種證據都表明,納瓦霍語天然就是一套強力的密碼系統。

於是美國海軍陸戰隊招募了29名納瓦霍人,組建了一隻特殊的通訊隊伍。
唯一遇到的問題,就是有些英文單詞,像是「偵察機」、「驅逐艦」,這些在納瓦霍語裏邊都沒有,於是海軍陸戰隊編了一套小詞典,給這些英文單詞都確定了對應的納瓦霍說法。他們用各種鳥的名字來代表飛機,比如「偵察機」就是「貓頭鷹」,用各種魚的名字來代表戰艦,比如「驅逐艦」就是「鯊魚」。

他們還給26個字母都指定了納瓦霍代碼,這樣,遇到生僻的人名或者地名,可以直接用拼寫的方式來傳遞信息。對於那些常用的英文字母,比如字母E,他們會用三種代碼代指同一個字母,這樣,在拼寫的時候,三種代碼可以輪換使用,就避免了日軍通過頻率分析法來破譯信息。

第二次世界大戰期間,一共有420名納瓦霍通訊員走進戰場。他們爲戰爭做出了巨大的貢獻,而且還創造了一個歷史記錄。戰爭結束後,日軍的情報首腦在接受審判時供認,他們曾經破解了美軍使用的不少密碼,但是對納瓦霍密碼始終是束手無策。也就是說,納瓦霍密碼是人類歷史上少數從來沒被攻破過的密碼之一。
爲了感謝納瓦霍人對二戰的貢獻,美國政府將每年8月14日定爲「納瓦霍密語通話員國定紀念日」。

智能時代

前邊咱們說到恩尼格瑪密碼機的時候,說恩尼格瑪其實對於密碼學,只有「量」的提升,沒有「質」的飛躍。而計算機的出現,把密碼學推進了智能時代。在質和量的層面上,都讓密碼學變得不一樣了。

咱們先來說「量」的提升。用計算機程序就可以百分百模擬一個恩尼格瑪密碼機,而且,恩尼格瑪受限於它的機械結構,在製作的時候,總是有這樣那樣的限制,計算機程序可以不受這樣的限制,比如,計算機模擬的恩尼格瑪機,可以不只有8個齒輪,100個齒輪都是可以實現的;每個齒輪上也不只是26格,可以是50格甚至100格。這些放在一起,可以形成的加密方案就是天文數字了。

而且,在計算機模擬中,還可以讓齒輪完成不可思議的動作。比如有的齒輪順時針轉,有的齒輪逆時針轉,有的齒輪越轉越快,有的齒輪轉十格之後就讓它消失。這些規則在現實環境中,用機械是根本沒法造出來的,但是用計算機卻能仿真出來,這就使得安全度大大提升。而且計算機的運算速度比機械的加密儀器要快得多,能用更短的時間執行更復雜的加密任務。
前邊說的這些還是「量」的提升,密碼進入智能時代之後,還有質的飛躍,最開始的飛躍,就是字母不再是加密的最小單位了。

前邊咱們說到的各種加密方式,不論是手工的還是機械的,都是用字母來替換字母。但是計算機是二進制的,一切的信息都可以用0和1來表示。每個字母在計算機裏邊其實也是一串0和1組成的代碼。目前通用的代碼叫「美國標準信息交換碼」,每個字母都是用7位0101的代碼來表示。比如小寫的a是1100001,大寫的A是1000001。我們用計算機加密的時候,面對的就不再是一個個字母,而是一個個的0和1,這7位數的代碼,我們可以只加密前3位,或者只加密奇數位。加密的方法就更加五花八門了。

你看,計算機的出現,把信息數字化了,打破了語言規律的底層結構,所以說,數字化使得密碼學進入了新的時代。
除此之外,在智能時代,密碼學還有一個更大的顛覆,那就是加密的過程可以不再保密了。前邊咱們提到那麼多加密方法,都有一個特點,那就是千萬不能讓別人知道我們是用什麼規則加密的,到了恩尼格瑪密碼機的時代,德軍還要想方設法保密,不讓敵人搞到機器的內部結構和使用說明。

可是進入智能時代之後,今天的加密手段,可以完全把自己的技術細節公開。打個比方來說,我給我認識的所有朋友都發了一把鎖,跟他們說,你們以後給我寫信呢,就寄個盒子過來,用這個鎖把盒子鎖上。
鎖有無數把,但是鑰匙只在我手裏。而且我有自信,別的人不管怎麼研究我的鎖,也沒法配出開鎖的鑰匙。

原理我們是搞明白了,但是這中間有一個關鍵的問題:你要怎麼做,才能保證別人看到了你的鎖,卻還是配不出你的鑰匙呢?

這其中最核心的原理,叫做「分解質因數」,什麼意思呢?所謂質數,就是除了1和自己以外,沒法被別的自然數整除的數。舉個例子,12可以表示爲3乘以4,那它就不是質數。13只能表示爲1乘以13,所以13是個質數。同樣,22不是個質數,23是個質數。

那如果我們用13乘以23,可以得到299,這個很容易計算。但是如果反過來,我問你說,你知道299是哪兩個數的乘積嗎?這個計算就非常麻煩,甚至只能用笨辦法一遍遍地試。這個過程就是分解質因數。

數學家就發現,把兩個質數乘起來,這個計算很容易,但是拿着結果反推,這個過程要難得多。新一代的加密手段,就利用了這個原理,兩個質數相乘得到的那個大數,就是公開的「鎖」,具體是哪兩個數的乘積,這就是那個保密的鑰匙。
這套加密算法,是由美國麻省理工學院的三位科學家羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)發明的,因爲他們三個人的姓氏首字母分別是R、S、A,這套算法就被命名爲RSA加密算法。

你可能會覺得,這麼聽下來,想要找到答案,麻煩雖然是麻煩,但是似乎也不太困難啊?用RSA算法進行加密的時候,用的那個數其實要大得多,數字越大,分解它要花的時間就會長得多。

1977年,爲了驗證這個算法到底有多可靠,三位科學家給一份科學雜誌投稿了一篇文章,解釋了RSA系統的工作原理,還給讀者提出了一項挑戰,在文章裏發佈了一串密碼文,還給了一個129位的大數,也就是公開的那把鎖,他們公開懸賞100美金,邀請大家來破解。

他們的密碼最終有人破解了嗎?其實是有的。但是,最終成功破解的,是一個600人組成的團隊,他們藉助了全球各地的計算機,甚至還動用了超級計算機,就這樣,他們還花了17年的時間,才成功破解了這個密碼。

你想,如果真的是在戰場上,17年後才破解的軍事情報,早就已經失去了效果。更何況,今天人們在使用RSA算法時,使用的那個數,遠遠不止129位,往往會使用300位以上的大數。想要分解這樣一個數,大約需要把全球所有的計算機都集中起來,一塊工作上億年才能得到答案。

目前看來,RSA是一種非常可靠的加密算法,所以被廣泛應用在各種場合,像我們使用網銀支付、手機支付,背後都有RSA算法在給我們保駕護航。

結語

編碼與解碼的戰爭,是一場永遠沒有終結的拉鋸戰RSA算法固然已經非常安全,但是已經有科學家在研究如何用量子計算機攻破RSA算法。想要找到一勞永逸無比安全的加密方式,幾乎是不可能的。人類只能在這場戰爭中繼續向前。

而在這場戰爭中,有很多因素起到過關鍵作用,比如數學,比如物理學,比如機械學,比如計算機科學,可是最關鍵的因素,還是人。攻破密碼,靠的是己方的勤勞和智慧,也靠的是敵方露出的破綻,在這本書裏,有一句話讓我印象深刻:「儘管我們發明了竊賊打不開的鎖,這不代表你就可以亂放鑰匙。」不論技術如何向前演變,這場戰爭永遠是人和人之間的戰爭,每一次的失敗暴露的都是人性的弱點,而每一次的勝利,本質也是人類的勝利。

個人收穫及總結

密碼作爲一種消息傳遞的方式,在人類歷史的進程中發揮了巨大的作用,我相信關於密碼學的相關知識也會被大家熟知,我更相信人類的智慧會推動社會的巨大進步,我們在享受成果的同時也不要忘記祖輩們付出的巨大貢獻,讓我們一起脫帽致敬我們的前輩。若是我的文章對你有所啓發,那將是我莫大的榮幸。希望和您一起精進,成爲更好的自己。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章