密碼雜湊中的鹽與胡椒:防禦暴力破解的核心概念

為什麼單純的雜湊不足以保護密碼?

在現代網頁應用開發中,直接將使用者密碼以明文儲存是嚴重的資安漏洞。即便使用了 MD5 或 SHA-256 等雜湊演算法,若沒有額外的保護機制,駭客仍能透過「彩虹表(Rainbow Tables)」進行快速比對,輕易還原出原始密碼。單純的雜湊值在面對硬體運算能力大幅提升的今日,已經顯得不堪一擊。

鹽(Salt)的運作原理與重要性

「鹽」是一串隨機生成的字串,在進行雜湊運算前與使用者的密碼合併。其核心目的是讓相同的密碼在儲存時產生完全不同的雜湊值。即使兩位使用者設定了相同的密碼,只要資料庫中的鹽值不同,最終儲存的雜湊結果也會截然不同,這徹底消除了彩虹表攻擊的威脅。

專家建議:鹽值必須是唯一的,且建議針對每一位使用者個別產生。儲存時,鹽值通常與雜湊值一併存放於資料庫中,因為它不需要隱藏,只需確保其隨機性。

胡椒(Pepper)的額外防禦層

與鹽不同,「胡椒」是一種儲存在應用程式設定檔或環境變數中的秘密字串。它不會存放在資料庫中,因此即便資料庫遭到洩漏,駭客若沒有取得伺服器端的設定檔,也無法進行有效的離線破解。這為密碼儲存增加了最後一道防線。

常見密碼儲存方案比較

機制存放位置主要防禦目標安全性層級
純雜湊資料庫極低
加鹽 (Salt)資料庫彩虹表攻擊中等
加胡椒 (Pepper)伺服器環境變數資料庫洩漏後的暴力破解

如何正確實作密碼防護策略

在實作時,請確保使用如 Argon2、bcrypt 或 scrypt 這類具備「工作因子(Work Factor)」的演算法。這些演算法故意設計得較為緩慢,進一步限制了駭客使用 GPU 大規模嘗試破解的速度。結合鹽與胡椒的雙重防護,可以將系統的安全性提升到企業級標準。

維持系統安全性的長期維護

資安防護並非一勞永逸。隨著運算能力的演進,過去被認為安全的演算法可能會過時。建議定期審查系統的雜湊策略,並確保所有的加密金鑰與胡椒值都有輪替機制,以面對未來可能出現的計算威脅。