持久的密碼:100年堅(jiān)不可摧
【51CTO.com 獨(dú)家翻譯】任何密碼無(wú)論它在鼎盛時(shí)期多么強(qiáng)大,最終都會(huì)成為脆弱的密碼,這似乎是不言而喻的。當(dāng)人們使用目前相當(dāng)強(qiáng)大的密碼時(shí),他們擔(dān)心最終也會(huì)有人能夠?qū)⑺平狻诓恢烂荑€的情況下,通過(guò)找到一條捷徑大大減小暴力破解所需要的時(shí)間。
即使密碼從沒(méi)被破解過(guò),在沒(méi)有密鑰的情況下,我們將永遠(yuǎn)需要相同的CPU平均時(shí)鐘周期數(shù)來(lái)解密某一指定密碼加密的東西;與幾個(gè)月前相比,幾個(gè)月后要想破解同樣的東西需要時(shí)間會(huì)少一些。這是因?yàn)橛?jì)算機(jī)至始至終都在變得更快,這允許我們把相同數(shù)目的時(shí)鐘周期壓縮在更短的時(shí)間內(nèi)。
更加復(fù)雜和巧妙的加密算法設(shè)計(jì),使得暴力破解的方法越來(lái)越困難,并且將取代已經(jīng)被破解了的、或者說(shuō)即將過(guò)時(shí)的老舊算法。這就像是一場(chǎng)持久的軍備競(jìng)賽——保護(hù)隱私與企圖滲透隱私行為之間的對(duì)抗。
雖然幾乎所有被破解或者過(guò)時(shí)的密碼都被歷史所淘汰,但有一種密碼卻經(jīng)受住了93年的時(shí)間,這就是一次性密碼。1917年,Gilbert Vernam發(fā)明了維爾南(Vernam)密碼,該密碼使用了紙帶作為密鑰的電傳(teletype)技術(shù)來(lái)加密和解密數(shù)據(jù),隨之誕生了一種在當(dāng)時(shí)相當(dāng)強(qiáng)大的對(duì)稱密碼。
美國(guó)陸軍上尉Joseph Mauborgne意識(shí)到,使用真正隨機(jī)的密鑰,即密鑰沒(méi)有一部分是重復(fù)的(除了有時(shí)隨機(jī)出現(xiàn)相同的情況),維爾南密碼能夠變得更加強(qiáng)大。受紙帶密鑰的啟發(fā),一種每頁(yè)紙上的一列隨機(jī)字母或數(shù)據(jù)作為記錄密鑰的便箋(pad of paper)被發(fā)展起來(lái)。兩份相同的便箋分發(fā)給兩個(gè)人,每頁(yè)紙上的每個(gè)字符只使用一次(當(dāng)最后一個(gè)字符被用來(lái)加密或解密信息后,該頁(yè)紙就被毀掉),他們傳遞信息時(shí)不用擔(dān)心被截獲后的信息在沒(méi)有密鑰的情況下被破解。因?yàn)檫@項(xiàng)在便箋紙上分發(fā)密鑰流數(shù)據(jù)的技術(shù),人們又這種密碼稱為一次性便箋加密。
信息理論之父Claude Shannon從數(shù)學(xué)上證明了一次性加密算法在正確使用時(shí)是不可破解的——正確的使用包括毀掉含有已用密鑰數(shù)據(jù)的頁(yè)面,以便它不再被利用,這樣即使有人獲得了便箋中已用的頁(yè)面,也不能解密任何未授權(quán)的信息拷貝。密鑰管理可以使用相同的數(shù)字化概念,但附加條件是人們使用時(shí)必須非常小心,以避免計(jì)算機(jī)固有的弱點(diǎn)給一次性密鑰系統(tǒng)帶來(lái)缺陷。例如,代價(jià)高昂的數(shù)據(jù)恢復(fù)也許能夠重建已經(jīng)刪除的數(shù)據(jù),包括一次性密鑰數(shù)據(jù)。 當(dāng)簡(jiǎn)單的刪除仍不夠可靠時(shí),盡管有辦法可以用來(lái)對(duì)這些數(shù)據(jù)進(jìn)行模糊化處理,但也一定要謹(jǐn)慎。
一次性加密算法有時(shí)會(huì)非常麻煩,這是它為什么沒(méi)有被廣泛使用的原因。由于這種不便性,我們實(shí)際需要的是在理論上稍弱一些的密碼,也可以說(shuō)它是一種更聰明的密碼,比如AES/Rijndael和Twofish加密算法。
由于一次性密碼是對(duì)稱密碼,雙方必須使用完全相同的密鑰數(shù)據(jù)來(lái)加密通信。對(duì)于某些加密用例,使用一次性加密完全沒(méi)有意義,因?yàn)槿绻p方要能夠安全的交換密鑰以擁有它,他們必然有共享數(shù)據(jù)的安全方法,這種方法也可以用來(lái)共享最終的信息本身。只有在你不知道將會(huì)發(fā)送什么信息的情況下,或者當(dāng)你們?cè)趯?lái)的某個(gè)時(shí)候不能找到任何安全的方法來(lái)交換密鑰數(shù)據(jù)時(shí),一次性加密才會(huì)派上用場(chǎng)。
一次性加密密鑰必須同它所加密或解密的信息一樣長(zhǎng)。因此,當(dāng)你想要加密或者解密一個(gè)3 G字節(jié)的文件時(shí),你還需要一個(gè)大小為3G字節(jié)的一次性加密密鑰。
同樣的一次性加密數(shù)據(jù)不能在多于兩人時(shí)被安全共享。比如,不同的信息將要在擁有同一密鑰的某些接收者之間發(fā)送時(shí),有些數(shù)據(jù)對(duì)于其它接收者是不可讀的,在它們之間使用相同的一次性加密會(huì)破壞密碼的安全性。相比之下,你可以使用非對(duì)稱密碼為多個(gè)人提供一個(gè)相同的公鑰,他們將能夠使用相同的公鑰來(lái)給你的信息加密,而不用擔(dān)心其它擁有公鑰的人能讀到它——只要該加密算法不被破解,并且計(jì)算機(jī)技術(shù)目前的發(fā)展水平還沒(méi)有先進(jìn)到可以合理的暴力破解信息。這是因?yàn)閷?duì)于公鑰加密的數(shù)據(jù),只有對(duì)應(yīng)的私鑰才能解開(kāi)。
重復(fù)使用密鑰潛在的破壞了一次性密碼的安全性,因?yàn)樗媾R著一個(gè)已知明文的漏洞。Kerckhoff準(zhǔn)則說(shuō)到,當(dāng)密鑰仍然保密時(shí),一個(gè)密碼體系就是安全的,但是如果同時(shí)知道某個(gè)指定信息的加密和未加密版本,一次性密碼的密鑰就能夠被破解。如果一串密鑰數(shù)據(jù)只被使用一次,這也不是什么問(wèn)題,因?yàn)槿绻B明文被破解者獲取,加密強(qiáng)度再大也是徒勞的。如果一個(gè)密鑰被重復(fù)使用,一段信息的明文就能夠作為獲得密鑰的工具,而該密鑰可以用來(lái)解密其它信息。我們可以從中獲得的教訓(xùn)是:不要重復(fù)使用一次性密碼。這也正是它被稱之為“一次性”密碼的原因。
當(dāng)一次性密鑰用盡以后,你不能再安全的重復(fù)發(fā)送信息——使用相同的密碼加密——除非你能夠安全的交換新的隨機(jī)密鑰數(shù)據(jù)。當(dāng)你試圖與世界另一頭的某個(gè)人通信時(shí),這種情況將會(huì)讓你的處境顯得很窘迫。
如果在某些情況下使用一次性加密不太現(xiàn)實(shí),你可以使用其它的加密方法,而你也應(yīng)該意識(shí)到其它在理論上加密強(qiáng)度稍弱的密碼仍然有它的用武之地。
一次性加密的工作原理看起來(lái)很簡(jiǎn)單。它只涉及到兩個(gè)基準(zhǔn)值(datum)的比較,比如兩個(gè)字母或者數(shù)字,然后通過(guò)比較產(chǎn)生新的基準(zhǔn)值。你對(duì)加密的信息中每個(gè)基準(zhǔn)值都要這么做。實(shí)現(xiàn)比較的過(guò)程既簡(jiǎn)單又容易,一次產(chǎn)生一個(gè)基準(zhǔn)值,而且計(jì)算的成本相對(duì)較低。一個(gè)簡(jiǎn)單的XOR(異或)操作符就能夠用來(lái)實(shí)現(xiàn)這種比較。在它最簡(jiǎn)單的形式下,XOR操作符可以像這樣應(yīng)用到二進(jìn)制數(shù)字的操作中:
首先,你需要一段信息。讓我們使用單詞”short”來(lái)作為我們的信息。它確實(shí)也很短。接下來(lái),你將該信息翻譯成二進(jìn)制形式。用ASCII編碼來(lái)翻譯”short”,你最終會(huì)得到如下的0、1字符串:
0111001101101000011011110111001001110100
你還需要一個(gè)與信息等長(zhǎng)的密鑰。這里,我們將這個(gè)0和1組成的字符串作為我們的密鑰:
0110010101101010001110010010011101100100
最后,因?yàn)槟闶褂玫氖荴OR操作符,基本上你只需要做簡(jiǎn)單的減法。兩個(gè)字符串的第一個(gè)字符都為0, 可以看到0-0=0. 類似的, 兩個(gè)字符串的第二個(gè)字符都為1,得1-1=0。當(dāng)一個(gè)字符為1, 一個(gè)為0時(shí),可以得到一個(gè)1或者-1。如果對(duì)結(jié)果取絕對(duì)值,這意味著兩個(gè)都得到結(jié)果1。因此,減法運(yùn)算和取絕對(duì)值提供了如下結(jié)果:
0111001101101000011011110111001001110100
0110010101101010001110010010011101100100
-----------------------------------------------------------
0001011000000010010101100101010100010000
當(dāng)然,在結(jié)果中以0和1 表示的字符串,某些8位二進(jìn)制組并不存在所對(duì)應(yīng)ASCII表示, 因此很難用簡(jiǎn)明的方式來(lái)表示數(shù)據(jù)。ASCII編碼非常適合電腦使用,但傳統(tǒng)的字母數(shù)字方法實(shí)現(xiàn)的一次性加密通過(guò)手譯(hand translation)后更適合于模擬信號(hào)。
很明顯,一次性加密的核心算法異常簡(jiǎn)單。只有在設(shè)計(jì)軟件中圍繞該算法的余下部分,以及尋找該密碼的正確用例時(shí),開(kāi)發(fā)安全可靠的加密軟件才會(huì)出現(xiàn)真正的問(wèn)題。另外,如果要實(shí)現(xiàn)加密絕對(duì)的安全,在當(dāng)前我們對(duì)數(shù)學(xué)的理解范圍內(nèi),只有一次性加密才能做到這一點(diǎn),并且只有在正確使用時(shí)才無(wú)法被破解。
【51CTO.COM 獨(dú)家翻譯,轉(zhuǎn)載請(qǐng)注明出處及作者!】
【編輯推薦】
- 互聯(lián)網(wǎng)安全公司總結(jié)十大網(wǎng)絡(luò)密碼形同虛設(shè)
- 破解玄機(jī):安全性與密碼相對(duì)強(qiáng)度的暗戰(zhàn)
- 公共云計(jì)算彼端的數(shù)據(jù)能否得到有效保護(hù)?
【責(zé)任編輯:王文文 TEL:(010)68476606】