2016012099+陳傑+散列函數的應用及其安全性
作業五要求:
作業題目:散列函數的應用及其安全性。內容要求:(1) 給出散列函數的具體應用。(2) 結合生日攻擊、以及2004、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。問題2的回答可以結合下面給出的第一個鏈接。(3)結合md5算法中的選擇前綴碰撞以及第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題。鏈接1:https://www.win.tue.nl/hashclash/
鏈接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/
一.散列函數的具體應用
散列函數應用
由於散列函數的應用的多樣性,它們經常是專為某一應用而設計的。例如,加密散列函數假設存在一個要找到具有相同散列值的原始輸入的敵人。一個設計優秀的加密散列函數是一個“單向”操作:對於給定的散列值,沒有實用的方法可以計算出一個原始輸入,也就是說很難偽造。為加密散列為目的設計的函數,如MD5,被廣泛的用作檢驗散列函數。這樣軟件下載的時候,就會對照驗證代碼之後才下載正確的文件部分。此代碼有可能因為環境因素的變化,如機器配置或者IP地址的改變而有變動。以保證源文件的安全性。錯誤監測和修復函數主要用於辨別數據被隨機的過程所擾亂的事例。當散列函數被用於校驗和的時候,可以用相對較短的散列值來驗證任意長度的數據是否被更改過。
錯誤校正 使用一個散列函數可以很直觀的檢測出數據在傳輸時發生的錯誤。在數據的發送方,對將要發送的數據應用散列函數,並將計算的結果同原始數據一同發送。在數據的接收方,同樣的散列函數被再一次應用到接收到的數據上,如果兩次散列函數計算出來的結果不一致,那麽就說明數據在傳輸的過程中某些地方有錯誤了。這就叫做冗余校驗。
對於錯誤校正,假設相似擾動的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。對於一個信息串的微擾可以被分為兩類,大的(不可能的)錯誤和小的(可能的)錯誤。我們對於第二類錯誤重新定義如下,假如給定 H(x) 和 x+s,那麽只要s足夠小,我們就能有效的計算出x。那樣的散列函數被稱作錯誤校正編碼。這些錯誤校正編碼有兩個重要的分類:循環冗余校驗和裏德所羅門碼。
對於像從一個已知列表中匹配一個MP3文件這樣的應用,一種可能的方案是使用傳統的散列函數——例如MD5,但是這種方案會對時間平移、CD讀取錯誤、不同的音頻壓縮算法或者音量調整的實現機制等情況非常敏感。使用一些類似於MD5的方法有利於迅速找到那些嚴格相同(從音頻文件的二進制數據來看)的音頻文件,但是要找到全部相同(從音頻文件的內容來看)的音頻文件就需要使用其他更高級的算法了。
那些並不緊隨IT工業潮流的人往往能反其道而行之,對於那些微小差異足夠魯棒的散列函數確實存在。現存的絕大多數散列算法都是不夠魯棒的,但是有少數散列算法能夠達到辨別從嘈雜房間裏的揚聲器裏播放出來的音樂的魯棒性。有一個實際的例子是Shazam[1]服務。用戶可以用電話機撥打一個特定的號碼,並將電話機的話筒靠近用於播放音樂的揚聲器。該項服務會分析正在播放的音樂,並將它於存儲在數據庫中的已知的散列值進行比較。用戶就能夠收到被識別的音樂的曲名(需要收取一定的費用) 信息安全
Hash算法在信息安全方面的應用主要體現在以下的3個方面:
(1)文件校驗
我們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
MD5 Hash算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統有提供計算md5 checksum的命令。
(2)數字簽名
Hash 算法也是現代密碼體系中的一個重要組成部分。由於非對稱算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
(3) 鑒權協議
如下的鑒權協議又被稱作挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。
二. 結合生日攻擊、以及2004、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。問題2的回答可以結合下面給出的第一個鏈接。 1.散列函數的安全性需求有七個:
(1)輸入長度可變:H可應用於任意大小的數據塊 (2)輸出長度固定:H產生定長的輸出 (3)效率:對任意給定的x,計算H(x)比較容易,用硬件和軟件均可實現 (4)抗原像攻擊(單向性):對任意給定的Hash碼h,找到滿足H(y)=h的y在計算上是不可行的 (5)抗第二原像攻擊(抗弱碰撞性):對任意給定的分塊x,找到滿足y!=x且H(x)=H(y)的y在計算上是不可行的 (6)抗碰撞攻擊(抗強碰撞性):找到任何滿足H(x)=H(y)的偶對(x,y)在計算上是不可行的 (7)偽隨機性:H的輸出滿足偽隨機性測試標準
生日攻擊的原理證明了只需要相對很少的數據量就能產生兩個哈希值相同的不同文件,在這個原理之上,王曉雲教授給出了在可計算時間內破解md5的方法,讓md5不滿足散列函數安全性需求的(6),而之後再密碼學從事人員的不斷努力和計算機計算能力的不斷提高,這之中包括鏈接一中的Marc Stevens,他研究結果是可以在的計算量內找到sha-1算法下的一組哈希碰撞。而谷歌在2017年對sha-1的破解采用了stevens之前的計算量的方法。這些都證明著破解這些散列函數已經越來越容易。事實上,隨著破解方法的不斷改進和機器計算能力的不斷提高,這些散列函數也確實越來越不安全,而需要更好的是散列函數來代替。
正是基於這些背景,安全散列函數也在不斷發展中。
目前使用最多的散列函數有MD系列和SHA系列,1990年Ronald L. Rivest 設計的MD4通過3圈的操作將任意長度的消息變換成128位的哈希值。而MD4的前兩圈已被Dobbertin等人攻破。之後的MD5是Rivest於1991年對MD4的改進版本。MD5算法被王曉雲教授證明是可攻破的,因此已經不安全了。在MD4和MD5的基礎上,HAVAL,SHA1,SHA256,SHA384,SHA512等散列算法不斷出現對散列函數的安全性有著不斷的提高,不過可以預見的,這些散列函數在將來也很有可能隨著破解方法的進步和機器計算能力的提升而面臨被破解的風險。
三.結合md5算法中的選擇前綴碰撞以及第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題。
md5算法的選擇前綴可以在使用相同前綴的情況下更改少部分內容仍能使兩個文件得到相同的md5,而第二個鏈接中兩個內容不同的exe文件卻有著相同的md5,為md5的不安全性提供了實例,在王曉雲教授研究結果的基礎上,密碼學研究者已經研究出了改進版本“構造前綴碰撞法”,並且編寫出了快速MD5碰撞生成器,使MD5的破解速度可以達到幾秒鐘這樣的速度。
故用md5算法驗證軟件完整性會出現如下的問題:
(1)不能確保得到的軟件是否被修改過或者被替換
(2)不能確保得到的軟件中間被人獲取過
(3)在軟件過大時,會使驗證時間過長而導致攻擊者的成功率增加
2016012099+陳傑+散列函數的應用及其安全性