保存可解密的密码

时间:2018-07-17 12:14:59

标签: encryption password-storage

我知道有百万次这样的问题,但是我找不到适合我需求的答案。

我正在为我的公司构建小型内部密码管理器之类的东西,以存储各种服务器的登录数据等等。 注册新用户后,他的密码将以加盐/散列版本保存在数据库中,因此没有人可以访问它(对此,我认为这没问题,如果我输入错了,请更正我)。

但是,当用户登录时,他可以使用其登录详细信息添加新服务器。

问题是,如何存储它们。

因为在某些时候,我必须以纯文本形式(这是该应用程序的重点)向用户显示此登录详细信息。 我能想到的最好的方法是使用某种对称加密。 想法是应用程序将使用对称加密来加密登录详细信息,然后以这种方式将其保存到数据库中,然后在需要数据时再次从数据库中提取数据,并使用相同的密钥解密并呈现给用户(并且密钥应位于源中应用代码?)。

这可能是非对称加密,但是如果公钥和私钥存储在相同的源代码中是一样的,那么使用它没有任何好处吗?

这似乎不太安全,但我想不到更好的方法了。

是否有更好的方法来存储此登录数据?

如果这对您很重要,则应用程序将使用PHP,数据库应为Oracle

1 个答案:

答案 0 :(得分:0)

我只会使用对称加密。标准步骤是:

  • 从用户提供的密码(例如PBKDF2或scrypt)派生对称密钥
  • 使用AES-128-CBC或更佳的随机IV加密数据
  • 将结果设为HMAC(例如HMAC_SHA256)或仅使用AES GCM模式

将IV +密文+ MAC存储在数据库中。

这些天都可以在浏览器中运行(请参阅crypto-js和aes-js)。这样,服务器就永远不会看到纯文本密码(不确定是否是必需的)。

MAC也可以用作密码哈希,即,如果MAC验证失败,则表明提供的密码不正确。