我想加密我的 MySQL 数据库中的 IP 地址,具有以下约束:
- 不需要抵抗可以执行查询的攻击者。
- 必须能够抵抗有权访问磁盘上文件的攻击者。
- 必须能够根据加密形式验证 IP,以检查它是否匹配。
- 检查
/24
通配符(例如10.20.30.*
)也会很有用。 - 系统启动时无法输入任何形式的密钥或密码,因为这将在数据中心的服务器上运行,并且每次重新启动都通过 SSH 登录是我可以做到的痛苦。
我目前正在使用单独的数据库连接来提供更好的权限限制,并使用单独的密码表。我还使用 MySQLi 和半自动代码审查来确保没有 SQL 注入漏洞。
使用非加盐(即确定性)哈希机制,很容易计算所有可能的 IP 哈希。使用加盐散列可以减少这个问题,但如果攻击者只是试图破坏一个 IP 散列,它仍然不会好多少。当然,所有这些都可以防止通配符搜索。
有针对这个的解决方法吗?
更新:
经过一番思考,我想出了以下方案:
- Webapp 在源代码中嵌入了一个 4096 位 RSA 公钥,我将私钥保存在我家用机器上的 TrueCrypt 卷中。
- 在向日志表中插入条目时,IP 会用随机字符串填充并使用公钥加密。这使得解密变得不可能,并使加密变得不确定。
- webapp 提供了一个用于导出日志的 API,只能由经过身份验证的管理员用户通过 SSL 访问。
- 我编写了一个应用程序来使用 API 来浏览我的家用机器的日志,使用私钥来解密 IP 地址。
- 当 IP 地址被禁止时,IP 以明文形式存储在禁止表中。
有什么意见或建议吗?