我应该在哪里存储PHP的加密密钥?

时间:2011-07-20 20:07:52

标签: php security encryption administration

我正在编写一个接受敏感客户数据的php应用程序,因此我需要在将其存储在mysql数据库中之前对其进行加密。我将使用mysql的内置AES功能来进行列级加密。

我想避免在服务器上存储加密密钥,因此我将为管理员提供登录的网页,并输入加密密钥。我希望在应用程序运行时将此密钥存储在内存中,但永远不会永久存储到磁盘中。

这样做的最佳方式是什么?

我可以修改$ _SERVER数组以在请求之间存储信息吗?我可以用某种方式存储带有apache的密钥吗?也许是共享记忆?

5 个答案:

答案 0 :(得分:6)

为什么不使用PHP的本机openssl加密方案(PECL扩展),而不是依赖MySQL AES进行加密。这需要私钥和公钥,public需要加密,私有解密,密钥可以保存在不同的地方。

答案 1 :(得分:4)

我最终将加密密钥存储在内存表中。对数据库的所有访问都是通过一组存储过程完成的;存储过程包括进行密钥管理的能力(即插入内存表的密钥,更改密钥,检查是否已输入密钥等),以及存储/检索应用程序数据。

使用此设计,应用程序服务器上保留的数据库凭据仅具有通过已定义过程集进行查询的权限,并且无法直接读取加密密钥。

我喜欢这种方法,因为:

  1. 密钥不存储在文件系统上 - 防止在使用寿命结束时处理硬件问题,以及防止系统管理员窥探
  2. 应用程序代码无法访问密钥(输入密钥时除外),因此唯一可以驻留的位置是数据库进程。
  3. 加密/解密的所有逻辑都嵌入在SQL查询中,所以不必担心应用程序代码正确执行 - 很适合维护。

答案 2 :(得分:3)

一种可能性是创建一个RAM磁盘并将密钥存储在那里。

答案 3 :(得分:2)

存储任何类型的加密密钥的最安全的地方是在服务器上而不是数据库中,并确保它由root拥有并且不被其他人读取。

答案 4 :(得分:0)

编写一个 php 配置文件并将其存储在您的主目录中。只允许 php 访问它。

$cryptKey = "aac1ebadcfabdef72376acd" ;

在每个使用加密密钥的 php 页面的顶部包含使用主文件夹的绝对路径。最终用户无法访问此文件夹。

相关问题