我需要从用户名和密码中派生一个密钥。这是我唯一能接触到的两件事。我想的是使用PBKDF2,用户名作为salt,密码作为主密码。
有人能帮我评估/确认这个解决方案的安全性吗?
更新:由于盐类必须是独特的,我已经考虑使用以下盐作为盐:
HASH(USERNAME) XOR SOME_GLOBAL_CONSTANT或者也许
HMAC(SOME_GLOBAL_CONSTANT, USERNAME)你认为这个更新后的盐值怎么样?
发布于 2012-07-10 13:40:23
这是一个合理的解决办法,如果你不能使用随机盐。如果您为应用程序个性化您的哈希函数,那么salt对于每个用户都是全局唯一的。(例如,使用sitename而外的用户名作为salt)唯一发生的盐分重用是同一个用户的旧密码具有相同的salt。但这是个很小的问题。
我不同意多项式想要不可预测的盐。对于大多数涉及密码哈希的协议来说,不可预测性并不是必需的。全局唯一性或至少是稀有性是决定性的属性。
要将站点名和用户名结合起来,我只需将它们连接起来。你的HMAC建议当然也不错。你的xor变体给了我一点不好的感觉,但可能也不错。
发布于 2012-07-10 13:28:50
这是一个糟糕的想法,在关于证券SE的问题中进行了一些探索。
盐应该是:
这不需要是秘密。
用户名不是不可预测的,只是满足了唯一性要求。
一个更好的解决方案是随机生成盐,并验证它与您已经使用过的任何盐不匹配。如果验证唯一性很困难,则可以将用户名与连接的随机盐类连接起来,以获得最终的盐分。这并不是防弹的,但它确实有助于减少碰撞。
https://crypto.stackexchange.com/questions/3186
复制相似问题