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

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

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

如果是,内核本身是否提供了它?

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

答案1

对你的问题不。

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

GNU 扩展

该函数的 glibc2 版本具有以下附加功能。如果salt是一个以三个字符开头$1$,最多八个字符,并可选地以 结尾的字符串$,则glibc crypt函数不使用DES机器,而是使用基于MD5的算法,最多输出34个字节,即,其中代表 salt 中最多 8 个字符,后跟从集合 中选择的 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

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

root:$1$<DELETED PASSWORD HASH>:14245:0:99999:7:::

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

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

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

$ sudo authconfig --passalgo=sha512 --update

参考

答案2

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

由于历史原因,许多 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 密码哈希值如果您想从命令行计算一些密码哈希值。

答案3

不,它不是由内核提供的。根据您使用的版本、发行版和unix,您会发现使用不同的哈希编码算法(我假设您的意思主要是存储密码)。
通过以 root 身份查看该/etc/shadow文件,您将能够看到您的 Linux 上使用了哪个哈希值。

如果你想用哈希来签署某些东西,大多数 Unices 都会集成二进制md5sumsha1sum

相关内容