一文概覽密碼學(xué)發(fā)展史、基本原理與常見算法

CADEX研究院
所謂加密,就是一個(gè)改變數(shù)據(jù),使之變得不可辨識(shí)、無授權(quán)者無法使用的過程;同時(shí),它還要保證解密過程能成功把改變后的數(shù)據(jù)恢復(fù)成原始形式。安全技術(shù)一般都把加密的數(shù)學(xué)方法和用于加密的參數(shù)(叫做「key(密鑰)」)區(qū)別開來。

是不是只有那些數(shù)學(xué)頭腦很好的人,才能理解那些在信息安全中常常用到的技術(shù)(密碼學(xué))?如果你要成為密碼學(xué)家,那可能是的,畢竟密碼學(xué)家的工作就是構(gòu)造極難破解的加密算法。但是加密方法在當(dāng)今世界的用途已經(jīng)非常普遍了,從保護(hù)用戶的信用卡信息、保護(hù)遠(yuǎn)程用戶的網(wǎng)絡(luò)連接,到保護(hù)智力產(chǎn)權(quán)、防止盜版,密碼學(xué)無處不在。

我這篇文章的目的,就是把令人望而生畏的密碼學(xué)轉(zhuǎn)述成大白話,讓大家都能理解這些方法是如何用來加密數(shù)據(jù)的。

密碼學(xué)就是數(shù)學(xué)和物理學(xué)的組合;它是信息安全技術(shù)的核心,保護(hù)我們的數(shù)據(jù)安全和隱私

密碼學(xué)(Cryptology)的歷史

「cryptology」和「cryptography」兩個(gè)詞在現(xiàn)代的文獻(xiàn)中常常是無差別混用的,這就把對它們實(shí)際意義的混淆延伸到了語義學(xué)中。實(shí)際上,這幾個(gè)不同的詞語最好這樣解釋:

Cryptology(密碼學(xué))——對保密技術(shù)的藝術(shù)性以及/或者密碼系統(tǒng)科學(xué)性的研究

Cryptography(密碼設(shè)計(jì)學(xué))——設(shè)計(jì)密碼系統(tǒng)來保密的實(shí)用方法

Cryptoanalysis(密碼學(xué)分析)——致力于發(fā)現(xiàn)無需得知密鑰或算法就能從密文中反推出明文的漏洞

譯者注:正如作者所說,在現(xiàn)代的文獻(xiàn)中,「cryptology」和「cryptography」基本上是沒有差別的了,都是「密碼學(xué)」的意思,而且,密碼學(xué)雖然脫胎于加密方法研究,但現(xiàn)代的密碼學(xué)早已不止于研究加解密,而是延伸到了研究如何保障通信中的「機(jī)密性」、「身份同一性」等屬性上。因此,可以說,作者這里的定義即使不算過時(shí),也至少是窄化了密碼學(xué)。不過,出于理解作者原意的需要,對下文中的相應(yīng)詞語,我們?nèi)匝赜么颂幍姆g。

本文的絕大部分篇幅是在解釋「Cryptography(密碼設(shè)計(jì)學(xué))」,也就是今時(shí)今日的密碼學(xué)實(shí)踐,也希望讀者能意識(shí)到這幾個(gè)詞的含義和區(qū)別。

就其本身而言,密碼學(xué)作為一種科學(xué)的研究已經(jīng)存在了很多年,已知最早的一個(gè)密碼設(shè)計(jì)學(xué)的例子是在一段刻于公元前1900年的銘文,是在埃及貴族Khnumhotep二世墓地的主墓室里發(fā)現(xiàn)的。那個(gè)雕刻者到處使用一些奇怪的符號(hào)來代替更常見的符號(hào)。不過目的似乎并不是隱藏信息,只是為了改變其形式,讓它看起來更高貴一些。

