目錄:html 1、散列函數的具體應用; 2、散列函數的安全性以及目前安全散列函數的發展;安全 3、md5算法來驗證軟件完整性時可能出現的問題。網絡 |
Hash函數被普遍的應用於各類不一樣的安全應用和網絡協議中。函數
消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的數據確實和發送時的同樣,還要求消息認證機制確保發送方聲稱的身份是真實有效的。當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函數。
(1) 使用發送方的私鑰利用公鑰密碼算法對Hash碼進行加密。這種方法也可提供認證;因爲只有發送方能夠產生加密後的Hash碼,因此這種方法也提供了數字簽名。
(2) 若既但願保證保密性又但願有數字簽名,則先用發送方的私鑰對Hash碼加密,再用對稱密碼中的密鑰對象消息和公鑰算法加密結果進行加密,這種技術比較經常使用。
在操做系統中,存儲口令的Hash值而不是口令自己,當用戶輸入口令時,操做系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值來進行用戶驗證。
將每一個文件的Hash值H(F)存儲在安全系統中(如CD-R),隨後就能經過從新計算H(F)來判斷文件是否被修改過。入侵者只可以改變F,而不能改變H(F)。
-------------------------------------------------------------
① 輸入長度可變——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函數。
抗原像攻擊 |
2m |
抗弱碰撞攻擊 |
2m |
抗強碰撞攻擊 |
2m/2 |
依賴於具體算法的設計缺陷,利用算法的某種性質。理想的Hash函數要求密碼分析攻擊所需的代價大於或等於窮舉攻擊所需的代價。
● 1995年公佈SHA-1
● 2002年,公佈了SHA-2(SHA-25六、SHA-38四、SHA-512)
● 2008年,增長了SHA-224
SHA算法各個版本參數比較:
以SHA-512爲例作一下介紹。該算法以最大長度不超過2128比特做爲輸入,生成512比特的消息摘要輸出。輸入以1024比特的數據塊進行處理。過程重要包括如下步驟:
SHA-512算法使得散列碼的任意比特都是輸入端每1比特的函數。基本函數F的複雜迭代產生很好的混淆效果;即隨機取兩組類似的消息也不可能生成相同的散列碼。
選擇前綴衝突——前綴衝突只要求在碰撞後文件應該徹底相等。在碰撞以前,要找到碰撞的兩個文件能夠是任何東西:咱們所選擇的前綴碰撞查找方法老是會產生一個衝突,該衝突能夠被合併到兩個文件中,而無論碰撞以前存在什麼數據。
構造前綴碰撞法可製做兩個內容不一樣但具備相同MD5驗證碼的文件
老師所給連接中的HelloWorld-colliding.exe和GoodbyeWorld-colliding.exe
雖然執行的結果不一樣,可是兩個文件的MD5相同。
執行結果如圖(GoodbyeWorld-colliding.exe):
md5算法來驗證軟件完整性時可能出現的問題:
MD5算法能夠被用來驗證文件的完整性和是否被篡改,經過對任意長度的信息逐位進行計算,產生一個二進制長度爲128位(十六進制長度就是32位)的 hash 值, 不一樣的文件產生相同的hash的可能性是很是小的。MD5在實際應用中一般有兩種用法,一種是計算一個字符串的MD5值,經常使用於密碼相關的操做;另外一種是用於計算一個文件的MD5值,通常用於網絡傳輸中驗證文件是否出錯。 |