散列函數的應用及其安全性

(1) 給出散列函數的具體應用

1) 文件校驗
咱們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並無抗數據篡改的能力,它們必定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。 java

MD5 Hash算法的"數字指紋"特性,使它成爲目前應用最普遍的一種文件完整性校驗和(Checksum)算法,很多Unix系統有提供計算md5 checksum的命令。它常被用在下面的2種狀況下: 算法

第一是文件傳送後的校驗,將獲得的目標文件計算 md5 checksum,與源文件的md5 checksum 比對,由二者 md5 checksum 的一致性,能夠從統計上保證2個文件的每個碼元也是徹底相同的。這能夠檢驗文件傳輸過程當中是否出現錯誤,更重要的是能夠保證文件在傳輸過程當中未被惡意篡改。一個很典型的應用是ftp服務,用戶能夠用來保證屢次斷點續傳,特別是從鏡像站點下載的文件的正確性。 數據庫

更出色的解決方法是所謂的代碼簽名,文件的提供者在提供文件的同時,提供對文件Hash值用本身的代碼簽名密鑰進行數字簽名的值,及本身的代碼簽名證書。文件的接受者不只能驗證文件的完整性,還能夠依據本身對證書籤發者和證書擁有者的信任程度,決定是否接受該文件。瀏覽器在下載運行插件和java小程序時,使用的就是這樣的模式。 小程序

第二是用做保存二進制文件系統的數字指紋,以便檢測文件系統是否未經容許的被修改。很多系統管理/系統安全軟件都提供這一文件系統完整性評估的功能,在系統初始安裝完畢後,創建對文件系統的基礎校驗和數據庫,由於散列校驗和的長度很小,它們能夠方便的被存放在容量很小的存儲介質上。此後,能夠按期或根據須要,再次計算文件系統的校驗和,一旦發現與原來保存的值有不匹配,說明該文件已經被非法修改,或者是被病毒感染,或者被木馬程序替代。TripWire就提供了一個此類應用的典型例子。 瀏覽器

更完美的方法是使用"MAC"。"MAC" 是一個與Hash密切相關的名詞,即信息鑑權碼(Message Authority Code)。它是與密鑰相關的Hash值,必須擁有該密鑰才能檢驗該Hash值。文件系統的數字指紋也許會被保存在不可信任的介質上,只對擁有該密鑰者提供可鑑別性。而且在文件的數字指紋有可能須要被修改的狀況下,只有密鑰的擁有者能夠計算出新的散列值,而企圖破壞文件完整性者卻不能得逞。 安全

2) 數字簽名
Hash 算法也是現代密碼體系中的一個重要組成部分。因爲非對稱算法的運算速度較慢,因此在數字簽名協議中,單向散列函數扮演了一個重要的角色。 函數

在這種簽名協議中,雙方必須事先協商好雙方都支持的Hash函數和簽名算法。 工具

簽名方先對該數據文件進行計算其散列值,而後再對很短的散列值結果--如Md5是16個字節,SHA1是20字節,用非對稱算法進行數字簽名操做。對方在驗證簽名時,也是先對該數據文件進行計算其散列值,而後再用非對稱算法驗證數字簽名。 網站

對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上能夠認爲與對文件自己進行數字簽名是等效的。並且這樣的協議還有其餘的優勢: google

首先,數據文件自己能夠同它的散列值分開保存,簽名驗證也能夠脫離數據文件自己的存在而進行。

再者,有些狀況下簽名密鑰可能與解密密鑰是同一個,也就是說,若是對一個數據文件簽名,與對其進行非對稱的解密操做是相同的操做,這是至關危險的,惡意的破壞者可能將一個試圖騙你將其解密的文件,充當一個要求你簽名的文件發送給你。所以,在對任何數據文件進行數字簽名時,只有對其Hash值進行簽名纔是安全的。

3) 鑑權協議
以下的鑑權協議又被稱做"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的狀況下,這是一種簡單而安全的方法。

須要鑑權的一方,向將被鑑權的一方發送隨機串(「挑戰」),被鑑權方將該隨機串和本身的鑑權口令字一塊兒進行 Hash 運算後,返還鑑權方,鑑權方將收到的Hash值與在己端用該隨機串和對方的鑑權口令字進行 Hash 運算的結果相比較(「認證」),如相同,則可在統計上認爲對方擁有該口令字,即經過鑑權。

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

