Aix:如何在 AIX /etc/security/passwd 上生成有效的 sha1/sha256/sha512 密码散列?

Aix: How to generate valid sha1/sha256/sha512 password hash on AIX /etc/security/passwd?

AIX 与其他 Unix 一样,仅存储用户密码的加盐哈希值。 在过去,它使用 DES 加密,然后是一个(略有不同版本的)MD5 加密,与您在 Linux 上找到的相同。

随着 AIX 的更新版本和 /etc/security/passwd 的使用,您可以使用新的 SHA1/SHA256/SHA512 哈希。它们看起来像这样(密码 "secret" 的哈希字符串结果示例):

- salted sha1   : {ssha1}12$tyiOfoE4WXucUfh/olYn48enIIKGOOs0ve/GE.k.sF
- salted ssha256: {ssha256}12$tyiOfoE4WXucUfh/$YDkcqbY5oKk4lwQ4pVKPy8o4MqcfVpp1ZxxvSfP0.wS
- salted ssha512: {ssha512}10$tyiOfoE4WXucUfh/$qaLbOhKx3fwIu93Hkh4Z89Vr.otLYEhRGN3b3SAZFD3mtxhqWZmY2iJKf0KB/5fuwlERv14pIN9h4XRAZtWH..

配置文件/etc/security/pwdalg.cfg说明{algo_name}后面的数字是"num_cost",我们可以得到哈希函数中使用的迭代次数为2 ^num_cost。

我需要从位于 /etc/security/passwd 后面的 Scala 应用程序生成有效的散列。

我尝试改编 commons-codec Sha2Crypt (https://commons.apache.org/proper/commons-codec/apidocs/src-html/org/apache/commons/codec/digest/Sha2Crypt.html) witch implements the official Sha-Crypt algorithm (https://www.akkadia.org/drepper/SHA-crypt.txt),但给出了错误的哈希值。

有人知道应该怎么做吗?

简短的回答是,md5 的应用程序是标准的 unix 实现,仅前缀不同({smd5} 代替“$1”,其他实现与 https://www.akkadia.org/drepper/SHA-crypt.txt。其实他们只保留了:

  • 散列的字节数(以及字符数):ssha1 为 20,ssha256 为 32,ssh512 为 64
  • base64编码table(这不是标准编码,但以“./012”等开头

改变的是:

  • 他们使用 PBKDF2 HMAC-(sha1, sha256, sha512) 代替 Sha-Crypt,
  • 他们使用不同的填充 table
  • 迭代次数,在 Unix 密码词汇表中称为“轮次”,不是在哈希字符串开头(在算法名称之后)找到的数字 N。迭代次数其实是2^N,N在/etc/security/pwdalg.cfg中称为“cost”

可以在 Rudder 的 AixPasswordHashAlgo.scala 此处找到有效的 Scala 实现:https://github.com/Normation/rudder/blob/master/webapp/sources/rudder/rudder-core/src/main/scala/com/normation/cfclerk/domain/AixPasswordHashAlgo.scala