Linux

為什麼 OpenWrt 的 root 密碼最大長度是 8 個字元?

  • April 11, 2019

當我嘗試設置root密碼時:

root@OpenWrt:~# passwd
Changing password for root
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.

似乎最大長度為 8。如果我嘗試設置長於 8 的密碼,則只有前 8 個字元有效。如何設置更長的密碼root

我的 OpenWrt 版本:

Linux OpenWrt 4.14.108 #0 SMP Wed Mar 27 21:59:03 2019 x86_64 GNU/Linux

這是因為基於 DES 的 crypt(又名“descrypt”)將密碼截斷為 8 個字節,並且僅檢查前 8 個字節以進行密碼驗證。

這是您直接問題的答案,但這裡有一些您的上下文暗示的一般建議:

  • 幸運的是,根據我的閱讀,MD5in/etc/login.defs實際上是 md5crypt ( $ 1 $ ),雖然它的作者有點過時並宣布棄用,但仍然遠遠優於基於 DES 的 crypt(並且絕對比原始的、未加鹽的雜湊(如普通 MD5)好得多!大多數未加鹽的雜湊可以在商品 GPU 上以速率破解每秒數十億)
  • 看起來SHA256(actually sha256crypt) 和SHA512(actually sha512crypt) 也在那裡。我會選擇其中之一。
  • 如果您將密碼設置為password或在每個方案下設置密碼,您可以直覺地驗證我關於它們是 -crypt 變體的結論是否正確(此處的範例取自hashcat 範例 hashes,全部為 ‘hashcat’,一些包裝為可讀性):

不推薦 - 無鹽或傳統雜湊類型,對於密碼儲存來說太“快”(破解率):

MD5         - 8743b52063cd84097a65d1633f5c74f5
SHA256      - 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
SHA512      - 82a9dda829eb7f8ffe9fbe49e45d47d2dad9664fbb7adf72492e3c81ebd3e2 \
             9134d9bc12212bf83c6840f10e8246b9db54a4859b7ccd0123d86e5872c1e5082f
descrypt    - 48c/R8JAv757A

好的 - 比無鹽更好,沒有截斷,但不再足夠抵抗現代硬體上的蠻力:

md5crypt    - $1$28772684$iEwNOgGugqO9.bIz5sk8k/

更好 - 具有大鹽和工作因素的相對現代的雜湊:

sha256crypt - $5$rounds=5000$GX7BopJZJxPc/KEK$le16UF8I2Anb.rOrn22AUPWvzUETDGefUmAV8AZkGcD
sha512crypt - $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/

其中,只有 descrypt 在 8 處截斷。最後兩個是你最好的選擇。

(旁注:上面 md5crypt 和 sha512crypt 範例中的純數字​​鹽只是 hashcat 如何創建範例散列的副作用;真正的、健康的鹽通常來自更大的密鑰空間)。

另請注意,我僅列出該平台上 /etc/login.defs 支持的雜湊類型。對於一般用途,甚至 sha256crypt 和 sha512crypt 也已被取代 - 首先被 bcrypt 取代,然後被真正的抗並行攻擊散列(如 scrypt 和 Argon2 系列)取代。(但是請注意,對於應該在一秒鐘內完成的互動式登錄,bcrypt 實際上比後者更能抵抗攻擊)

引用自:https://serverfault.com/questions/962214