開發者工具 · SHA 雜湊計算器
為什麼不能將密碼儲存為純 SHA-256 雜湊值
· 為什麼它很重要
密碼 安全 密碼學
SHA-256 的設計速度很快,這正是您不想要的密碼。這篇文章解釋了為什麼速度是問題以及密碼雜湊函數的不同之處。
SHA-256 不是密碼儲存;這是快速雜湊。普通的 SHA-256 為攻擊者提供了相同的猜測速度,儘管它是一種加密強度較高的演演算法,但它並不適合。
開發人員實作登入系統並將密碼儲存為 SHA-256 雜湊值。該演演算法具有很強的加密性,並應用程式不使用鹽,從而保持程式碼簡單。當使用者登入時,應用程式會將提交的內容進行雜湊處理並將其與儲存的值進行比較。這種設計簡潔優雅,完全不適合密碼儲存。這不是一個理論上的問題;而是一個問題。這是身份驗證系統中最常見的嚴重錯誤。在您考慮攻擊者可以利用竊取的資料做什麼之前,該設計看起來是可以防禦的。
的缺陷並不在於 SHA-256 較弱。 SHA-256 是一種強大的加密演演算法,受到安全社群的信任,並在整個產業中用於完整性檢查和內容尋址。缺陷在於 SHA-256 速度很快,而快速與密碼所需的速度則相反。密碼雜湊不僅僅是任何加密原語;它是一種針對特定問題而設計的特定工具:防止猜測。速度是校驗和的一個特徵;對於密碼來說,這是一場災難。
快速是 SHA-256 的要點 — 完整性檢查需要速度,攻擊者進行猜測時獲得相同的速度
當 SHA-256 密碼雜湊值資料庫遭到破壞時,攻擊者無需反轉雜湊值。攻擊者建立字典:常見密碼,如「password」、「123456」、「hello」等等。每個候選者都使用 SHA-256 進行雜湊處理(計算上很簡單的操作),並根據被盜的資料庫進行檢查。攻擊者可以使用登入服務使用的相同快速原語計算候選 SHA-256 值,然後在沒有速率限制的情況下離線比較每個結果。確切的速率取決於硬體和實現,因此本文故意不做出每秒猜測或洩漏時間的宣告。
速度就是整個問題。 SHA-256 表示速度很快。這就是它的設計意圖。它可以讓您驗證下載校驗和、計算內容地址並建立 Merkle 樹,而無需等待。在這些應用中,速度是一個特點。對密碼來說,速度是一場災難。當密碼資料庫被盜並使用 SHA-256 進行雜湊處理時,攻擊者的猜測速度與合法伺服器的驗證速度相同。這種對稱性就是破壞密碼安全性的原因。合法伺服器和攻擊者都可以獲得快速通用摘要的好處;只有攻擊者可以在沒有應用程式登入控制的情況下離線重複它。
字典和彩虹表 - 針對無鹽雜湊值的預計算,以及鹽會改變什麼
這是預先計算字典變得實用的地方。攻擊者可以花一天的時間來計算 SHA-256 雜湊值,用於一千個最常見的密碼、Name1990 等常見模式或多種語言的整個字典。產生的表稱為彩虹表。根據預先計算的表格尋找被竊的 SHA-256 雜湊值是即時的。即使沒有預先計算的表,使用 GPU 加速的雜湊計算十億個猜測也是微不足道的。攻擊者的計算成本非常低,即使是弱密碼也會在幾分鐘內消失。
ToolAcre SHA 雜湊計算器直接示範了這個速度。貼上一段短文字,點擊 SHA-256 按鈕,結果立即出現。這個即時結果(您在雜湊計算器中所欣賞的屬性)正是讓普通 SHA-256 對於密碼來說無法防禦的屬性。攻擊者每次猜測都會得到相同的即時結果。對於校驗和和完整性檢查來說,這個速度是完美的。對於密碼來說,這對於安全性來說是致命的。
密碼雜湊函數添加了什麼 - bcrypt、scrypt、Argon2 和 PBKDF2 中的工作因素、記憶體硬度和每用戶鹽
salt 是在雜湊之前新增到密碼中的隨機值,因此每個使用者的 salt 都是不同的。即使兩個使用者俱有相同的密碼,他們也會散列到不同的值。這打破了預先計算的彩虹表;攻擊者必須為每個鹽獨立計算該表。透過獨立產生的每用戶鹽,一個預先計算的表格不再適用於每個帳戶。然而,鹽只會促使攻擊者在攻擊期間而不是事先計算表。如果雜湊仍然很快,攻擊者只需並行計算更多表,並繼續使用快速原語猜測每個帳戶。鹽是必要的,但還不夠。它可以防止受害者之間重複使用字典,但不會減慢攻擊者的核心操作:猜測。哈希的速度仍然是猜測的速度。
工作範例 — 與經過調整的密碼雜湊相比,識別通用密碼的 SHA-256 的速度有多快,定性描述
密碼雜湊函數採用不同的方法。 Bcrypt、scrypt、Argon2id 和 PBKDF2 專為密碼驗證而建構。它們都包含一個工作因素:一個使雜湊故意變得昂貴的參數。 Argon2 是最現代的;它調整 CPU 時間和記憶體消耗。 Bcrypt 使用可調整的成本因子,每次增量都會使工作量加倍。所有這些都包括內建鹽產生功能。這些工具在設計時考慮了攻擊者模型。工作因素至關重要。
密碼雜湊函數使配置的成本成為每次驗證的一部分。想要測試候選人的攻擊者還必須為每次猜測付出代價。具體時序無法在部署之間安全複製,這就是為什麼參數部分需要對實際生產等級的硬體進行基準測試。這種不對稱性正是密碼雜湊發揮作用的原因。工作因素從「進攻方優勢」轉變為「防守方優勢」。
遷移舊 SHA-256 表 — 包裝現有雜湊並在下次登入時重新哈希
工作比較仍然是定性的,因為此儲存庫不包含特定密碼函數或攻擊者的基準。通用密碼每次都會立即產生相同的明文 SHA-256,因此現有的字典條目可以透過相等性來識別它。調整後的密碼記錄包含其自己的鹽和成本參數,並需要為每個候選者配置工作。
這種對比確定了設計錯誤,但沒有承諾每秒的猜測。硬體、實作和所選參數決定時序。合理的結論是不變的:通用摘要沒有可調整的工作因素或記憶體成本,而專門選擇密碼雜湊函數來施加這些成本。
這不包括什麼 - 為特定密碼雜湊選擇參數,這取決於您的硬體和威脅模型
參數選擇是特意在該計算器和本文之外進行的。正確的設定取決於伺服器延遲預算、可用記憶體、並發性和當前的威脅模型,因此從不相關的部署中複製固定值將使安全控制變成民間傳說。在生產級硬體上對所選密碼功能進行基準測試,並在容量變更時重新存取它。
ToolAcre 無法執行該練習:其面板接受文字和 SHA 標識符,然後返回純摘要。它不公開鹽欄位、內存設定、迭代控製或密碼記錄格式。這種缺失是一個有用的邊界訊號,而不是透過在文字方塊中重複雜湊密碼來解決的缺失功能。
重點:即時結果是警告 — ToolAcre SHA 雜湊計算器顯示 SHA-256 的速度有多快,這就是為什麼它不能保存使用者的密碼
一直將密碼儲存為普通 SHA-256 的舊系統可以向前遷移,而無需所有使用者立即重設。該技術是「包裝」舊的雜湊值:取得 SHA-256 值並使用 Argon2 再次對其進行雜湊處理。當使用者下次登入時,系統會檢查舊的 SHA-256 是否符合;如果是,它會根據該結果計算 Argon2 並儲存包裝後的版本。下次使用者登入時,系統將直接針對 Argon2 進行驗證。遷移在正常登入流程中透明地進行。
這種包裝方法可確保已洩露的舊密碼現在受到工作因素的保護。擁有舊資料庫 SHA-256 雜湊值的攻擊者無法再簡單地破解它們;他們必須攻擊包裝版本,其中包括 Argon2 的成本。在使用者的正常登入流程中,遷移對使用者來說是透明的。每次登入都會創造一個增強雜湊值的機會,而不會破壞使用者體驗。選擇正確的工作因素取決於您的硬體和威脅模型。 Argon2 預設值是合理的:19 迭代、512 MB 記憶體和 1 Web 服務並行性。