如何从LDAP检索salt?

blk*_*p19 11 sha1 salt openldap ssha

我工作的组织使用PPolicy(OpenLDAP模块)来自动加密和散列密码.不幸的是,我无法访问运行OpenLDAP服务器的机器,所以我无法查看配置文件.从我所看到的,几乎所有东西似乎都使用默认设置进行设置.

我希望能够为特定用户检索salt.如果我查看用户的属性,userPassword是SSHA密码.我没有看到任何有关该特定用户的盐的信息.我最终查看了LDAP模式,我也没有看到任何关于盐的信息.

如果您猜测每个用户存储盐的位置,它会在哪里?我理解这是模糊的,可能不是很多信息,但我在OpenLDAP文档中找不到任何解释确切存储唯一盐的位置.也许之前配置过OpenLDAP服务器的人会知道默认位置在哪里.

谢谢.

Syo*_*yon 19

使用SSHA,通常将salt附加到SHA1哈希,然后整个事务是Base64编码(我从未见过没有以这种方式执行SSHA的LDAP).您应该能够通过查看userPassword属性来说明这一点.如果它的长度为28个字符,最后一个=,那么它只是哈希值.

如果Base64值为32个字符或更长,则它包含散列和salt.Base64解码该值并去掉前20个字节,这是SHA1哈希.剩下的字节是盐.

例:

                     Base64 encoded hash with salt
userPassword: {SSHA}MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0

Base64 decoded value
     SHA1 Hash      Salt
--------------------++++
123456789012345678901234
Run Code Online (Sandbox Code Playgroud)

编辑:经过双重检查,似乎有时支持可变长度的盐.更正了编码说明以解决此问题.

  • 实际上我认为它是`Base64Encode(SHA1(密码+盐)+盐)`(获得SHA1消化的串联在盐之前有密码(来自http://tools.ietf.org/id/draft-stroeder-hashed) -userpassword值-01.html)). (4认同)
  • 是的,但这不是盐的目的.使用salt有助于防止攻击者一次性使用彩虹表破解所有密码,或者只是同时破解多个相同的密码.如果您使用盐,攻击者必须使用自己的盐分别破解每个用户的密码. (2认同)