介紹
這門知識如果以前嘗過的各位想必都知道:枯燥無比!因此在文中我會盡量講的生動些,舉一些例子,並試圖以一個完整的例子來貫穿整個講述過程。
今年又恰逢莎翁逝世400週年,一方面也爲了紀念這位偉大的作家、戲曲家因此我引用了莎翁中“哈姆雷特”的例子。
加解密的歷史起源
公元前400年,古希臘人發明了置換密碼。
加密領域源於Julius Caesar 和羅馬帝國。Caesar用一簡單的加密方法(如圖),來跟他的將軍們聯繫。Caesar的方法只是簡單地將正文的每個字母移動一個固定的偏移量(在這個例子中是12)。例如,“A”變成“M”,“B”變成“N”,如此等等。
考察Caesar的加密方法,我們會發現兩個內容:加密算法和密鑰。加密算法是用來改變原始數據的方法。在這個例子中“字母移位”就是加密算法。密鑰是使加密過程得出一個唯一結果的變量。這個例子中密鑰是12。用一個不同的密鑰,將得到一個不同的結果。
在我們的簡單的加密例子中,你可能可以看到,當Caesar爲他的將軍加密了一個消息後,這個將軍將用同樣的密鑰來解密這則消息。
二戰時的恩尼格瑪機
恩尼格瑪密碼機是一種用於加密與解密的密碼機。德語是Enigma,又譯爲啞謎機或謎
恩尼格瑪密碼機最早由德國發明家亞瑟·謝爾比烏斯和理查德·裏特發明的。最早用於商業,也被軍隊和政府採用,最著名的就是第二次世界大戰的納粹德國
1、發信人首先要調節三個轉子的方向,三個轉子的初始方向就 是密鑰,收發雙方必須事先約定好。
2、然後依次用鍵盤鍵入明文,經過一系列過程顯示器上會有相 應的字母發亮,並把閃亮的字母依次記下來,就是密文。
3、然後就可以把加密後的消息用比如電報的方式發送出去。
4、當收信方收到電文後,使用一臺相同的ENIGMA,按照原來的約定,把轉子的方向調整到和發信方相同的初始方向上。
5、然後依次鍵入收到的密文,並把閃亮的字母依次記下來,就得到了明文。
對稱加密-DES
DES算法爲密碼體制中的對稱密碼體制,又被稱爲美國數據加密標準,是1972年美國IBM公司研製的對稱密碼體制加密算法。1977年美國聯邦信息處理標準中使用的一種對稱密碼技術,曾今被美國和其他國家政府銀行使用。不過現在已被暴力破解,我們除了用它解密以前的密文外,已不再使用DES了。
1997年1月28日,美國的RSA數據安全公司在RSA安全年會上公佈了一項“祕密密鑰挑戰”(Secret-KeyChallange)競賽,分別懸賞$1000、$5000、$10000用於攻破不同密鑰長度的RC5密碼算法,同時還懸賞$10000破密鑰長度爲56bits的DES算法。
加密明文的密鑰是隨機選取的,明文和密鑰都被嚴格保密,只向挑戰者們公佈密文和所用的初始化向量。解出的密鑰以E-Mail的方式迅速報告給RSA公司,第一個解出密鑰的人即成爲相應挑戰賽的勝利者。加利福尼亞大學伯克利分校的研究生IanGoldberg用大約250臺工作站組成的網絡,只用了3.5小時就攻破了40位的RC5算法。在瑞士建立的一個歐洲小組使用了遍及歐洲的3,500臺機器,13天時間攻破48位密碼。Brewer預計在類似的環境中攻破一個56位的密碼需要大約22年。
爲什麼要加密
來看一個實際的例子吧,在莎翁的戲劇《王子復仇記中》
國王克勞狄斯覺察罪行敗露,借哈姆萊特錯殺御前大臣波洛涅斯之事,假惺星地送去英國避難,卻在國書中威逼英國國王見到哈姆萊特後立刻將其梟首。
狡詐的克勞狄斯要哈姆雷特由兩個大臣陪同坐船到英國去,以避免所謂的處分。當時的英國是向北歐強國丹麥納貢的屬國,所以克勞狄斯給英國朝廷寫了封信,編造了一些理由,要他們把哈姆雷特處死。聰明的哈姆雷特懷疑這裏面肯定有名堂,於是在夜裏偷偷從那兩個大臣處拿到那封信,巧妙地把自己的名字擦掉,而換上那兩個大臣的名字。不久,座船受到海盜的襲擊,哈姆雷特勇敢地拿着劍殺上了敵人的船,不料他自己的座船卻怯懦地溜之大吉了。那兩個大臣把他丟下,帶着改過的信件急急忙忙跑到英國去卻被英國國王殺死!
60年代美國核彈密碼事故
對於擁有地球上最大核武庫的美國來說,核密碼一向是白宮的最高機密。早在1962年,時任美國總統肯尼迪就下令在所有的核導彈上啓用核密碼系統,然而讓人驚詫的是,在之後的15年時間裏,這個核密碼竟然是“00000000”……
對於足以掀起第三次世界大戰的美國核武器而言,密碼一向是最高的機密。然而令人瞠目結舌的是,在覈密碼系統啓動初期的近15年時間裏,陸基核導彈的發射密碼竟然只是極其簡單、極易被破解的“00000000”。
加密的必要性
- 如果一個算法的機制必須保密,那麼,這意味着這個算法有弱點。一個好的加密算法只依賴於它的密鑰。也就是說,發現一個好加密算法的機制並不能顯著提高一個黑客的攻擊力。
- 個加密算法想要得到採納,它必須被廣泛傳播,以便於讓公衆來仔細審查。經過許多的“加密專家”的無數次徹底審查,如果沒有發現缺陷,這個算法將開始被接受。
加密不代表絕對的安全
- 增加攻擊成本
- 延長攻擊時間
作爲RSA加密技術的終結者——“太多運算,無法讀取”的秀爾算法(Shor’s algorithm)不是通過暴力破解的方式找到最終密碼的,而是利用量子計算的並行性,可以快速分解出公約數,從而打破了RSA算法的基礎(即假設我們不能很有效的分解一個已知的整數)。同時,秀爾算法展示了因數分解這問題在量子計算機上可以很有效率的解決,所以一個足夠大的量子計算機可以破解RSA。
量子計算機D-Wave 2,如果你有一千五百萬美元閒錢,那你可以買一部回家玩玩。
常用加密-對稱加密
對稱加密的主要好處是速度。由於它的高速,它非常適合於海量數據的加密。隨着加密/數字簽名工業的發展,要求的密鑰長度持續增長。例如,40bit的密鑰在幾年前還能爲大家接受,但現在已經證明這樣長度的密鑰能在非常短的時間內破解。現在的密鑰一般必須在80到128bit之間。
對稱加密在哈姆雷特的例子中
哈姆雷特在信臣晚上睡覺時,拿到鑰匙和密文後重新寫下一段明文,然後再用同樣的鑰匙把“在見到克勞狄斯的信臣後把這兩個信臣殺死”這段明文加密後讓信臣帶着去見英國國王!
對稱加密中的密鑰傳輸
克勞狄斯也可以事先先把密鑰單獨讓一個信臣先送給英國國王
然後僅把密文讓信臣伴隨着哈姆雷特去見國王,這樣以防止哈姆雷特在中間篡改密文
但是:
哈姆雷特也可以事先通過“威逼利誘”,或者是派自己的親信半途截殺送密鑰的特使等方法得到密鑰
常用加密-非對稱加密(RSA)
1976年以前,所有的加密方法都是同一種模式:對稱加密
這種加密模式有一個最大弱點:甲方必須把加密規則告訴乙方,否則無法解密。保存和傳遞密鑰,就成了最頭疼的問題。
1976年,兩位美國計算機學家Whitfield Diffie 和 Martin Hellman,提出了一種嶄新構思,可以在不直接傳遞密鑰的情況下,完成解密。這被稱爲"Diffie-Hellman密鑰交換算法"。這個算法啓發了其他科學家。人們認識到,加密和解密可以使用不同的規則,只要這兩種規則之間存在某種對應關係即可,這樣就避免了直接傳遞密鑰。
1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種算法,可以實現非對稱加密。這種算法用他們三個人的名字命名,叫做RSA算法。從那時直到現在,RSA算法一直是最廣爲使用的"非對稱加密算法"。毫不誇張地說,只要有計算機網絡的地方,就有RSA算法。
這種算法非常可靠,密鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長RSA密鑰是768個二進制位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣佈)。因此可以認爲,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。
非對稱加密(RSA)算法的特點
倒過來私鑰加密、公鑰解密?對嗎?可以但不對?應該嚴格意義上説成私鑰簽名、公鑰認證!
非對稱密碼體制也叫公鑰加密技術,該技術就是針對私鑰密碼體制的缺陷被提出來的。在公鑰加密系統中,加密和解密是相對獨立的,加密和解密會使用兩把不同的密鑰,加密密鑰(公開密鑰)向公衆公開,誰都可以使用,解密密鑰(祕密密鑰)只有解密人自己知道,非法使用者根據公開的加密密鑰無法推算出解密密鑰,顧其可稱爲公鑰密碼體制。公鑰密碼體制的算法中最著名的代表是RSA系統,此外還有:揹包密碼、McEliece密碼、Diffe_Hellman、Rabin、零知識證明、橢圓曲線、EIGamal算法等。
非對稱密碼體制的優點在於:首先,在多人之間進行保密信息傳輸所需的密鑰組和數量很小;第二,密鑰的發佈不成問題;第三,公開密鑰系統可實現數字簽名。缺點:公開密鑰加密比私有密鑰加密在加密/解密時的速度慢。
從上述對對稱密鑰算法和非對稱密鑰算法的描述中可看出,對稱密鑰加解密使用的同一個密鑰,或者能從加密密鑰很容易推出解密密鑰;②對稱密鑰算法具有加密處理簡單,加解密速度快,密鑰較短,發展歷史悠久等特點,非對稱密鑰算法具有加解密速度慢的特點,密鑰尺寸大,發展歷史較短等特點。
RSA加密在哈姆雷特的例子中
然後僅把密文讓信臣伴隨着哈姆雷特去見國王
哈姆雷特通過半夜偷看,發覺是密文,就算他事先劫到了私鑰,也只能解密得知信件事説的是一件什麼事。
但這不等於哈姆雷特不能“篡改”,哈姆雷特完全可以把這紙原稿燒了,自己手寫一封明文塞回克勞狄斯的信臣的信袋裏。
而當英國國王通過克勞狄斯的信臣收到了明文後,明文上寫的是“殺死送信的人”,那麼英國國王也會毫不猶豫的殺掉信臣,因此這裏面還有一個漏洞,即如何防止別人篡改密文?
通過加解密公式引出另一個“認證公式”
哈希函數
例如,如果我們有一個存放金融數據的文件,一個哈希函數必須對字母的相對位置相當敏感。如果$167被換成了$761,一個校驗和函數會得出相同的結果。但是,一個哈希函數將會得到一個大大不同的結果。
下面的表給出了哈希函數(MD5)的不同輸入和相應的哈希結果。正如你看到的,輸入中一個微小的變化導致哈希結果產生巨大的變化。
儘管哈希函數一般不需要密鑰,但根據需要,我們可以給我們的輸入文件添加一個密鑰來保護哈希結果的完整性。
MD5不可逆,王小云使用的是弱碰撞,即給定一個MD5算法,使得它可以產生碰撞,而對於強碰撞即通過給定MD5要知道它是來自於哪個序列,目前無解。所以MD5並未被破解。
哈希函數和公鑰加密的結合(數字簽名)
- 用戶用自己的私鑰對原始數據的哈希摘要進行加密
- 然後信息接收者使用信息發送者的公鑰對附在原始信息後的數字簽名進行解密後獲得哈希摘要,並通過與用自己收到的原始數據產生的哈希摘要對照,便可確信原始信息是否被篡改,這樣就保證了數據傳輸的不可否認性。
數字簽名體制
1999年美國參議院已通過了立法,規定數字簽名與手寫簽名的文件、郵件在美國具有同等的法律效力。
消息認證是保護通信雙方之間不受第三方的攻擊,但卻無法防止通信雙方中一方對另一方的欺騙。如A僞造一個消息並使用與B共享的密鑰產生該消息的認證碼,然後聲稱該消息來自於B,同樣,B也可以對自己給A發送的消息予以否認。因此,除了認證之外還需要其他機制來防止通信雙方的抵賴行爲,最常見的是數字簽名技術。