Hash 演算法比較:MD5、SHA-1、SHA-256 及更多
加密雜湊函數是現代計算的基礎。它們用於驗證檔案完整性、保護密碼安全、驗證訊息,並支撐區塊鏈技術。然而,並非所有 Hash 演算法都一樣。本指南比較了最廣泛使用的演算法,幫助您做出正確選擇。
什麼是雜湊函數?
雜湊函數接受任意大小的輸入,並產生固定長度的輸出(即「摘要」或「雜湊值」)。好的雜湊函數具有三個關鍵特性:
- 確定性:相同的輸入永遠產生相同的輸出
- 雪崩效應:輸入的微小變化會完全改變輸出
- 單向性:從雜湊值反推出原始輸入在計算上是不可行的
這些特性使雜湊在資料完整性驗證和安全應用中極為重要。
演算法比較
| 演算法 | 輸出大小 | 速度 | 安全狀態 | 目前可用? |
|---|---|---|---|---|
| MD5 | 128 位元 | 非常快 | 已破解 | 僅限校驗碼 |
| SHA-1 | 160 位元 | 快 | 已破解 | 否 |
| SHA-256 | 256 位元 | 中等 | 安全 | 是 |
| SHA-384 | 384 位元 | 中等 | 安全 | 是 |
| SHA-512 | 512 位元 | 64 位元系統上快 | 安全 | 是 |
| SHA-3-256 | 256 位元 | 中等 | 安全 | 是 |
| BLAKE2b | 256-512 位元 | 非常快 | 安全 | 是 |
| BLAKE3 | 256 位元 | 極快 | 安全 | 是 |
MD5:已被破解的舊標準
MD5 由 Ronald Rivest 於 1991 年設計,產生 128 位元的雜湊值。在超過十年的時間裡,它是校驗碼和完整性驗證的預設選擇。
為什麼 MD5 已被破解:2004 年,研究人員展示了實際的碰撞攻擊——找到兩個不同的輸入產生相同的雜湊值。到 2008 年,研究人員利用 MD5 碰撞建立了偽造的 CA 憑證。如今,在消費級硬體上幾秒鐘內就能找到碰撞。
MD5 仍可接受的場景:非安全性的校驗碼,例如驗證檔案下載且不擔心被篡改的情況。對於任何與安全相關的用途,請完全避免使用 MD5。
SHA-1:已棄用但仍殘留
SHA-1 由 NSA 設計,於 1995 年發布,產生 160 位元的雜湊值。多年來它取代了 MD5 成為標準。
為什麼 SHA-1 已被破解:Google 和 CWI Amsterdam 於 2017 年展示了實際碰撞(即「SHAttered」攻擊)。主流瀏覽器在 2017 年停止支援 SHA-1 憑證。Git 最初使用 SHA-1 作為提交雜湊,目前正在過渡到 SHA-256。
目前狀態:已被棄用於所有安全用途。如果您在舊系統中遇到 SHA-1,請規劃遷移到 SHA-256 或 SHA-3 的路徑。
SHA-256:目前的標準
SHA-256 屬於 SHA-2 家族,由 NSA 設計,於 2001 年發布。它產生 256 位元的雜湊值,是目前最廣泛使用的安全雜湊演算法。
安全性:目前尚未發現針對 SHA-256 的實際攻擊。它提供 128 位元的碰撞抵抗力,在可預見的未來被認為是足夠的。
效能:SHA-256 比 MD5 和 SHA-1 慢,但這在用於密碼雜湊時其實是一個優勢(越慢 = 越難暴力破解)。在支援硬體加速(SHA-NI 指令集)的現代 CPU 上,效能表現優異。
SHA-256 的應用場景:
- TLS/SSL 憑證
- Bitcoin 挖礦
- 數位簽章
- 程式碼簽章
- 檔案完整性驗證
使用我們的 Hash 產生器立即產生 SHA-256 雜湊值。
SHA-3:替代標準
SHA-3 基於 Keccak 演算法,於 2012 年贏得 NIST 的雜湊函數競賽。它使用與 SHA-2 完全不同的內部結構(海綿結構)。
SHA-3 的重要性:如果數學突破使 SHA-2 受到威脅,SHA-3 提供了一個完全獨立的備案。其不同的設計意味著 SHA-2 的漏洞不太可能影響 SHA-3。
採用情況:由於 SHA-2 仍未被破解,SHA-3 的採用速度比預期緩慢。它在區塊鏈應用和深度防禦架構中作為次要雜湊函數的使用越來越多。
BLAKE2 與 BLAKE3:速度冠軍
BLAKE2(2012 年)和 BLAKE3(2020 年)是為效能而設計的現代雜湊函數,同時不犧牲安全性。
BLAKE3 亮點:
- 在現代 CPU 上比 MD5 更快
- 原生支援平行處理(隨 CPU 核心數擴展)
- 256 位元輸出
- 內建支援金鑰雜湊和金鑰衍生
對於速度至關重要且不受 NIST 標準約束的應用,BLAKE3 是極佳的選擇。
選擇正確的演算法
密碼雜湊
不要直接使用以上任何演算法。請使用專用的密碼雜湊函數:Argon2id(密碼雜湊競賽的優勝者)、bcrypt 或 scrypt。這些函數故意設計得緩慢且記憶體密集,以抵抗暴力攻擊。在我們的密碼安全指南中了解更多。
檔案完整性
SHA-256 是標準選擇。如果效能至關重要且您可以控制兩端,BLAKE3 更快且同樣安全。
數位簽章
SHA-256 或 SHA-384,取決於所需的安全等級。政府和金融應用通常要求 SHA-384 或 SHA-512。
校驗碼(非安全用途)
CRC32 或 xxHash 用於不需要安全性的高速場景。如果需要加密保證,SHA-256 是最低要求。
區塊鏈應用
SHA-256(Bitcoin)、Keccak-256(Ethereum)或 BLAKE2b(Zcash)。選擇通常取決於特定協議的要求。
雜湊碰撞解析
碰撞是指兩個不同的輸入產生相同的雜湊輸出。生日悖論意味著碰撞被發現的速度比您想像的快得多:
- 對於 128 位元的雜湊(MD5),碰撞大約需要 2^64 次運算
- 對於 256 位元的雜湊(SHA-256),碰撞大約需要 2^128 次運算
這種指數級的差異正是為什麼將雜湊長度加倍遠不止提供雙倍安全性的原因。
實際範例
以下是同一輸入在不同演算法下的結果:
Input: "Hello, World!"
MD5: 65a8e27d8879283831b664bd8b7f0ad4
SHA-1: 0a0a9f2a6772942557ab5355d76af442f8f65e01
SHA-256: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
使用我們的 Hash 產生器親自嘗試產生這些雜湊值。所有計算都在您的瀏覽器中完成——您的資料保持私密。
常見問題
SHA-256 能抵抗量子攻擊嗎?
SHA-256 對量子攻擊具有部分抵抗力。Grover 演算法可能將前像攻擊的有效安全性從 256 位元降低到 128 位元,但這仍被認為是安全的。對於碰撞抵抗力,量子電腦的優勢較小。後量子密碼學標準更關注加密和簽章,而非雜湊函數。
我應該使用 SHA-512 而非 SHA-256 來獲得更高的安全性嗎?
對於大多數應用,SHA-256 提供了足夠的安全性。由於其內部結構,SHA-512 在 64 位元處理器上實際上更快,因此基於效能考量它可以是不錯的選擇。額外的雜湊長度提供了更多的碰撞抵抗力,但這很少是決定性因素。