1. 程式人生 > >2016012009 馬佳欣 散列函數的應用及其安全性

2016012009 馬佳欣 散列函數的應用及其安全性

檢測 另一個 由於 不能 分組 操作 增加 固定 加密

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

                   馬佳欣 2016012009

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

由於散列函數的應用的多樣性,它們經常是專為某一應用而設計的。例如,加密散列函數假設存在一個要找到具有相同散列值的原始輸入的敵人。一個設計優秀的加密散列函數是一個“單向”操作:對於給定的散列值,沒有實用的方法可以計算出一個原始輸入,也就是說很難偽造。為加密散列為目的設計的函數,如MD5,被廣泛的用作檢驗散列函數。這樣軟件下載的時候,就會對照驗證代碼之後才下載正確的文件部分。此代碼有可能因為環境因素的變化,如機器配置或者IP地址的改變而有變動。以保證源文件的安全性。

錯誤監測和修復函數主要用於辨別數據被隨機的過程所擾亂的事例。當散列函數被用於校驗和的時候,可以用相對較短的散列值來驗證任意長度的數據是否被更改過。

錯誤校正

使用一個散列函數可以很直觀的檢測出數據在傳輸時發生的錯誤。在數據的發送方,對將要發送的數據應用散列函數,並將計算的結果同原始數據一同發送。在數據的接收方,同樣的散列函數被再一次應用到接收到的數據上,如果兩次散列函數計算出來的結果不一致,那麽就說明數據在傳輸的過程中某些地方有錯誤了。這就叫做冗余校驗。

對於錯誤校正,假設相似擾動的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。對於一個信息串的微擾可以被分為兩類,大的(不可能的)錯誤和小的(可能的)錯誤。我們對於第二類錯誤重新定義如下,假如給定 H(x) 和 x+s,那麽只要s足夠小,我們就能有效的計算出x。那樣的散列函數被稱作錯誤校正編碼。這些錯誤校正編碼有兩個重要的分類:循環冗余校驗和裏德所羅門碼。

語音識別

對於像從一個已知列表中匹配一個MP3文件這樣的應用,一種可能的方案是使用傳統的散列函數——例如MD5,但是這種方案會對時間平移、CD讀取錯誤、不同的音頻壓縮算法或者音量調整的實現機制等情況非常敏感。使用一些類似於MD5的方法有利於迅速找到那些嚴格相同(從音頻文件的二進制數據來看)的音頻文件,但是要找到全部相同(從音頻文件的內容來看)的音頻文件就需要使用其他更高級的算法了

那些並不緊隨IT工業潮流的人往往能反其道而行之,對於那些微小差異足夠魯棒的散列函數確實存在。現存的絕大多數散列算法都是不夠魯棒的,但是有少數散列算法能夠達到辨別從嘈雜房間裏的揚聲器裏播放出來的音樂的魯棒性。有一個實際的例子是Shazam[1]服務。用戶可以用電話機撥打一個特定的號碼,並將電話機的話筒靠近用於播放音樂的揚聲器。該項服務會分析正在播放的音樂,並將它於存儲在數據庫中的已知的散列值進行比較。用戶就能夠收到被識別的音樂的曲名(需要收取一定的費用)。

信息安全

Hash算法在信息安全方面的應用主要體現在以下的3個方面:

(1)文件校驗

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

MD5 Hash算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統有提供計算md5 checksum的命令。

(2)數字簽名

Hash 算法也是現代密碼體系中的一個重要組成部分。由於非對稱算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。

(3) 鑒權協議

如下的鑒權協議又被稱作挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。以上就是一些關於hash以及其相關的一些基本預備知識。

(2)散列函數的安全性以及目前安全散列函數的發展

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

安全散列函數:

技術分享圖片

大部分安全哈希函數都是叠代結構的。圖中Mi為被分成L塊的原始信息,f為雜湊函數,IV為初始值。填充信息和IV的選擇對哈希函數的安全性有很大影響,任何兩條消息都不能被填充成相同的消息,填充的末尾應該加上消息的長度;IV的選擇定義為該哈希函數描述的一部分。

安全散列函數的發展:目前使用最多的哈希函數有MD(Message-Digest Algorithm)系列(MD4、MD5、HAVAL、RIPEMD)和SHA系列(SHA-1、SHA-256)

MD4

1990年Ronald L. Rivest設計,通過3圈的操作將任意長度的消息變換成128位的哈希值。MD4算法的前兩圈已被Dobbertin等人攻破,證明MD4算法是不安全的,但整個算法並沒有被攻破過。具體算法詳見《MD4算法分析》

MD5

MD5是Rivest於1991年對MD4的改進版本。它對輸入仍以512位分組,經過一系列處理後,其輸入是4個32位字的級聯,於MD4相同。MD5算法被王小雲證明是可攻破的,因此也已經不安全了。
MD5與MD4的區別:MD5用了4輪變換,比MD4多一輪;MD4中第一輪沒有常量加,MD5中64步每一步用了一個不同的常量K[i];MD5每輪加上前一步的結果,MD4沒有。
MD5首先對數據進行填充,使其成為512的倍數。

技術分享圖片

上圖中的每個HMOS 進行4輪運算,每輪包括16次操作,每次操作的流程圖如圖所示

技術分享圖片

Mi表示一個32 位的輸入消息分組(16*32=512),K i表示一個32 位常數,用來完成每次不同的計算,<<<s 表示向左位移s位。圖中的F是一個非線性函數,四輪中的F函數各不相同,分別為:

F(X,Y,Z) =(X&Y)|((~X)&Z)

G(X,Z)=(X&Z) |(Y&(~Z))

H(X,Y,Z) =X^Y^Z

I(X,Y,Z) =Y^(X|(~Z))

每輪中的16次運算的參數也不相同,詳見百度百科。

HAVAL

HAVAL是MD5的改進反本,其輪數可以是3.4或5(年輪16步).輸出長度分別為128、160、192或224位。HAVAL用高非線性-7變量函數取代了MD5的簡單非線性函數。

SHA1
SHA由美國國家標準技術研究所NIST 開發,於1993 年發表,SHA-1是基於MD4 設計的輸入最大長度為2^64位的數據,輸出160位的消息摘要,同樣以512位數據塊進行處理,具體這裏不詳述
SHA-256
輸出由SHA-1的160位擴大到256 位,叠代次數由SHA-1的80次增加到128次

SHA-384
輸出擴大到384位,叠代次數增加到192次
SHA-5 12
輸出擴大到512位,叠代次數增加到256次

技術分享圖片

(3)md5算法驗證軟件完整性時可能出現的問題

md5是一種不可逆的加密算法,也就是說除了窮舉外只根據密文不可能得到明文。md5一般有兩種用途:第一個是例如對數據庫裏保存的密碼加密,另一個就是你說的校驗、檢錯。md5的一個性質就是明文哪怕改動一點點,所得到的密文就會與之前完全不同,所以可以驗證文件的完整性。
問題:MD5摘要算法,公鑰加密只對消息摘要進行操作,因為一種摘要算法的摘要消息長度是固定的,而且都比較“短”(相對於消息而言),正好符合公鑰加密的要求。這樣效率得到了提高,而其安全性也並未因為使用摘要算法而減弱。

2016012009 馬佳欣 散列函數的應用及其安全性