Ars*_*nko 10 password hashsum preseed
当谈到passwd/user-password-crypted
preseed 文件中的语句时,大多数示例使用 MD5 哈希。例子:
Run Code Online (Sandbox Code Playgroud)# Normal user's password, either in clear text #d-i passwd/user-password password insecure #d-i passwd/user-password-again password insecure # or encrypted using an MD5 hash. #d-i passwd/user-password-crypted password [MD5 hash]
一些来源表明也可以使用 SHA-512:
尝试使用这样的散列密码:
Run Code Online (Sandbox Code Playgroud)$ mkpasswd -m sha-512
[...]
然后在您的预置文件中:
Run Code Online (Sandbox Code Playgroud)d-i passwd/user-password-crypted password $6$ONf5M3F1u$bpljc9f1SPy1w4J2br[...]
这比MD5略好,但仍然不能很好地抵抗蛮力和彩虹表。
我可以使用哪些其他算法?例如,被PBKDF2支持,还是只能由所使用的算法/etc/shadow
,即MD5,河豚,SHA-256和SHA-512?
小智 6
您可以使用 /etc/shadow 文件中支持的任何内容。preseed 文件中给出的字符串只是放入 /etc/shadow 中。要创建加盐密码以使其更加困难,只需使用带盐选项 (-S) 的 mkpasswd:
mkpasswd -m sha-512 -S $(pwgen -ns 16 1) mypassword
$6$bLyz7jpb8S8gOpkV$FkQSm9YZt6SaMQM7LPhjJw6DFF7uXW.3HDQO.H/HxB83AnFuOCBRhgCK9EkdjtG0AWduRcnc0fI/39BjmL8Ee1
Run Code Online (Sandbox Code Playgroud)
在上面的命令中,盐是由pwgen生成的。
查看debian-installer 源代码的相应部分,我们可以看到它只是usermod USER --password=CRYPTED-PASSWORD
在目标 chroot 内部调用。
Furtherusermod
的联机帮助页暗示该--password
选项接受“加密密码,由 crypt(3) 返回”。并且“密码将写入本地 /etc/passwd 或 /etc/shadow 文件中。”。这表明我们只能使用crypt(3)
手册页中描述的加密密码格式。
然而,我们并没有失去所有希望。从上述手册页中我们了解到,
crypt
加密密码字符串中实际上包含一个盐字段,格式为. 所以至少原则上它应该能够抵抗彩虹表。$hash_id$salt$hash
除了彩虹表攻击之外,我们还必须考虑暴力攻击。如果我们查看glibc 的实现,
crypt
我们会发现它实际上使用多轮 SHA-512 来实现密码拉伸,这并不完全不同,但不幸的是,它没有使用 PBKDF2 等标准方法。
crypt
此外,我们看到我们实际上可以通过使用加密密码中的附加字段( )来控制应用的哈希轮数$rounds=$
。查看mkpasswd(1)
手册页,我们发现这是作为
-R
选项公开的。使用此功能,我们可以显着提高默认的轮数 5000(请参阅ROUNDS_DEFAULT
源代码),在我的机器上,计算到 1000 万轮只需不到几毫秒,而需要几秒钟:
> mkpasswd -R 10000000 -m sha-512 mypassword
$6$rounds=10000000$Rq30Hdd.0LzWq3x$XRXHvd5MnIi5MD2H8Jtn5W0cjvq4siGtUgWUaETc4QZyvuR4iY0Af.DoNfj1E6SvoHaVotAEjIiOPS3GvwJjM0
Run Code Online (Sandbox Code Playgroud)