2014-09-20 165 views
0

我存储了一些已加密的数据,并且使用PB​​KDF2根据用户密码(哈希和盐渍后)生成密钥。重置PBKDF2中的密码

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

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

+0

Uhhhhmmmmm。你为什么要加密密码而不是散列它们? – PeeHaa 2014-09-20 20:35:50

+0

对不起,让我澄清一下:我没有对密码进行加密,实际上我正在对它们进行散列和腌制。但是我用它作为PBKDF2的输入,并从那里加密他们的一些数据。 – gzak 2014-09-21 02:01:48

回答

1

我可以简单地通过解密数据 使用旧密码,然后用新 密码重新加密数据执行密码更改请求。

但是,如何执行密码重设,当用户 忘记密码?我是否应该以不同的方式存储事物 支持此用例?如果是这样,怎么样?

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

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

对于恢复,您创建一个恢复密钥。然后在恢复密钥下再次加密CEK,并将加密的CEK移到某个安全的地方。

当需要更改密码时,只需在新的PBKDF派生下重新加密CEK。因为它在其他地方是安全的,所以不需要再使用恢复密钥。 (或者像政府发行NSLs一样安全,没有疏忽)。