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

问题描述 投票:0回答:1

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

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

我一直看到文章,虽然AES_ENCRYPT是一个坏主意,这些东西应该只是用PHP保护。如果我这样做,我需要将所有记录拉下来,解密它们,然后进行PHP搜索 - 当然不会像MySQL那样快(?)。这个表可能有数千个条目。

对此有什么建议吗?我是否在思考它?如果我通过ssh建立连接,那么通过MySQL做什么会有什么风险呢?

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

php mysql security encryption doctrine
1个回答
2
投票

如果您乐意使用精确查找,则可以在加密字段上实现查找,而无需降低性能。您绝对应该在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或CBC。这就是HMAC必要的原因。

© www.soinside.com 2019 - 2024. All rights reserved.