如何在数据库中存储加密的机密用户信息,需要在运行时解密?

时间:2017-12-29 03:24:25

标签: security encryption cryptography

我正在创建一个应用程序,我需要存储客户的信息(例如 API密钥 API密码以访问我的服务以及其他机密信息)。< / p>

现在,在数据库中,我想以加密格式存储它们。在这方面,我决定使用对称密钥加密 AES 来加密细节。

但是,出于安全考虑,我希望在每个客户端的基础上使用不同的 AES加密密钥,这样即使数据库受到威胁,也无法使用单个密钥解密所有数据。

但是,由于显而易见的原因,我不想将带有加密信息的私钥存储在数据库中。

所以,我似乎无法决定如何存储我的密钥,特别是因为我需要绑定哪个密钥属于哪个客户端。

我怎样才能实现这一目标,哪种方法最适合这种情况?

1 个答案:

答案 0 :(得分:2)

使用KDF从用户密码中获取加密密钥,然后使用此密钥加密其私人信息。

如果要采取任何需要其API密钥或您正在存储的其他私人数据的操作,只需请求用户密码并使用它再次导出密钥并使用密钥进行解密。

如果您希望用户能够更改其密码,请为每个用户添加中间随机密钥,并使用此密钥加密其数据。使用从其密码派生的密钥来加密随机密钥。然后,在更改用户密码时,您只需要解密并重新加密随机密钥。