SHA-1 是什麼?為什麼不再安全?

最後更新:2025年2月3日
基礎概念

SHA-1(Secure Hash Algorithm 1)是一種雜湊演算法,由 美國國家安全局(NSA) 設計,並於 1995 年由 美國國家標準與技術研究院(NIST) 發布。

SHA-1 的作用是將任意長度的輸入數據轉換為 固定 160 位元(20 字節) 的雜湊值(Hash Value),通常以 40 個十六進位字元表示。例如:

  • 輸入:「hello」SHA-1 雜湊值f572d396fae9206628714fb2ce00f72e94f2258f
  • 輸入:「hello world」SHA-1 雜湊值2ef7bde608ce5404e97d5f042f95f89f1c232871

SHA-1 曾廣泛應用於數據完整性驗證、密碼儲存、SSL/TLS 加密、數字簽章等安全領域,但如今已被認為不安全,並被更強的雜湊演算法(如 SHA-256、SHA-512)取代。


SHA-1 的特性

  1. 固定輸出長度:無論輸入資料的長度是多少,SHA-1 產生的雜湊值長度始終為 160 位元(40 個十六進位字元)
  2. 單向性(不可逆):理論上無法從 SHA-1 雜湊值推回原始數據。
  3. 相同輸入產生相同輸出:相同的輸入,無論計算多少次,SHA-1 產生的雜湊值都是一樣的。
  4. 雪崩效應(Avalanche Effect):輸入的任何微小變化,會導致雜湊值完全不同。
  5. 抗碰撞性(已被破解):不同的輸入應該要產生不同的雜湊值,但 SHA-1 已經被證明可以產生相同的雜湊值(碰撞攻擊),因此安全性大幅降低。

SHA-1 為什麼不安全?

雖然 SHA-1 在設計時具有良好的安全性,但隨著計算能力的提升,研究人員已經發現多種方式來破解它,主要問題如下:

碰撞攻擊(Collision Attack)已被實證

碰撞攻擊指的是兩個不同的輸入能夠產生相同的 SHA-1 雜湊值,這使 SHA-1 無法保證數據的唯一性與完整性。

2017 年,Google 和荷蘭阿姆斯特丹大學的研究人員成功製造出兩個不同的 PDF 文件,但它們的 SHA-1 雜湊值完全相同,這項研究被稱為 SHAttered 攻擊

SHA-1 碰撞示範(Google SHAttered 攻擊):

文件 A  SHA-1:38762cf7f55934b34d179ae6a4c80cadccbb7f0a
文件 B  SHA-1:38762cf7f55934b34d179ae6a4c80cadccbb7f0a

這代表攻擊者可以製造一個與原始文件具有相同 SHA-1 值的惡意文件,並用於欺騙驗證系統,例如:

  • 偽造數字簽章,欺騙電子文件驗證系統
  • 竄改檔案(如軟體更新包),讓受害者下載被植入惡意代碼的文件

計算能力提升,破解 SHA-1 變得更容易

SHA-1 在設計時,碰撞攻擊的計算難度非常高,但如今隨著 GPU、FPGA 和雲端運算 的進步,攻擊變得更快、更便宜。

  • 2012 年,研究人員估計破解 SHA-1 需要 7,000,000 美元的運算成本
  • 2017 年,Google 透過 90 天內的運算 成功破解 SHA-1
  • 2020 年,研究顯示破解 SHA-1 的成本已降至 45,000 美元以下
  • 2022 年,攻擊成本更下降到 不到 1,000 美元,普通駭客也能利用現有工具來攻擊

這表示,SHA-1 已經無法抵抗現代計算能力的暴力破解,應立即停止使用。


SHA-1 與 MD5 的關係

  1. SHA-1 是 MD5 的改良版
    • MD5(Message Digest Algorithm 5)於 1992 年Ron Rivest 設計,主要用來生成固定長度的雜湊值,但後來發現它容易受到碰撞攻擊(Collision Attack)
    • 為了解決 MD5 的安全問題,美國國家安全局(NSA)在 1995 年 設計了 SHA-1,其主要目標是增強抗碰撞性,使得產生相同雜湊值的機率更低。
  2. SHA-1 與 MD5 的相似點
    • 都是雜湊演算法(Hash Algorithm),可以將輸入轉換為固定長度的數據指紋。
    • 都是單向函數(不可逆),理論上無法從雜湊值推回原始輸入。
    • 都有雪崩效應(Avalanche Effect),輸入稍微改變,雜湊值就會完全不同。
  3. SHA-1 相較於 MD5 的改進點
    • 更長的輸出長度
      • MD5 產生 128 位元(16 字節) 的雜湊值
      • SHA-1 產生 160 位元(20 字節) 的雜湊值
      • 更長的雜湊值讓 SHA-1 相較 MD5 更難被暴力破解
    • 更強的數學運算結構
      • SHA-1 採用更多的數學步驟來處理數據,比 MD5 更難產生碰撞

SHA-1 與 MD5 的比較

MD51992 年
SHA-11995 年
MD5Ron Rivest(RSA)
SHA-1NSA(美國國安局)
MD5128 位元(32 字元)
SHA-1160 位元(40 字元)
MD5
SHA-1稍微慢一點
MD5已破解,不安全
SHA-1已破解,不安全
MD52004 年被破解
SHA-12017 年被破解
MD5SHA-256、bcrypt
SHA-1SHA-256、SHA-512

SHA-1 和 MD5 現在都不安全

雖然 SHA-1 比 MD5 更安全,但現在計算能力提升,SHA-1 也已經不夠安全,兩者都已經被更強的雜湊演算法(如 SHA-256、SHA-512)取代。

如果你的系統仍在使用 MD5 或 SHA-1,建議立即升級為更安全的演算法,例如 SHA-256、bcrypt 或 Argon2,以避免資料遭到破解或竄改。


SHA-1 已被禁止使用

由於 SHA-1 的安全性問題,各大安全機構已經宣布停止使用 SHA-1:

  • 2011 年:NIST(美國國家標準技術研究院)建議改用 SHA-256 或 SHA-3
  • 2017 年:Google 發表 SHAttered 攻擊,證明 SHA-1 碰撞攻擊可行
  • 2018 年:微軟、Google、Mozilla 等停止支援 SHA-1 憑證
  • 2020 年:GitHub 宣布逐步淘汰 SHA-1
  • 2023 年:主要瀏覽器(Chrome、Firefox、Edge)完全拒絕 SHA-1 HTTPS 憑證

現在,SHA-1 已經不符合現代安全標準,所有系統應立即改用 SHA-256 或更強的演算法


SHA-1 的替代方案

由於 SHA-1 不再安全,建議改用以下更強的雜湊演算法:

輸出長度256 位元(64 字元)
安全性
適用範圍數據完整性驗證、區塊鏈
輸出長度512 位元(128 字元)
安全性更高
適用範圍高安全需求(如政府機構)
輸出長度可變長度
安全性非常高
適用範圍密碼儲存,防止暴力破解
輸出長度可變長度
安全性最安全
適用範圍密碼儲存,防止 GPU 攻擊

結論

SHA-1 曾經是安全領域的重要技術,但現在已經不安全,應該全面淘汰

目前,各大網路平台與安全機構已經禁止使用 SHA-1,並建議改用 SHA-256、SHA-512 或 bcrypt 來確保數據的安全性。

如果你的系統仍然依賴 SHA-1,應儘快進行升級,以防止資料被竄改或攻擊。