加密術相關歷史典故

2021-06-21 07:19:28 字數 4220 閱讀 5930

加密術和科學相比,歷史更為悠久。在很早以前,人們就已經開始利用密碼或者暗語傳遞資訊了。西元前

480年,古希臘幾乎就被十分強大的波斯帝國所征服。是一條藏於蠟封藥片上的秘密訊息,讓希臘人在大吃一驚的同時,提前做好了準備,並得以在薩拉公尺斯戰役中毫不留情地打敗了波斯人,才使得希臘進入了乙個**時代。如果沒有這條訊息,希臘在當年就會成為波斯的臣民,西方文明的歷史將會是另外一番景象了。

在歷史上,層出不窮地出現過因傳遞資訊被察覺或者破譯的事情。

1587

年,蘇格蘭女王瑪麗在監獄中策劃一場刺殺伊莉莎白女王使自己登上王位的陰謀。由於進出監獄的一切物品都要接受檢查,瑪麗與同謀者發明了一種密碼,把編入密碼的訊息藏入啤酒桶蓋中,再進行交換。不巧,英格蘭的間諜大師沃爾辛厄姆爵士發現了密信,在破譯之後仿照瑪麗的書信風格編寫了瑪麗給同謀者的一條假訊息,引誘叛變者透露出了參與陰謀的全部人員名單。這些密碼就成了瑪麗叛國罪行的證據,她也因此被兩道斧印結束了生命。

第二次世界大戰,其實就是第一次的資訊戰爭。編碼和解碼,成了戰爭期間最為重要的事情之一。這裡且說兩個典型的案例。

第乙個案例是導致日本艦隊覆滅的資訊戰。

1942

年春,美**界正在為連吃敗仗而震驚不已,敵對方日本在太平洋戰事中則是高歌猛進。就在這關鍵時刻,美軍的密碼破譯員截獲並破譯了日軍的乙個情報,說美方有一處代號是

af的基地,很快將成為一次重大海上襲擊目標。太平洋有很多島嶼上都有美軍基地,

af指的是哪個島呢?在糾結之中,指揮官羅什福爾想到乙個辦法,他命令中途島基地傳送乙個虛假求助資訊,就說島上的淡水蒸餾系統發生故障,基地幾無淡水。日本人監聽到了這一資訊,很快,美國人也受到了日本電波發出的乙個微弱訊號:「

af缺淡水。」於是,美軍明白了,日本人想偷襲中途島。

2023年6

月4日,日本艦隊司令山本五十六帶領的作戰艦隊,迎面撞上了恭候的美國艦隊,經過激戰,日本四艘航空母艦被擊沉,美軍只損失了一艘航空母艦。一敗塗地的日軍狼狽返航,整個太平洋戰爭從此輸掉。

第二個案例是針對德國的

u型潛艇的。二戰初期,德國的

u型潛艇艦隊幾乎扼住了英國的島嶼要塞,

1940

年下半年,

u型潛艇在大西洋,每個月將英國及其盟國的

50萬噸貨物送到海底,幾乎迫使英國屈服。幸虧英國和波蘭的乙個高階譯電小組成功解析出

u型潛艇之間通訊的密碼,使得盟軍能夠將這些

u型潛艇擊沉,讓英國喘了一口氣。

乙個資訊,從發布者到接受者的整個過程中,一定會經歷編碼、傳送、解碼三個階段。編碼就是將資訊加密的過程。乙個資訊只希望特定的物件知道時,就需要編碼。有這樣一首詩:

我用相思作玉杯,真情當酒意相隨,愛心已醉何時醒,你似蝴蝶夢裡飛。

稍微分析一下,就會發現這是一首藏頭詩,是戀愛的一方在向另一方表達心意。其實,藏頭詩就是一種加密術(編碼術),它通過座標變換的方式隱藏了秘密。這個例子雖然很簡單,但它反映出了加密術的本質——變換座標系。

加密術最早應用於古代戰爭。通訊員在傳遞情報的過程中,免不了會被對方俘虜,從而使情報落入敵手。這對於作戰部隊來說,可是生死攸關的大事。為此,指揮部和前線作戰部隊就會做一些有關編碼的約定,使情報採取加密的方式進行傳遞,而通訊員自己並不知情。傳說當年的凱撒大帝就發明了乙個編碼加密的辦法,即在寫命令前做乙個對應表,明碼:

a b c d e f....w x y z

,密碼:

d e f g h i....z a b c

,如果他想寫

baby

,就用edeb

來表示。當大將收到了

edeb

這個密碼後,向前推

3個字母,就得到了明文。

這種加密方式其實就是把座標系橫移了

3格。但是,這種簡單的加密方法也很容易被敵方猜到。只要密碼破譯者每次將字母向前推

1格,看看得到的新單詞是否存在或者是否有實際意義即可。

按順序排列的對應表不安全,怎麼辦?人們又有了新的創意:對應表不按字母順序寫,搞個亂序的。例如a對

q,b對

f,隨意配對,只要保證

26個明密碼一一對應沒有重複就行了。發資訊的人和接收資訊的人事前做好約定,接到資訊之後一對表就可以還原。這種亂序的加密術確實安全多了,但它還是有乙個明顯的漏洞。以英文為例,如果乙個字母單獨成詞,那麼它不是a就是

i;其次,一篇文件裡每個字母的出現次數是不同的,例如

e出現的次數最多,

x在文章中就非常罕見,只要明白了這些字母出現的頻率,花一點時間對照一下,就會很方便地破解那條資訊。

這真是道高一尺魔高一丈啊!你會編碼,自然就會有解碼的方式。研究編碼的人們只好進一步開動腦筋,在尋新的高招。別說,還真讓他們給研究出來了。讓每個明文都對應多個密文,可以用下面的例子來說明:在下例中,明文

a分別對應著密文x、

g、v,這三個密文的選擇取決於明文的位置,

a在第一位時選

x,第二位時選

g,第三位時選

v。將整個一段明話按三位一段進行分組後就可以加密了。這個例子是三維的,維數還可以更多,那就更難破譯了。這種系統非常有效,但其實還是有統計規律可循的,只是短短一段密文是不足以找到規律的。

明文:a b

c de f

g hi j

k lm n……

密文1:x

y za b

c de f

g h ij

k……密文2:

g h ij

kl mn a

s rz y

f……密文3:

v yb e

h k nq

t w z c

r w……

明文:abc def 

gai eba

aaf密文:

xhb akk

dgtbhv

xgk這種對應規律相對固定的編碼系統,還是給破解帶來了突破口。隨著技術的發展,人們開始嘗試用機械改良這種編碼系統。

2023年2

月,德國發明家謝爾比斯為一台「不可破譯」的編碼機申請了一項專利,不久以後它就成為舉世聞名的恩尼格瑪密碼機。經過人們的不斷完善,到了二戰時期成為最為重要的通訊工具。一台標準的恩尼格瑪密碼機總共能有3×

10114

種以上的密碼配置方法,如果單純分析這種密碼,預計破譯的時間長達億萬年,所以稱其為「不可破譯」,也不是空穴來風。

但圖靈改變了這一切。二戰時期,在英格蘭白金漢郡的布萊奇利公園裡,密碼破譯專家圖靈和他的夥伴們,利用幾個小時就能破譯出一條恩尼格瑪密碼機發出的資訊。也正是因為如此,才使得德國的

u型潛艇得到了打擊,也改變了大西洋戰爭的發展趨勢。從某種意義上說,對恩尼格瑪密碼機密碼的破譯,就像一顆閃亮的星,迎來了電腦科學和資訊學的誕生,而圖靈的思想,是兩者的重要組成部分。

圖靈是如何改變著一切的呢?這涉及到乙個重要的概念——冗餘度。先舉兩個例子來說吧。兩個人在乙個嘈雜的環境裡交談,儘管聽起來聲音是斷斷續續的,但依然可以理解對方的意思,使對話不至於跑題;所有國家的語言,在向對方傳遞資訊的時候,發出去的資訊總是多於對方所需要的資訊,雖然有時候發出去的資訊不完整、有殘缺,對方還是可以根據這些殘缺的資訊來推斷出語言傳送者想表達的意思。所謂的冗餘度,就是在乙個句子或一條訊息中得到額外提示,從而使含義得到理解。即使乙個訊息的一部分被去掉,它的含義仍然能保持不變。這就是冗餘度的精髓所在。

之所以會這樣,是因為所有的語言都是有規則的,正是這種規則,為語言提供了自己的結構,也提供了冗餘度。讀者在閱讀這些語言的時候,除了文字本身,通常還會從語言結構的角度去把握。冗餘度是一種安全機制,是它保證了訊息能夠到達,即使訊息在途中受到一定的損壞也沒有關係。

大家都知道,電腦中的壓縮軟體可以使我們的檔案變小,以便在乙個

u盤中裝入更多的檔案。壓縮軟體的工作原理就是通過從乙個檔案中去掉(幾乎)所有的冗餘度,只留下關鍵的部分。而解壓的過程,就是根據語言結構和規則,恢復冗餘度的過程。由此可知,資訊和冗餘度是互補的,當我們從一條資訊中去掉冗餘度時,留下來的就是資訊。

密碼學所要面對的關鍵問題是,在保留一條資訊的核心內容時,去掉或者掩蓋這條資訊的冗餘度。如果密碼沒有冗餘度,是很難被破解的,因為我們無法將其和相關的語言規則建立聯絡。恩尼格瑪密碼機的缺點之一,就是在密碼資訊中加入了冗餘度,造成保密性減弱。比方說,該密碼機從不讓字母發生變化,乙個已經加密的字母

e,可能是其他任何字母,但不可能是

e。這樣一來,就為破解提供了一點點資訊。缺點之二是德國人的交流方式,他們的語言風格也會在密碼中呈現出來。圖靈等人首先破譯德國人的加密天氣預報,從中獲得德國人的密碼語言風格,再將其運用到對軍事密碼的破譯之中。

還是那句話,道高一尺魔高一丈啊!

《解碼宇宙:新資訊科學看天地萬物》 [美

]查爾斯·塞費/著

隋竹梅/譯

上海科技教育出版社

2010.4

凱撒的加密術

凱撒的加密術 tags 標籤 加密術 原創 奧卡姆剃刀 發表於 2010 12 09 07 44 送上開場詩一首 我用相思作玉杯,真情當酒意相隨,愛心已醉何時醒,你似蝴蝶夢裡飛。你可以把這首詩發給你女友,聰明的她一定能看出這是首藏頭詩,從而明白你的心意。其實,藏頭詩就是一種加密術,它通過座標變換的方...

Linux相關術術語全稱

grep global search regular expression and print out th line 全域性搜尋正則達表示式並列印出來。postfix portable operating system inte ce可移植作業系統介面,postfix是由ieee 電氣和電子工程師...

sgx lfence的相關歷史

本來的目的是看sgx引入lfence的目的是不是為了防sgx下spectre。不過最終只找到相關時間,不好下結論。此處做乙個mark。lfence就是load指令的fence,就是load的柵欄 籬笆。sgx v1.8 2017.3 引入page fence 防止緩衝區溢位。sgx v1.9 201...