2016012099+陳杰+散列函數的應用及其安全性

做業五要求:算法

做業題目:散列函數的應用及其安全性。內容要求:(1) 給出散列函數的具體應用。(2) 結合生日攻擊、以及200四、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) 鑑權協議
以下的鑑權協議又被稱做挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的狀況下,這是一種簡單而安全的方法。
 
二. 結合生日攻擊、以及200四、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,他研究結果是能夠在2^{57.5}的計算量內找到sha-1算法下的一組哈希碰撞。而谷歌在2017年對sha-1的破解採用了stevens以前的2^{61}計算量的方法。這些都證實着破解這些散列函數已經愈來愈容易。事實上,隨着破解方法的不斷改進和機器計算能力的不斷提升,這些散列函數也確實愈來愈不安全,而須要更好的是散列函數來代替。數據庫

正是基於這些背景,安全散列函數也在不斷髮展中。安全

目前使用最多的散列函數有MD系列和SHA系列,1990年Ronald L. Rivest 設計的MD4經過3圈的操做將任意長度的消息變換成128位的哈希值。而MD4的前兩圈已被Dobbertin等人攻破。以後的MD5是Rivest於1991年對MD4的改進版本。MD5算法被王曉雲教授證實是可攻破的,所以已經不安全了。在MD4和MD5的基礎上,HAVAL,SHA1,SHA256,SHA384,SHA512等散列算法不斷出現對散列函數的安全性有着不斷的提升,不過能夠預見的,這些散列函數在未來也頗有可能隨着破解方法的進步和機器計算能力的提高而面臨被破解的風險。
app

 

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

 md5算法的選擇前綴能夠在使用相同前綴的狀況下更改少部份內容仍能使兩個文件獲得相同的md5,而第二個連接中兩個內容不一樣的exe文件卻有着相同的md5,爲md5的不安全性提供了實例,在王曉雲教授研究結果的基礎上,密碼學研究者已經研究出了改進版本「構造前綴碰撞法」,而且編寫出了快速MD5碰撞生成器,使MD5的破解速度能夠達到幾秒鐘這樣的速度。測試

故用md5算法驗證軟件完整性會出現以下的問題:google

(1)不能確保獲得的軟件是否被修改過或者被替換編碼

(2)不能確保獲得的軟件中間被人獲取過加密

(3)在軟件過大時,會使驗證時間過長而致使攻擊者的成功率增長spa

相關文章
相關標籤/搜索