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

Encryption 如何对加密文本执行通配符搜索?,encryption,blowfish,pci-compliance,Encryption,Blowfish,Pci Compliance,我们有一个拥有大量用户的网站,由于PCI合规性问题,我们必须对他们的姓名进行加密存储(我们使用blowfish)。 现在,我们需要一个通配符搜索功能,通过他们的名字在管理面板,这是我们不能解密的“在查询”的方式 有什么通用的解决方案可以解决这个问题?您可以使用诸如Lucene之类的索引系统,为每个文档编制索引(解密),并在此索引上进行搜索 我可以想出两种可能的方法 第一种方法适用于名称本身不保密,但与之相关的数据保密的情况。您可以设置单独的搜索索引: Name R

我们有一个拥有大量用户的网站,由于PCI合规性问题,我们必须对他们的姓名进行加密存储(我们使用blowfish)。 现在,我们需要一个通配符搜索功能,通过他们的名字在管理面板,这是我们不能解密的“在查询”的方式


有什么通用的解决方案可以解决这个问题?

您可以使用诸如Lucene之类的索引系统,为每个文档编制索引(解密),并在此索引上进行搜索

我可以想出两种可能的方法

第一种方法适用于名称本身不保密,但与之相关的数据保密的情况。您可以设置单独的搜索索引:

Name                 Record Number
----                 -------------
John Q. Public       12345
Hector H. Suarez     54321
Katherine T. Carson  98712
搜索索引以查找相关记录编号。检索并解密该特定记录

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

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

对于每次搜索,您都会对名称进行哈希运算,然后查找该哈希值。再次检索并解密相应的记录。除非您准备为所有主要搜索可能性设置许多类似的索引,否则您不能执行“检索所有史密斯”之类的部分名称搜索。

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

通过阅读本文,您会发现“PCI DSS要求3.3和3.4仅适用于PAN”。这可能是您不必对PAN以外的数据进行加密的变通方法,这意味着名称可以存储在纯文本中


这不一定是最佳实践,但如果你绝对必须具备能够通过文本

通配符搜索的功能,这是违反PCI要求的,因为我们在Lucene.encrypt Lucene数据库中使用相同的密钥对它们进行解密,只在需要时解密。谢谢您的响应。第二种方法不起作用,因为它无法检索所有的Smith,关于第一种方法,我也考虑过,现在我在等待回应,看看PCI的东西是否合适,我会随时发布。再次感谢。如果你只准备了一个姓氏的散列索引,你就可以检索到所有的史密斯。搜索将限于那些您已经准备好索引的字段。无法进行自由形式/通配符搜索。