为什么OpenWrt的root密码最大长度是8个字符?

为什么OpenWrt的root密码最大长度是8个字符?

当我尝试设置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

答案1

这是因为基于 DES 的加密(又称为“descrypt”)将密码截断为 8 个字节,并且仅检查前 8 个字节以进行密码验证。

这是对您的直接问题的回答,但这里有一些根据您的上下文暗示的一般建议:

  • 幸运的是,从我的阅读来看,MD5实际上/etc/login.defs是 md5crypt ($1$),虽然有点过时并被其作者声明为弃用,仍然远远优于基于 DES 的加密(和确实比原始的、无盐哈希(如纯 MD5)好得多!大多数无盐哈希可以在商用 GPU 上以每秒 10 ...十亿每秒)

  • 看起来SHA256(实际上是 sha256crypt) 和SHA512(实际上是 sha512crypt) 也在那里。我会选择其中之一。

  • 如果你将每个方案下的密码设置为password或 ,你可以通过视觉验证我的结论是否正确,即它们是 -crypt 变体(这里的例子取自hashcat 示例哈希,全部为“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 实际上比后者更能抵抗攻击)

答案2

我修改了它/etc/login.defs

PASS_MAX_LEN            8

问题已解决。


重要补充:

我改了上述参数之后,虽然可以设置大于8位的密码,但是还是无效,因为真正的密码只有前八位,不知道是不是我的问题。

我的最终解决方案是设置

# ENCRYPT_METHOD DES

ENCRYPT_METHOD MD5

/etc/login.defs

现在,我终于可以设置一个真正大于八位的root密码了。

相关内容