開發者工具 · SHA 雜湊計算器
為什麼 Web 加密為 SHA-512 提供 SHA-1 而不是 MD5 或 SHA-3
· 工作原理
密碼學 瀏覽器 API sha-256 JavaScript
瀏覽器的摘要 API 支援四種演演算法。這篇文章解釋了為什麼 MD5 被遺漏,為什麼 SHA-3 沒有被添加,以及這對於拒絕交付平台不提供的工具意味著什麼。
MD5 在哪裡? ——任何遷移遺留校驗和工作流程的人提出的第一個問題
瀏覽器的 Web Crypto API 剛好提供了四種摘要演演算法:SHA-1、SHA-256、SHA-384 和 SHA-512。如果您使用 ToolAcre SHA 雜湊計算器期待 MD5 或 SHA-3,您將找不到它們。這種特殊性並不是工具的限制;它反映了經過深思熟慮的平台選擇。了解為什麼包含這四個選項以及為什麼省略兩個流行的替代方案可以讓您充分了解瀏覽器 API 的設計方式。
每個主要瀏覽器都在安全來源上公開 crypto.subtle.digest。當您的 JavaScript 呼叫該方法時,它會傳遞到平台的加密實作 - 使用安全沙箱和效能優化執行的本機程式碼。提供的摘要演演算法由 W3C Web 加密工作組選擇,具有特定的優先順序:與現有安全標準的兼容性、跨加密庫的可用支援、成熟度以及 Web 平台的實際安全需求。
SubtleCrypto.digest 支援的四種演演算法 — SHA-1、SHA-256、SHA-384 與 SHA-512,僅此而已
ToolAcre 接受由digestBytes 强制执行的相同四个标识符:SHA-1、SHA-256、SHA-384 和SHA-512。在呼叫 Web Crypto 之前,無法辨識的名稱會被拒絕,測試套件專門透過 MD5 來確認該拒絕。因此,選擇器描述了經過測試的產品邊界,而不是對每個標準化摘要進行的調查。
SHA-1 並未提出所有四個等效建議。其結果物件帶有損壞的標誌,並介面重複遺留警告;其他三個是可用的 SHA-2 選擇。當相容性工具重現舊值而不鼓勵新的依賴時,可用性和適用性必須保持分離。
MD5;本文沒有加入被動標準的理由
MD5 是一種加密雜湊函數,可產生 128 位元摘要,使其比 SHA-256 更短且計算成本更低。幾十年來,它一直是校驗和和數位簽名的標準選擇。然而MD5的抗碰撞能力從根本上被打破了。在 2004 中,密碼學家示範了實際的衝突——兩個不同的輸入具有相同的摘要——並該演演算法已被學術工作徹底拆解。數學上的脆弱性是絕對且永久的。
W3C Web 加密規範刻意選擇不包含 MD5。推理很簡單:將損壞的演演算法交付給數百萬瀏覽器用戶將使其在新應用程式中的使用正常化,即使它應該只出現在舊版相容性場景中。如果應用程式確實需要 MD5 才能與舊系統進行互通,則該程式碼屬於伺服器端執行時,在該執行時可以理解和審核需求,而不是在瀏覽器中。讓損壞的演演算法可以方便地存取將為新系統帶來安全期望。
ToolAcre SHA 雜湊計算器也不提供 MD5 實作。就像它使用的平台 API 一樣,它拒絕讓損壞的演演算法方便地存取。如果您的應用程式絕對需要 MD5(在遺留 Git 系統之外很少見),則該實作屬於您自己的程式碼庫,並明確說明它是一個相容性填充程式。可訪問性創造期望,而損壞的演演算法不值得期望。
SHA-3 位於瀏覽器 API 和工具之外;它的採用歷史在儲存庫證據之外
SHA-3 由 NIST 在 2015 中標準化,並它在密碼學上是可靠的。它使用與 SHA-2 完全不同的結構,稱為海綿,它提供有趣的理論屬性和性能權衡,具體取決於您的硬體。在現代系統上,SHA-3 可能比 SHA-256 更快。然而,瀏覽器平台今天並沒有公開它,這種延遲反映了有關平台成熟度和採用速度的實際決策。
出貨延遲 SHA-3 反映了現實:Web Crypto 旨在涵蓋整個網路和 HTTPS 中最廣泛使用的演演算法/TLS. 在 API最終確定時,SHA-2(256、384、512)是新系統的壓倒性共識,並轉向SHA-3 的發生速度比從 MD5 或 SHA-1 移動的速度要慢得多。大多數應用程式還不需要 SHA-3 。擴展 API 並在每個瀏覽器和平台上進行測試的成本在發佈時的需求並不合理。
這不是永久拒絕。 Web Crypto API 可以持續發展。如果 SHA-3 採用加速,工作小組可以加入它。目前的集合代表了 Web Crypto 滿足平台即時安全需求所需的成熟且廣泛標準化的演演算法。瀏覽器 API 必須穩定且精心維護;在廣泛需求之前急於添加功能會在未來幾年造成維護負擔和相容性風險。
為什麼 SHA-1 仍然存在 - 遺留驗證需求,以及提供和推薦之間的區別
SHA-1 儘管已被破壞,但仍包含在 Web Crypto 中。這種違反直覺的選擇常常讓開發人員感到驚訝。此演演算法會產生 160 位元摘要,而針對 SHA-1 的衝突攻擊現在已經實用 - 可以製作兩個不同的檔案來共享相同的摘要。選擇前綴衝突允許攻擊者製作兩個在衝突時都有意義的文件,從而破壞簽名和證書。但它仍然保留在平台中。
SHA-1 保留在 Web Crypto 中的一個必要原因是:遺留相容性。 Git 物件識別碼是基於 SHA-1,雖然 Git 專案正在過渡到 SHA-256,但數百萬現有儲存庫、引用和建置系統仍然會發出 SHA-1 雜湊。來自舊系統的 TLS 證書指紋帶有 SHA-1 摘要。幾年前發布 HMAC-SHA1 簽章的 API 仍然需要驗證。這些已部署的系統必須經過驗證或遷移。該平台包括 SHA-1 以使必要的工作成為可能。
平台 API 包含 SHA-1,但我們清楚知道它的存在是為了相容性,而不是推薦。瀏覽器的 UI 標籤 SHA-1 附有警告。 ToolAcre SHA 雜湊計算器在 SHA-1 結果旁邊顯示“加密已損壞”,確保使用它的任何人都知道他們正在使用遺留材料。透明度至關重要;使用者絕不能將 SHA-1 相容性誤認為 SHA-1 認可。
如果相容性需要 MD5,請使用此工具以外經過審查的實現,並切勿將相容性誤認為是安全性
Web Crypto 中的四種演演算法與 TLS 密碼套件生態系統以及最重要的安全標準保持一致。 SHA-256 是通用雜湊的目前預設值,用於子資源完整性檢查、內容尋址和新安全系統。 SHA-512 在 64 位元硬體上速度更快,並提供更廣泛的摘要。 SHA-384 主要因其在 TLS 密碼套件中的使用而聞名。
SHA-1 是為了實現互通性,而不是因為任何人都應該用它啟動一個新系統。如果您要驗證現有的 SHA-1 校驗和、匹配舊證書指紋或複製 Git 提交 ID,ToolAcre 中的 SHA-1 可以讓您執行此操作。如果您正在設計一個新系統,SHA-256 是顯而易見的選擇。您選擇的演演算法表明您對安全模型的理解。
這不包括伺服器端執行時,它通常會公開更多的摘要演演算法
如果您的應用程式確實需要 MD5、SHA-3 或任何其他演演算法,那麼選擇很明確:將該程式碼保留在伺服器端執行時間中,並僅向瀏覽器公開最終結果。不要發布您自己的加密演演算法的 JavaScript 實作以供瀏覽器使用。瀏覽器的本機 Web Crypto 更快、更安全,並以手寫 JavaScript 函數無法比擬的方式進行審核。當平台提供你需要的東西時,委託給平台永遠是正確的選擇。
這甚至適用於「簡單」演演算法。自己編寫的 MD5 實作可能看起來無害,因為 MD5 無論如何都被破壞了,但被破壞的演演算法沒有等級——它們只是被破壞了。發布一個規範了在應用程式程式碼中實現加密的實踐。瀏覽器提供平台所需的內容;使用它所提供的東西。手動加密是 Web 應用程式中安全漏洞的最大來源,因為開發人員低估了其中的微妙之處和邊緣情況。
重點:限制是產品的一部分 — ToolAcre SHA 雜湊計算器提供了瀏覽器本機實作的四種演演算法,並記錄了邊界
ToolAcre SHA 雜湊計算器直接顯示了此約束:您可以準確地看到 Web Crypto 提供的四種演演算法,不多也不少。如果您貼上一個值並認為“我需要 MD5”,則該缺失是故意的。如果您需要它,則表示您的系統有一個需要仔細處理的遺留元件 - 正是專門的伺服器端遷移工具而不是瀏覽器實用程式的用途。該工具對其所做和不提供的內容的誠實性本身就是有價值的資訊。
Web 加密設計反映了數十年的加密實踐:在廣泛部署中經過標準化、審核和驗證的演演算法。 SHA-256 和 SHA-512 是合理的預設值。 SHA-384 具有 TLS 譜系。 SHA-1 之所以存在,是因為網路有 SHA-1 摘要,需要多年的驗證。 MD5 和 SHA-3 不存在,因為 MD5 已損壞,且 SHA-3 對平台還不是至關重要的。