Lucene.NET 加密全文搜索
Lucene.NET encrypted full text search
所以基本情况是我必须在SQL服务器数据库中存储一些文本信息。问题是文本必须加密且可搜索。
我做了一些关于这个主题的研究,似乎这还不可行(据我了解,这种类型的加密技术,同态加密还不够成熟,无法在现实生活中使用)。
我有一个想法,但我不确定它是否可行。有人可以建议吗?
所以我知道Lucene.NET可以用于全文搜索。我想做的是用 Lucene.NET 索引纯文本,存储索引而不是纯文本,将加密值存储在 SQL 服务器中,然后搜索 Lucene 索引和 return Lucene 索引中记录的 ID,从 SQL 服务器读取该特定行,然后解密数据。
这可能吗?我可以用 Lucene 索引一些东西然后不存储索引数据吗?
这并不容易。您所描述的内容很少在商业数据库中实现,尽管该领域有一些理论成果。我建议你去 google scholar 并开始寻找关于这个主题的论文。
这里有一些帮助您入门的参考资料:
Dawn Xiaodong Song、David Wagner 和 Adrian Perrig。 Practical techniques for searches on encrypted data.
R。 Brinkman, L. Feng, J. Doumen, P.H. Hartel 和 W. Jonke。加密数据中的高效树搜索。在Security In Information Systems, pages 126-135, 2004.
D Boneh、G Di Crescenzo、R Ostrovsky、G Persiano。 Public Key Encryption with keyword Search
P Golle、J Staddon、B Waters。 Secure Conjunctive Keyword Search over Encrypted Data.
- 另请查看此演示文稿:How to Search on Encrypted Data。
不确定我是否理解您要求的细微差别...但听起来条款可以很简单,但整个字符串需要加密?
如果是这样,我多次使用的模式是用 Field.STORE.NO 索引字段,然后将内容放入二进制字段中。我用它来创建文档存储,其中文档是类型化的结构化对象。定义要索引的属性,然后将压缩后的对象 json 序列化为二进制字段。
在您的情况下,二进制文件将是通过您需要的任何方式加密的字符串。
如果文本是用向量索引的(这意味着包含术语位置),这仍然存在文本可以(大部分)被重构的风险,这是 slop 查询所必需的(即 "fred wilma"~5 = "fred" 在 "wilma" 的 5 个术语之内)。 "mostly" 因为不会有停用词。如果你不需要 slop 那么你可以在没有的情况下建立索引。
稍加注意(可能是自定义分析器和查询分析器),您也可以加密术语。
所以基本情况是我必须在SQL服务器数据库中存储一些文本信息。问题是文本必须加密且可搜索。 我做了一些关于这个主题的研究,似乎这还不可行(据我了解,这种类型的加密技术,同态加密还不够成熟,无法在现实生活中使用)。
我有一个想法,但我不确定它是否可行。有人可以建议吗?
所以我知道Lucene.NET可以用于全文搜索。我想做的是用 Lucene.NET 索引纯文本,存储索引而不是纯文本,将加密值存储在 SQL 服务器中,然后搜索 Lucene 索引和 return Lucene 索引中记录的 ID,从 SQL 服务器读取该特定行,然后解密数据。
这可能吗?我可以用 Lucene 索引一些东西然后不存储索引数据吗?
这并不容易。您所描述的内容很少在商业数据库中实现,尽管该领域有一些理论成果。我建议你去 google scholar 并开始寻找关于这个主题的论文。
这里有一些帮助您入门的参考资料:
Dawn Xiaodong Song、David Wagner 和 Adrian Perrig。 Practical techniques for searches on encrypted data.
R。 Brinkman, L. Feng, J. Doumen, P.H. Hartel 和 W. Jonke。加密数据中的高效树搜索。在Security In Information Systems, pages 126-135, 2004.
D Boneh、G Di Crescenzo、R Ostrovsky、G Persiano。 Public Key Encryption with keyword Search
P Golle、J Staddon、B Waters。 Secure Conjunctive Keyword Search over Encrypted Data.
- 另请查看此演示文稿:How to Search on Encrypted Data。
不确定我是否理解您要求的细微差别...但听起来条款可以很简单,但整个字符串需要加密?
如果是这样,我多次使用的模式是用 Field.STORE.NO 索引字段,然后将内容放入二进制字段中。我用它来创建文档存储,其中文档是类型化的结构化对象。定义要索引的属性,然后将压缩后的对象 json 序列化为二进制字段。
在您的情况下,二进制文件将是通过您需要的任何方式加密的字符串。
如果文本是用向量索引的(这意味着包含术语位置),这仍然存在文本可以(大部分)被重构的风险,这是 slop 查询所必需的(即 "fred wilma"~5 = "fred" 在 "wilma" 的 5 个术语之内)。 "mostly" 因为不会有停用词。如果你不需要 slop 那么你可以在没有的情况下建立索引。
稍加注意(可能是自定义分析器和查询分析器),您也可以加密术语。