在羅馬帝國的鼎盛時(shí)期(公元前100年),Julius Caesar(凱撒大帝)也因使用加密技術(shù)向前線將軍傳送消息而聞名。這種字符替換型加密方法(cipher)被稱為「凱撒密碼」,可能是文獻(xiàn)中最常提到的人類曾用過的加密方法。(所謂「cipher」,就是用來加密或者解密的算法)。所謂「字符替換型加密方法」,就是把明文(我們想要加密的消息)中的每個(gè)字母都換成另一個(gè)字母,形成密文(即被編碼過的消息)。凱撒所用的方法是把每個(gè)字母位移三位,比如,「A」會(huì)被換成「D」,「B」會(huì)被換成「E」,以此類推(都是換成該字母后面第三個(gè)字母)。相應(yīng)地,最后的幾個(gè)字母會(huì)被換成開頭的字母,比如「X」會(huì)被換成「A」。

在第二次世界大戰(zhàn)期間,美國海軍從納瓦霍人(Navajo)中招募并訓(xùn)練了許多熟練使用納瓦霍語的人。從編碼消息的角度來看,這是個(gè)絕妙的辦法,因?yàn)楹苌儆屑{瓦霍人以外的人學(xué)過怎么說這種語言,而且當(dāng)時(shí)還沒有用納瓦霍語出版的書。但是除了詞語之外,納瓦霍人的口語并不是十分復(fù)雜(按密碼設(shè)計(jì)學(xué)的標(biāo)準(zhǔn)來看),一個(gè)母語為納瓦霍語的人再加上一個(gè)訓(xùn)練有素的密碼學(xué)家,合作起來完全可以破解這套密碼。日本人曾經(jīng)有過一次機(jī)會(huì),就是在1942年「巴丹死亡行軍(Bataan Death March)」期間他們在菲律賓抓住了Joe Kieyoomia。Joe是美國海軍的一位納瓦霍中士,但他并不是密語播報(bào)員,只負(fù)責(zé)翻譯無線電消息。只不過,因?yàn)樗麤]有參與過密語訓(xùn)練,這些詞語是什么意思他一點(diǎn)也不懂。當(dāng)他說自己不能解讀這些消息時(shí),日本人就開始嚴(yán)刑拷打他。因此,日本陸軍和海軍從來沒有破譯過這些密語。

再到1970年代,IBM發(fā)現(xiàn)他們的客戶需要某種形式的加密手段,所以他們成立了一個(gè)密碼學(xué)小組,由Horst-Feistel領(lǐng)頭。他們設(shè)計(jì)出了一種加密算法叫「Lucifer」。1973年,美國國家標(biāo)準(zhǔn)局(現(xiàn)在叫做國家技術(shù)與標(biāo)準(zhǔn)局,NIST)放出話來,希望大家能提議一種夠格成為國家標(biāo)準(zhǔn)的數(shù)據(jù)加密方法。他們顯然已經(jīng)意識(shí)到,自己買了很多并沒有什么密碼學(xué)基礎(chǔ)的商業(yè)產(chǎn)品。Lucifer最終被接受了,因此叫做「DES(數(shù)據(jù)加密標(biāo)準(zhǔn))」。1997年以后,DES被窮舉式搜索攻擊攻破。DES的主要問題在于加密密鑰的位數(shù)太小。隨著計(jì)算機(jī)運(yùn)算力的增加,通過暴力窮舉所有可能的密鑰組合來破解密文慢慢變成了一種可行的辦法。

在80年代,大家?guī)缀踔挥幸粋€(gè)選擇,就是DES。今天的情形已經(jīng)大不相同了,有一大堆更健壯、更快,設(shè)計(jì)也更好的算法可供選擇。問題已經(jīng)變成了你如何厘清這些選擇。

1997年,NIST再次征求新的加密算法提案,最終收到了50份提案。2020年,NIST接受了「Rijndael」算法,并命名為「AES」,高級加密標(biāo)準(zhǔn)。

基本原理

所謂加密,就是一個(gè)改變數(shù)據(jù),使之變得不可辨識(shí)、無授權(quán)者無法使用的過程;同時(shí),它還要保證解密過程能成功把改變后的數(shù)據(jù)恢復(fù)成原始形式。安全技術(shù)一般都把加密的數(shù)學(xué)方法和用于加密的參數(shù)(叫做「key(密鑰)」)區(qū)別開來。被選定的密鑰(通常是一段隨機(jī)的字符串)也是加密過程的輸入,對加密過程來說也是必不可少的。同一把密鑰往往也是解密過程的必要輸入。