1)生日攻擊

利用「兩個集合相交」問題的原理生成散列函數碰撞,達到目的的攻擊稱爲生日攻擊,也稱爲平方根攻擊。

生日攻擊方法沒有利用Hash函數的結構和任何代數弱性質,它只依賴於消息摘要的長度,即Hash的長度。

2)MD5安全性

MD5是一個較爲古老的算法,一度被普遍應用於安全領域。好比在UNIX系統中用戶的密碼就是以MD5(或其它相似的算法)經加密後存儲在文件系統中。當用戶登陸的時候,系統把用戶輸入的密碼計算成MD5值,而後再去和保存在文件系統中的MD5值進行比較,進而肯定輸入的密碼是否正確。

經過這樣的步驟,系統在並不知道用戶密碼的明碼的狀況下就能夠肯定用戶登陸系統的合法性。這不但能夠避免用戶的密碼被具備系統管理員權限的用戶知道,並且還在必定程度上增長了密碼被破解的難度。

不過,因爲MD5的弱點被不斷髮現以及計算機能力不斷的提高,經過碰撞的方法有可能構造兩個具備相同MD5的信息,使MD5算法在目前的安全環境下有一點落伍。從實踐角度,不一樣信息具備相同MD5的可能性仍是很是低的,一般認爲是不可能的,經過碰撞的方法也很難碰撞出複雜信息的MD5數值。

所以,MD5算法仍是被普遍的用做檢驗文件是否變化的散列函數,不少相似迅雷、旋風這樣的下載工具,均可以經過MD5來驗證,用戶下載下來的文件是否被修改。

3)SHA-1安全性

SHA-1 算法是一種密碼散列函數,美國國家安全局設計,並由美國國家標準技術研究所(NIST)發佈爲聯邦數據處理標準(FIPS),被普遍用於:

  • 數字證書籤名
  • Email 的 PGP/GPG 簽名
  • 軟件供應商簽名
  • 軟件更新
  • ISO 校驗和
  • 系統備份
  • Git
  • ...

儘管早在 2005 年其理論上的攻擊方法就已經被熟知,SHA-1 也在 2011 年被 NIST 正式棄用,但依舊仍是有許多公司和我的在使用 SHA-1 算法。

2017 年 2 月 23 日,CWI Amsterdam 與 Google 宣佈了一個實現了的 SHA-1 碰撞攻擊。Google 但願用這樣的方式,推進業界儘快棄用 SHA-1,而使用安全性更高的算法,好比 SHA-256。

4)散列函數的安全性

Hash的安全要求:

(1)H可適用於任意長度的數據塊。

(2)H可以生成固定長度的輸出。

(3)對於任意給定的x,計算H(x)相對容易,而且能夠用軟/硬件實現。

(4)對於任意給定的h,找到知足H(x)=h的x在計算上不可行,知足這一特性的散列函數稱之爲:具有抗原像攻擊性。

(5)對於任意給定的數據塊x,找到知足H(y)=H(x)的y ≠ x在計算上是不可行;知足這一特性的散列函數稱之爲:抗弱碰撞性。

(6)找到知足H(x) = H(y)的任意一對(x,y)在計算上是不可行的。知足這一特性的散列函數稱之爲:抗碰撞性。

有兩種方法能夠攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度徹底依賴於算法生成的散列碼長度。Van Oorschot和Wiener曾經提出,花費1000萬美圓涉及一個被專門用來搜索MD5算法碰撞的機器,則平均24天內就能夠找到一個碰撞。
 2004年8月中國密碼學家王小云教授等首次公佈了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內便可找到MD5的碰撞。MD5已經唄完全攻破。

5)安全散列函數的發展

SHA家族的五個算法,分別是SHA-一、SHA-22四、SHA-25六、SHA-384,和SHA-512,由美國國家安全局(NSA)所設計,並由美國國家標準與技術研究院(NIST)發佈;是美國的政府標準。後四者有時並稱爲SHA-2。SHA-1在許多安全協定中廣爲使用,包括TSL和SSL,PGP,SSH、S/MIME和IPsec,曾被視爲是MD5(更早以前被廣爲使用的雜湊函數)的後繼者。但SHA-1的安全性現在被密碼學家嚴重質疑;雖然至今還沒有出現對SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然類似;所以有些人開始發展其餘替代的雜湊算法。

