我存储了一些加密的数据,并使用PBKDF2根据用户的密码(散列和盐析后)生成密钥。
我只需使用旧密码解密数据,然后使用新密码重新加密数据即可实现密码更改请求。
但是,当用户忘记密码时,如何实施密码重置?我应该以不同方式存储东西来支持这个用例吗?如果是这样,怎么样?
答案 0 :(得分:1)
我可以通过解密数据来实现密码更改请求 使用旧密码,然后使用新密码重新加密数据 密码。
但是,如何在用户时执行密码重置 忘记密码?我应该以不同的方式存储东西 支持这个用例?如果是这样,怎么样?
通常,您使用内容加密密钥或CEK。 CEK是一个随机密钥,您可以使用它来锁定密码和保护文件的MAC。每个文件都有自己的CEK和其他加密参数,如IV或nonce。
然后使用密钥加密密钥或KEK。在你的情况下,KEK将是你PBKDF的输出。 KEK加密CEK。
要进行恢复,请创建恢复密钥。然后,您在恢复密钥下再次加密CEK,并将加密的CEK移动到安全的地方。
当需要更改密码时,您只需在新的PBKDF派生下重新加密CEK。因为它在其他地方安全,所以无需弄乱恢复密钥。 (或者与发布NSLs而没有监督的政府一样安全。)