Encryption 如何安全地存储加密密钥

Encryption 如何安全地存储加密密钥,encryption,aes,Encryption,Aes,我在工作中被要求保护保存在Mysql数据库中的敏感数据。该数据库包含多个表,其中一个表包含关键数据,这些数据只能使用在Django中完成的API进行访问。对于此API,只有一定数量的人可以访问它,因此他们将是唯一能够访问此表中数据的人 因此,目前的问题是每个人都可以访问数据库和这个表,因此我们决定使用AES对这个表中的所有数据进行加密,借助于AES_encrypt和AES_DECRYPT函数 所以。。。。到目前为止,一切正常,但主要问题是如何存储用于加密/解密的AES密钥。 在与我的同事和goo

我在工作中被要求保护保存在Mysql数据库中的敏感数据。该数据库包含多个表,其中一个表包含关键数据,这些数据只能使用在Django中完成的API进行访问。对于此API,只有一定数量的人可以访问它,因此他们将是唯一能够访问此表中数据的人

因此,目前的问题是每个人都可以访问数据库和这个表,因此我们决定使用AES对这个表中的所有数据进行加密,借助于AES_encrypt和AES_DECRYPT函数

所以。。。。到目前为止,一切正常,但主要问题是如何存储用于加密/解密的AES密钥。 在与我的同事和google进行了一些头脑风暴后,我发现最好的方法是使用密钥包装器,它包括使用可以访问与数据库表交互的API的人员的密钥加密原始密钥和主密钥。所以,我想用每个人的公钥加密这个密钥,每个人的公钥都可以访问这个API,并将加密版本存储到一个任何人都可以访问的表中。然后,当用户需要主密钥时,他/她只需要检索加密的密钥,用他/她的私钥解密,最后他/她将密钥放入登录会话中,以便他们能够通过API使用它


我只是想知道是否有更好的替代方案。

使用一个密钥加密内容加密密钥(CEK),然后使用每个授权收件人密钥加密密钥(KEK)的密钥对该密钥进行加密的方法是一种很好的方法,它被用于许多标准协议,如s/MIME、PGP等

但是:在此环境中,您将在哪里存储授权用户的私钥?你将如何保密


可行性取决于您的应用程序,但最好使用对称算法为每个用户加密CEK。每当该用户想要访问CEK时,他们都必须重新输入密码,以便服务器永远不会将其密钥存储在clear中。

首先,您需要问问自己,为什么每个人都可以访问此数据。你考虑过使用说明书吗?它不是那样工作的。我有非常明确的命令,需要考虑一些限制因素。这不取决于我。。。。我的工作就是确保只有授权人员才能访问敏感数据。这可能更适合