我正在研究必须以可逆加密格式将虚拟机的 root 密码存储在数据库中的可能性。原因是机器有时需要本地登录,而我们不鼓励它们,我们需要能够查找 root 密码。当然,访问权限将严格限制为少数管理员。这些将不会被使用,除非虚拟机无法通过网络访问。在这方面同步用户和密码也存在类似的问题,即如果网络不通,sudoer 如何使用保证的最新密码登录?
计划轮换密钥的最佳方法是什么?我应该只使用每个管理员都有的密码吗?这在我心中提出了一些危险信号。有没有办法安全地管理密钥,以便管理员可以设置自己的密码?也许使用公钥加密并使用每个管理员的公钥加密对称密钥?
在这里,我只是在寻找有关加密敏感数据的密钥管理的解决方案的概要。如果我无法弄清楚如何从该级别实施,我可以提出更多问题。
请注意,我不是加密系统或安全专家。这就是我所看到的并且是有道理的,但我不能声称它没有超出我在下面概述的安全问题。与往常一样,如果重要,请进行适当的安全审核。
在下文中,“凭据”可以指 ssh 密钥、密码或任何需要存储的内容。
典型的模型是使用几个级别的加密。
对于每个用户,生成并存储一个公钥/私钥对
将用户密钥的公共部分明文存储在用户记录中
将加密到用户密码短语的用户密钥的私有部分存储在用户记录中。
将每个凭证加密为该凭证唯一的对称密钥
将每个凭证的对称密钥加密为应该有权访问该密钥的每个用户的公钥,并将生成的加密材料存储在
user_credentials
映射表中。本质上,您维护一个密钥环,就像 gpg 密钥环,其中公共部分是明文,而私有部分被加密为密码。您应该确保每个用户选择的密码是强大的。
现在您可以为每个加密凭证生成一个对称密钥。将此密钥加密为每个用户的公钥,并将其存储在用户凭据连接表中。切勿以未加密的方式存储此对称密钥,并为每个凭证使用不同的对称密钥。
你会遇到这样的事情
这样做有很多好处:
如果您的数据库转储被泄露,您的凭据仍然是安全的,或者与您的密码和密钥强度一样安全。
由于每个凭证都有不同的对称密钥,因此您可以控制哪些用户可以访问哪些凭证
任何有权访问给定凭据的用户都可以授予其他用户访问权限;他们只是使用他们的密钥对其进行解密并将其加密为其他用户的公钥。您无需召集所有人一起添加凭据或添加新用户。
因为您将每个凭证加密为对称密钥,然后将该密钥加密为用户密钥,所以您可以更改存储的凭证,而无需将其重新加密为每个用户的密钥。它只是使更新存储的凭据更加方便。
但是,如果数据库主机受到威胁,攻击者可以在任何给定用户登录后轻松提取该用户可以访问的密码。他们通过包装函数或启用详细日志记录和搜索日志来捕获用户的密码。然后他们可以在被盗转储中或从实时数据库中解密密码。受感染的数据库主机在用户登录使用它之前是没有危险的,但随后一切都将丢失。
这意味着数据库的主机是安全关键的。泄漏转储对安全性来说并不是致命的,但是能够修改数据库上运行的代码的人是致命的安全漏洞。
除了在需要时使用您的凭证管理数据库提取 ssh 密钥材料、密码等,您还可以将其用作身份验证代理,它可以针对服务进行身份验证,而无需您的用户能够学习凭证用过的。例如,您的应用程序可能会解密 ssh 密钥,将其添加到 ssh 代理,然后使用解密的密钥通过代理登录服务器,而用户永远无法直接查看和访问密钥。