我有一个应用服务器和一个数据库服务器。我想使用 DEK(数据加密密钥)将某些数据发送到加密的数据库。理想情况下,此 DEK 在 linux 文件系统上受到读取保护,并使用 KEK(密钥加密密钥)进行加密。在 Windows 上,我会使用 DPAPI 来保护 KEK,但在 Linux 上,我不确定保持此密钥安全的最佳方法(没有 HSM)。
我对人们用来解决这个问题的替代常见架构或范例持开放态度。
我有一个应用服务器和一个数据库服务器。我想使用 DEK(数据加密密钥)将某些数据发送到加密的数据库。理想情况下,此 DEK 在 linux 文件系统上受到读取保护,并使用 KEK(密钥加密密钥)进行加密。在 Windows 上,我会使用 DPAPI 来保护 KEK,但在 Linux 上,我不确定保持此密钥安全的最佳方法(没有 HSM)。
我对人们用来解决这个问题的替代常见架构或范例持开放态度。
如果恶意代码可以在用户的上下文中运行,则 DPAPI 不提供保护,因为所述恶意代码可以简单地要求 DPAPI 对其进行解密。
它可以防止的唯一情况是数据或磁盘被盗,但密码未知。密码可以轻松重置,但这会使受 DPAPI 保护的数据无法访问。攻击者必须从 Windows 凭据缓存中破解密码哈希,但请注意,这通常是一项非常可行的任务。如果您知道这是您必须做的事情,那么您可能在大多数情况下都可以做到。
您真正的问题是“如何轻松管理 KEK”。
DPAPI 通过捎带 Windows 密码来处理密钥管理。您需要一个 PAM 模块才能在 Linux 上执行此操作,但没有。
您应该考虑捎带用户已经在使用的任何东西,例如 OSX 钥匙串、KDE 的 KWallet、Gnome 的 GnomeKeyring 等,我相信这些都有 API。
如果你使用的是 Python,你应该考虑这样的事情: