我试图找出一个解决方案来解决我在一个新项目中遇到的“鸡和蛋”问题。
有问题的系统正在处理信用卡数据,因此卡号等需要加密存储在数据库中。为了符合 PCI 要求,我们为每个“商户”使用唯一的密钥对加密了数字,因此如果一个商户受到威胁,则应该无法访问另一个商户的持卡人数据。
当涉及到人类与系统的交互时,这很好,因为人类可以输入密码来解锁私钥,然后解密数据,但是当涉及需要访问数据的自动化服务时(即处理交易在以后的日期)如何最好地向服务/守护进程提供凭据存在问题。
系统的一些背景知识:
- 卡号使用非对称密钥对加密
- 私钥受密码保护
- 然后使用“主”密钥对加密此密码
- 然后,获得许可的操作员知道解锁主私钥的密码(实际上,他们使用自己的密钥对加密了它的副本,他们只知道密码)。
- 守护进程将作为自己的用户和组在 linux 系统上运行。
为了使守护程序能够解密数据,我正在考虑以下内容:
- 设置一个类似于.pgpass工作方式的密码短语文件
- 将文件存储在守护程序用户的主目录中
- 将文件的权限设置为 0600
- 设置文件完整性监控系统,例如 Tripwire,以通知安全组(或类似的)文件或权限的任何更改。
- 禁用守护程序用户的登录,因为它仅用于进程。
鉴于上述情况,我想知道这是否足够。显然,弱点在于系统管理员 - 在安全系统上受信任的这些(即 2 个)很少 - 因为他们可以提升他们的权限(即 root),然后更改文件的所有权或能够读取的权限密码 - 然而,这很可能再次通过监视文件的校验和更改、FIM 校验和等来缓解。
那么我是以错误的方式解决这个问题,还是有其他关于如何处理这个问题的建议?