Halite/Doctrine vs MySQL AES_ENCRYPT:安全性/性能



我有一个Web应用程序(Symfony 4(需要符合HIPAA标准,这意味着我需要加密数据。 最初我只是打算通过 Halite 加密 PHP 中的数据并将其保存在数据库中,但是有些字段(姓氏、名字、电话号码(我无法加密,因为它们将用于搜索字段,因此我需要(?MySQL能够使用where子句。

出于这个原因,我将使用AES_ENCRYPT并将MySQL连接设置为通过本地端口转发隧道通过ssh,以便连接是安全的,并且没有人能够获得密码。

我一直看到文章,尽管AES_ENCRYPT是一个坏主意,并且这些东西应该在PHP中得到保护。 如果我这样做,我需要拉下所有记录,解密它们,然后进行PHP搜索 - 肯定没有MySQL可以做到的那么快(?此表可能有数千个条目。

对此有什么建议吗? 我是不是想多了?如果我通过 ssh 进行连接,通过 MySQL 执行此操作会有什么风险?

互联网上有很多建议,很难知道什么是正确的=/提前非常感谢!

如果您愿意使用精确查找,则可以在不降低性能的情况下对加密字段实施查找。 你绝对应该在你的PHP代码中实现加密逻辑。

如果您目前有表格,请说:

(id, first_name, last_name, email)

我们首先为要加密的字段添加其他列,因此我们的表变为

(id, first_name, first_name_lu, last_name, last_name_lu, email)

当我们更新或插入一行时,我们会做两件事:

  • 使用第一个对称密钥,我们对必填字段进行加密。 此结果位于原始列中。
  • 使用第二个对称密钥,我们对必填字段进行 HMAC。 此结果位于*_lu列中。

当我们想要执行查找时,我们:

  • 使用第二个对称密钥,HMAC 搜索查询,然后根据结果查找*_lu列。
  • 如果我们找到匹配项,则原始列中的加密值就是我们搜索的值。

您可能想知道为什么HMAC是必要的,为什么我们不能重新加密和比较? 我们可以这样做,但这也意味着我们必须使用ECB模式进行加密,这是一个很大的安全漏洞。 应改用 GCM 或全血细胞计数。 这就是HMAC的必要性。

最新更新