AES密码存储问题

时间:2017-12-01 18:22:44

标签: encryption cryptography

我想AES加密一些用户个人资料信息。 当用户注册时,我使用他提供的密码,如果密码长度不是16,我用零填充它为16位,以获得AES所需的密钥长度(16位),然后我加密他的所有数据配置文件那把钥匙。我知道,此时我的AES密钥将是安全的,因为没有人知道它们,除了用户自己。

当用户登录时,我会使用他的密码执行相同的16位进程并解密他的数据。我遇到的问题是密码恢复,如果用户忘记密码,数据将永远丢失。是否有更好的方法或解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:1)

您的AES密钥“派生”安全,您应该使用密码哈希(或者更准确地说,使用基于密码的密钥派生函数 - PBKDF)而不是使用零填充。密码与密钥相同,密钥应包含128个或更多随机位。

您可以使用随机数据密钥加密数据,而不是恢复密钥(或密码)。然后,您可以使用用户的密钥加密此数据密钥。您可以使用公共(RSA)密钥另外加密数据密钥,您可以将私钥安全地保存在分离的存储上或后台的某个位置。使用另一个密钥加密一个密钥称为密钥包装

您可能希望保留对用户私有的某些数据,在这种情况下,不要使用后台的公钥进行加密。您可以在用户的位置加密此类数据,而不是在服务器上加密。