這個(gè)保護(hù)過程的原理是,只要密鑰(有時(shí)候也叫「口令」,password)沒有暴露、只被得到授權(quán)的人所知,那么原始數(shù)據(jù)就不會(huì)暴露給其他人。只有知道密鑰的人才能解密密文。這個(gè)思路,我們叫「私鑰」密碼設(shè)計(jì)學(xué)(譯者注:稱作「對稱密碼學(xué)」可能更恰當(dāng)一些,因?yàn)榧咏饷苓^程是對稱的,都使用同一把密鑰),也是最廣為人知的加密形式。

那么,加密之所以必要的基本理由如下:

機(jī)密性(confidentiality)——在傳輸數(shù)據(jù)的時(shí)候,不希望竊聽者能夠知道被廣播的消息的內(nèi)容。在保管數(shù)據(jù)的時(shí)候不希望未經(jīng)授權(quán)的人(比如黑客)能夠訪問,也是同理。

身份認(rèn)證(Authentication)——相當(dāng)于簽名。收信者希望能確證該信息是特定的某個(gè)人發(fā)出的,其他人不能冒充(甚至初始發(fā)信方后面想抵賴也不可能)。

完整性(Integrity)——這意味著收信者能夠證實(shí)自己得到的數(shù)據(jù)是完完整整、沒有經(jīng)第三方改動(dòng)過的。

不可抵賴性(Non-repudiation)——防止發(fā)信方抵賴自己創(chuàng)建過、發(fā)送過某條消息。

譯者注:作者在這里提到的才算是現(xiàn)代密碼學(xué)研究的范圍。比如身份認(rèn)證和不可抵賴性,都是很重要的屬性,但是在實(shí)用中幾乎與加解密過程無關(guān),但對數(shù)字簽名的研究毫無疑問是密碼學(xué)的內(nèi)容。加解密的安全性跟機(jī)密性有關(guān),只是現(xiàn)代密碼學(xué)的一部分。

Cipher

密碼設(shè)計(jì)學(xué)是(通過加密)隱藏敏感數(shù)據(jù)的藝術(shù)和科學(xué)。它包括加密過程(就是在原始的「原文」上使用加密算法)和解密過程(就是在密文上使用算法,使之恢復(fù)到可讀的形式)。

要解釋什么是Cipher,最好還是給你看幾個(gè)簡單的例子:

波利比烏斯密碼

波利比烏斯密碼(Polibius Cipher)也是一種字符替換型密碼。在我這個(gè)示例中,我用的是一個(gè)6×6的二維矩陣,可以把所有的大寫字母和數(shù)字0到9都包括進(jìn)去。然后我們可以得出下表:

有了這個(gè)矩陣,我們就可以開始代換了。比如,字母「A」可以表示成「1×1」,或者「X=1,Y=1」,甚至再簡化成11。再舉例,字幕「N」可以表示成「2×3」,或者「X=2,Y=3」,簡化后就是23。

來試試加密一條簡單的信息:

消息(原文):ENCRYPT ME 2 DAY

加密后的數(shù)據(jù)(密文):51–23–31–63–15–43–24 13–51 55 41–11–15

納入生僻字符后,這張表可以變得很大很復(fù)雜。而且,定期地隨機(jī)改變字符的位置也會(huì)讓暴力破解無從下手。這很像我們今天在高級計(jì)算型加密方法所用的多態(tài)性(polymorphism)。

凱撒密碼

歷史最悠久的加密算法之一就是以其創(chuàng)造者凱撒而聞名的凱撒密碼(Caeser Cipher)。他用這套方法來保證跟羅馬將軍們的安全通信,這樣羅馬帝國的敵人們就算拿到信也沒有辦法讀懂。凱撒密碼是加密的一種初級形式,很容易被破解,所以今天已經(jīng)基本不會(huì)用在任何安全用途中了。

從原理上來說,凱撒密碼就是重排字母表,不同的位移值也會(huì)使得編碼后的數(shù)據(jù)完全不同。位移值,顧名思義,就是通過讓字母左移或者右移一定位數(shù)來生成密文的數(shù)值。(譯者注:所以,在這里,大家可以把凱撒密碼理解成一種根據(jù)字母表順序的位移來加密的算法(cipher),而位移值就是那個(gè)Key,密鑰。)

這里我們用右移3位的做法來看一個(gè)實(shí)際的例子:

