guc*_*cki 10 bcrypt digest-authentication
我写了一个小型的网络服务器,目前在ssl上使用基本的auth.到目前为止一切都很好.现在我想(需要)切换到摘要身份验证.但我无法弄清楚如何使用未在数据库中以明文形式存储的密码来完成此工作?我只存储了用户密码的密码摘要(使用bcrypt生成).是否可以使用http digest auth?
Ali*_*ael 12
刚刚调查这个.首先,我通读了RFC 2617 - HTTP身份验证:基本和摘要访问身份验证,以深入了解规范,并了解如何针对REST API身份验证进行调整.
与您所做的问题相同 - 摘要验证意味着服务器需要以明文形式存储用户密码吗?
这个 Stack Overflow的答案清楚地表明:不.服务器不存储明文密码 - 它应该存储哈希值(username|realm|password).
除了一件事之外,这样做会很好 - 规范规范只支持使用MD5作为哈希函数.
当然,你可以存储两个的bcrypt哈希和 MD5哈希,但这样做只会破坏bcrypt哈希有效地使之无用(因为攻击者可以通过他的努力转移到暴力破解MD5哈希代替)的安全性.
所以,我向后退了一步,心想:为什么不忽略规范和使用bcrypt 两个边作为哈希函数(bcrypt(username|realm|password))?
好吧,除了有目的地慢,bcrypt有一个最大密码长度,这使它不适合用作一般摘要算法.
哇,到现在我的头在游泳,但我还是想再给它一次.一些建议是使用TLS与SRP或经过身份验证的加密,特别是EAX,但我觉得,对于简单的Web服务来说,可能只是迈出了一步.
简单地说,如果你真的想要这样做,你可以通过使用初步哈希来解决bcrypt的字符限制.
长话短说似乎你可以这样做:
bcrypt(sha256(username|realm|password))
Run Code Online (Sandbox Code Playgroud)
并使用它来代替H(A1)规范的混合版本.
现在的问题是 - 所有增加的复杂性真的值得吗?我们是否通过HTTPS获得了基于身份验证的任何附加安全层?
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |