WordPress密碼安全和散列

已發表: 2017-11-10

密碼是一種與用戶或進程綁定的身份驗證形式。 它們用於根據計算機系統或資源驗證用戶或進程的身份。 在當今超連接、物聯網設備和移動設備的現代網絡中,密碼安全是一個比以往任何時候都更加嚴肅的話題。 密碼數據庫洩露時有發生,LinkedIn、Tumblr 和雅虎等大公司都受到影響。 MacKeeper Security 的 Bob Diachenko 在今年早些時候寫了一篇關於在互聯網上自由浮動的巨大 5.6 億電子郵件/密碼列表!

因此,在本文中,我們將討論與密碼和 WordPress 相關的三件事:

  1. 強大的密碼生成和管理。
  2. WordPress 如何進行密碼散列。
  3. 實現您自己的密碼哈希。

弱密碼和強密碼

密碼強度(就暴力破解的複雜性而言)是一個備受爭議的話題,隨著個人可以隨時使用更強大的計算資源,密碼強度的概念在過去幾十年中已在很大程度上被重新定義。 世界著名的安全專家 Bruce Schneier 寫了一篇很棒的文章,討論密碼安全以及如何選擇安全密碼。

在談論密碼強度時,必須包括上下文和威脅級別:

當攻擊者試圖猜測您的 WordPress 密碼時,與他或她已經危及您的安全並有權訪問整個散列密碼列表相比,這是不同的,而且要困難得多。

在第一種情況下,攻擊者會因為短時間內登錄嘗試次數過多而迅速被身份驗證服務阻止。 通常,攻擊者通過不同於暴力破解的其他方式發現密碼,例如網絡釣魚、惡意軟件等。 但是,如果目標使用日期、姓名/姓氏等相對公開的信息選擇了密碼,那麼攻擊者就更容易猜到它。

在第二種情況下,如果攻擊者可以訪問密碼文件,這可能只是時間問題,特別是如果使用的哈希函數是 MD5。 很久以前它就被破壞並被證明是不安全的。 攻擊者可以使用現代硬件(如 GPU 板)與預先計算的“彩虹”表相結合,在很短的時間內解密整個密碼文件。 此外,在某些極端情況下,所有用戶的密碼都以“明文”形式存儲在數據庫中。 在這兩種情況下,您的密碼“強度”都會失效。

如何生成和存儲強密碼

最好將密碼生成和管理留給您信任的計算機,而不是嘗試定期考慮強密碼。 你是人類,不可避免地會犯錯並選擇計算機認為是弱選擇的東西。

使用密碼管理器為每項服務生成和存儲密碼是高效且威脅最小的。 雖然將所有密碼保存在一個地方的想法可能會令人不安,但這實際上是一個優點:通過知道所有密碼都在一個地方,您可以更輕鬆地保護它們。 不再使用隨機的紙片或您可以輕鬆記住但很容易猜到的弱密碼的排列。 此外,密碼管理器可以幫助您輕鬆生成強密碼。

最受歡迎(也最昂貴)的選擇是 1Password,但您可以嘗試使用操作系統中提供的那個(例如 Apple 的 iCloud KeyChain)或使用開源多平台解決方案,例如 KeePass。

使用 Pressidium 託管您的網站

60 天退款保證

查看我們的計劃

WordPress密碼哈希

密碼散列是一種將明文密碼傳遞給散列函數並轉換為長字母數字值的技術。 WordPress 使用它來將它們存儲在數據庫中,防止窺探者直接讀取 WordPress 密碼。 當您登錄 WordPress 並發送密碼時,它會計算哈希值並將其與數據庫中的哈希值進行比較。 如果相同,則授予您訪問權限,否則,您將被拒絕。 此方法有效,因為特定文本字符串(在本例中為 WordPress 密碼)將始終​​生成相同的哈希值。 由於哈希值無法轉換回原始文本,WordPress 只能知道您輸入了正確的密碼,前提是您提供的密碼的哈希值與存儲在數據庫中的密碼相同。

默認情況下,WordPress wp_hash_password()函數使用 8-pass MD5 算法來生成哈希。 然而 MD5 已經成功破解,它結合了現代硬件和一種稱為彩虹表的技術,該技術保存了大量的預計算值。 這些可以幫助攻擊者在一個現代 GPU 上每秒嘗試數十億次組合。

實現您自己的 WordPress 密碼哈希

您可以(並且應該)通過將元組 (16, FALSE) 傳遞給實例化中的 PasswordHash 對象來選擇不同的實現,例如 Bcrypt。 wp_hash_password()wp_set_password()兩個函數都是可插入的,因此您可以提供自己的實現。 它們可以在 wp-includes/pluggable.php 下找到。

Roots.io(Trellis、Bedrock 和 Sage 樣板 WordPress 系統背後的人)還發布了一個 WordPress 插件,該插件為默認的 WordPress 哈希函數實現了 bcrypt 功能。

結論

為了確保您使用強密碼並經常更改它們,最好使用密碼管理器。 這有助於將您的所有密碼整理在一個地方,並在需要更改密碼時提醒您。 當涉及到密碼散列時,最好使用像 SHA-2 或 Bcrypt 這樣的加密安全算法,而不是回退到 WordPress 的默認值。 最好避免滾動您自己的哈希函數,因為一個錯誤可能會引入安全問題。