在信息傳遞過程中,密碼學(xué)就成為了安全機制中的一個重要環(huán)節(jié)。一直以來密碼學(xué)都被專指加密算法——將明文(信息,plaintext)轉(zhuǎn)換成難以理解的數(shù)據(jù)(密文,ciphertext),以及將密文還原成明文的過程。加解密也就成為了密碼學(xué)中最為重要的兩種算法。
對稱密鑰加密術(shù)示意圖
在談到人類社會發(fā)展中的加解密或者說密碼學(xué)(近代以前密碼學(xué)專指加解密,本文主要圍繞加解密來展開。編者注)的時候,我們需要知道,它是由兩部分構(gòu)成的:算法和密鑰。密鑰是一個用于加解密算法的秘密參數(shù),通常只有通訊者擁有。算法和密鑰在編制密碼和破譯密碼的過程中都會參與其中。
為了讓大家更加通俗易懂,我們以上圖為例子進行說明。明文“Hello World!”通過加密并以密鑰(ciphertext)這個參數(shù)(也就是圖片中的字符串),將明文轉(zhuǎn)換成難以理解的數(shù)據(jù)或者符合。而接收方也需要這個密鑰對其進行解密。從而才能還原出其真實的數(shù)據(jù)信息“Hello World!”。在這個加密模式中,只需要提供一種密鑰進行加、解密過程,也就是我們常說的對稱密鑰加密。
非對稱加密算法
與此對應(yīng)的,則是非對稱加密算法。非對稱加密算法需要兩個密鑰:公開密鑰(public key)和私有密鑰(private key)。公有和私有密鑰彼此不同,公開密鑰與私有密鑰構(gòu)成一對,如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密,那么只有用對應(yīng)的公開密鑰才能解密。
對稱和非對稱加密,在密碼學(xué)中占有非常重要的地位,也是整個密碼學(xué)體系不斷發(fā)展的兩個主要線索。在本文,我們將為大家介紹包括這兩種模式的加解密發(fā)展歷程,并著重以實物的形式來展現(xiàn)人類在密碼學(xué)所體現(xiàn)的安全技術(shù)的發(fā)展。
早在公元前,秘密書信已用于戰(zhàn)爭之中。西洋“史學(xué)之父”希羅多德在《歷史》當中記載了一些最早的秘密書信故事。
比如,公元前5世紀,希臘城邦為對抗奴役和侵略,與波斯發(fā)生多次沖突和戰(zhàn)爭。公元前480年,波斯秘密結(jié)了強大的軍隊,準備對雅典和斯巴達發(fā)動一次突襲。希臘人狄馬拉圖斯在波斯的蘇薩城里看到了這次集結(jié),便利用了一層蠟把木板上的字遮蓋住,送往并告知了希臘人波斯的圖謀。最后,波斯海軍覆沒于雅典附近的沙拉米斯灣。
在古代,最早的加密方式通常指采用紙筆等工具,隨著生產(chǎn)力的發(fā)展,密碼學(xué)領(lǐng)域就涌現(xiàn)出更多的技巧和工具。比如早期最具代表性的凱撒密碼(Caesar Cipher,以Julius Caesar古羅馬朱利尤斯·愷撒命名),在古羅馬時代就被廣泛應(yīng)用。凱撒密碼是最具代表性的一種替代式加密算法,它通過將一組字母系統(tǒng)性地替換成另外的字母或者符號,從而達到加密的目的。
愷撒密碼原理
比如,圖中我們展示的是將字母A替換成D,B替換成E,C替換成F,依此類推。如果將“hello”進行凱撒式加密的話就替換成“khoor”了。在這種加密方式中,位數(shù)就成為了加解密的密鑰。
Syctale密碼棒
在古希臘的時候,還有一種叫Syctale的棍棒類物體(暫且稱之為“密碼棒”)被用來對信息進行加解密。這是一個協(xié)助置換法的圓柱體,可將信息內(nèi)字母的次序進行調(diào)動。它主要是利用了字條纏繞木棒的方式,實現(xiàn)字母的位移,收信人要使用相同直徑的木棒才能還原真實的信息。
在凱撒密碼的基礎(chǔ)上,發(fā)展出一種更為復(fù)雜的維吉尼亞密碼(Vigenère Cipher)。該密碼取名自法國密碼學(xué)家維吉尼亞,是一種多表替換密碼,也被叫做維熱納爾密碼。
如果需要對明文進行加密,就需要這組密碼矩陣和一個關(guān)鍵詞(密鑰)來實現(xiàn)。在維吉尼亞密碼下,可以采用兩種方式來進行加密:公式法和查表法。
16世紀法國亨利三世王朝的布萊瑟·維吉尼亞(圖片來自維基百科)
維吉尼亞密碼也可以用代數(shù)的形式來對待。將字母A-Z對應(yīng)0-25(26個數(shù)字),因此我們可以引入mod26運算(取模運算)。對于公式法來說,我們可以采用:
維吉尼亞密碼加密公式
通過K這個密鑰來實現(xiàn)對E的加密(M為明文,E為密文,K為密鑰)。而對于解密,則可以采用:
維吉尼亞密碼解密公式
在以上公式中,
代表明文,
代表密文,
則為使用的密鑰。
另外,我們也可以用查表法來進行加密。例如密鑰的字母為“d”,明文對應(yīng)的字母“b”,在下圖的表格第一行找到字母“d”,再在左邊第一列找到字母“b”,兩個字母的交叉點(b行d列)就是字母“e”,所以對應(yīng)的密文字母為“e”。
維吉尼亞密碼表(圖片來自維基百科)
和其他所有的加密方法一樣,維吉尼亞密碼通過字母以某種頻率出現(xiàn),因此頻率分析也稱為了破解此類加密的一種方法。比如,如果P在密文中的頻率非常高,那么人們就可以猜測出所對應(yīng)的E也是頻率較高的字母。但是,使用維吉尼亞密碼下的E可以以不同的密文形式來加密。
維吉尼亞密碼中不同英文字母出現(xiàn)的頻率(圖片來自維基百科)
1914-1940瑞士使用過的加密計算尺(圖片來自維基百科)
之前介紹的凱撒密碼是一種替換加密術(shù),每個字母都制定了以唯一的替換符號(Monoalphabetic Substitution Cipher,單字母表替換加密),因此它們很容易被頻率分析法破解。維吉尼亞密碼后來出現(xiàn)過多種改進和變形,也引用了這種“多字母表替換加密” (Polyalphabetic Substitution Cipher)。這種多表加密比單表加密復(fù)雜,破解難度也大大增加。自從維吉尼亞加密術(shù)出現(xiàn)以后,多表加密成為歐洲人最常用的加密方法。比如上圖中展示的 1914年至1940年間,瑞士軍隊使用了這種加密計算尺。
18上世紀90年代,Jefferson(托馬斯·杰弗遜,美國第三任總統(tǒng))發(fā)明了一種基于圓盤的加密裝置Jefferson disk(杰弗遜圓盤),或者也被稱為Jefferson wheel cipher(杰弗遜轉(zhuǎn)輪加密器)。
這種裝置有36片同樣大小的木制轉(zhuǎn)輪,套在一根鐵桿上。每片轉(zhuǎn)輪的圓周邊緣上刻有亂序的26個英文字母。通信的雙方必須各自有一個完全一樣的杰弗遜圓盤(有點類似我們此前介紹的Syctale密碼棒,需要彼此雙方有同樣的加密裝置)。
Jefferson disk(杰弗遜圓盤,正面)
Jefferson disk(杰弗遜圓盤,斜側(cè)面)
在使用的時候,密文發(fā)送者把一段文字(不超過 36字)通知身處異地的對方時,只需轉(zhuǎn)動加密器上的各片轉(zhuǎn)輪,使這段文字正好出現(xiàn)在同一行上,這時轉(zhuǎn)輪上排列的其他25行都是無意義的亂碼。再把其中任意一行的亂碼抄下來交給信使(信使無法解密)。對方收到亂碼信后,只需拿出自己保存的同樣的裝置,轉(zhuǎn)動上面各片轉(zhuǎn)輪,讓其中一行的排列和這段亂碼同處在一行上,然后再查看其他25 行上的內(nèi)容,其中必然有一行顯示出加密者要傳達的信息,而其他行顯示的都是亂碼。
杰弗遜圓盤中的其中一個disk
從這里我們不難看出,這種杰弗遜圓盤屬于多表替換加密,每一個轉(zhuǎn)輪相當于一張密碼表。只有使用相同的加密裝置的情況下,才能得到蘊含其中的秘密。每個轉(zhuǎn)輪都可以隨機設(shè)置一個字母,密鑰則是圓盤中總共36個disk的不同排列算法來實現(xiàn)。從這里我們也不難得出,這種加解密在當時來說還算非常安全的(36!=3.7×10^41)。
Jefferson disk(杰弗遜圓盤,側(cè)面)
杰弗遜的發(fā)明在后來的150年里都有深遠影響,促使了后來美軍使用的M-94圓柱形密碼設(shè)備的成型。而且它在第二次世界大戰(zhàn)中也很流行,不過采用的是機械電子式的,與打字機等設(shè)備結(jié)合使用。
M-94 Encryption Disks(點擊圖片看大圖)
圓盤上的字母
上圖展示的就是這種沿用了杰弗遜圓盤設(shè)計思想的圓柱形密碼設(shè)備M-94。該密碼設(shè)備總共有25個直徑為35mm的鋁制圓盤,外緣上刻有字母。該設(shè)備在1924年被廣泛應(yīng)用在低級軍事通信領(lǐng)域。
二戰(zhàn)中美國陸軍和海軍使用的 條形密碼設(shè)備M-138-T4,采用了25個可選的紙條按預(yù)先編排的順序編號使用,其加密強度也相當于M-94。
此前介紹的都是基于手工編碼來實現(xiàn)加解密功能,而采用這種人工編碼原理的電報編碼和譯碼在我國一直被應(yīng)用到上世紀七八十年代,這多少有點令人遺憾。這種人工編碼的方式效率極低,而且保密性也很差。
在1918年,德國發(fā)明家亞瑟·謝爾比烏斯(ArthurScherbius)有一個想法,希望通過二十世紀的電氣技術(shù)來代替過時的人工加解密。
Enigma加密機(WWII)
他發(fā)明的加密機Enigma,也就是我們今天要介紹的在軍事和外交密碼里最著名的WWII(在WWI的基礎(chǔ)上增強加密強度)密碼電機。
被加密和解密的齊默曼電報
在介紹Enigma之前,我們先了解下WWI(Zimmerman齊默曼電報)。這是一封由德國外交秘書阿瑟·齊默曼于1917年1月19日秘密發(fā)給德國駐墨西哥大使的電報。電報以加密形式被發(fā)送,它載有建議德國和墨西哥合作對抗美國的內(nèi)容。但后來電報被英國海軍情報局截獲,并且告知了美國總統(tǒng)伍德羅·威爾遜,從而獲得了戰(zhàn)爭的先機。
Enigma加密機及附屬工具
為此, Enigma加密機在此基礎(chǔ)上強化了加密性能。它主要包括鍵盤、轉(zhuǎn)子、顯示儀板和插線板組成。Enigma加密機有26個鍵,鍵盤排列接近我們現(xiàn)在使用的計算機鍵盤。鍵盤上方就是顯示器,它由標示了同樣字母的26個小燈組成,當鍵盤上的某個鍵被按下時,和此字母被加密后的密文相對應(yīng)的小燈就在顯示器上亮起來。
Enigma加密機主機箱
不含箱體的Enigma主機
掀開面板可看到鍵盤、燈泡、轉(zhuǎn)子
在顯示器的上方是三個轉(zhuǎn)子,鍵盤、轉(zhuǎn)子和顯示器由電線相連,轉(zhuǎn)子本身也集成了6條線路。當一個鍵被按下時,信號不是直接從鍵盤傳到顯示器,而是首先通過三個轉(zhuǎn)子連成的一條線路,然后經(jīng)過反射器再回到三個轉(zhuǎn)子,通過另一條線路再到達顯示器上。
1942年德國開始采用四輪的Enigma加密機,并且給德國海軍進行了裝備。它使用了3個(最多可為8個)正規(guī)輪和1個(最多為2個)反射輪來進行加解密。從而使得加密強度得到進一步提升,這也使得英國從1942年2月到12月都未能破解德國潛艇的密文。
Navajo Code,也就是美國最大的印第安部落Navajo(納瓦霍人)所采用的一種密碼通信。從字面上來看,它基于當?shù)丶{瓦霍人的特種語言而成的密碼系統(tǒng)。
1942年,美軍征召美國最大的印第安部落納瓦霍人入伍,使用納瓦霍人的語言編制更加安全可靠的密碼。這種密碼在當時被稱為“最簡便、最快速和最可靠”的密碼。該密碼也因電影《風(fēng)語者》而倍受關(guān)注。
納瓦霍密碼字典
隨后,更加開放擴展的密碼學(xué)研究在上世紀70年代開始迅速發(fā)展。比如最具影響力的數(shù)據(jù)加密算法Data Encryption Algorithm(DEA),就是在當時由IBM研究開發(fā)出來。
DES加密過程
DEA是一種對稱加密算法,起初是被應(yīng)用在金融行業(yè),嵌入到硬件實現(xiàn)對數(shù)據(jù)的保護(ATM都使用DEA這種算法)。這種加密算法和我們之前介紹的 Enigma加密機有相通之處——循環(huán)位移的基礎(chǔ)上進行替代模糊,增加頻率分析和密碼破解的難度。只不過DES是在計算機領(lǐng)域的二進制級別進行這種替代。
Feistel加密結(jié)構(gòu)示意圖(圖片來自維基百科)
1977年DEA被美國政府正式采納,基于這種算法的標準則為Data Encryption Standard數(shù)據(jù)加密標準(DES,1979年1月成為標準)。DES使用一個56位的密鑰以及附加的8位奇偶校驗位,產(chǎn)生最大64位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進行“異或”運算;然后對其進行交換,這一過程會繼續(xù)下去,但最后一個循環(huán)不交換。DES使用16個循環(huán),使用異或,置換,代換,移位操作四種基本運算。
對于計算數(shù)字簽名來說Hashes是必不可少的,尤其是在電子商務(wù)的數(shù)字證書領(lǐng)域應(yīng)用更是廣泛。美國國家標準與技術(shù)研究院(NIST)擁有一系列的 Hashes哈希算法。Hash也被稱作“散列”,可以把任意長度的輸入字符通過Hash變換成固定長度的輸出——也就是散列值。
Secure Hash Algorithm安全散列算法就是其中最為重要的一種Hash算法。SHA能計算出一個數(shù)字信息所對應(yīng)到的,長度固定的字符串(又稱信息摘要)的算法。 SHA被FIPS認定為五種安全散列算法之一(SHA家族五大算法為SHA-1、SHA-224、SHA-256、SHA-384和SHA-512),因為:
一、由信息摘要反推原輸入信息,從計算理論上來說是很困難的;
二、想要找到兩組不同的信息對應(yīng)到相同的信息摘要,從計算理論上來說也是很困難的。任何對輸入信息的變動,都有很高的機率導(dǎo)致其產(chǎn)生的信息摘要迥異。
SHA家族對比(圖片來自維基百科)
SHA-1, SHA-224, SHA-256, SHA-384 和 SHA-512 都被需要安全散列算法的美國聯(lián)邦政府所應(yīng)用,他們也使用其他的密碼算法和協(xié)定來保護敏感的未保密數(shù)據(jù)。FIPS PUB 180-1 也鼓勵私人或商業(yè)組織使用 SHA-1 加密。
除此之外,密碼學(xué)歷史上還出現(xiàn)了一種one-Time Pad(并非平板電腦)的加密系統(tǒng),被譽為“密碼編碼學(xué)的圣杯”。
該加密系統(tǒng)由Gibert Vernam和Joseph Mauborgne發(fā)明。這種密碼系統(tǒng)的密鑰和明文具有相同的長度,而且密鑰只可使用一次,因此也叫“一次一密”。
one-Time Pad
通信雙方事先各有一個可以一頁一頁撕下來的本子,其中每頁記錄一個密鑰(類似日歷的使用),每使用一個密鑰加密一條信息后,該頁也就作廢,下次加密時再使用下一頁的密鑰。接收者在解密信息后也銷毀密鑰本中用過的一頁密鑰。
它采用隨機的二進制數(shù)據(jù)組成密鑰。加密時,對密鑰和明文進行異或操作,得到密文;解密時用同樣的密鑰和密文進行異或操作,得到明文。
一次一密度密鑰必須是隨機產(chǎn)生的,其缺點是需要非常長的密鑰,從而導(dǎo)致大量的精力去產(chǎn)生和傳輸這種密鑰。就目前來說,某些高度機密的低帶寬信道也有采用這種一次一密度加密系統(tǒng)。據(jù)說美國和前蘇聯(lián)之間的熱線電話也是采用這種一次一密度加密系統(tǒng)。
之前我們提到在加解密算法中需要使用密鑰。1976年,在美國斯坦福大學(xué)的迪菲(Diffie)和赫爾曼(Hellman)兩人提出了公開密鑰的新思想。這種思想下不僅可以對加密算法進行公開,也可以對加密用的密鑰進行公開。進一步地,如果將加密密鑰和解密密鑰設(shè)定為不一樣,并對解密密鑰進行保密即可保證安全。這也就是著名的公鑰密碼體系,也稱作非對稱密碼體制。
在這種思想基礎(chǔ)上,麻省理工學(xué)院的里維斯特(Ronald Rivest)、沙米爾(Adi Shamir)和阿德勒曼(Len Adleman)提出第一個較完善的公鑰密碼體制——RSA體制。它是由三位發(fā)明人的姓氏首字母命名,是一種建立在大數(shù)因子分解基礎(chǔ)上的算法。它是第一個成熟的、迄今為止理論上最成功的公鑰密碼系統(tǒng)。
公鑰私鑰在加解密中的應(yīng)用示意圖
公鑰通常用于加密會話密鑰、驗證數(shù)字簽名,或加密可以用相應(yīng)的私鑰解密的數(shù)據(jù)。另一個自己保留,稱為私鑰。通過這種算法得到的密鑰對能保證在世界范圍內(nèi)是唯一的。使用這個密鑰對的時候,如果用其中一個密鑰加密一段數(shù)據(jù),必須用另一個密鑰解密。比如用公鑰加密數(shù)據(jù)就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密。
每支鑰匙產(chǎn)生一個被使用來改變屬性的功能。私有的鑰匙產(chǎn)生一個私有改變屬性的功能,而公開的鑰匙 產(chǎn)生一個 公開改變屬性的功能。如果一個功能是用來加密消息,另外一個功能則被用來解密消息。公開鑰匙系統(tǒng)的優(yōu)勢是兩個用戶能夠安全的溝通而不需交換秘密鑰匙。因此它非常適合于提供認證,完整和不能否認的服務(wù),所有的這些服務(wù)即是我們所知的數(shù)字簽名。
數(shù)字簽名,顧名思義,就是普通簽章的數(shù)字化,它的特性是可以輕易被制造簽章,但他人卻難以仿冒。在數(shù)字簽名算法中主要包括簽署和驗證。簽署采用了私密鑰處理信息或者信息的hash值而產(chǎn)生簽章。驗證則是使用公開鑰匙驗證簽章的真實性。
值得指出的是,在密碼學(xué)史上,還有一種叫做Steganography(隱寫術(shù))的信息隱藏技巧。它并非屬于加密的范疇,但卻起到了加密的效果。 Steganography,來源于特里特米烏斯的一本講述密碼學(xué)與隱寫術(shù)的著作Steganographia,該書書名源于希臘語,意為“隱秘書寫”。
OpenStego信息隱秘工具
隱寫的信息看起來像一些其他的東西,例如一張購物清單,一篇文章,一篇圖畫或者其他“偽裝”的消息。 在當代,則更多的意味著將加密的數(shù)據(jù)進行隱藏。著名的有OpenStego應(yīng)用工具。這是一款可以幫助用戶將文件、加密數(shù)據(jù)隱藏在圖片中的工具。
編后語:
從以上的介紹中我們不難發(fā)現(xiàn),早期的加解密主要是通過機械、初級電子設(shè)備來實現(xiàn)。它們工作速度很慢、笨重,而現(xiàn)代的加解密則完全不同,更多的是依賴計算機和軟件來實現(xiàn)。
通過計算機和軟件的技術(shù)來實現(xiàn)加密,但也不意味著有更高的安全性,因為破解密碼者同樣可以通過計算機和軟件來進行攻破。一個可靠的加密系統(tǒng)應(yīng)該是采用了隨機并且足夠長的密鑰來實現(xiàn),此外還需要通信雙方之間的溝通渠道有足夠安全的保障機制。