在PBKDF2中重置密码

时间:2014-09-20 20:34:51

标签: security passwords pbkdf2

我存储了一些加密的数据,并使用PBKDF2根据用户的密码(散列和盐析后)生成密钥。

我只需使用旧密码解密数据,然后使用新密码重新加密数据即可实现密码更改请求。

但是,当用户忘记密码时,如何实施密码重置?我应该以不同方式存储东西来支持这个用例吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

  

我可以通过解密数据来实现密码更改请求   使用旧密码,然后使用新密码重新加密数据   密码。

     

但是,如何在用户时执行密码重置   忘记密码?我应该以不同的方式存储东西   支持这个用例?如果是这样,怎么样?

通常,您使用内容加密密钥或CEK。 CEK是一个随机密钥,您可以使用它来锁定密码和保护文件的MAC。每个文件都有自己的CEK和其他加密参数,如IV或nonce。

然后使用密钥加密密钥或KEK。在你的情况下,KEK将是你PBKDF的输出。 KEK加密CEK。

要进行恢复,请创建恢复密钥。然后,您在恢复密钥下再次加密CEK,并将加密的CEK移动到安全的地方。

当需要更改密码时,您只需在新的PBKDF派生下重新加密CEK。因为它在其他地方安全,所以无需弄乱恢复密钥。 (或者与发布NSLs而没有监督的政府一样安全。)