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