英文原文:ENCRYPT ME

密文:HQFUBSW PH(解密時(shí)候要相應(yīng)左移3位才能解密)

上面這條消息可以通過嘗試所有可能的位移值來暴力破解:不斷嘗試新的位移值,直到解出來的原文看起來像樣子。更加復(fù)雜的密碼比如Vigenere密碼和Gronsfeld密碼也是用同樣的原理設(shè)計(jì)出來的。但是解密起來就很麻煩,因此每個(gè)字母都代表一個(gè)位移值。

維吉尼亞密碼表

在理解密碼設(shè)計(jì)學(xué)之前,我們先要了解加密算法的工作原理,因?yàn)樗鼈兪撬屑用苓^程的基礎(chǔ)。速記是一種記錄隱藏信息的方法,實(shí)際上可以歸為古典密碼設(shè)計(jì)學(xué)一類,因?yàn)楝F(xiàn)代密碼設(shè)計(jì)學(xué)已經(jīng)成了「計(jì)算機(jī)安全」的代名詞。

多態(tài)性

多態(tài)性是密碼設(shè)計(jì)學(xué)中較為高級的部分,在計(jì)算機(jī)加密技術(shù)中最為常見。多態(tài)性指的是,一種加密方法在每次使用時(shí)都會(huì)產(chǎn)生不同的結(jié)果,而且在每次使用過后都會(huì)發(fā)生改變。多態(tài)性常見于計(jì)算機(jī)加密算法。也就是說,如果我們將相同的數(shù)據(jù)加密兩次,每次都會(huì)得到一個(gè)不同的加密結(jié)果。

我們用汽車鑰匙來打個(gè)比方?,F(xiàn)在,我們只需要在一個(gè)小巧的電子遙控設(shè)備上輕輕一按,就可以解鎖汽車了。當(dāng)你解鎖車門時(shí),你或許從來沒思考過其中的原理——你按下按鈕的那一刻,會(huì)有一段特定的數(shù)據(jù)發(fā)送到你的車上,一旦匹配成功,車門就解鎖了。要實(shí)現(xiàn)這點(diǎn),最簡單的方法是為每個(gè)遙控設(shè)備設(shè)定不同的頻率。但是,這樣管理起來會(huì)很麻煩。因此,所有遙控設(shè)備都采用了同樣的波長,但是使用不同的算法(滾動(dòng)碼)來生成發(fā)送給汽車的數(shù)據(jù)。這些就是多態(tài)性算法。

由于這些算法每次使用過后都會(huì)發(fā)生改變,很難對其進(jìn)行逆向工程。即使有黑客破解了算法(首先,破解多態(tài)性算法本身難度就很大),他還得找到與該算法匹配的汽車/鑰匙(這又是一項(xiàng)復(fù)雜的任務(wù))。

常用算法

現(xiàn)如今,常用的加密算法不外乎私鑰加密方法和公鑰加密方法。私鑰加密方法可以用來保護(hù)關(guān)鍵/敏感數(shù)據(jù)。密鑰密文只需一把鑰匙(由通信雙方共享)破解,因此被稱為對稱性密碼設(shè)計(jì)學(xué)。

1949年,貝爾實(shí)驗(yàn)室的Claude Shannon公布了私鑰加密方法的基本理論。數(shù)十年來的演化已經(jīng)孕育出了很多高質(zhì)量的私鑰加密算法。然而,直到1975年,一個(gè)名為DES的強(qiáng)大私鑰加密方法才得到了廣泛使用。

公鑰/非對稱性密碼設(shè)計(jì)學(xué)誕生于20世紀(jì)70年代中期。公鑰加密方法需要用到一對密鑰,分別是對外公開的公鑰和相對應(yīng)的由個(gè)人持有的私鑰。例如,接收方可以創(chuàng)建一對密鑰,并將公鑰分享給任何想要向ta發(fā)送密文的人。發(fā)送方可以使用公鑰加密發(fā)送給接收方的信件,接收方可以用私鑰來解密。

加密算法的強(qiáng)大程度取決于三個(gè)主要因素:

