Linux 存储用户密码时使用什么密钥?

信息安全 加密 密码 linux
2021-08-13 16:57:56

Linux 通常将用户名和密码哈希存储在 /etc/passwd 或 /etc/shadow 中。

现在假设我有一个旧的 CentOS 发行版,我想尝试恢复用 DES 加密的用户密码(它在学校的合法学习环境中),我想我需要一个明文和一个使用相同密钥加密的密码我的未知密码,破解所述密钥,然后解密为所述用户存储的密码(对吗?)。

现在,我的问题是,Linux 在创建用户时如何/何时生成密钥?如果我刚刚创建了一个新用户,我可以假设以前的密钥是相同的吗?如果是这样,系统使用的密钥是否可以恢复?

3个回答

密码没有加密,它们是散列的。从哈希中推导出原始密码在数学上是不可能的。验证是通过对用户输入的密码进行哈希处理并将其与保险库中的密码进行比较来完成的。如果它们匹配,则用户通过身份验证并且可以登录。

在基于 DES 的方案中,加盐密码是一个密钥,明文全为零,因此它不是加密,因为交换了密钥和消息角色。

您可以从 Wiki 或 crypt() 手册页开始阅读有关 crypt() 函数的更多信息:

http://en.wikipedia.org/wiki/Crypt_%28Unix%29

http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html

默认情况下,Linux 使用 SHA512(以 $6$ 开头的散列密码)来散列用户密码。

crypt() 支持以下哈希算法:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

要默认更改 Linux 哈希算法,您应该在 /etc/login.defs 文件中编辑ENCRYPT_METHOD变量,或者您可以使用 authconfig 程序。

暴力破解是破解密码哈希的唯一方法。如果您正在寻找破解工具,请查看JohnTheRipperoclhashcat