【发布时间】:2011-07-20 20:07:51
【问题描述】:
我正在编写一个接受敏感客户数据的 php 应用程序,因此我需要在将其存储到 mysql 数据库之前对其进行加密。我打算使用mysql内置的AES功能来做列级加密。
我想避免将加密密钥存储在服务器上,因此我将提供一个网页供管理员登录并输入加密密钥。我想在应用程序运行时将此密钥存储在内存中,但永远不会永久存储到磁盘。
最好的方法是什么?
我可以修改 $_SERVER 数组来存储请求之间的信息吗?我可以以某种方式将密钥存储在 apache 中吗?也许共享内存?
【问题讨论】:
-
虽然我认为你的想法本身很糟糕,dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
-
如果机器自发重启(或者你需要重启它)会发生什么。钥匙会消失吗?或者应用程序处于脱机状态,直到管理员可以从某处的备份中查找密钥并手动输入。这可能是一个缓慢的过程。
-
如果管理员不小心上传了错误的密钥或损坏的密钥会怎样?除非有人注意到,否则您存储的数据将永远无法检索,并且您不会知道哪些数据是用坏密钥生成的,哪些是用好的密钥生成的,除非您尝试解密每个部分并找出哪些数据不可恢复。
-
@genesis:我同意攻击者仍然可以查看内存内容,但我需要与客户的 IT 部门合作,他们不希望将其存储在文件中。
-
最好不要使用 AES,因为许多服务器将其数据库存储在另一台服务器上,这意味着更多数据传输超出您的控制范围。最好在发送到 SQL 之前在 PHP 中加密。使用
openssl或更好的是最新的现成流行加密库。
标签: php security encryption administration