1. 程式人生 > >作業5散列函數

作業5散列函數

一起 數據 2017年 stc 安全系統 googl 尋找 暴力 單個

一、 散列函數的具體應用

1.消息認證

(1)消息認證概念:消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的消息和發送時的一樣的(即沒有修改、插入、刪除或重放)。通常還要求消息認證機制確保發送方聲稱的身份是真實有效的,當Hash函數用於提供消息認證功能時,被稱為消息摘要。

(2)消息認證中使用Hash函數的本質:發送者根據待發送的消息使用該函數計算一組Hash值,然後將Hash值和消息一起發送過去。接收者收到後對於消息執行同樣Hash計算,並將結果與收到的Hash值進行對比。如果不匹配,則接收者推斷出消息(或Hash值)遭到了篡改。

(3)Hash碼能夠通過如下不同方法提供消息認證:

a.使用對稱密碼算法加密消息和Hash碼。

b.使用對稱密碼算法只對Hash碼進行加密。(如果不要求提供保密性,b比a、d更有優勢)

c.不使用加密算法,僅使用Hash函數實現消息認證。(假設通信雙方共享私密值S)

d.通過將整個消息和Hash值加密,能夠在c的基礎上提供保密性。

(4)一般情況,消息認證是通過消息認證碼MAC實現的,即帶密鑰的Hash函數。通信雙方基於共享的同一密鑰來認證彼此之間交互的信息時,就會使用MAC。MAC是Hash函數和加密函數操作的結合。並且提供了安全保護,用以抵抗不知道密鑰的攻擊者的攻擊。

2.數字簽名

(1)數字簽名簡述:數字簽名的操作與MAC相似,在進行數字簽名過程中使用用戶的私鑰加密消息的Hash值,其他人任何知道該用戶公鑰的人都能夠通過數字簽名來驗證消息的完整性。數字簽名的應用比消息認證更為廣泛。

(2)Hash碼用於提供數字簽名的方案:

a.使用發送方的私鑰,利用公鑰密碼算法僅對Hash碼進行加密。

b.先用發送方私鑰對Hash碼加密,再用對稱密碼中的密鑰對消息和公鑰算法加密結果加密。

3.其他應用

(1)產生單向口令文件。操作系統存儲口令的Hash值而不是口令本身,當用戶輸入口令時,操作系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值(大多操作系統的口令保護機制)。

(2)入侵檢測和病毒檢測。將每個文件的Hash值H(F)存儲在安全系統中,隨後就能夠通過重新計算H(F)來判斷文件是否被修改過。

(3)密碼學Hash函數能夠用於構建隨機函數PRF或用作偽隨機數發生器。基於Hash函數的PRF可用於對稱密碼中的密鑰產生。

(二)查詢資料

1.文件校驗

譬如奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。

2.鑒權協議

需要鑒權的一方,向被鑒權的一方發送隨機串(“挑戰”),被鑒權方將該隨機串和自己的鑒權口令字一起進行 Hash 運算後,返還鑒權方,鑒權方將收到的Hash值與在己端用該隨機串和對方的鑒權口令字進行 Hash 運算的結果相比較(“認證”),如相同,則可在統計上認為對方擁有該口令字,即通過鑒權。

3.郵件相關

保密增強郵件 PEM(Privacy Enhanced Mail),因特網保密性增強郵件標準,提供的消息完整性檢查中的鑒別使用的單項散列函數MD2和MD5;郵件加密軟件PGP 中2.6.3版本中使用的單項散列函數是MD5。

二、 結合生日共計、以及2004、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。

1.生日攻擊

(1)將生日悖論的問題抽象成散列函數,教室裏每個人作為函數的輸入x,每個人對應的生日作為函數的輸出y,那麽可以寫成H(x)= y,由於一年有365 天,所以y可以取的值有365種。這時候我們改變輸入x取值範圍,發現只要當x取值數大於23種時,y碰撞的幾率就達到50%以上。

簡單來說,生日攻擊就是利用散列函數發生碰撞的可能性,進行n次嘗試直到找到一對碰撞的輸入。一個40比特長的消息摘要是很不安全的,大約一百萬次隨機Hash可至少以50%的概率找到一個碰撞。

