繁體中文

開發者工具 · SHA 雜湊計算器

從 SHA-0 到 SHA-3:NIST 的安全雜湊標準如何演變

· 背景

sha-256 密碼學 瀏覽器 API

從 SHA-0 到 SHA-1、SHA-2 系列和 SHA-3 的時間軸顯示了二十年的演變
原始 ToolAcre 向量圖

SHA-1、SHA-2 和 SHA-3 是三個具有不同起源的代。這篇文章追溯了從被撤回的 SHA-0 到 Keccak 競爭的安全哈希標準,並解釋了為什麼 SHA-2 仍然佔據主導地位。

數字代表什麼意思? — 為什麼 SHA-256 是 SHA-2 但 SHA-3 完全是另一回事

開發人員看到 SHA-1、SHA-256 和 SHA-3 並假設它們是線性進展。他們不是。這些數字在不同的上下文中意味著不同的東西,了解家族歷史可以解釋為什麼 SHA-256 是新應用程式的明智選擇,為什麼 SHA-1 儘管被廣泛部署但僅保留舊版,以及為什麼 SHA-3 是單獨的設計而不是演進。

當 NIST 首次發布安全雜湊函數時,他們稱之為 SHA,後來稱為 SHA-0,這個版本的壽命很短,以至於大多數開發人員從未聽說過它。由於從未公開披露的未指明的缺陷,SHA-0 在幾年內被撤回。這次撤回悄然發生,隨之而來的演演算法引發了命名混亂。 SHA-0 撤銷後,NIST 發布了 SHA-1,成為標準長達二十年。

此工具涵蓋 SHA-1 和 SHA-2;詳細的 SHA-0 歷史記錄位於儲存庫證據之外

SHA-1 是一個 160 位元雜湊函數,可產生 40 字元十六進位輸出。它基於 Merkle-Damgård 結構,其中壓縮函數逐塊處理輸入,將狀態向前連結。該設計在發佈時是健全的,多年來沒有實際的攻擊發生。然而,2005 年帶來了密碼分析的突破。由Xiaoyun Wang領導的團隊發布了對SHA-1的碰撞攻擊,表明使用比暴力方法更有效的技術找到具有相同散列的兩個不同訊息是可行的。

幾年後,在 2017 中,一個名為 SHAttered 的團隊示範了第一次實際碰撞,使用 GPU 叢集尋找兩個具有相同 SHA-1 雜湊值的不同 PDF 檔案。在 2020 中,後續論文顯示選擇前綴衝突(更危險的變體)是可以承受的。 SHA-1 不再只是弱;它壞了。對 SHA-1 中斷的回應是引入 SHA-2,這是一個由四個函數組成的系列:SHA-224、SHA-256、SHA-384 和 SHA-512。

SHA-2 — 基於相同結構的 2000 年代初期系列(224、256、384、512 以及後來的截斷 512/224 和 512/256)

這四個在不同的状態大小和不同的塊大小上執行,但它们使用與 SHA-1 相同的基本結構。 SHA-2 系列在 2001 上發布,比 SHA-1 重大突破早幾年,但直到 SHA-1 崩潰變得具體之後才被廣泛採用。 SHA-256 產生 256 位元雜湊值,現在是新應用程式的標準選擇。 SHA-512 產生 512 位元雜湊,並在 64 位元處理器上通常會更快,因為它在 64 位元字而不是 32 位元字上執行。

SHA-2 的命名約定是造成混亂的根源。這些函數稱為 SHA-256、SHA-384 和 SHA-512,它們都是 SHA-2 系列的一部分。當有人說 SHA-2 時,他們指的是設計理念和 Merkle-Damgård 結構,而不是單一演演算法。名稱中的數字是以位元為單位的輸出寬度,而不是版本方案。 SHA-256 不是 SHA-1 的更新;它是一種現代設計,使用相同的框架,但具有更好的安全特性。

儲存庫檔案示範了 SHA-1 碰撞,而無需重建被動理論歷史

在 SHA-1 和 SHA-2 使用的 Merkle–Damgård 結構中,壓縮函數逐塊處理輸入。狀態從一個區塊轉移到下一個區塊,最終狀態作為摘要輸出。 SHA-256 壓縮函數使用 32 位元操作和 256 位元狀態,因此它處理 512 位元區塊。 SHA-512 壓縮函數使用 64 位元操作和 512 位元狀態,因此它處理 1024 位元區塊。這些選擇會影響效能和頻寬 - SHA-512 通常更快,因為 64 位元算術是現代硬體上本機的。

