LDAP中userPassword属性工作原理及SSHA盐值获取疑问
LDAP SSHA密码验证的盐值问题
- 核心结论:盐值就存在
userPassword属性的存储值里,不需要单独存储或传递
SSHA的存储格式是固定规则:{SSHA}前缀后跟着一段Base64编码字符串,这段字符串是明文密码加盐值的SHA-1哈希结果与随机盐值直接拼接后,再做Base64编码的产物。
实际验证流程是这样的:
- 用户输入明文密码后,应用(或LDAP服务器)从用户条目中取出
userPassword的值,比如{SSHA}Xr4ilOzQ4PCOq3aQ0qbuaQ5N4zIuW+7u - 去掉
{SSHA}前缀,对剩余的Base64字符串解码得到二进制数据——前20字节是SHA-1哈希结果,剩下的部分就是当初生成的随机盐值 - 把用户输入的明文密码和提取出的盐值拼接,再做一次SHA-1哈希运算
- 将新生成的哈希结果和存储的哈希结果对比,一致则认证通过
另外补充个常见实践:大多数场景下应用不会自己做上述验证操作,而是直接调用LDAP的**Bind(绑定)**接口,把用户输入的明文密码传给LDAP服务器,由服务器完成盐值提取、哈希对比的全流程,应用只需要接收服务器返回的认证结果即可。这种方式能避免应用接触敏感的密码哈希和盐值,安全性更高。
内容的提问来源于stack exchange,提问作者YoavKlein
相关产品推荐
相关产品推荐

