如何保护站点范围的密钥

how to protect a site-wide secret key

  1. 想象一个非常标准的网站,用户使用 email/password 对进行身份验证。对于密码,它已经使用随机盐进行哈希处理,但其余数据未加密。

  2. 我们又向前迈进了一步,用 password 密钥加密敏感数据,key,显然,应用程序应知道能够为其操作描述数据。

  3. 我们不想在源代码中包含它,所以它保存在一个文件中,并在需要时由应用程序读取。

  4. 我们已经对文件进行了保护,因此只有执行该应用程序的用户才能读取它

  5. (这一点是在下面的一些讨论后出现的)我们已经考虑过购买硬件 HSM,但发现不可能(例如我们是 运行 虚拟机上的服务器)

通过这种方式,我们可以相对避免完全窃取数据库,对吧?但是,如果有人可以访问具有读取权限的 OS 用户,则密钥可能会为人所知。

问题是:保持此类密钥安全的最佳做法是什么?

购买硬件安全模块并将密钥保存在其中。密钥将无法读取。

Yubi 制造了一个价格合理的 hsm。如果我没记错的话是 500 美元。

虽然我们在这里,但您的数据库服务器应该位于与您的网络服务器不同的网络区域中的不同机器上。