在php应用程序中存储AES加密密钥的最佳方法是什么?

问题描述 投票:2回答:1

我有一个使用AES加密的网络应用程序,一切正常,但是我将密钥硬编码在php文件中。这是一个示例... crypto($ msg,'password'); ...它调用我的函数,并将密码作为第二个参数发送。明显的缺陷是,如果有人访问我的服务器并查看php代码,他们可以轻松地获取密钥并解密数据库。我是否应该从备用数据库中的备用服务器中调用密码?有任何简单的想法可以保护钥匙吗?顺便说一句由于应用程序的性质,我被困使用一个密钥进行所有加密。

php aes
1个回答
1
投票

这是在IT中到处都是的相同的鸡肉和鸡蛋问题。

我希望将其作为其他内容的副本来关闭-但比查找副本更快地回答。

有多种减轻风险的方法,但没有一种可以解决问题。哪种解决方案适合您,取决于您的特定风险-备份是否加密/安全?您是否希望应用程序从重新启动后自动恢复?您的应用程序是否在能够向另一台机器证明其身份/完整性的系统上运行?它是否作为集群的一部分运行.....

只能存储很多地方:

  • 在另一台机器上(访问取决于身份验证机制)
  • 在文件系统上(对任何有权访问该文件系统或其备份的人都可以看到该秘密)
  • 在内存中(重新启动时机密非常多,并且保护它们不受访问机器的人的范围很有限。]

不要难过。 HSM会竭尽全力为可能的机密提供安全性-但会将其分发给任何授权的客户端(并且认证方案不是最可靠的)。大多数密码管理器使用的用于管理主密钥的模型确实很糟糕。

另一个关键点是,提供中等程度保护的许多解决方案远非简单。我目前正在编写自己的密码管理器,在该管理器中,还使用由每个用户密码和存储在计算机内存中的机密组成的密钥对主加密密钥进行加密。但这在如何安全地在启动时注入系统密钥以及如何处理密码重置方面存在问题。

Linux内核现在具有虚拟HSM功能,允许您将存储在内存中的数据限制为特定的进程,进程组或用户,但不能跨操作系统移植。

© www.soinside.com 2019 - 2024. All rights reserved.