我有一个网站,用户提交他们的个人数据,我正在考虑使用 aes-256 加密这些数据,他们的密码用作加密的 key ,然后我将加密的数据存储在 mysql 数据库中......
现在,如果用户更改了他的密码,我将如何更改加密数据的 key
我应该从数据库中收集所有数据,然后用旧 key 解密他们的数据,然后用新 key 再次加密吗?
最佳答案
当他们更改密码时,您不需要重新加密用户的所有数据。
生成一个 key 来加密用户的数据;称之为“内容加密 key ”。从用户的密码中获取 key ;称之为“ key 加密 key ”。使用“ key 加密 key ”加密“内容加密 key ”。将加密的 key 与盐和用于 key 派生的迭代次数一起存储。
如果他们更改了密码,请使用旧密码解密内容加密 key ,然后使用从新密码派生的 key 重新加密。您应该为新密码选择一个新盐,并确保将它与新的加密 key 一起存储。
由于内容加密 key 是从一个巨大的空间中随机选择的,因此您可以安全地使用ECB作为加密方式。
不要简单地对密码进行散列,即使您使用了盐,即使您使用了尚未破解的算法。您需要重复哈希操作数千次。在大多数平台上都有用于(正确)执行此操作的库。使用 key 派生算法(PBKDF2,来自 PKCS #5)从密码创建 key 。
这个概念遵循 the draft for password-based S/MIME encryption.
关于security - 加密后如何更改aes-256 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981653/