安全散列函數: 單向散列函數或者安全散列函數之因此重要,不只在於消息認證(消息摘要,數據指紋),還有數字簽名(增強版的消息認證)和驗證數據的完整性。常見的單向散列函數有MD5和SHA算法
散列函數的安全性:有兩種方法能夠攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度徹底依賴於算法生成的散列碼長度。Van Oorschot和Wiener曾經提出,花費1000萬美圓涉及一個被專門用來搜索MD5算法碰撞的機器,則平均24天內就能夠找到一個碰撞。2004年8月中國密碼學家王小云教授等首次公佈了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內便可找到MD5的碰撞。MD5已經唄完全攻破。數據庫
散列函數的安全性要求:安全
一、已知哈希函數的輸出,要求它的輸入是困難的,即已知c=Hash(m),求m是困難的。這代表函數應該具備單向性。
二、已知m,計算Hash(m)是容易的。這代表函數應該具備快速性。
三、已知,構造m2使Hash(m2)=c1是困難的。這代表函數應該具備抗碰撞性。
四、c=Hash(m),c的每一比特都與m的每一比特有關,並有高度敏感性。即每改變m的一比特,都將對c產生明顯影響。這代表函數應該具備雪崩性。
五、做爲一種數字簽名,還要求哈希函數除了信息m自身以外,應該基於發信方的祕密信息對信息m進行確認。
六、接受的輸入m數據沒有長度限制;對輸入任何長度的m數據可以生成該輸入報文固定長度的輸出。
生日攻擊:利用「兩個集合相交」問題的原理生成散列函數碰撞,達到目的的攻擊稱爲生日攻擊,也稱爲平方根攻擊。生日攻擊方法沒有利用Hash函數的結構和任何代數弱性質,它只依賴於消息摘要的長度,即hash值的長度。簡單來講,生日攻擊就是利用散列函數發生碰撞的可能性,進行n次嘗試直到找到一對碰撞的輸入。一個40比特長的消息摘要是很不安全的,大約一百萬次隨機Hash可至少以50%的機率找到一個碰撞。由於所需的安全散列長度愈來愈長,所以咱們可使用有限定義域上的散列函數(俗稱壓縮函數)經過迭代方式拓展爲具備無限定義域的散列函數。而最爲表明性的就Merkle-Damgard結構app
MD5原理:對MD5算法簡要的敘述能夠爲:MD5以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,通過了一系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。函數
SHA-1:SHA (Secure Hash Algorithm,譯做安全散列算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院(NIST) 發佈的一系列密碼散列函數。正式名稱爲 SHA 的家族第一個成員發佈於 1993年。然而人們給它取了一個非正式的名稱 SHA-0 以免與它的後繼者混淆。兩年以後, SHA-1,第一個 SHA 的後繼者發佈了。 另外還有四種變體,曾經發布以提高輸出的範圍和變動一些細微設計: SHA-224, SHA-256, SHA-384 和 SHA-512 (這些有時候也被稱作 SHA-2)。編碼