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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在数据库中存储加密的机密用户信息,需要在运行时解密?相关的知识,希望对你有一定的参考价值。

我正在创建一个应用程序,我需要存储客户端的信息(比如他们的API密钥和API密码来访问我的服务,以及其他机密信息)。

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

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

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

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

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

答案

使用KDF从用户密码派生加密密钥,然后使用此密钥加密其私人信息。

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

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

以上是关于如何在数据库中存储加密的机密用户信息,需要在运行时解密?的主要内容,如果未能解决你的问题,请参考以下文章

如何分配单独的内存来存储机密数据?

安全地存储客户端机密

设计模式 java 结构型模式

kubernetes管理机密信息

如何获取主机存储库的 GitHub 机密作为 github 操作的输入?

在哪里/如何存储或生成客户端机密?