1. 程式人生 > >2016012032 王慧珍 散列函數的應用及其安全性

2016012032 王慧珍 散列函數的應用及其安全性

開始 認證 修改 提示 集中 沖突 病毒 chrom question

一、散列函數的具體應用。

1.消息認證

消息認證是用來驗證消息完整性的一種機制,能夠確保收到的數據和發送時的一樣。此外,通常還要求消息認證機制確保發送方聲稱的身份是真實有效的。Hash函數將可變長度的數據塊M作為輸入,產生固定長度的hash值 h = H(M),H(M)稱為消息摘要。若通過消息認證碼(MAC),即帶密鑰的Hash函數來實現消息認證,驗證方能夠確定發送方的身份。下圖是使用對稱密碼算法E只對Hash碼進行加密而實現的消息認證圖解:

技術分享圖片

2. 數字簽名

在進行數字簽名過程中使用用戶的私鑰加密消息的Hash值,其他任何知道該用戶公鑰的人都能夠通過數字簽名來驗證消息的完整性。若攻擊者想要篡改消息,則需要知道發送方的私鑰。這種方法既提供了消息認證又提供了數字簽名。下圖是使用發送方私鑰利用公鑰算法對Hash碼進行加密而實現數字簽名的圖解:

技術分享圖片

3.其他應用

(1)密碼存儲

在用戶進行網站登錄時,如果服務器直接存儲用戶密碼,則如果服務器被攻擊者所攻擊,用戶的密碼就會遭到泄露。最典型的事件就是CSDN的密碼明文存儲事件了。為了解決這個問題,服務器可以僅存儲用戶密碼的哈希結果。當用戶輸入登錄信息後,服務器端可以計算密碼的哈希結果,並與存儲的哈希結果進行對比,如果結果相同,則允許用戶登錄。由於服務器不直接存儲用戶密碼,因此即使服務器被攻擊者攻擊,用戶的密碼也不會被泄露。

(2)產生單項口令文件

比如操作系統存儲口令的Hash值而不是口令本身,這樣一來黑客即使能夠訪問口令文件,也不能獲取真正的口令。當用戶輸入口令時,操作系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值。大多操作系統都使用了這樣的口令保護機制。

(3)入侵檢測和病毒檢測

將每個文件的Hash值H(F)存儲再安全系統中,隨後就能夠通過重新計算H(F)來判斷文件是否被修改過。入侵者只能夠改變F,而不能夠改變H(F)。

(4)構建隨機函數或偽隨機數發生器

基於Hash函數的PRF可用於對稱密碼中的密鑰產生。

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

1.散列函數的安全性

散列函數的安全性體現在如下抗沖突性質:

(1) 對於任意給定的h,找到滿足H(x)=h的x很難(抗原像攻擊性)。

(2) 對於任意給定的數據塊x,找到滿足H(y)=H(x)的y ≠ x很難(抗弱碰撞性)。

(3) 找到滿足H(x) = H(y)的任意一對(x,y)很難(抗強碰撞性)。

對於Hash函數的攻擊分為兩類:窮舉攻擊和密碼分析。

窮舉攻擊不依賴於任何算法的細節,僅與Hash碼的長度有關,分為原像攻擊、第二原像攻擊和碰撞攻擊。原像攻擊和第二原像攻擊是指攻擊者對給定的Hash值h,試圖找到滿足H(y)=h的y,對於m位的Hash值,其窮舉規模大約是2m。碰撞攻擊是指攻擊者試圖找到兩個消息或數據塊x和y,滿足H(x)=H(y),其窮舉規模為2m/2

密碼分析是是對密碼算法進行攻擊,主要集中在對壓縮算法f的內部結構進行分析。任何Hash函數都存在有碰撞,能要求的僅是找出碰撞在計算上是不可行的。評價Hash算法抗密碼分析能力的方法是將其與窮舉攻擊所需的代價相比,也就是說,理想的Hash函數算法要求密碼分析攻擊所需的代價大於或等於窮舉攻擊所需的代價。

