如何通过加密文本执行通配符搜索?

时间:2011-12-15 07:46:08

标签: encryption blowfish pci-compliance

我们有一个拥有大量用户的网站,由于PCI合规性问题,我们必须加密他们的名字(我们使用河豚)。 现在我们需要通过管理面板中的名称来设置通配符搜索功能,我们无法以“查询”方式解密。

解决这个问题有哪些一般解决方案?

3 个答案:

答案 0 :(得分:1)

我可以想到两种可能的方法。

第一个工作的地方名称本身并不是秘密,但与之相关的数据是。您可以设置单独的搜索索引:

Name                 Record Number
----                 -------------
John Q. Public       12345
Hector H. Suarez     54321
Katherine T. Carson  98712

搜索索引以查找相关记录编号。检索并解密该特定记录。

第二个是名字本身是秘密的。基本上,将名称视为密码:使用加密安全散列(如SHA-256)散列每个名称。在这种情况下,您将无法使用salt,因为它用于搜索。您可能还需要预先处理搜索,因为“John Q. Public”和“John Q Public”(没有句号)会散列到非常不同的值。此搜索索引如下所示:

Hashed Name          Record Number
-----------          -------------
1A2BFF68C ... CAF4   12345
5820BAA5F ... 67FA   54321
2039F288A ... 9BC2   98712

对于每次搜索,您都会对名称进行哈希处理并查找该哈希值。再次检索和解密相应的记录。您不能进行部分名称搜索,例如“检索所有Smiths”,除非您准备为所有主要搜索可能性设置许多类似的索引。

答案 1 :(得分:0)

使用Lucene等索引系统,索引每个文档(解密),并搜索此索引。

答案 2 :(得分:0)

仔细阅读PCI DSS 2.0版中标题为“PCI DSS应用信息”的PCI-DSS部分。

您应该从阅读中发现“PCI DSS要求3.3和3.4仅适用于PAN”。这可能是您不必加密PAN以外的数据的解决方法 - 这意味着名称可以以纯文本格式存储。

这不一定是最佳做法,但如果您必须具备能够通过文本进行通配符搜索的功能,则需要考虑