散列函數的安全性問題
目錄: 一、散列函數的具體應用; 二、散列函數的安全性以及目前安全散列函數的發展; 三、md5算法來驗證軟件完整性時可能出現的問題。 |
一、散列函數的具體應用:
Hash函數被廣泛的應用於各種不同的安全應用和網絡協議中。
1.消息認證
消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的數據確實和發送時的一樣,還要求消息認證機制確保發送方聲稱的身份是真實有效的。當Hash函數用於提供消息認證功能時,Hash函數值通常被稱為消息摘要。
消息認證中使用Hash函數的本質:
發送方根據待發送的消息使用該函數計算一組Hash值,然后將Hash值和消息一起發送過去。接收方接收后對於消息執行同樣的Hash計算,並將結果與收到的Hash值進行比較。如果匹配,則消息准確。反之,消息遭受了篡改。
Hash碼能夠通過不同方法用於提供消息認證。如下:
(1)使用對稱密碼E加密消息和Hash碼,由於只有A和B共享密鑰K,所以消息必然發自A處,且可通過驗證Hash碼證明數據在傳輸過程中未被更改。
(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可用於對稱密碼中的密鑰產生。
-------------------------------------------------------------
二、 結合生日攻擊、以及2004、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-256和SHA-3。
● 1995年公布SHA-1
● 2002年,公布了SHA-2(SHA-256、SHA-384、SHA-512)
● 2008年,增加了SHA-224
SHA算法各個版本參數比較:
以SHA-512為例做一下介紹。該算法以最大長度不超過2128比特作為輸入,生成512比特的消息摘要輸出。輸入以1024比特的數據塊進行處理。過程重要包括以下步驟:
- 步驟1:附加填充位
- 步驟2:附加長度
- 步驟3:初始化Hash緩沖區
- 步驟4:以1024位的分組為單位處理消息
- 步驟5:輸出
SHA-512算法使得散列碼的任意比特都是輸入端每1比特的函數。基本函數F的復雜迭代產生很好的混淆效果;即隨機取兩組相似的消息也不可能生成相同的散列碼。
三、 結合md5算法中的選擇前綴碰撞以及第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題。
- MD5:Message Digest Algorithm MD5 為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。
- MD5選擇前綴碰撞:
選擇前綴沖突——前綴沖突只要求在碰撞后文件應該完全相等。在碰撞之前,要找到碰撞的兩個文件可以是任何東西:我們所選擇的前綴碰撞查找方法總是會產生一個沖突,該沖突可以被合並到兩個文件中,而不管碰撞之前存在什么數據。
構造前綴碰撞法可制作兩個內容不同但具有相同MD5驗證碼的文件
老師所給鏈接中的HelloWorld-colliding.exe和GoodbyeWorld-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值,一般用於網絡傳輸中驗證文件是否出錯。 |
- 不能確保文件的完整性。尤其是不能確保在文件傳輸、磁盤錯誤或其他無惡意涉入的情況下文件的正確性。
- 不能確保自己從網絡下載的文件,是否就是原發布者所提供的文件。
- 不能通過校驗MD5知道網站是否被黑客入侵篡改,是否曾被惡意植入病毒或木馬。