開發者工具 · SHA 雜湊計算器
加密雜湊與校驗和:CRC32 和 xxHash 不能保證什麼
· 背景
sha-256 密碼學 安全
CRC32、FNV 和 xxHash 也是雜湊值,但它們不會對對手做出任何承諾。這篇文章解釋了加密雜湊與校驗和的區別以及如何根據用例進行選擇。
哪個雜湊適合哪個作業? ——速度與對抗安全之間的選擇
雜湊函數分為三類:用於偵測意外錯誤的校驗和、用於分發和效能的非加密雜湊以及用於安全的加密雜湊。每個類別在速度和摘要大小方面都有不同的保證和不同的權衡。像 CRC32 這樣的校驗和快速且短(4 位元組,8 十六進位),但無法防止故意修改。像 xxHash 或 MurmurHash 這樣的非加密雜湊也很快,對於哈希表和資料分發很有用,但無法針對想要引起衝突的對手提供保護。像 SHA-256 這樣的加密雜湊速度較慢,並會產生更長的摘要(32 位元組、64 十六進位字元),但它提供原像抵抗和碰撞抵抗 - 防止對手攻擊的安全屬性。
為您的用例選擇錯誤的雜湊函數是一個常見的安全錯誤。使用CRC32驗證來自不可信來源的檔案下載是無效的;攻擊者可以輕鬆修改該檔案並重新計算 CRC32。在高頻雜湊表中使用 SHA-256 作為快速雜湊函數是浪費的; CRC32 或快速非加密雜湊就足夠了,而且更便宜。
意外錯誤的校驗和 — CRC 用於偵測傳輸中位元翻轉的設計
校驗和設計用於傳輸或儲存期間的錯誤檢測,其中錯誤被假定為隨機和偶然的。 CRC(循環冗餘校驗)最初設計用於偵測通訊中的位元翻轉。 CRC32 產生 32 位元摘要。如果訊框在傳輸過程中因隨機位元翻轉而損壞,則 CRC32 幾乎肯定會發生變化,從而警告接收器請求重傳。 CRC最多可以偵測一定數量的位元錯誤,取決於多項式;對於最常見的用例,可以可靠地偵測單一位元翻轉或突發的幾個位元翻轉。
CRC 是確定性的,但不是加密的。給定一個檔案及其 CRC32,攻擊者可以修改該檔案並重新計算 CRC32 以符合預期值。對於了解 CRC 多項式的對手來說,製造衝突很簡單。 CRC 從來沒有打算抵制故意修改;它純粹是為了意外錯誤檢測。 ZIP 檔案和 JPEG 檔案等歷史系統使用 CRC 來實現此目的。現代協定使用 CRC 在加密或經過身份驗證的通道中進行快速錯誤檢測,而不是作為獨立的完整性檢查。
用於分發的非加密雜湊 — 雜湊表和分區中的 FNV、MurmurHash 和 xxHash
FNV-1a、MurmurHash 和 xxHash 等非加密雜湊旨在提高雜湊表和資料分區的速度和一致性。它們具有非常低的延遲,適用於需要跨伺服器或儲存桶分區資料而不關心安全屬性的情況。如果您正在建立快取並需要將鍵對應到儲存桶編號,則快速雜湊是合適的。 MurmurHash 專為哈希表使用而設計,在大多數硬體上比 SHA 更快。 xxHash 較新,針對具有大型快取和向量化的現代 CPU 進行了最佳化。
這些雜湊值不是加密的,因為它們不能抵抗原像攻擊(查找產生特定摘要的輸入)或衝突攻擊(查找產生相同摘要的兩個不同輸入)。攻擊者可以計算雜湊演演算法並找到發生衝突或產生目標輸出的輸入。在受信任的環境(所有節點都在您的控制之下的叢集)中,這是可以接受的。如果不受信任的使用者可以控制輸入,則非加密雜湊很容易受到衝突攻擊,從而降低效能(雜湊表最壞的情況是所有鍵衝突時的線性搜尋)或產生其他副作用。
加密雜湊添加了什麼 - 針對故意攻擊者的原像和碰撞抵抗
諸如 SHA-256、SHA-384 和 SHA-512 之類的加密雜湊提供原像抵抗:給定一個摘要,在計算上無法找到任何產生該摘要的輸入。它們還提供抗碰撞性:在計算上不可能找到產生相同摘要的兩個不同輸入。這些屬性可以防止攻擊者偽造下載、建立虛假憑證或竄改訊息。代價是速度:在大多數硬體上,SHA-256 比 CRC32 慢,比 xxHash 慢。
SHA-1 已被加密破壞(衝突是實際的),不應用於新的安全目的,但仍會計算它以實現舊版相容性。 SHA-256、SHA-384 和 SHA-512 仍然很強大,並是加密雜湊的標準選擇。 SHA-2 中的「2」表示 SHA 演演算法的第二個系列(第一個是原始的 SHA-1;SHA-3 是較新的系列,但很少用於此目的)。
加密雜湊添加對抗性屬性;本文避免了不受支援的相對速度宣告
將五個場景與正確的雜湊族配對:首先,透過使用 AES 加密的可靠通道傳輸網路訊框:CRC32 是合適的。加密可防止修改,CRC 可偵測意外損壞。其次,用於負載平衡的雜湊表或一致性雜湊:像 xxHash 這樣的非加密雜湊是合適的。速度很重要,環境值得信賴。第三,驗證來自不受信任來源的下載完整性:需要SHA-256。攻擊者可以修改檔案和校驗和,但不能修改加密雜湊而不破壞 SHA-256。
第四,數位簽章和憑證:SHA-256 是必要的,與 RSA 或 ECDSA 等非對稱演演算法結合。簽名證明簽章後雜湊值沒有被修改。第五,對使用者上傳的檔案進行重複資料刪除:需要SHA-256,因為使用者可能會故意上傳旨在與非加密雜湊中的現有檔案發生衝突的檔案。如果基於xxHash的重複資料刪除,攻擊者可以上傳與另一個檔案具有相同哈希但內容不同的檔案,導致系統錯誤地丟棄該上傳。
工作範例 - 將五個場景(網路框架、雜湊映射、下載驗證、簽章、使用者上傳的重複資料刪除)配對到正確的系列
為每個用例選擇加密雜湊的成本是效能開銷。 SHA-256 比 CRC 慢,比 xxHash 慢。在熱循環(一段每秒執行數百萬次的程式碼)中,開銷是顯而易見的。在設定階段或批次操作中,它可以忽略不計。決策框架是:對手是否有動機引起碰撞?如果是,請使用 SHA-256。如果不是,而且速度很重要,請使用更快的雜湊值。如果安全性比速度更重要,請無論如何使用 SHA-256。
一個常見的錯誤是使用 MD5,這是一種較舊的加密雜湊,現在已被破壞。 MD5 是在 1992 中設計的,衝突在 2004 中進行了示範。將 MD5 用於任何安全目的都是不安全的。有時會在遺留系統和速度優先的情況下看到這種情況,但如今 MD5 並不是正確的選擇:如果您需要速度,請使用 xxHash;如果您需要速度,請使用 xxHash;如果您需要安全性,請使用 SHA-256。切勿使用 MD5。
場景映射保持定性,因為吞吐量和衝突行為需要特定於實現的證據
密碼雜湊是第四類,與校驗和和通用加密雜湊不同。不要使用 SHA-256 對密碼進行雜湊處理。相反,請使用 bcrypt、scrypt 或 Argon2 等密碼雜湊函數,這些函數故意速度較慢並包含鹽。像 SHA-256 這樣的快速加密雜湊使得密碼猜測變得很便宜:攻擊者每秒可以嘗試數百萬次猜測。密碼雜湊函數的設計目的是使每次猜測都消耗大量的 CPU 和內存,因此猜測強密碼仍然需要比任何攻擊者等待的時間更長的時間。密碼雜湊是一種特殊的用例,有其自己的要求。
ToolAcre SHA 雜湊計算器不支援密碼哈希,故意不提供 MD5、自訂參數和快速雜湊。它是計算標準 SHA 摘要以進行驗證和完整性檢查的工具,而不是用於身份驗證或密碼儲存。
重點:有對手或沒有對手 — 當有人可能篡改資料時,請使用 ToolAcre SHA 雜湊計算器
雜湊演演算法的選擇是影響整個系統效能和安全性的基本決策。摘要的可信度取決於產生它的演演算法。如果您選擇 CRC32 進行檔案驗證,摘要不會提供針對故意修改的保護。如果為雜湊表選擇 SHA-256,則會浪費資源。了解每個類別的屬性和權衡可以讓您做出正確的選擇。
ToolAcre SHA 雜湊計算器提供 SHA-1 到 SHA-512,涵蓋了對大多數用例而言重要的加密雜湊值。它不提供 CRC32、xxHash 或 MD5,因為它們在特定環境中都是正確的選擇(CRC 用於受信任通道中的錯誤檢測,xxHash 用於受控環境中的性能,MD5 不提供任何內容),並提供它們而不強調何時使用它們會鼓勵錯誤。此計算器用於計算標準加密摘要。如果需要這些雜湊值,請使用命令列和 `crc32`、`xxh64` 或等效工具。對於下載驗證、憑證指紋、git 提交以及對手可能篡改資料的類似用例,請透過 ToolAcre SHA 雜湊計算器取得 SHA-256。