SHA-1 雜湊計算

在瀏覽器中即時計算輸入字串的 SHA-1 雜湊值。SHA-1 生成 160 位雜湊值,但 2017 年 SHAttered 攻擊已實證碰撞,不建議用於新專案。

已複製!

SHA-1 雜湊值是什麼

SHA-1 是由任意長度的資料計算出160位元固定長度值的雜湊函數。輸出以40個十六進位字元表示,相同輸入永遠得到相同的值。本工具會在瀏覽器內即時計算所輸入字串的 SHA-1 雜湊值,輸入內容不會送往外部。

不過 SHA-1 已無法用於新的資安用途。因為2017年已實證出可由兩個不同檔案刻意製造相同雜湊值的攻擊。簽章、憑證、密碼保存請選用 SHA-256 以上。本工具的用途僅限於與既有系統所輸出的值相互核對,或確認演算法的行為。

SHA-1 雜湊值的計算步驟

  1. 輸入字串 輸入想雜湊化的字串。輸入的同時即會計算並顯示結果。
  2. 確認結果 會顯示40個十六進位字元。只要改動輸入中的一個字元,值便會完全不同。
  3. 複製並核對 可用複製按鈕放入剪貼簿,與既有的值相互比對確認。

用好本工具的小技巧

  • SHA-1 由 NSA 設計,1995 年被 NIST 標準化,輸出 160 位(40 個十六進位制字元)
  • 2017 年,Google 與 CWI 研究所通過"SHAttered"攻擊首次實證 PDF 檔案的 SHA-1 碰撞。
  • 主流瀏覽器已於 2017 年起將基於 SHA-1 的 TLS 證書標記為不受信任,Git 也在向 SHA-256 遷移。
  • git log 中可以看到 SHA-1 提交雜湊,這是 SHA-1 在現實中最常見的形式之一。
  • 新系統設計中請使用 SHA-256 或更高級別的演算法。

SHA-1 雜湊計算的實用場景

與既有系統的值相互核對

可確認是否與仍持續使用 SHA-1 的系統所輸出的值一致。可用於遷移作業中的驗證。

理解 Git 的雜湊值

可實際產生與提交ID相同的40字元格式來確認。有助於掌握 Git 所處理的是怎樣的值。

建立實作的測試資料

在實作雜湊處理時,可在此備妥可作為期望值使用的已知數值。

確認雜湊函數的性質

可實際觀察只要改動輸入中的一個字元、輸出便完全改變的情形。

與雜湊相關的術語

SHA-1
指產生160位元雜湊值的函數。1995年標準化,但現今安全性已被攻破。
碰撞
指兩筆不同資料產生相同雜湊值的狀態。SHA-1 已被實證可刻意製造出碰撞。
SHAttered
指2017年發表的 SHA-1 碰撞攻擊的名稱。當時實際製作出兩份具有相同雜湊值的 PDF。
十六進位表示法
指以0到F的符號表示數值的方法。SHA-1 的160位元以40個十六進位字元表現。
SHA-256
指產生256位元雜湊值的函數。現今仍被視為安全,新的用途應選用此者以上。

常見問題

不適合用於安全場景(數字簽名、證書、密碼儲存等)。2017 年 SHAttered 攻擊已實證碰撞,請改用 SHA-256 或更高級別的演算法。

不會。所有雜湊計算均在瀏覽器本地完成,輸入內容不會發送到任何伺服器。

SHA-1 輸出 160 位(40 個十六進位制字元),MD5 輸出 128 位(32 個十六進位制字元)。兩者均存在已知碰撞漏洞,均不適合用於安全目的。
工具君

閒話 ― SHAttered:以 9.22 京次計算實證的碰撞攻擊

2017 年,Google 與荷蘭 CWI 研究所合作,歷時約 2 年、動用 9.9 萬個 CPU 核心,成功生成了兩個內容不同但 SHA-1 雜湊完全相同的 PDF 檔案——這就是"SHAttered"攻擊。

此前,SHA-1 碰撞在理論上已被認為可行,但 SHAttered 首次將其付諸實踐,迫使各大主流服務加速廢棄 SHA-1。GitHub、Subversion 等程式碼託管平臺隨即宣佈了遷移計劃。

儘管如此,部分嵌入式裝置和老舊系統仍在使用 SHA-1。完全廢棄仍需時日,但在任何新規設計中使用 SHA-1 均不可接受。