答案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 都会集成二进制md5sum
或sha1sum