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

时间:2014-08-24 21:15:20

标签: php mysql encryption aes

我使用MySQL作为后端存储。 我们的风险管理团队要求我在将所有数据存储到数据库之前对其进行加密。

从那时起,我一直在研究如何保护数据进出数据库。

我发现其中一个是MySQL Encryption Software

第二种解决方案是使用AES_ENCRYPT() AND AES_DECRYPT()在MySQL中加密和解密数据。但我需要创建128,196或256位密钥才能加密和解密数据。然后,每次我想执行INSERT/UPDATE时,我都会调用AES_ENCRYPT()并为其提供加密数据的密钥。然后,当我执行SELECT时,我将不得不调用AES_DECRYPT()并提供相同的密钥以将数据转换为纯文本。

这意味着我必须在我的PHP脚本中定义一个具有私钥的变量,这样我就可以通过向AES_ENCRYPT()AES_DECRYPT()提供已定义的变量来加密/解密

我的问题是 在哪里/如何存储此私钥以防止黑客阅读它。如果有人黑客攻击我的服务器读取密钥,那么他就可以简单地读取数据,加密意味着更少。

保护数据的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

您遇到的问题不是关键问题,而是计算机其他部分的安全问题。使用mysql意味着mysql(如果安全运行)正在其自己的帐户中运行。实际上,您可以将密钥放在mysql拥有的目录中。这确保了很多mysql。 MySql本身需要访问该密钥,因此您无法为该帐户执行任何操作。只需确保它只能由拥有帐户读取。

答案 1 :(得分:0)

如果您隐藏密钥并且黑客获取您的PHP代码,黑客可以执行以下操作:

A。回显/打印KEY(它是一个变量)。他不必找到你定义它的代码,他可以查找你使用它的函数。

B。忘记密钥并使用您自己的解密功能查看数据并将其导出。

大多数黑客攻击你的PHP代码,你应该保护你的计算机,系统和数据库。

使用MYSQL存储过程

如果只有经过身份验证的用户可以获取密钥,则可以执行此操作...在MYSQL存储过程中隐藏密钥,并仅在用户完成登录时将密钥提供给用户。数据库中的所有数据都应该是加密后,密钥不能作为普通存储数据访问。应该在SQL存储过程内部,具有密码的用户将获得查询结果。用户表不应该加密,只能将密码作为一种方式。

此最后一个解决方案仅适用于经过身份验证的用户,例如应用程序。您可以使用此解决方案轻松保护用户配置文件。

用户(基本数据) - >个人资料(所有依赖登录的个人详细信息)

我对存储过程知之甚少,但您肯定可以将它应用于整个数据库,并且只能通过它们访问数据。

看看这篇文章: http://www.sitepoint.com/stored-procedures-mysql-php/

你会在这里找到PROS和CONS: http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5--net-17843