1. 程式人生 > >2016011997+茅梓軍+散列函數應用及其安全性

2016011997+茅梓軍+散列函數應用及其安全性

用戶密碼 暴力 dig span checksum 檢驗 校驗 完整 情況下

作業要求:

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

(2) 結合生日攻擊、以及2004、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/

作業內容:

1.散列函數的具體應用

1)文件校驗
  我們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
  MD5 Hash算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統有提供計算md5 checksum的命令。
2)數字簽名
  Hash 算法也是現代密碼體系中的一個重要組成部分。由於非對稱算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3)鑒權協議
  如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。

ps:散列函數常見誤區:

1)誤認為其是加密算法
有很多人把HASH算法當成是加密算法,這是不準確的,其實我們知道加密總是相對於解密而言的,沒有解密何談加密呢,HASH的設計以無法解為目的的。
2)不包含salt的口令HASH
註意如果我們不附加一個隨機的salt值,HASH口令是很容易被字典攻擊入侵的。

3)不註意中間人攻擊
註意HASH並不能保證網絡的安全,要防止攻擊者同時替換數據和HASH。正確運用中要結合加密,簽名。

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

生日攻擊:

利用“兩個集合相交”問題的原理生成散列函數碰撞,達到目的的攻擊稱為生日攻擊,也稱為平方根攻擊。生日攻擊方法沒有利用Hash函數的結構和任何代數弱性質,它只依賴於消息摘要的長度,即Hash值的長度。

MD5: MD5算法具有以下特點: 1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。 2、容易計算:從原數據計算出MD5值很容易。 3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。 4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據是非常困難的。 其安全性表現為: MD5是一個較為古老的算法,一度被廣泛應用於安全領域。比如在UNIX系統中用戶的密碼就是以MD5(或其它類似的算法)經加密後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。不過,由於MD5的弱點被不斷發現以及計算機能力不斷的提升,通過碰撞的方法有可能構造兩個具有相同MD5的信息,使MD5算法在目前的安全環境下有一點落伍。從實踐角度,不同信息具有相同MD5的可能性還是非常低的,通常認為是不可能的,通過碰撞的方法也很難碰撞出復雜信息的MD5數值。因此,MD5算法還是被廣泛的用作檢驗文件是否變化的散列函數,很多類似迅雷、旋風這樣的下載工具,都可以通過MD5來驗證,用戶下載下來的文件是否被修改。 SHA-1: SHA 是NSA 設計,NIST發布的一系列密碼散列函數。正式名稱為 SHA 的家族第一個成員發布於 1993年。然而人們給它取了一個非正式的名稱 SHA-0 以避免與它的後繼者混淆。兩年之後, SHA-1,第一個 SHA 的後繼者發布了。 另外還有四種變體,曾經發布以提升輸出的範圍和變更一些細微設計: SHA-224, SHA-256, SHA-384 和 SHA-512
最初載明的算法於1993年發布,稱做安全散列標準 (Secure Hash Standard),FIPS PUB 180。這個版本常被稱為 "SHA-0"。它在發布之後很快就被NSA撤回,並且以 1995年發布的修訂版本 FIPS PUB 180-1 (通常稱為 "SHA-1") 取代。根據 NSA的說法,它修正了一個在原始算法中會降低密碼安全性的錯誤。然而 NSA 並沒有提供任何進一步的解釋或證明該錯誤已被修正。1998年,在一次對 SHA-0 的攻擊中發現這次攻擊並不能適用於 SHA-1 — 我們不知道這是否就是NSA 所發現的錯誤,但這或許暗示我們這次修正已經提升了安全性。SHA-1已經被公眾密碼社群做了非常嚴密的檢驗而還沒發現到有不安全的地方,它在一段時間被認為是安全的,直到Google宣布攻破SHA-1。 散列函數的安全性及其發展: 有兩種方法可以攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度完全依賴於算法生成的散列碼長度。Van Oorschot和Wiener曾經提出,花費1000萬美元涉及一個被專門用來搜索MD5算法碰撞的機器,則平均24天內就可以找到一個碰撞。 2004年8月中國密碼學家王小雲教授等首次公布了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內即可找到MD5的碰撞。MD5已經唄徹底攻破。 散列函數未來的研究主要是兩個方向: 1)散列函數本身性質的研究 2)采用新的方式直接涉及新算法 3.結合md5算法中的選擇前綴碰撞以及第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題。 1)MD5算法:它的全稱是message-digest algorithm 5(信息-摘要算法),經MD2、MD3和MD4發展而來。它的作用是讓大容量信息在用數字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的大整數)。 MD5算法具有以下特點: 1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。 2、容易計算:從原數據計算出MD5值很容易。 3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。 4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

2)MD5算法的選擇前綴碰撞:如果兩個文件存在任何碰撞(沖突)的地方,發生前綴碰撞後,這兩個文件完全相同,即得到相同的MD5。第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的MD5消息摘要值相同,即文件內容不同,但是MD5相同,這說明MD5算法存在著不安全性。正如第二問中談到,利用王曉雲教授的方法,MD5算法已經被徹底攻破。

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

(1)無法保證文件的來源可靠性,無法確認發送方與接收方傳說的是同一個文件

(2)無法保證文件的完整性和正確性,文件很有可能被刪改

(3)當驗證效率較低時,會出現驗證時間過長,給中間攻擊者的攻擊行為提供足夠的攻擊時間而增加安全風險

以上就是我針對散列函數的應用與安全性做的一系列的調查研究,可能會有錯誤或理解片面的地方,希望老師不吝賜教。

2016011997+茅梓軍+散列函數應用及其安全性