【问题标题】:AES password storing issueAES密码存储问题
【发布时间】:2017-12-05 19:25:27
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为这是关于密码学工程的,属于 crypto.stackexchange.com。
  • 这里的另一点是您可能混淆了位和字节......另外,您的密钥派生方法不安全,因为您可能从 ascii 字节派生,只需添加零位......这减少了键空间......在这里使用更安全的东西......比如 pbkdf2
  • 我会问存储配置文件信息有什么价值,如果没有人,但数据所在的人可以看到它。为什么要收集您不/永远无法使用的数据?您已经创建了只写内存。
  • 你误会我了,重点是:AES 密钥的存储位置。如果我按照我的逻辑,我不需要关心存储它,唯一的问题是当用户丢失密码时,所有加密的数据都会丢失。这就是我正在寻找的解决方案。

标签: encryption cryptography


【解决方案1】:

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

您可以使用随机数据密钥加密您的数据,而不是恢复密钥(或密码)。然后你可以反过来用用户的密钥加密这个数据密钥。您可以另外使用公钥 (RSA) 密钥加密数据密钥,您可以将私钥安全地保存在独立存储或后台某处。一个密钥与另一个密钥的加密称为密钥包装

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2014-12-27
    相关资源
    最近更新 更多