(2) 防範方法

  • 使用安全的Hash算法:安全的Hash算法生成的Hash值有足夠多的位數。這樣,攻擊者在尋找兩個具有相同Hash值的文件時就會非常困難。
  • 加鹽:在為文件簽名之前,先向文件添加一個隨機值,然後計算Hash值,再將文件、簽名和隨機值一起發送給接收者。這樣,攻擊者必須找出具有特定Hash值的偽造文件,這非常困難。
  • 改動文件:在為文件簽名之前,對消息或文件做少許改動。這樣,攻擊者必須找出具有特定Hash值的偽造文件,這非常困難。

2、散列函數安全性

有兩種方法可以攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度完全依賴於算法生成的散列碼長度。

2004年8月中國密碼學家王小雲教授等首次公布了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內即可找到MD5的碰撞。MD5已經被徹底攻破。

在2017年,Google公司宣布實現了對SHA-1算法的攻擊。SHA-1算法宣告攻破。不過需要註意的是,這次SHA-1算法破解的計算量相當於單個CPU計算6500年和單個GPU計算110年,因此就目前的PC硬件來看,依靠一臺電腦完成破解是不現實的。然而密碼學家認為,如果利用雲計算技術來破解的話,這件事情將簡單很多,可能只需要17萬美元的預算即可完成,因此盡快改用安全性更高的SHA-2或SHA-3算法才是正確的做法。

3、目前安全散列函數的發展

2005年MD5的攻破似乎宣告了SHA或許為僅存的安全散列算法。

SHA-0:SHA由美國標準與技術研究所(NIST)設計並於1993年發表,該版本稱為SHA-0,由於很快被發現存在安全隱患,

SHA-1:1995年發布了SHA-1。

SHA-2:2002年,NIST分別發布了SHA-256、SHA-384、SHA-512,這些算法統稱SHA-2。2008年又新增了SHA-224。

由於2017年SHA-1算法的攻破,目前已經有多家科技企業宣布逐步放棄SHA-1算法,微軟已經確定會放棄在Edge以及IE瀏覽器上繼續使用SHA-1算法的TLS證書,Google的Chrome在56版之後也會提示SHA-1加密的HTTPS網頁並不安全,Mozilla則確定在今年7月開始停止SHA-1的支持。目前SHA-2各版本已成為主流。

三、 結合MD5算法中的選擇前綴碰撞以及第二個鏈接中的hellowworld.exe和goodbyworld.exe兩個可執行文件的MD5消息摘要值和兩個文件的執行結果說明MD5算法在驗證軟件完整性時可能出現的問題

1.關於MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。

MD5算法的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。

幾位密碼學家使用 “構造前綴碰撞法”(chosen-prefix collisions)來進行攻擊(是王小雲所使用的攻擊方法的改進版本),他們所使用的計算機是一臺Sony PS3,且僅用了不到兩天。如果僅僅是想要生成MD5 相同而內容不同的文件的話,在任何主流配置的電腦上用幾秒鐘就可以完成。

結論:MD5 算法不應再被用於任何軟件完整性檢查或代碼簽名的用途。

2.選擇前綴碰撞及第二個鏈接中的實驗

構造前綴碰撞法可制作兩個內容不同但具有相同MD5驗證碼的文件

從helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果可知,這兩個程序會在屏幕上打印出不同的字符,但是它們的 MD5 都是一樣的。

這幾位密碼學家使用“構造前綴碰撞法”(chosen-prefix collisions)來進行此次攻擊(是王小雲教授所使用的攻擊方法的改進版本)。

現在,如果僅僅是想要生成 MD5 相同而內容不同的文件的話,在任何主流配置的電腦上用幾秒鐘就可以完成了。

密碼學家們編寫的“快速 MD5 碰撞生成器”:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
源代碼:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5_source.zip

3.MD5驗證軟件完整性時可能出現的問題

(1)兩個不同的程序,MD5可能是相同的。

(2)不能通過校驗MD5知道網站是否被黑客入侵篡改,是否曾被惡意植入病毒或木馬。

(3)當軟件過大時,在驗證過程中所需的時間也會大大增加,對於第三方而言,攻擊的成功概率也會增加。

(4)如果有第三方在驗證軟件完整性時截取軟件代碼,使用快速MD5碰撞生成器,在短時間內偽造一份相同的MD5,並惡意篡改軟件,那麽安全性將會大大下降。

作業5散列函數