什么是存储AES-256-CBC加密密钥的最佳选择?

时间:2016-03-11 11:54:16

标签: php filesystems aes

我正在使用PHP的openssl来加密我网站上的敏感用户数据。我有一个ssl证书来提供进一步的加密。但是如何保持密钥安全?

我做了一些研究,并提出了以下步骤 -

1)将其存储在另一台服务器中。远离根文件夹。

2)某些行特定键保留在数据库中,但使用主密钥加密。

3)主密钥不在存储在驱动器中,而是保留在ram上。

4)使用前对密钥进行正确认证。

但我怎样才能确保没有人获得主密钥?

我有2台服务器 - A和B. A包含受保护的数据库,B具有主密钥。现在,A,必要时将从B中检索密钥并将其存储在ram中,最好作为变量。

如何确保没有人在服务器B获取密钥?我应该将其存储为php文件还是其他格式?如果它是另一种格式,我该如何确保只有服务器A的decrypt.php只能读取它,而其他任何人都无法读取它?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

保持加密密钥安全是一个非常困难的问题。通常,您可以做的最好的事情是确保它不在http路径中,并使服务器尽可能安全。这包括双因素认证和第二因素的谨慎控制。

真正保持密钥秘密的唯一方法是确保它永远不可用,并且需要HSM (Hardware Security Module),这是一个执行加密/解密的独立硬件设备,因此密钥永远不可用。想想$ 5,000 +。

答案 1 :(得分:0)

您可以查看AWS KMS或者如果您想在本地存储一些秘密,请查看这个开源项目 - Hashicorp Vault - 它非常漂亮。

答案 2 :(得分:0)

你想保护自己的数据是什么?

  • 例如,如果您试图保护它免受SQL注入攻击,那么将其加密"在内部"数据库可能会提供一些帮助。

  • 如果您试图保护其免受试图获得对您的网络基础设施的特权访问权限的人的影响,那么这是一个完全不同的问题。

例如,如果您的服务器没有被黑客攻击并且服务器上的代码没有受到损害,那么如果软件正在执行它的工作,那么您将面临这样的情况:将仅解密经过身份验证的用户可以解密的数据。

通常,如果有人获得对您的服务器/代码的特权访问权限,那么存储密钥的位置可能没什么区别。正如Zaph所指出的那样,通过在Web服务器和数据库之间放置一个不太容易访问的盒子,让Web服务器不知道加密细节可能会提高安全性。

我正在做类似的事情,并将使用AWS VPC将敏感/管理功能与Web服务器隔离开来。 KMS将用于保持密钥加密密钥不透明。将执行各种类型的监视,如果检测到问题,可以禁用KMS密钥 - 在问题解决之前阻止访问数据。