Google Encrypted BigQuery 是否能够使用 LIKE 运算符查询加密数据?

Is Google Encrypted BigQuery capable of querying encrypted data using LIKE operator?

我一直在做一些研究,以实现 like 运算符来查询加密数据。我想知道 Google 的 Encrypted BigQuery 是否实现了这个功能?

TL;DR 是的,时尚之后(或者,不,如果你想要 LIKE 的 'full power')。

你不能对任意加密字符串直接进行LIKE查询,因为无法运行对任意进行比较] 加密字符串。所以你需要解密 运行 服务器端,然后应用 LIKE。类似于:

... WHERE DECRYPT(field, key) LIKE '%SEARCH%'

在这种情况下无法完成,因为连接器中的加密是 运行,然后需要检索 所有 行,将它们全部解密,然后然后 运行 LIKE 检查。

在某些情况下,如果您使用以确定方式映射符号的特殊(较弱)加密,例如"A" 将始终转换为 "F"(或其他可计算的 运行 时间值),无论其位置如何。这意味着加密的搜索密钥减去任何修饰符(例如 %)将出现在加密字段中。

如果这成立,那么不是在未加密的 'ATTACK AT DAWN' 字段中搜索 'ATTACK',而是在加密的 'FXXFJR' 字段中搜索 'FXXFJR FX PFNU'。您还可以搜索“%FX%”并获得与在未加密 table.

上搜索“%AT%”相同的结果

但您需要使用特定算法对该字段进行加密。例如 Rijndael 根本不会做。此外,该算法本质上较弱;这实际上就是所谓的随机密码,是 Caesar cipher (one could slightly strengthen this implementation at the expense of search time by extending it to be a Vigenère cipher).

的更一般情况

这个案例中,您似乎需要使用一种特定的算法来加密可搜索字段,即"SearchWords"(第二个算法称为"Probabilistic").如果您使用该算法加密列,它将传递给

https://github.com/google/encrypted-bigquery-client/blob/master/src/query_interpreter.py

def RewriteSearchwordsEncryption(field, literal):

并转换为某种形式,然后可以进行搜索。目前尚不清楚这是否适用于 any 字符串(例如 '%AT DAW%')或者您是否需要指定其中一个单词(例如 'ATTACK'、'AT'或 'DAWN';“%TACK”将不起作用)。

实际上,在重新阅读代码时,在我看来好像加密的可搜索字段还简单地包含加密关键字的哈希值的串联。您 运行 这种使用 'CONTAINS' 关键字的搜索。