新系統的 SHA-256 和 SHA-512 之間的決定通常是基於效能測試和空間限製而不是安全性,因為截至 2020 年代初期,兩者仍然是安全的。 ToolAcre SHA 雜湊計算器提供 SHA-256、SHA-384 和 SHA-512,當讀者並排比較摘要時,他們會看到 SHA-256(64 個十六進位字元)和 SHA-512(128 個十六進位字元)之間有四個字元的差異。

SHA-3 不在支援的 API 範圍內;儲存庫證據未斷言競爭歷史

到 2000 年代初,取代 SHA-1 的動機就很明確,因此 NIST 開始了 SHA-3 選擇過程。 NIST 沒有單獨設計替代方案,而是向密碼學研究界開放了競賽。目標是選擇一個與 Merkle-Damgård 結構根本不同的雜湊函數,以從多樣化的設計中獲得信心。多個團隊提交了提案,多年來,比賽最終選擇 Keccak 為獲勝者。 Keccak 是一種海綿結構,是一種構建雜湊函數的不同方式,以前在標準中從未使用過。

SHA-3 是 Keccak 的 NIST 標準化,在 2015 中最終確定。與演演算法系列 SHA-2 不同,SHA-3 通常被稱為單一演演算法,儘管它也有多個寬度。 SHA-3 尚未廣泛部署,考慮到它已成為標準近十年,這一點令人震驚。原因是 SHA-2 沒有被破壞。沒有緊迫的安全理由從 SHA-2 升級到 SHA-3。瀏覽器的 Web Crypto API 實作 SHA-1 和 SHA-2 但不實作 SHA-3,這就是 ToolAcre SHA 雜湊計算器不提供 SHA-3 的原因。

SHA-2 仍然是工具預設值;本文避免了不受支援的通用安全宣告

為什麼 SHA-2 仍然無所不在,這是雜湊演演算法選擇的核心問題。 SHA-2 沒有已知的實際衝突。硬體實現已經成熟。每個程式語言和平台都支援它。更改系統的雜湊演演算法具有破壞性:必須遷移或保留每個儲存的雜湊以進行驗證,必須更新每個整合點,並必須執行測試以確保新演演算法適用於每個下游系統。

對於 SHA-2 仍然安全的系統,這種中斷是不合理的。對於新系統和新協議,SHA-2 是合理的預設值。 ToolAcre SHA 雜湊計算器將 SHA-256 和 SHA-512 顯示在顯著位置,因為它們是新應用程式應該使用的內容。 SHA-1 被列為僅舊版。顯示 SHA-384 是為了完整性和特別需要的用例。

本文未涵蓋的內容 — Keccak 的內部結構,值得單獨發表一篇文章

目前哈希標準的未來尚不清楚。 SHA-3 是安全且成熟的,如果 SHA-2 被破壞,它可以提供替代方案。量子計算對目前所有雜湊函數構成長期威脅,但抗量子雜湊函數設計是一個開放的研究領域。 NIST 正在進行後量子密碼學競賽,選擇旨在抵抗量子攻擊的演演算法,但與公鑰系統相比,雜湊函數並不是該競賽的優先事項。

對於 2020 年代的實際應用,SHA-256 是「我應該使用哪個雜湊?」這個問題的答案。對於完整性驗證、內容尋址和指紋識別,SHA-256 是標準。對於需要更廣泛摘要的系統,SHA-512 在 64 位元硬體上通常更快。 SHA-384 在 TLS 密碼套件規格中最常見。 SHA-1 僅用於遺留驗證。 ToolAcre SHA 雜湊計算器提供所有四種 Web 加密演演算法,以便開發人員可以查看其輸出。

重點:三代同姓 — ToolAcre SHA 雜湊計算器涵蓋瀏覽器提供的 SHA-1 和 SHA-2 演演算法

了解 SHA 的歷史可以闡明為什麼數字和名稱意味著它們的用途,以及為什麼 20 世紀 90 年代和 2000 年代做出的選擇仍然決定著今天新應用程序的用途。 SHA-0 被悄悄撤回,SHA-1 被實際攻擊破壞,SHA-2 仍然安全,而 SHA-3 是為未來的穩健性而選擇的替代設計。新程式碼應使用 SHA-256 進行通用雜湊。舊系統仍然使用 SHA-1,與這些系統的互通性需要能夠計算 SHA-1 雜湊。

ToolAcre SHA 雜湊計算器體現了這個觀點:它提供 SHA-256 作為預設值,SHA-512 作為更廣泛的選項,SHA-384 滿足特定要求,以及 SHA-1 標記為舊版。這為開發人員提供了準確的工具和準確的標籤。瀏覽器的 Web Crypto 實作提供了這些演演算法,而 ToolAcre 直接使用該實作而不是傳送自訂程式碼。這個選擇反映了數十年的密碼學演變和當前的實踐狀態。