散列函數的安全性問題

散列函數的安全性問題

 

 

目錄:html

1、散列函數的具體應用;
算法

2、散列函數的安全性以及目前安全散列函數的發展;安全

3、md5算法來驗證軟件完整性時可能出現的問題。網絡

 

1、散列函數的具體應用

Hash函數被普遍的應用於各類不一樣的安全應用和網絡協議中。函數

1.消息認證

   消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的數據確實和發送時的同樣,還要求消息認證機制確保發送方聲稱的身份是真實有效的。當Hash函數用於提供消息認證功能時,Hash函數值一般被稱爲消息摘要。測試

消息認證中使用Hash函數的本質:網站

   發送方根據待發送的消息使用該函數計算一組Hash值,而後將Hash值和消息一塊兒發送過去。接收方接收後對於消息執行一樣的Hash計算,並將結果與收到的Hash值進行比較。若是匹配,則消息準確。反之,消息遭受了篡改。google

Hash碼可以經過不一樣方法用於提供消息認證。以下:加密

 

 

(1)使用對稱密碼E加密消息和Hash碼,因爲只有A和B共享密鑰K,因此消息必然發自A處,且可經過驗證Hash碼證實數據在傳輸過程當中未被更改。      spa

(2)使用對稱密碼只對Hash碼加密。因爲明文無需加密性的應用,這種方案大大減小了加密操做的負擔。      

(3)不使用加密算法,僅使用Hash函數實現消息驗證。該方案中,通訊雙方共享相同的祕密值S,發送方A將消息M和祕密值S串聯後計算其Hash值,並將獲得的Hash值附在消息M後發送。由於接收方B同時掌握S值,因此可以從新計算該Hash值進行驗證。      

(4)在方案c的基礎上將整個消息和Hash值加密,以提供保密性。    

處於成本和速度方面的考慮,人們愈來愈對那些不包含加密函數的方法感興趣,所以b和c方案更受青睞,不過若是對整個消息有加密型要求,則a和d仍具備實際意義。    

實際應用中,消息認證一般使用消息認證碼(MAC)實現。MAC函數將通訊雙方共享的密鑰和數據塊做爲輸入,產生Hash值做爲MAC碼,而後將MAC碼和受保護的消息一塊兒傳遞或存儲。須要檢查消息的完整性時,使用MAC函數對消息從新計算,並將計算結果與存儲的MAC碼對比。MAC提供安全保護,用於抵抗不知道密鑰的攻擊者的攻擊。在實現中,每每使用比加密算法效率更高的特殊設計的MAC函數。

2.數字簽名

  • 數字簽名的應用比消息認證更普遍。
  • 在進行數字簽名時,使用用戶的私鑰加密消息的Hash值,其餘任何知道該用戶公鑰的人都可以經過數字簽名來驗證消息的完整性。
  • Hash碼用於提供數字簽名的方案主要有如下兩種:

 

 

(1) 使用發送方的私鑰利用公鑰密碼算法對Hash碼進行加密。這種方法也可提供認證;因爲只有發送方能夠產生加密後的Hash碼,因此這種方法也提供了數字簽名。

(2) 若既但願保證保密性又但願有數字簽名,則先用發送方的私鑰對Hash碼加密,再用對稱密碼中的密鑰對象消息和公鑰算法加密結果進行加密,這種技術比較經常使用。 

3.產生單向口令文件

在操做系統中,存儲口令的Hash值而不是口令自己,當用戶輸入口令時,操做系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值來進行用戶驗證。

4.用於入侵檢測和病毒檢測

將每一個文件的Hash值H(F)存儲在安全系統中(如CD-R),隨後就能經過從新計算H(F)來判斷文件是否被修改過。入侵者只可以改變F,而不能改變H(F)。

5.用於構建隨機函數PRF或用做僞隨機數發生器。

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

-------------------------------------------------------------

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

1.密碼學Hash函數H的安全性要求:

① 輸入長度可變——H可適用於任意長度的數據塊。         

② 輸出長度固定——H可以生成固定長度的輸出。         

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

④ 抗原像攻擊(單向性)——對於任意給定的h,找到知足H(x)=h的x在計算上不可行,    

⑤ 抗第二原像攻擊(抗弱碰撞性)——對於任意給定的數據塊x,找到知足H(y)=H(x)的y ≠ x在計算上是不可行;         

⑥ 抗碰撞攻擊(抗強碰撞性)——找到知足H(x) = H(y)的任意一對(x,y)在計算上是不可行的。

⑦ 僞隨機性——H的輸出知足僞隨機性測試標準

  前三個特性是使用散列函數實際應用的需求。第四個條件,抗原像攻擊,防止攻擊者可以回覆祕密值。抗弱碰撞性保證了對於給定的消息,不可能找到具備相同散列值的可替換消息。

  知足前五個條件的Hash函數,稱爲弱Hash函數。知足前六個條件的,稱爲強Hash函數。

