我可以在 preseed 的 passwd/user-password-crypted 条目中使用哪些哈希算法?

我可以在 preseed 的 passwd/user-password-crypted 条目中使用哪些哈希算法?

当涉及passwd/user-password-crypted预置文件中的语句时,大多数示例都使用 MD5 哈希。例子:

# 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]

Debian 的附录 B. 使用预置自动安装

一些来源表明也可以使用 SHA-512:

尝试使用这样的哈希密码:

$ mkpasswd -m sha-512

[...]

然后在你的预置文件中:

d-i passwd/user-password-crypted password $6$ONf5M3F1u$bpljc9f1SPy1w4J2br[...]

无法通过 AskUbuntu 上的预置来自动创建用户

这比 MD5 稍好一些,但仍然不能很好地抵抗暴力破解和彩虹表。

我可以使用哪些其他算法?例如,PBKDF2 是否受支持,或者我是否受到 中使用的算法的限制/etc/shadow,即MD5、Blowfish、SHA-256 和 SHA-512

答案1

您可以使用 /etc/shadow 文件中支持的任何内容。预置文件中给出的字符串将被放入 /etc/shadow 中。要创建加盐密码以使其变得更加困难,只需使用 mkpasswd 和 salt 选项 (-S):

mkpasswd -m sha-512 -S $(pwgen -ns 16 1) mypassword
$6$bLyz7jpb8S8gOpkV$FkQSm9YZt6SaMQM7LPhjJw6DFF7uXW.3HDQO.H/HxB83AnFuOCBRhgCK9EkdjtG0AWduRcnc0fI/39BjmL8Ee1

在上面的命令中,盐是由生成的普世根

答案2

查看适当的部分debian 安装程序源代码我们可以看到它只是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

答案3

彩虹表和暴力破解在这里不相关。

sha-512 密码经过加盐处理。这意味着无论您拥有什么哈希值,密码都以盐值开头(在本例中为 ONf5M3F1u)。要生成彩虹表,您必须为所有以“ONf5M3F1u”开头的可输入字符串生成 sha-512 哈希值的完整列表。

假设您使用了理论哈希算法“CSUM-2”,该算法只是将字符相加并从最低有效位中生成 2 位哈希值。 CSUM-2 的彩虹表如下所示:

0 d
1 a
2 b
3 c

请注意,只有两个 LSB 相关,因此实际上有四种盐:d、a、b 和 c。

因此,想象一下密码“b”的这四个带有盐的哈希值。盐放在前面,因此您可以对“db”进行散列以得到“b”,或者对“ab”进行散列以得到“c”。

$-1$d$b
$-1$a$c
$-1$b$d
$-1$c$a

要使用彩虹表破解 CSUM-2,您需要四个单独的彩虹表,每个彩虹表有四个条目。

要使用上述九个字符的盐来破解 sha-512,您需要 62 个完整的彩虹表。足以容纳最多 9 个字母数字字符的 sha-512 彩虹表大小为 864GB;对于这种加盐,您需要 62 个,或者 52TB 的表。

请注意,2^512 远远超出了 9 个字符的密码所能提供的范围。有 1.3 x 10^154 哈希值和 1.35 x 10^19 9 字符字母数字密码。更长的密码意味着更大的密码空间、更多的条目和更大的表。它与盐的数量成线性乘积,并与盐的长度成指数乘积。

有人必须生成并存储所有这些表。

PBKDF2 只是执行多次计算;但是,PBKDF2 的输出始终是相同的,因此您将回到彩虹表来破解 PBKDF2,就像任何其他算法一样。

PAM也可以使用该rounds参数进行密钥拉伸;默认值为 5,000,最小值为 1,000。 rounds=65536每次登录尝试时都会运行 SHA-512 2^16 次。这会使暴力破解速度变慢,尽管预先计算的彩虹表仍然不在乎。如上所述,构建和存储彩虹表非常困难。

相关内容