基礎(chǔ)設(shè)施——如果相關(guān)密碼設(shè)計(jì)主要由軟件實(shí)現(xiàn),那么底層基礎(chǔ)將是最薄弱的環(huán)節(jié)。如果你總是會(huì)加密某些信息,那么對黑客來說,最好的做法是黑進(jìn)你的電腦,在信息被加密前將其偷到手。相比破解密鑰來說,入侵系統(tǒng)或者使用病毒感染系統(tǒng)要容易得多。很多情況下,破解密鑰最簡單的方法是竊聽用戶,并在密鑰被傳入加密程序時(shí)進(jìn)行攔截。

密鑰長度——在密碼設(shè)計(jì)學(xué)中,密鑰長度很重要。如果攻擊者無法安裝按鍵監(jiān)視器(keystroke monitor),那么破解密文的最佳方法就是通過不斷的試錯(cuò)來暴力破解。實(shí)用的加密算法必須將密鑰長度設(shè)定得足夠長,來杜絕暴力破解的可能性。但是,隨著電腦運(yùn)算速度一年比一年快,密鑰長度的安全閾值也需要一直提高。專家們承認(rèn),小于等于64位的密鑰,包括DES密鑰在內(nèi),都很容易被暴力破解。在1999年,電子前線基金會(huì)(Electronic Frontier Foundation)資助開發(fā)了一種叫做「Deep Crack」的設(shè)備,可以在三天以內(nèi)破解一個(gè)DES加密密鑰。所以現(xiàn)在加密算法的密鑰長度一般都在100位以上,少數(shù)算法支持256位的密鑰。

算法質(zhì)量——算法質(zhì)量本身是很難評價(jià)的,基于一個(gè)現(xiàn)有算法去構(gòu)造一個(gè)看似可行的算法是很容易的,但只有經(jīng)驗(yàn)老道的專家仔細(xì)檢查才能發(fā)現(xiàn)其中的微妙漏洞。算法中的漏洞會(huì)產(chǎn)生「捷徑」,讓攻擊者可以在暴力搜索攻擊時(shí)候跳過大批密鑰。舉個(gè)例子,流行的壓縮程序PKZIP以前繼承了一個(gè)定制的的加密功能,使用64位的密鑰。理論上來說,應(yīng)該要264嘗試才能試完所有的密鑰。但實(shí)際上,有捷徑可走,所以攻擊PKZIP加密算法只需227次嘗試就能破解密文。發(fā)現(xiàn)這樣漏洞的唯一辦法就是嘗試破解算法,一般來說就是使用對付其它算法的技巧。只有在經(jīng)過這樣的分析和攻擊之后,算法的質(zhì)量才會(huì)展現(xiàn)出來,所以,還沒有找出這樣的漏洞,并不代表這個(gè)算法永遠(yuǎn)不被發(fā)現(xiàn)有漏洞。

算法的類型

DES——DES已經(jīng)經(jīng)受住了時(shí)間的考驗(yàn),多來年出版的研究都證明了其質(zhì)量。經(jīng)過四分之一世紀(jì)的研究之后,研究員也只能找出一些猜測式的攻擊方法,而且實(shí)用性還不如暴力破解。DES算法的唯一真實(shí)弱點(diǎn)就是它過短的密鑰長度(56位)。

三重DES——使用112位或者168位的密鑰連續(xù)三次使用DES算法。最終這個(gè)算法會(huì)比其它有類似強(qiáng)度的算法慢得多,而且,因?yàn)橛?jì)算機(jī)還是強(qiáng)大到了能破解這個(gè)算法,這一方法已經(jīng)過時(shí)了。

AES——高級加密標(biāo)準(zhǔn)(AES)支持三種密鑰大小,128位的、192位的和256位的,而數(shù)據(jù)則按128位為一個(gè)組?,F(xiàn)在AES被當(dāng)成標(biāo)準(zhǔn),全世界都在使用。

Rijndael密碼表

DES是明確設(shè)計(jì)為內(nèi)置在硬件中的,從沒考慮過怎么讓它在軟件層面實(shí)現(xiàn)。后來,NIST評估了執(zhí)行效率和存儲(chǔ)需求,保證AES能在C語言和Java語言中工作,既能在工作站中運(yùn)行,也能在資源更有限的環(huán)境比如嵌入式ARM處理器和智能卡中運(yùn)行。

