php - PHP环境加密私钥存放在哪里

标签 php encryption

在我的数据库中,我存储了通过 PHP 类动态加密和解密的信息。

对于每个应用程序,我使用附加了用户 key 的私钥来确保解密仅在用户尝试解密其自己的数据时成功。

用户“ key ”存储在数据库中;但私钥(应用程序级别)在 FS 中存储为 txt 文件。当然在网络根目录“之上”。

注意事项: - 如果数据库被黑:他们最终得到 key 的一部分和加密数据 - 如果 PHP 停止或损坏:他们最终得到一个页面,其中只有 include('../private/private.php')
- 如果 NGINX 失败:连接“刚刚”断开。

我能想到的唯一场景是系统本身的损坏。但是服务器运行防火墙,定期更新,运行 fail2ban 并且只运行所需的服务。 SSH 登录只能通过 key 访问等等

我想知道这是否是“最佳”做法。 或者是否有更好的方法来进行上述规范的这种加密? key 文件的正确访问权限是什么?

目前数据库和网络服务器都在面向互联网的同一台服务器上。将它们分开并创建一个仅包含网络服务器的面向互联网的服务器是否更好?并将数据库服务器和 key 文件放在私有(private)网络中的不同服务器上?

编辑:加密数据的私钥由两个部分组成:
$key = $app_key 。 $user_key

最佳答案

I was wondering if this is the 'best' practice. Or if there is a better way to do this kind of encryption with above specifications? What would be the correct access-rights to the key-file?

难以实现

为了绝对安全,您需要在 HSM(硬件安全模块)(例如智能卡或 HSM 盒)上生成一对私钥-公钥。生成的私钥在 HSM 内部创建,永远不能离开 HSM,它只能用于 HSM 本身内部的解密/签名操作,但是永远无法从 HSM 读取。在这种情况下,如果有人入侵了您的服务器,甚至完全控制了您的服务器,他们将永远无法获得存储在 HSM 中的私钥。根据您的服务器所需的解密/签名操作的数量,您将需要一个性能合理的 HSM 来解密所需的数据。然而,用纯 PHP 完成这项任务还有很长的路要走(您可以实现自己的 C++ 扩展或使用进程间通信与能够与 HSM 交互的进程)

更易于实现

加固您的服务器并尽可能减少攻击向量非常重要。这主要包括为文件和数据库分配适当的权限。看看this一些良好的安全实践。 要添加我的几美分,您可以使用:

  1. APC用于在 php 中存储私钥(与从文件中读取 key 相比,这也会提高性能)。每次重新启动 Web 服务器时,您都需要实现某种安全机制(例如输入密码)来将加密 key 解密/恢复到 APC 中。
  2. 类似于 ionCube用于加密和保护您的 PHP 脚本
  3. 使用应用程序容器控制您的部署过程,例如 docker

At the moment the database and webserver are both on the same server facing the internet. Is it better to split them and create an internet facing server with only the webserver; and put the database server and key-file on a different server in a private network?

是的,将网络服务器与数据库服务器分开绝对是一个好习惯。

关于php - PHP环境加密私钥存放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20516479/

相关文章:

php - PHP MongoDB 查询中 "and"内的 "or"

php - 在函数 php 中包含 Gloobal 变量

c# - 将PHP解密AES-256-CBC移植到C#

database - sqlcipher如何导入一个sqlite3数据库

security - 过期的 SSL 证书和加密

php - .htaccess 在动态文件夹名称中加载索引

javascript - 如何制作相同大小的缩略图

php - sql获取多个自定义帖子元值

php - PHP 的 openssl_encrypt() 使用 AES-256-cbc 可以输出什么范围的字符?

java - C# 和 Java 中的 AES 加密文件