最初載明的算法於1993年發佈,稱作安全雜湊標準(Secure Hash Standard),FIPS PUB 180。這個版本如今常被稱爲SHA-0。它在發佈以後很快就被NSA撤回,而且由1995年發佈的修訂版本FIPS PUB 180-1(一般稱爲SHA-1)取代。

SHA-0破解

在CRYPTO 98上,兩位法國研究者提出一種對SHA-0的攻擊方式:在261的計算複雜度以內,就能夠發現一次碰撞(即兩個不一樣的訊息對應到相同的訊息摘要);這個數字小於生日攻擊法所需的2的80次方,也就是說,存在一種算法,使其安全性不到一個理想的雜湊函數抵抗攻擊所應具有的計算複雜度。
2004年時,Biham和 Chen也發現了SHA-0的近似碰撞,也就是兩個訊息能夠雜湊出幾乎相同的數值;其中162位元中有142位元相同。他們也發現了SHA-0的完整碰撞(相對於近似碰撞),將原本須要80次方的複雜度下降到62次方。
2004年8月12日,Joux, Carribault, Lemuet和Jalby宣佈找到SHA-0算法的完整碰撞的方法,這是概括Chabaud和Joux的攻擊所完成的結果。發現一個完整碰撞只須要251的計算複雜度。他們使用的是一臺有256顆Itanium2處理器的超級電腦,約耗80,000 CPU工時。
2004年8月17日,在CRUPTO 2004的Rump會議上,王小云,馮登國、來學嘉,和於紅波宣佈了攻擊MD五、SHA-0 和其餘雜湊函數的初步結果。他們攻擊SHA-0的計算複雜度是2的40次方,這意謂的他們的攻擊成果比Joux還有其餘人所作的更好。請參見MD5 安全性。2005年二月,王小云和殷益羣、於紅波再度發表了對SHA-0破密的算法,可在2的39次方的計算複雜度內就找到碰撞。

SHA-1破解

鑑於SHA-0的破密成果,專家們建議那些計劃利用SHA-1實做密碼系統的人們也應從新考慮。在2004年CRYPTO會議結果公佈以後,NIST即宣佈他們將逐漸減小使用SHA-1,改以SHA-2取而代之。
2005年,Rijmen和Oswald發表了對SHA-1較弱版本(53次的加密循環而非80次)的攻擊:在2的80次方的計算複雜度以內找到碰撞。
2005年二月,王小云、殷益羣及於紅波發表了對完整版SHA-1的攻擊,只需少於2的69次方的計算複雜度,就能找到一組碰撞。(利用生日攻擊法找到碰撞須要2的80次方的計算複雜度。)
這篇論文的做者們寫道;「咱們的破密分析是以對付SHA-0的差分攻擊、近似碰撞、多區塊碰撞技術、以及從MD5算法中尋找碰撞的訊息更改技術爲基礎。沒有這些強力的分析工具,SHA-1就沒法破解。」此外,做者還展現了一次對58次加密循環SHA-1的破密,在2的33次方個單位操做內就找到一組碰撞。完整攻擊方法的論文發表在2005年八月的CRYPTO會議中。
殷益羣在一次面談中如此陳述:「大體上來講,咱們找到了兩個弱點:其一是前置處理不夠複雜;其二是前20個循環中的某些數學運算會形成不可預期的安全性問題。」
2005年8月17日的CRYPTO會議尾聲中王小云、姚期智、姚儲楓再度發表更有效率的SHA-1攻擊法,能在2的63次方個計算複雜度內找到碰撞。
2006年的CRYPTO會議上,Christian Rechberger和Christophe De Cannière宣佈他們能在允許攻擊者決定部分原訊息的條件之下,找到SHA-1的一個碰撞。

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

(1)不一樣的程序也會有相同的MD5;

(2)不能肯定網站是否被黑客入侵篡改,是否被植入病毒或木馬;

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

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

相關文章
相關標籤/搜索