我一直在做一些研究,以实现类似运算符查询加密数据。我想知道Google的Encrypted BigQuery是否实现了这个功能?
答案 0 :(得分:1)
TL; DR是的,经过时尚(或者,不,如果你想要'LIKE的'全部权力')。
您不能对任意加密字符串执行直接LIKE查询,因为无法在任意加密字符串上运行比较。所以你需要在服务器端运行解密,然后应用LIKE。类似的东西:
... WHERE DECRYPT(field, key) LIKE '%SEARCH%'
在这种情况下无法完成,因为加密在连接器中运行,然后需要检索所有行,解密所有行,然后运行LIKE检查。
在某些情况下,如果您使用以确定性方式映射符号的特殊(较弱)加密,则可以对加密使用LIKE。无论其位置如何,“A”将始终转换为“F”(或其他可计算的运行时值)。这意味着加密的搜索关键字减去任何修饰符(例如%)将出现在加密字段中。
如果这样,那么在未加密的字段中搜索'ATTACK'而不是'ATTACK AT DAWN',而不是在加密的字段中搜索'FXXFJR'是'FXXFJR FX PFNU'。您还可以搜索'%FX%',并通过在未加密的表格中搜索'%AT%'获得相同的结果。
但您需要使用特定算法加密字段。例如Rijndael根本不会这样做。此外,该算法固有地较弱;它实际上是所谓的随机密码,是Caesar cipher的更一般情况(可以通过将其扩展为Vigenère cipher来略微加强此实现而牺牲搜索时间。)
在这个的情况下,似乎需要一个特定的算法来加密可搜索的字段,即“SearchWords”(以及第二个称为“概率”的字段)。如果使用该算法加密列,则会将其传递给
https://github.com/google/encrypted-bigquery-client/blob/master/src/query_interpreter.py
def RewriteSearchwordsEncryption(field, literal):
并转换为某种形式,然后可以搜索。目前还不清楚这是否适用于任何字符串(例如'%AT DAW%')或者您是否需要指定其中一个字词(例如'ATTACK','AT'或'DAWN';'% TACK'无效。)
实际上,在重新读取代码时,它看起来像,就像加密的可搜索字段只包含加密关键字的哈希值的串联一样。您可以使用'CONTAINS'关键字进行此类搜索。