如果我使用rot13加密,我仍然可以进行文本搜索。例如:
Query: John
Encrypted Query: WBUA
Database Entries: John Smith => WBUA FZVGU
Jon Babe => WBA ONOR
Result: WBUA matches WBUA FZVGU
是否有更安全的加密方法(例如使用安全密钥),我也可以进行文本搜索?
谢谢
如果我使用rot13加密,我仍然可以进行文本搜索。例如:
Query: John
Encrypted Query: WBUA
Database Entries: John Smith => WBUA FZVGU
Jon Babe => WBA ONOR
Result: WBUA matches WBUA FZVGU
是否有更安全的加密方法(例如使用安全密钥),我也可以进行文本搜索?
谢谢
不,这在安全加密中是不可能的。原因其实很简单。
您所做的要求您能够创建一小段纯文本 λ 的密文 ξ(λ),然后可以在更大的纯文本 Λ 中找到 λ 出现的任何地方的密文。
当人们进行加密时,他们试图达到所谓的保护目标。其中之一通常是外部观察者无法确定同一条文本是否在同一条消息中出现两次,或者甚至两条消息是否源自同一个纯文本。因此,不能保证 ξ(Λ) 包含 ξ(λ),并且在 ξ(Λ) 中找到 ξ(λ) 并不能告诉您任何信息,因为它可以出现在任何地方。
另一种方法是使用搜索索引(倒排索引)。
加密前的数据索引。然后加密索引。
您必须在执行搜索之前解密索引,但索引可能比数据小得多。此外,根据索引技术,可能只有部分索引需要解密。
(如果数据库中的文本经常更新,这种方法可能效率不高。)
样本索引(抽象):
Word Record#
---- --------
anders 245,354
babe 181
bill 133,354
david 201,245
john 139
jon 181,310
niven 201
smith 133,139,310