生日攻擊就是一種碰撞攻擊,它是利用概率論中的生日問題,考慮如果降低一定的計算量,能不能有比較高的概率找到一組碰撞。若找到沖突的Hash值,偽造報文,因為偽造報文與有效報文的Hash值相同,所以它們產生相同的簽名,使身份驗證失效。生日攻擊的防範方法有三:

① 使用安全的Hash算法:安全的Hash算法生成的Hash值有足夠多的位數。這樣,攻擊者在尋找兩個具有相同Hash值的文件時就會非常困難。

② 加鹽:在為文件簽名之前,先向文件添加一個隨機值,然後計算Hash值,再將文件、簽名和隨機值一起發送給接收者。這樣,攻擊者必須找出具有特定Hash值的偽造文件,這非常困難。

③ 改動文件:在為文件簽名之前,對消息或文件做少許改動。這樣,攻擊者必須找出具有特定Hash值的偽造文件,這非常困難。

2004年,王曉雲教授利用差分攻擊實現了實際可行的MD5碰撞搜索算法,能夠在可計算時間內找到碰撞。目前的進展是,基於王曉雲教授論文的改進算法,有人可以做到用筆記本在幾小時內找到碰撞,因此MD5已被攻破,不再安全。

Google在2017年實現了對SHA-1算法的攻擊,原理也是碰撞攻擊。他們與CWI團隊合作共同創造了兩個PDF文件,其中一個為正常文件件,另外一個則是經過篡改的損壞文件,這兩個PDF文件的內容完全不同,但是他們有著相同的Hash值,這說明現SHA-1算法被破解已經成為現實。不過需要註意的是,這次SHA-1算法破解的計算量相當於單個CPU計算6500年和單個GPU計算110年,因此就目前的PC硬件來看,依靠一臺電腦完成破解是不現實的。然而密碼學家認為,如果利用雲計算技術來破解的話,這件事情將簡單很多,可能只需要17萬美元的預算即可完成,因此盡快改用安全性更高的SHA-2或SHA-3算法才是正確的做法。

2.目前安全散列函數的發展

MD5和SHA-1分別在2004年和2017年被攻破,目前MD5已基本被淘汰,而SHA-1由於攻擊成本太高,還沒到已經徹底不安全的程度,還在被大量使用,但已經有多家大型科技企業宣布逐步放棄SHA-1算法。現在,新生成的https數字證書已經基本淘汰了SHA-1,微軟已經確定會放棄在Edge以及IE瀏覽器上繼續使用SHA-1算法的TLS證書,Google的Chrome在56版之後也會提示SHA-1加密的HTTPS網頁並不安全,Mozilla則確定在2017年7月開始停止SHA-1的支持。未來SHA-2應該會成為主流安全散列函數,它包括SHA-256、SHA-384、SHA-512系列。

鏈接推薦:https://www.zhihu.com/question/56234281 (關於SHA-1碰撞)

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

選擇前綴碰撞是指選取一對任意的MD5消息前綴後,再構造一對後綴使得兩部分級聯後的消息對發生碰撞。在第二個鏈接中,HelloWorld.exe和GoodbyeWorld.exe是兩個不同的可執行文件,它們MD5的Hash值也不同。但通過選擇前綴碰撞,在兩個文件後面都加上兩塊832個字節(不影響原功能),形成新的文件,分別命名為HelloWorld-colliding.exe和GoodbyeWorld-colliding.exe,這時會發現新的兩個文件的Hash值是相同的,而它們各自的內容和功能都是不同的,這就找到了MD5的一對碰撞。附加選擇前綴碰撞的好處在於,任何程序可以毫無影響地與其它任何程序碰撞。以上情況可以說明md5並不能保證軟件的完整性,有可能出現兩個不同的軟件但Hash值相同的情況。

2016012032 王慧珍 散列函數的應用及其安全性