# 1. 概述
哈希算法是指對任意長度的明文,經由哈希函數可產生比較短的固定長度的哈希值。哈希函數沒有固定的公式,只要符合其思想的算法都可以稱為是哈希算法。產生的這個哈希值可以看作是明文的 "指紋" 或者 "摘要" ,一旦數據改變,哈希值就隨之改變。密碼學上的哈希算法能保證數據的完整性,使用哈希算法可以提高數據查詢的效率,以及保證數字簽名數據傳遞的安全。
# 2. 性質
- 對任意長度的明文,產生固定長度的哈希值;
- 對任意的明文$m$,通過哈希函數$H(m)$產生的哈希值$h$可通過軟件或硬件實現計算;
- 對任意的哈希值$h$,要反過來找到一個明文$x$與它對應= h$)在計算上是困難的;;
- 對一個明文$x_1$,要找到另一個明文$x_2$,使得他們具有相同的哈希值在計算上是困難的;(第二原像性,也稱為抗弱碰撞性);
- 要找到任意一對不同的明文$(x_1,x_2)$,使得他們具有相同的哈希值在計算上是不可行的。(抗碰撞性,也稱抗強碰撞性);
# 3. 算法 常見的Hash算法類型
- MD4
- MD5
- RIPEMD-160
- SHA-0、SHA-1
- SHA-2(SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)
- SHA-3(SHA-224、SHA-256、SHA-384、SHA-512、SHAKE128、SHAKE256)
# 4.MD4哈希加密算法
- MD4是麻省理工學院教授Ronald Rivest,也是RSA的三位作者之一,於1990年設計的一個哈希算法。其哈希值長度為128-bits,一般128-bits的MD4摘要被表示為32位的十六進制數字。MD4由於被發現存在嚴重的算法漏洞,後被1991年完善的MD5所取代。
- MD4對後來出現的MD5、SHA家族和RIPEMD等算法產生了積極的引導作用。
- MD4的算法是一種將消息填充成長度為512-bits大小的整數倍,再將消息按固定長度分組,將分組中的數據和寄存器中的數據經過一系列的計算之後輸出4個32-bits大小拼接起來的散列的算法。 # 5. MD5哈希加密算法
- MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用於確保信息傳輸完整一致。是計算機廣泛使用的散列算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。 將數據(如漢字)運算為另一固定長度值,是散列算法的基礎原理,MD5的前身有MD2、MD3和MD4。
- MD5比MD4算法實現起來更為複雜,並且運算速度要慢一點,但更安全。 - MD5是輸入不定長度信息按512-bits為一組進行分組處理,每一組又被劃分成16個32-bits子分組,經過一系列的處理之後,輸出由四個32-bits分組組成,最後聯合起來成為一個128-bits散列的算法。基本方式為,求餘、取餘、調整長度、與鏈接變量進行循環運算,得出結果。
- MD5一度被廣泛應用於安全領域。但是由於MD5的弱點被不斷髮現以及計算機能力不斷的提升,現在已經可以構造兩個具有相同MD5的信息,使本算法不再適合當前的安全環境。目前,MD5計算廣泛應用於錯誤檢查。例如在一些BitTorrent下載中,軟件通過計算MD5和檢驗下載到的碎片的完整性。
# 6. SHA-1哈希加密算法
- SHA-1在許多安全協議中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的散列函數)的後繼者。但SHA-1的安全性如今被密碼學家嚴重質疑。
- 2017年穀歌公司宣稱他們與其他公司合作共同創建了兩個有着相同的SHA-1值但內容不同的PDF文件,SHA-1已經不再視為可抵禦有充足計算資源的攻擊者。
- SHA-1輸入最大$2^{64}$為比特的消息,生成160-bits的散列值。
- SHA-1基於MD4哈希算法設計中使用的原理,但在安全性上具有更保守的設計。
# 7. SHA-2哈希加密算法
- SHA-224、SHA-256、SHA-384,和SHA-512並稱為SHA-2。
- 新的散列函數並沒有接受像SHA-1一樣的公眾密碼社區做詳細的檢驗,所以它們的密碼安全性還不被大家廣泛的信任。
- SHA-256是將原始數據分解成512-bits大小的塊,例如,消息M可被分解為n個塊,於是整個算法需要做的就是完成n次迭代,每次迭代需要進行64次加密循環,n次迭代的結果就是最終的哈希值,即256-bits的數字摘要。SHA-2算法計算過程和SHA-256相同,區別在於初始值和最終結果的選取不同。 - 雖然至今尚未出現對SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然相似,因此有些人開始發展其他替代的散列算法。
# 8. SHA-3哈希加密算法
- SHA-3,之前名為Keccak算法,是一個加密雜湊算法。
- SHA-3並不是要取代SHA-2,因為SHA-2目前並沒有出現明顯的弱點。
- 由於對MD5出現成功的破解,以及對SHA-0和SHA-1出現理論上破解的方法,NIST感覺需要一個與之前算法不同的,可替換的加密雜湊算法,也就是現在的SHA-3。
- 該算法整體結構基於密碼學中的海綿結構(sponge construction),它使用有限的狀態集合state,接收任何長度的輸入比特流,然後可以輸出任何長度的結果。海綿結構的詳細過程包括:填充,分塊,處理所有塊,提取信息。
# 9. RIPEMD-160哈希加密算法
- RIPEMD-160 是一個 160 位加密哈希函數。
- 它旨在用於替代 128 位哈希函數 MD4、MD5 和 RIPEMD。其中 RIPEMD 是在 EU 項目 RIPE(RACE Integrity Primitives Evaluation,1988-1992)的框架中開發的。
- RIPEMD是以MD4為基礎原則所設計的,比特幣在生成地址時使用了該哈希算法。