服务器池的哈希(master + hostname)密码方案

信息安全 密码
2021-09-03 20:19:30

我管理着大约 20 多台 Linux 服务器,并且正在考虑使用类似于以下的 md5 方案来生成管理员密码:

echo 'masterpassword' 'serverhostname' | md5sum

使用上面的示例返回4db2430f9b5f788077fd36636002e391 。

我的问题是:鉴于我总是在命令前放置一个空格以将命令排除在我的 bash 历史记录之外,您是否看到此方案有任何令人兴奋的问题?

我不记得我在哪里读到过这种方式,但这听起来是个不错的主意,在我将其正式发布并将其添加到我的 DR 计划之前,我需要一些反馈。

注意:请记住,这只是一个生成密码的方案。例如,echo -n 'M4M@st3rPa$$W0rd' 'www.domain.com.1' | md5生成a7c2dc2a7a2a1d277353e1fb814f57f1哪个是实际密码。我面临的一个挑战是我从托管服务提供商那里获得帮助,在紧急情况下,我可能需要为他们提供对服务器的 ssh 访问权限,并且需要一种在旅途中轻松记住安全密码的方法。

4个回答

一些想法:

  • 使用允许您在需要更改密码时轻松地将密码“碰撞”为连续值的方案。如果您需要向某人提供您的服务器密码(在某些类型的紧急情况下确实会发生),那么您需要更改密码以撤销访问权限。不要阻止自己保留无法轻易更改的密码。

  • 不要在与服务器的日常交互中使用密码。SSH 密钥绝对更好,尤其是当您需要管理大量服务器时。了解如何使用 ssh 密钥代理(ssh-add在 *nix 和pageantWindows 上),它可以帮助您简化密钥管理,并且没有理由不加密您的私钥。

  • 另外,LastPass。与 ssh 和 root 密码无关,但如果您管理大量服务器,您可能会将大量密码放入浏览器。这是安全的,并且会降低您重复使用密码的动机。

作为一个实现说明,我只想指出您的哈希输入\n在末尾有一个隐含的,由echo. 因此,如果您曾经尝试在 Perl 中或使用其他工具复制密码,请记住这一点。交替:echo -n 'foo' 'bar' | md5sum也可以看看:echo $(</root/secret.txt) "hostname" | md5sum

  • 服务器主机名不是秘密
  • MD5 本质上受到了损害(https://en.wikipedia.org/wiki/MD5#Security)。不过,我不确定 MD5 的特定弱点是否可以在这种情况下被利用,因为它们主要是碰撞漏洞。

您尝试解决的问题(记住 20 多个 root 密码)可以使用以下例程之一更安全地解决:

  • 使用 ssh 密钥身份验证而不是密码(但请确保为您的密钥提供良好的密码);这不仅更安全,而且您还可以随时通过从服务器中删除公钥来撤销对任何密钥的访问。到目前为止,这是我能想到的最好的方法。
  • 生成随机密码(从 /dev/random 中提取一些字节,将其转换为密码材料)并将它们存储在您随身携带的加密文件中。具有良好密钥和密码短语的 GPG 加密应该可以解决问题;由于 GPG 默认解密为标准输出,因此意外将密码留在未加密文件或您的历史记录中的风险很小;它当然会保留在终端的行缓冲区中。显然,这意味着您需要在需要解密该文件时随身携带您的私钥。
  • 使用第三方单密码解决方案,例如 LastPass。但是,如果您信任第三方解决方案,这只是一种选择。

我看到的主要风险是这样的。“服务器主机名”(很可能)不是秘密信息,所以如果主密码被泄露,那么它们都是。

编辑:此外,您的“主密码”似乎不是随机的。你没有提到你有没有选择它的规则(比如长度、字符类型等)

如果您使用密码,则应使它们具有高熵并能抵抗字典和密码猜测攻击。最好的办法是在整个字符集上生成一个最大长度的随机密码,并遵循NIST关于创建高熵密码的指南。

我在这里看到的第一个“发光问题”是这个方案没有使用整个 ASCII 字符集。熵不如预期的好(请参阅密码强度)。

这直接导致了第二个问题。passwordmeter告诉我“1234”( ) 的哈希键e7df7cd2ca07f4f1ab415d457a6e1c13与“So Long, and Thanks For All the Fish”( ) 的哈希键强度相同8121c5d059fd0a23dc7a436c56085188因此,您的主密码可以很简单,例如出生日期或芯片卡 PIN 码,也可以很复杂,但不会增加熵。

编辑:

我理解批评者和反对票。对不起,我的帖子没有完成。误解是我的意思不是直接将哈希键用作密码,而是用作 TrueCrypt 卷或 GnuPG 的密码。例如,由于 TrueCrypt 使用 PBKDF-2 在内部存储密钥,因此攻击者应该不可能找到此密钥。另请注意,不可能预先计算和存储所有 MD5 和,即使不是前 2^64 个。MD5 只是一个例子;实际上,您宁愿使用 SHA-1 或 SHA-256。

另一方面,您(并且只有您)可以轻松地复制密钥。您甚至可以将纯密码提供给朋友——只要没有人知道您应用的算法/盐,密码应该是无用的。一个已经在互联网上列出的简单密码甚至可以保护您。