当在登录前无法使用盐时,我应该使用什么作为 PBKDF2 散列的安全/强盐,因为它将是客户端 javascript 来使用 PBKDF2 散列用户+通行证?我将使用 sha(user+pass) 作为 pbkdf2 的盐。
如果我使用随机生成的盐,我应该将它存储在数据库中,但是当用户想要登录时,用户将没有盐来用盐加密他的密码,然后再将其发送到服务器进行验证。
那么这里有什么好的/安全/可靠的解决方案?PS我正在尝试实现“零知识”协议。另外我已经在使用 SSL。
当在登录前无法使用盐时,我应该使用什么作为 PBKDF2 散列的安全/强盐,因为它将是客户端 javascript 来使用 PBKDF2 散列用户+通行证?我将使用 sha(user+pass) 作为 pbkdf2 的盐。
如果我使用随机生成的盐,我应该将它存储在数据库中,但是当用户想要登录时,用户将没有盐来用盐加密他的密码,然后再将其发送到服务器进行验证。
那么这里有什么好的/安全/可靠的解决方案?PS我正在尝试实现“零知识”协议。另外我已经在使用 SSL。
首先,请确保您阅读了对“客户端密码散列”问题的答案,特别注意最后一段。
另外,请意识到与良好的服务器端代码相比,PBKDF2 的客户端 javascript 将非常慢。至少尝试找到一个使用 HMAC-SHA-512 作为基础的 PBKDF2 实现。
也就是说,如果您想让用户放心,那很好;请执行下列操作:
尤其要记住 PBKDF2 密码散列,永远不要要求输出大小大于本机基本散列的输出大小。如果您真的非常关心存储,较小的就可以了;例如,仅请求 PBKDF2-HMAC-SHA-512 的本机 64 字节输出的 32 字节。