對稱加密
在人類演進(jìn)發(fā)展出書寫的技能后,幾乎同時,加密就成為了人們的通訊技術(shù)。
最早的加密技術(shù),是隱文術(shù)。有歷史記載的加密活動,出現(xiàn)在公元前五世紀(jì),希臘與波斯的戰(zhàn)爭中。希臘人在木板上寫字,在字上涂蠟蓋住字跡,以此安全傳送波斯軍隊的信息到希臘。還有記載,把字寫在間諜剃光的頭皮上,然后等間諜長出頭發(fā)覆蓋了字跡,再親身將自己送到接受方。我國古代,也出現(xiàn)過蠟丸藏書等故事。這些方法,主要的手段就是將要傳送的字跡隱藏。隱文術(shù)嚴(yán)格來說,算不上密碼,是一種明文傳送。只要敵方得知隱藏的方法,一切秘密便大白于天下。
而真正的密碼技術(shù),有兩種,一種是替換,一種是易位。易位密碼術(shù)最早出現(xiàn)在公元前五世紀(jì),將羊皮紙纏繞在棍子上,沿著棍子縱向?qū)懽?,這樣解下羊皮紙后,其上的字跡橫著讀就是無意義的亂碼。接收方用同樣規(guī)格的棍子,纏上羊皮紙,則可以縱向讀出正確的信息來。
替換密碼技術(shù)出現(xiàn)在公元前四世紀(jì)。婆羅門學(xué)者記載了將字母兩兩替換的方法,可以對信息進(jìn)行加密。
在易位技術(shù)中,字母不變,但字母的相對位置變化;在替換技術(shù)中,字母的位置不變,但字母改變。
高盧記中記載,凱撒曾經(jīng)設(shè)計了一套密碼,將每個字母往后挪動三位。比如 A 加密成為 D, B 加密成為 E。 這就是凱撒移位密碼。
這基本的原理,構(gòu)成了之后幾千年加密的技術(shù)基礎(chǔ)。人們在歷史上設(shè)計了更加復(fù)雜的密碼替換方法,更加復(fù)雜的密鑰,以及用機械及電子方式加密,但基本原理就是如此。
替換密碼的安全性建立在密鑰上,只要密鑰被敵方獲取,則可以輕松解開密文。而密鑰可以構(gòu)成數(shù)量龐大的組合,因此在沒有更先進(jìn)的解密方法出現(xiàn)之前,替換密碼幾乎是安全的。
而之后發(fā)明的,對替換密碼術(shù)的破解方法,原理也很簡單。每一種語言,其中的每個字母,都有固定的出現(xiàn)頻率。正如 A 這個字母在英語中出現(xiàn)的頻率約為 8%,而 E 在英語中出現(xiàn)最頻繁,約為 13%。這樣,對密文中出現(xiàn)的字母進(jìn)行頻率統(tǒng)計,根據(jù)一致的頻率替換成正確的字母,就可以翻譯成明文了。
在非對稱加密出現(xiàn)之前,對稱加密與解密的斗爭中,加密者一直處在下風(fēng)。即便如上文所提的恩格瑪機,那是對稱加密技術(shù)的最頂峰,也最終在圖靈的統(tǒng)計學(xué)和機器運算面前,崩潰了。
計算機的出現(xiàn),與密碼學(xué)有著千絲萬縷的聯(lián)系。現(xiàn)在公認(rèn)的計算機之母,是賓夕法尼亞大學(xué)埃克特、莫克利研制的 ENIAC。 實際上,有一位英國數(shù)學(xué)家,也是圖靈的同事,叫馬克斯紐曼,他拓展了圖靈 “萬能機器” 的概念,設(shè)計出了可編程計算機,并由工程師湯米佛勞爾斯制造完成,這臺機器共有 1500 個電子管。可惜的是,這臺機器被英國軍方銷毀,連圖紙也被燒掉。 所以可以說是密碼學(xué)者,發(fā)明了計算機。
計算機出現(xiàn)后,加密與解密的工作,就自然轉(zhuǎn)移到了計算機上。無疑計算機的計算速度和計算能力,也給加密解密技術(shù)帶來了更寬闊的天地。
計算機只處理二進(jìn)制數(shù),也就是 0 與 1,所以所有的信息都要轉(zhuǎn)化成為 0 與 1。使用計算機加密,其過程依然按照古老的原則進(jìn)行,與凱撒時代并無區(qū)別。無非就是替換與易位。隨著計算機在商業(yè)上應(yīng)用的普及,為了能夠廣泛使用密文傳遞信息,建立一套加密的標(biāo)準(zhǔn),就成了當(dāng)務(wù)之急。
菲斯特爾是德國人,1930 年代流亡來到美國。因為他是來自德國的流亡者,經(jīng)歷了坎坷的努力,方才能夠在美國參與密碼研究。 事實證明,美國用他用對了。 他在 IBM 實驗室發(fā)明了后來大名鼎鼎的 DES 算法。 DES 算法是一種對稱加密標(biāo)準(zhǔn),計算機將電文處理成為二進(jìn)制后,進(jìn)行分組、加密、替換、易位各種復(fù)雜處理,重復(fù)操作總計 16 次。解密的那一端,根據(jù)共同的密鑰,反向處理實現(xiàn)解密。 1976 年 DES 算法成為美國加密的標(biāo)準(zhǔn)。但美國 NSA 要求民用 DES 的密鑰數(shù)必須控制在 10 的 18 次方以內(nèi)。
DES 升級后的版本 3DES,現(xiàn)在是全球最流行的加密算法。