理解/etc/shadow中的SHA512哈希
在RHEL-8.10系统中,当/etc/login.defs配置了ENCRYPT_METHOD SHA512时,为本地ron账户设置密码后,在/etc/shadow文件中会出现如下条目:
|
|
哈希不匹配的原因
当尝试使用在线工具(如randommer.io)复制此哈希时,输入密码"ron"和盐值"NbmOz0kL4eKjJbwi"后,得到的结果是:
|
|
这种差异主要由两个原因造成:
- 编码格式不同:
/etc/shadow文件使用Base64编码,而在线工具返回十六进制格式 - 算法差异:shadow文件中的哈希不是普通的SHA512,而是sha512crypt算法
sha512crypt算法详解
sha512crypt不是简单的SHA512哈希,而是多次迭代SHA512的专用算法,旨在抵抗暴力破解攻击。其原理类似于PBKDF2-SHA512。
正确生成哈希的方法
使用C语言
|
|
输出结果与shadow文件中的哈希完全一致。
使用Perl
|
|
使用OpenSSL命令行工具
|
|
修改迭代次数
可以通过指定轮数来修改哈希计算的强度:
|
|
安全注意事项
虽然手动验证哈希有助于理解密码存储机制,但在实际应用中应使用PAM(可插拔认证模块)进行密码验证操作。直接操作shadow文件可能存在安全风险。
sha512crypt算法相比普通SHA512提供了更好的安全性,但现代系统更推荐使用Bcrypt($2b$)或Yescrypt($y$)等更强的哈希算法。