所有 Linux 发行版都使用相同的加密哈希函数吗?

Reg*_*ser 7 password

所有 Linux 发行版都使用相同的加密散列函数吗?

如果是,它是否与内核本身一起提供?

编辑:-我指的是主要用于存储用户登录密码的功能。

slm*_*slm 9

不,不,你的问题。

我会查看该crypt(3)函数以获取更多信息。来自man crypt(3):

GNU 扩展

此函数的 glibc2 版本具有以下附加功能。如果salt是一个字符串,以三个字符$1$开头,最多八个字符,可选以 结尾$,那么glibc crypt函数不使用DES机器,而是使用基于MD5的算法,输出最多34个字节,即,其中代表盐中最多 8 个字符,然后是从 set 中选择的 22 个字节。整个密钥在这里很重要(而不仅仅是前 8 个字节)。$1$&‹string›$‹string›$1$[a–zA–Z0–9./]

您可以检查您的 pam 设置以查看您使用的是 MD5 还是 DES:

$ egrep "password.*pam_unix.so" /etc/pam.d/system-auth
password    sufficient    pam_unix.so md5 shadow nis nullok try_first_pass use_authtok
Run Code Online (Sandbox Code Playgroud)

你可以在这个系统/etc/shadow文件中看到它也在使用 MD5:

root:$1$<DELETED PASSWORD HASH>:14245:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)

您将在/etc/shadow每种类型的散列中看到的代码:

  • 1 美元 – MD5
  • 2 美元 – 河豚
  • $2a – eksblowfish
  • 5 美元 – SHA-256
  • 6 美元 – SHA-512

在 Red Hat 发行版上,您可以使用authconfig命令更改此设置。

$ sudo authconfig --passalgo=sha512 --update
Run Code Online (Sandbox Code Playgroud)

参考


Gil*_*il' 5

请注意,密码散列函数是一种特殊类型的加密散列函数,不用于其他加密散列函数的用途。密码哈希函数需要很慢;通常,我们使用快速加密哈希函数。实际上,从技术上讲,密码散列函数不是散列函数,而是加盐密钥拉伸算法,采用两个输入(密码和盐),而散列函数采用单个输入(数据)。请参阅如何安全地散列密码?有关密码散列的更多信息。

由于历史原因,许多 unix 文档将密码散列称为“加密”,但这不是加密过程(您无法将散列解密回密码)。历史原因是在Unix早期,密码散列函数建立在DES算法之上,主要用于加密。

密码散列由标准库中名为crypt. (请注意,有一个名为 的传统 Unix 实用程序crypt,它是无关的;这个实用程序实际上是加密的。)内核对密码一无所知。(某些平台上的某些内核确实提供了加密库,以利用硬件加速器。)

历史crypt函数使用了基于 DES 的算法,这在当时还可以,但对于今天的计算机速度来说太弱了。如今,密码哈希函数由盐开头的字符表示:$1$, $5$, $6$, ... 这三个值(以及更多)是许多 unice(包括基于 Glibc 的 Linux 系统,实际上所有非-嵌入式和一些较大的嵌入式)。一些 Unix 变体提供了更多选择。嵌入式 Linux 系统可能不具备所有这些方法。

$1$基于 MD5,但迭代次数固定,因此不推荐使用。$5$并且$6分别基于 SHA2-256 和 SHA2-512 的可变迭代次数。如果您想从命令行计算一些密码哈希,请参阅如何在命令行上创建 SHA512 密码哈希。