雖然荷蘭研究院Vincent Rijman和Joan Daemen發(fā)明的Rijndael算法贏得了NIST精算,但所有進(jìn)入AES決賽的算法相對比DES和DES的替代品都顯現(xiàn)出了巨大的進(jìn)步。所有這些算法都是分組加密(block cipher)算法并且支持128位乃至更大的密鑰;沒有一種算法有嚴(yán)重的漏洞;最終選擇其實(shí)是密碼設(shè)計(jì)強(qiáng)度和性能的權(quán)衡。

AES基于一種叫做「置換-排列」的設(shè)計(jì)原理,在計(jì)算中既有置換,又有排列,無論在軟件層還是硬件層,計(jì)算起來都很快。不像其前輩DES,AES不使用費(fèi)斯托密碼(Feistel)原理,AES是Rijndael密碼的一種變種,使用固定的128位大小作為輸入,而且支持128位、192位和256位的臨界維數(shù)(critical dimension)。相反,Rijndael設(shè)計(jì)規(guī)范僅指定了輸入組和密鑰的大小都是32的倍數(shù),最小是128位,最大是256位。

AES在一個(gè)4×4的字節(jié)矩陣上操作,這些舉證叫做「狀態(tài)」。但是Rijndael算法的某些版本的輸入組更大,因此矩陣更大。大部分AES計(jì)算都是在一個(gè)特定的有限域內(nèi)完成的。

AES算法所用的密鑰大小會(huì)相應(yīng)決定轉(zhuǎn)換操作的重復(fù)輪數(shù)。對應(yīng)關(guān)系如下:

●128位密鑰對應(yīng)10輪重復(fù)

●192位密鑰對應(yīng)12輪重復(fù)

●256位密鑰對應(yīng)14輪重復(fù)

每一輪都包含幾個(gè)處理步驟,而每個(gè)步驟都包含4個(gè)相似但不同的階段,其中包括取決于加密密鑰本身的一個(gè)階段。在解密的時(shí)候,需要用同一把密鑰來反向重復(fù)操作、將密文恢復(fù)成原文。

量子密碼學(xué)

上面這個(gè)圖示說明了量子密鑰分發(fā)方案(BB84協(xié)議),它實(shí)現(xiàn)了一種包含量子力學(xué)的密碼學(xué)協(xié)議,能夠保證安全通信。它讓通信雙方可以生成一個(gè)共享的隨機(jī)密鑰(是個(gè)對稱密鑰),這個(gè)密鑰只有他們雙方才知道,因此可以用于加解密消息。量子力學(xué)是一組描述組成宇宙的光子、電子和其它粒子運(yùn)動(dòng)規(guī)律的科學(xué)定律。

業(yè)界一直在盡最大努力尋找能夠抵抗黑客攻擊的最高安全手段,而新一代的密碼設(shè)計(jì)學(xué)已經(jīng)從數(shù)學(xué)轉(zhuǎn)向物理學(xué)。量子力學(xué)科學(xué)家已經(jīng)進(jìn)入密碼學(xué)的世界了,這些科學(xué)家希望利用量子力學(xué)的原理來發(fā)送無法被黑的消息。這就是「量子密碼學(xué)」的大概,它是在過去這幾十年里才成長起來的。

量子密碼學(xué)將自己的根扎在量子物理學(xué)中。組成我們這個(gè)宇宙的基本粒子具有內(nèi)在的不確定性,可能同時(shí)存在于此處或彼處,也可以有不止一種狀態(tài)。只有在撞上一個(gè)物體或者被測量時(shí),它們才會(huì)顯現(xiàn)出運(yùn)動(dòng)現(xiàn)象。

密碼設(shè)計(jì)學(xué)是信息安全的一個(gè)迷人領(lǐng)域,也是最復(fù)雜的學(xué)科之一。不過,我們從簡單的凱撒密碼和波利比烏斯密碼介紹到多輪加密的DES和AES算法,相信讀者會(huì)覺得理解起密碼算法的概念來不那么復(fù)雜了。

對于密碼學(xué)這門科學(xué),我們已經(jīng)了解其歷史、從最簡單到最復(fù)雜的加密算法的基本概念。

THEEND

最新評論(評論僅代表用戶觀點(diǎn))

更多
暫無評論