在我的数据库中,我存储了通过PHP类实时加密和解密的信息。在PHP环境中存储用于加密的私钥的位置
每个应用程序我使用一个附有用户密钥的私钥来确保解密只在用户试图解密自己的数据时成功。
用户'密钥'存储在数据库中;但私钥(应用程序级别)作为txt文件存储在FS中。当然,在网络根目录之上。
注意事项: - 如果数据库遭到黑客攻击:他们最终与关键字的一部分,和加密数据 - 如果PHP-停止或已损坏:他们最终与唯一include('../private/private.php')
在一个单一页面。
- 如果NGINX失败:连接刚被丢弃。
我能想到的唯一场景就是系统本身的腐败。但服务器运行防火墙,定期更新,运行fail2ban,只运行所需的服务。 SSH登录只能通过密钥访问等等
我在想这是不是最好的做法。 或者如果有更好的方法来做这种以上规格的加密? 什么是对密钥文件的正确访问权限?
目前数据库和网络服务器都在同一台面向互联网的服务器上。将它们分开并创建一个只有Web服务器的面向互联网的服务器会更好吗?并将数据库服务器和密钥文件放在专用网络中的不同服务器上?
编辑:私有密钥来加密数据是由两个组件构建:
$key = $app_key . $user_key
对密钥文件的正确访问权限是“-r --------”或“400”,而web服务器用户是所有者。除此之外,看起来你做得相当不错 –
*“我使用附加了用户密钥的私钥来确保解密只在用户试图解密自己的数据时才能成功”*我不确定那是什么手段。您将两个密钥都保存在服务器上,因此解密只要您希望就能成功。相反,如果服务器被拥有,数据也是拥有的。 – Jon
它的一个能力开始完全取决于你有什么级别的信息,以及你需要与安全有多紧。对于大多数常见的场景,你可能没有问题,尽管你可能想考虑对运行在OS下的守护进程运行审计,以检查它们上是否有任何已知的攻击媒介,例如ssh'd版本等 – Dave