深入淺出談加密
加密技術(shù)已經(jīng)滲透進了整個信息時代,任何人都不可避免地要接觸到――即使你根本不知道“加密”是什么。銀行卡、登錄計算機的口令、電子郵件的賬號密碼……無一例外地跟加密技術(shù)緊緊聯(lián)系在一起。
任何一個安全專家提起如今信息技術(shù)的安全保護措施,都不可避免要涉及一個詞:加密(encrypt)。的確,縱觀當(dāng)今信息世界,加密離我們并不遙遠(yuǎn),從小小的個人密碼,到重要機密文件,無一不是經(jīng)過加密后的產(chǎn)物。
許多人一提起“加密”,都會有一種畏懼心理,以為加密技術(shù)絕對是“新手勿近”的尖端科技。其實不然,加密實際上一直陪伴在你一生的成長之中,回憶一下小時候很多人都玩過的智力游戲:007收到遇害同事的字條,上面寫著4FEFKKILJK81IP,根據(jù)事先約定,已知C=3、Q=H,問該同事要傳遞什么信息給007?如果把這道題目放到信息技術(shù)領(lǐng)域來看待,就是一條經(jīng)過簡單替換字符算法加密的字符串,它把原始字符改為使用相對應(yīng)的數(shù)字排序來替代,從而產(chǎn)生了一組“沒有意義”的字符組合,但是因為我們知道C=3等若干條件,所以稍加排序即可得到這樣的句子:Do not trust Hary,這個過程也被稱為“解密”(decrypt)。
有些讀者也許會不屑一顧,就這么簡單的游戲也算加密?別忘了,我們是在已經(jīng)知道“C=3”的前提下完成“解密”的,換句話說,也就是已經(jīng)知道了“算法”,否則光憑以上一組不知所云的字符串,誰能解開其中的秘密?
加密和解密
“就不讓你直接看到信息”――將與之相似的思路加以擴充,便成了“加密”的來由;而拓展“我偏要看到你不想讓我看的信息”的思想,則發(fā)展出了“解密”技術(shù)。加密和解密從誕生之日起,就是一對不可分割的難兄難弟。
加密作為保障數(shù)據(jù)安全的一種方式,很早就出現(xiàn)在人類的信息傳遞中,從遠(yuǎn)古時代開始,人們就已經(jīng)在采用一種如今稱為“編碼”(Code)的方法用于保護文字信息。最早影響全世界的加密技術(shù)誕生于戰(zhàn)爭年代,由德國人發(fā)明,用于傳遞情報信息;而最早影響全世界的解密技術(shù),也誕生于戰(zhàn)爭年代,由英美人開發(fā)出來用于破譯德國人的情報信息。正是戰(zhàn)爭讓加解密技術(shù)不斷改進發(fā)展,直到現(xiàn)在,加密技術(shù)仍然在為信息時代的數(shù)據(jù)安全服務(wù)。
說了這么多,也該為加密技術(shù)做一個較為準(zhǔn)確而科學(xué)的概念了,所謂“加密”,就是對原內(nèi)容為明文的文件或數(shù)據(jù)按某種算法進行處理,使其成為不可讀的代碼,經(jīng)過這樣處理的數(shù)據(jù)通常稱為“密文”,密文只能在經(jīng)過相對應(yīng)的反向算法處理后才能恢復(fù)原來的內(nèi)容,通過這樣的途徑來達到保護數(shù)據(jù)不被非法竊取、閱讀的目的,而將該編碼信息轉(zhuǎn)化為其原來數(shù)據(jù)的過程,就是“解密”。
無論哪一個國家,都會有專家專注于加密技術(shù)的研究,因此也就出現(xiàn)了形形色色的加密算法,這些加密算法按照生物界“弱肉強食”的定律發(fā)展并完善著。其中,強度高(不容易被破解)的算法得以保留和繼續(xù)發(fā)展,強度低的算法最終被時間淘汰。除了一些公開的加密算法之外,也存在著一部分未公開的私人加密算法。通常我們提及加密技術(shù)時所說的“MD5加密”、“SHA-1加密”、“RSA加密”等,其實就是在說它們所采用的算法。
算法:關(guān)鍵的抉擇
“我想要葡萄,還想要橙子,可是我只能選擇其中一樣,我該選哪個?”如果要為自己的數(shù)據(jù)加密,我們就不得不面對這樣一個選擇,因為世界上的算法不止一個,究竟什么算法才是最適合的呢?于是,我們逐漸陷入一個選擇的泥潭中。其實,在選擇使用哪種算法作為你的加密基礎(chǔ)前,如果能對各種常見算法的原理有個大概的了解,相信你就不會感到那么迷茫了。
基于“消息摘要”的算法
“消息摘要”(Message Digest)是一種能產(chǎn)生特殊輸出格式的算法,這種加密算法的特點是:無論用戶輸入什么長度的原始數(shù)據(jù),經(jīng)過計算后輸出的密文都是固定長度的,這種算法的原理是根據(jù)一定的運算規(guī)則對原數(shù)據(jù)進行某種形式的提取,這種提取就是“摘要”,被“摘要”的數(shù)據(jù)內(nèi)容與原數(shù)據(jù)有密切聯(lián)系,只要原數(shù)據(jù)稍有改變,輸出的“摘要”便完全不同,因此,基于這種原理的算法便能對數(shù)據(jù)完整性提供較為健全的保障。但是,由于輸出的密文是提取原數(shù)據(jù)經(jīng)過處理的定長值,所以它已經(jīng)不能還原為原數(shù)據(jù),即消息摘要算法是“不可逆”的,理論上無法通過反向運算取得原數(shù)據(jù)內(nèi)容,因此它通常只能被用來做數(shù)據(jù)完整性驗證,而不能作為原數(shù)據(jù)內(nèi)容的加密方案使用,否則誰也無法還原。盡管如此,“消息摘要”算法還是為密碼學(xué)提供了健全的防御體系,因為連專家也無法根據(jù)攔截到的密文還原出原來的內(nèi)容。
如今常用的“消息摘要”算法經(jīng)歷了多年驗證發(fā)展而保留下來的算法已經(jīng)不多,這其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等,其中最廣泛應(yīng)用的是基于MD4發(fā)展而來的MD5算法。
MD5算法
MD5算法的全稱是“消息摘要算法5”(Message-Digest Algorithm version.5),它是當(dāng)前公認(rèn)的強度最高的加密算法。出現(xiàn)在MD5之前的是MD2和MD4,雖然這三者的算法結(jié)構(gòu)多少有點相似,但是由于MD2誕生于8位計算的時代,因此它的設(shè)計與后來出現(xiàn)的MD4、MD5完全不同,因此不能進行簡單的替代。然而,無論是MD2、MD4還是MD5,它們都是在獲得一個隨機長度信息的基礎(chǔ)上產(chǎn)生一個128位信息摘要的算法。
MD2算法是Rivest在1989年開發(fā)的,它很慢(因為是為8位機器設(shè)計的),但相當(dāng)安全。在這個算法中,首先要對信息進行數(shù)據(jù)補位,使信息的字節(jié)長度是16的倍數(shù)。然后,以一個16位的檢驗和追加到信息末尾,并且根據(jù)這個新產(chǎn)生的信息計算出散列值(Hash),最終運算結(jié)果即為類似于“d41d8cd98f00b204e9800998ecf8427e”的摘要,而且這個值是惟一的。
為了加強算法的安全性,Rivest在1990年又開發(fā)出MD4算法。MD4算法同樣需要填補信息以確保信息的字節(jié)長度加上448后能被512整除(信息字節(jié)長度除以512的余數(shù)為448)。然后,一個以64位二進制表示的信息的最初長度被添加進來。
然而,MD4存在一個嚴(yán)重漏洞,那就是“沖突”(Collisions)。“沖突”是所有基于“摘要”的算法都要面對的最大問題,由于它們是根據(jù)“不完整”的數(shù)據(jù)內(nèi)容產(chǎn)生的密文,如果運算過程存在瑕疵,就會在處理某些不同數(shù)據(jù)時產(chǎn)生相同的摘要,這帶來的后果可是致命的。因為“摘要”算法的原則是原數(shù)據(jù)不可還原,因此驗證的過程并不同于簡單加密運算里的“數(shù)據(jù)還原匹配”,驗證端同樣要根據(jù)原數(shù)據(jù)運算得到的摘要作為憑據(jù)與客戶端發(fā)來的摘要進行匹配檢驗,如果兩段字符串完全相同,即視為驗證通過。這是在“摘要算法”理論上“不可逆且惟一”的基礎(chǔ)上采用的安全檢驗方法,驗證方可以不需要索取原數(shù)據(jù),而只要擁有一個有效的摘要即可完成對客戶端的身份確認(rèn),大大減少了原數(shù)據(jù)被入侵者截獲的幾率。
但是這樣的驗證方式就產(chǎn)生了一個“看似不可能”的缺陷:假如入侵者能偽造出一段數(shù)據(jù),使之能在通過“摘要”計算后產(chǎn)生的摘要與真正的原數(shù)據(jù)產(chǎn)生的摘要一樣,那么入侵者便能冒充原數(shù)據(jù)持有者通過身份驗證。這在理論上是不可能的,然而現(xiàn)實總是不會讓人那么愉快,由于算法不可避免地出現(xiàn)了漏洞,使得這個設(shè)想成為了事實,這就是“沖突”的來源:某兩個或多個數(shù)據(jù)產(chǎn)生的摘要出現(xiàn)了完全雷同的現(xiàn)象,使得用戶能在輸入了即使不是原數(shù)據(jù)的密碼后能順利通過驗證,因為身份檢驗程序發(fā)現(xiàn)原本儲存的用戶信息的簽名數(shù)據(jù)與接收到的數(shù)據(jù)的運算結(jié)果完全一致,于是認(rèn)為請求方為合法用戶,就給予通過了。這種運算結(jié)果相同的現(xiàn)象,就是“沖突”。
“沖突”會造成非常危險的后果,因此MD4被無情地拋棄了,取而代之的是在MD4基礎(chǔ)上加強了算法的MD5,它在MD4的基礎(chǔ)上增加了“安全帶”(Safety Belts)的概念,雖然MD5比MD4稍微慢一些,但卻大大減小了沖突的發(fā)生率,雖然很早以前就有專家發(fā)現(xiàn)MD5算法在專門用于尋找“沖突”的機器上平均每24天就會產(chǎn)生一個“沖突”,但是對于一般應(yīng)用來說,這種幾率非常低微,因此MD5至今仍然是最強健的加密算法之一。
有讀者也許會問,既然MD5是不可逆的,那么網(wǎng)絡(luò)上存在的那些“MD5密碼破解工具”又是什么回事?其實,那并不是破解,至今MD5還沒能被完全破解過,雖然曾經(jīng)有過一篇報道稱中國的一個教授破解了MD5加密算法,但是后來這個結(jié)論又被推翻了。網(wǎng)絡(luò)上流傳的那些工具純粹是依賴于“運氣+機器性能+耐心”的產(chǎn)品而已,它們的原理是“窮舉”,即程序在一定的數(shù)據(jù)范圍內(nèi)產(chǎn)生一系列數(shù)據(jù)組合進行MD5運算,再把運算結(jié)果與獲取的摘要進行比較,如果兩者相同,就被定義為“破解”了。這只是一種窮舉法而已,實際意義不大,要知道在不產(chǎn)生沖突的前提下生成一個與原數(shù)據(jù)完全相同的字符串要有多少運氣的成分,更何況它還完全依賴于你的機器性能,如果對方密碼簡單如123456這樣的形式,我們還可能僥幸在1分鐘~1天內(nèi)運算出來,但是如果對方密碼是0e1WeTru9t@MD5這樣的組合呢?MD5的高強度使得它如此難以破解,因此成為大眾首選,許多入侵者在辛苦取得目標(biāo)網(wǎng)站數(shù)據(jù)庫后,一看password字段都是0ca175b9c0f726a831d895e269332461的形式,第一反應(yīng)都會是“暈倒!又白干了!”
對稱/非對稱密鑰加密算法
由于“摘要”算法加密的數(shù)據(jù)僅僅能作為一種身份驗證的憑據(jù)使用,如果我們要對整個文檔數(shù)據(jù)進行加密,就不能采用這種“不可逆”的算法了?!懊荑€”算法(Key Encoding)的概念因此而被提出,與開頭提到的智力題類似,此類算法通過一個被稱為“密鑰”的憑據(jù)進行數(shù)據(jù)加密處理,接收方通過加密時使用的“密鑰”字符串進行解密,即雙方持有的“密碼”相同(對稱)。如果接收方不能提供正確的“密鑰”,解密出來的就不是原來的數(shù)據(jù)了。
以上是“對稱密鑰”的概念,那么“非對稱密鑰”又該怎么理解呢?有人用郵箱作為比喻,任何人都可以從郵箱的信封入口塞進信件,但是取信的權(quán)力卻僅僅在于持有郵箱鑰匙的人的手上。這個眾人皆知的信封入口就是“公鑰”(Public Key),而你持有的郵箱鑰匙就是“私鑰”(Private Key)。這種算法規(guī)定,對方給你發(fā)送數(shù)據(jù)前,可以用“公鑰”加密后再發(fā)給你,但是這個“公鑰”也無法解開它自己加密的數(shù)據(jù),即加密過程是單向的,這樣即使數(shù)據(jù)被途中攔截,入侵者也無法對其進行破解,能還原數(shù)據(jù)內(nèi)容的只有“私鑰”的持有者,這就是“非對稱密鑰”加密算法,也稱為“公共密鑰算法”。
你也許會想,這兩種形式加密出來的數(shù)據(jù)如果稍加耐心進行分析,一定能找到變化規(guī)律從而直接破解。這個想法沒錯,但是專家早就思考過這個可能性了,因此這種算法雖然是采用某個字符串作為憑據(jù)進行加密操作的,可是它可能把憑據(jù)拆分為多個不同的“子段”并進行多次運算,最終的結(jié)果就是讓你難以發(fā)現(xiàn)變化的規(guī)律,破解也就難上加難。
基于“對稱密鑰”的加密算法主要有DES、TripleDES、RC2、RC4、RC5和Blowfish等;基于“非對稱密鑰”的加密算法主要有RSA、Diffie-Hellman等。
對稱密鑰:DES、TripleDES算法
美國國家標(biāo)準(zhǔn)局在1973年開始研究除國防部以外其他部門的計算機系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),最終選用了IBM公司設(shè)計的方案作為非機密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)(DES即Data Encryption Standard)。DES算法從誕生開始,就被各個領(lǐng)域廣泛采用,包括ATM柜員機、POS系統(tǒng)、收費站等,DES以它高強度的保密性能為大眾服務(wù),那么,它是如何工作的呢?
DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位。首先,DES把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,并進行前后置換,最終由L0輸出左32位,R0輸出右32位,根據(jù)這個法則經(jīng)過16次迭代運算后,得到L16、R16,將此作為輸入,進行與初始置換相反的逆置換,即得到密文輸出。
DES算法具有極高的安全性,到目前為止,除了用窮舉搜索法對DES算法進行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法,而56位長密鑰的窮舉空間為256,這意味著如果一臺計算機的速度是每秒種檢測100萬個密鑰,那么它搜索完全部密鑰就需要將近2285年的時間,因此DES算法是一種很可靠的加密方法。
對稱密鑰:RC算法
RC系列算法是大名鼎鼎的RSA三人組設(shè)計的密鑰長度可變的流加密算法,其中最流行的是RC4算法,RC系列算法可以使用2048位的密鑰,該算法的速度可以達到DES加密的10倍左右。
RC4算法的原理是“攪亂”, 它包括初始化算法和偽隨機子密碼生成算法兩大部分,在初始化的過程中,密鑰的主要功能是將一個256字節(jié)的初始數(shù)簇進行隨機攪亂,不同的數(shù)簇在經(jīng)過偽隨機子密碼生成算法的處理后可以得到不同的子密鑰序列,將得到的子密鑰序列和明文進行異或運算(XOR)后,得到密文。
由于RC4算法加密采用的是異或方式,所以,一旦子密鑰序列出現(xiàn)了重復(fù),密文就有可能被破解,但是目前還沒有發(fā)現(xiàn)密鑰長度達到128位的RC4有重復(fù)的可能性,所以,RC4也是目前最安全的加密算法之一。
非對稱密鑰:RSA算法
RSA算法是目前最流行的公鑰密碼算法,它使用長度可以變化的密鑰。RSA是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。
RSA算法的原理如下:
1.隨機選擇兩個大質(zhì)數(shù)p和q,p不等于q,計算N=pq;
2.選擇一個大于1小于N的自然數(shù)e,e必須與(p-1)×(q-1)互素。
3.用公式計算出d:d×e = 1 (mod (p-1)×(q-1)) 。
4.銷毀p和q。
最終得到的N和e就是“公鑰”,d就是“私鑰”,發(fā)送方使用N去加密數(shù)據(jù),接收方只有使用d才能解開數(shù)據(jù)內(nèi)容。
RSA的安全性依賴于大數(shù)分解,小于1024位的N已經(jīng)被證明是不安全的,而且由于RSA算法進行的都是大數(shù)計算,使得RSA最快的情況也比DES慢上好幾倍,這也是RSA最大的缺陷,因此它通常只能用于加密少量數(shù)據(jù)或者加密密鑰。需要注意的是,RSA算法的安全性只是一種計算安全性,絕不是無條件的安全性,這是由它的理論基礎(chǔ)決定的。因此,在實現(xiàn)RSA算法的過程中,每一步都應(yīng)盡量從安全性方面考慮。
小密碼,大學(xué)問
隨著信息化走進千家萬戶,人們越來越關(guān)注自己的數(shù)據(jù)安全,而數(shù)據(jù)安全除了在攻防體系上必須有所保障以外,關(guān)鍵的一點就是要對其進行強度夠高的加密,進一步減小數(shù)據(jù)被盜竊后的損失。這一觀點早已在網(wǎng)絡(luò)論壇的發(fā)展中得到了證實,早期的論壇數(shù)據(jù)庫都是未經(jīng)過加密處理就直接保存的,在這個前提下,只要入侵者拿到了數(shù)據(jù)庫,就等于拿到了整個論壇,因為密碼字段是明文形式的。有些重要的網(wǎng)站甚至使用一些后臺沒有提供數(shù)據(jù)加密方案的程序做站點,這是非常不明智的。
確定了加密方案后,有些人就自己寫算法進行數(shù)據(jù)加密,殊不知這也算產(chǎn)生了安全隱患,通常個人無法寫出高強度的加密算法,入侵者如果稍加分析便能破譯內(nèi)容,你的辛苦也就付之東流。相反,如果采用在國際得到安全認(rèn)證的流行加密方案,數(shù)據(jù)安全反而提高了,何樂而不為?
上一篇:燒斷引腳單片機解密
下一篇加密解密2光盤中一個CRACKME的算法分析
溫馨提示:
凡在本公司進行電路板克隆業(yè)務(wù)的客戶,必須有合法的PCB設(shè)計版權(quán)來源聲明,以保護原創(chuàng)PCB設(shè)計版權(quán)所有者的合法權(quán)益;