# 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為基礎原則所設計的,比特幣在生成地址時使用了該雜湊演算法。