2.散列函數的安全性:

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

窮舉攻擊:

  • 不依賴於任何算法的細節,僅與相應的長度有關。2004年8月中國密碼學家王小云教授等首次公佈了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內便可找到MD5的碰撞。MD5已經被完全攻破。
  • 對於長度爲m的Hash碼,對於窮舉攻擊所需付出的代價分別於下表中相應量成正比.(經過生日悖論進行窮舉攻擊)

抗原像攻擊

2m

抗弱碰撞攻擊

2m

抗強碰撞攻擊

2m/2

 

 

密碼分析:

依賴於具體算法的設計缺陷,利用算法的某種性質。理想的Hash函數要求密碼分析攻擊所需的代價大於或等於窮舉攻擊所需的代價。

3.安全Hash算法(SHA)

  • 近些年,應用最普遍的散列函數是SHA。因爲其餘每一種被普遍應用的散列函數都已經被證明存在這密碼分析學中的缺陷,接着到2005年,SHA或許僅存的安全散列算法。SHA由美國國家標準與技術研究院(NIST)開發。
  • 直到2017年2月23日,Google通過兩年的研究,表示其已經成功破解了SHA-1加密谷歌公司多年來一直主張棄用SHA-1方案,特別是在TLS證書籤署等場景之下。早在2014年,Chrome小組就宣佈將逐漸淘汰對SHA-1的使用。Google但願本身針對SHA-1完成的實際攻擊可以進一步鞏固這一結論,讓更多人意識到其已經再也不安全可靠。
  • 谷歌亦但願這一針對SHA-1的實際攻擊案例可以最終說服整個技術業界儘快轉向更爲安全的替代性方案,例如SHA-256SHA-3

 

● 1995年公佈SHA-1
● 2002年,公佈了SHA-2(SHA-25六、SHA-38四、SHA-512)
● 2008年,增長了SHA-224

SHA算法各個版本參數比較:

以SHA-512爲例作一下介紹。該算法以最大長度不超過2128比特做爲輸入,生成512比特的消息摘要輸出。輸入以1024比特的數據塊進行處理。過程重要包括如下步驟:

  • 步驟1:附加填充位
  • 步驟2:附加長度
  • 步驟3:初始化Hash緩衝區
  • 步驟4:以1024位的分組爲單位處理消息
  • 步驟5:輸出

SHA-512算法使得散列碼的任意比特都是輸入端每1比特的函數。基本函數F的複雜迭代產生很好的混淆效果;即隨機取兩組類似的消息也不可能生成相同的散列碼。

 

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

  • MD5Message Digest Algorithm MD5 爲計算機安全領域普遍使用的一種散列函數,用以提供消息的完整性保護。MD5的做用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成必定長的十六進制數字串)。
  • MD5選擇前綴碰撞:

選擇前綴衝突——前綴衝突只要求在碰撞後文件應該徹底相等。在碰撞以前,要找到碰撞的兩個文件能夠是任何東西:咱們所選擇的前綴碰撞查找方法老是會產生一個衝突,該衝突能夠被合併到兩個文件中,而無論碰撞以前存在什麼數據。

 

構造前綴碰撞法可製做兩個內容不一樣但具備相同MD5驗證碼的文件

  老師所給連接中的HelloWorld-colliding.exeGoodbyeWorld-colliding.exe

  雖然執行的結果不一樣,可是兩個文件的MD5相同。

 

執行結果如圖(GoodbyeWorld-colliding.exe):

 

 

  • 密碼學家使用的是「構造前綴碰撞法」(chosen-prefix collisions)來進行這次攻擊(是王小云所使用的攻擊方法的改進版本)。
  • 他們的結論:MD5 算法不該再被用於任何軟件完整性檢查或代碼簽名的用途。
  • 如今,若是僅僅是想要生成 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

 

md5算法來驗證軟件完整性時可能出現的問題:

 

MD5算法能夠被用來驗證文件的完整性和是否被篡改,經過對任意長度的信息逐位進行計算,產生一個二進制長度爲128位(十六進制長度就是32位)的 hash 值, 不一樣的文件產生相同的hash的可能性是很是小的。MD5在實際應用中一般有兩種用法,一種是計算一個字符串的MD5值,經常使用於密碼相關的操做;另外一種是用於計算一個文件的MD5值,通常用於網絡傳輸中驗證文件是否出錯。

 

  1. 不能確保文件的完整性。尤爲是不能確保在文件傳輸、磁盤錯誤或其餘無惡意涉入的狀況下文件的正確性。
  2. 不能確保本身從網絡下載的文件,是否就是原發布者所提供的文件。
  3. 不能經過校驗MD5知道網站是否被黑客入侵篡改,是否曾被惡意植入病毒或木馬

 

參考文檔:快速MD5碰撞生成器,MD5真的不可靠了.

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

相關文章
相關標籤/搜索