Lucene.NET 加密全文搜索

Lucene.NET encrypted full text search

所以基本情况是我必须在SQL服务器数据库中存储一些文本信息。问题是文本必须加密且可搜索。 我做了一些关于这个主题的研究,似乎这还不可行(据我了解,这种类型的加密技术,同态加密还不够成熟,无法在现实生活中使用)。

我有一个想法,但我不确定它是否可行。有人可以建议吗?

所以我知道Lucene.NET可以用于全文搜索。我想做的是用 Lucene.NET 索引纯文本,存储索引而不是纯文本,将加密值存储在 SQL 服务器中,然后搜索 Lucene 索引和 return Lucene 索引中记录的 ID,从 SQL 服务器读取该特定行,然后解密数据。

这可能吗?我可以用 Lucene 索引一些东西然后不存储索引数据吗?

这并不容易。您所描述的内容很少在商业数据库中实现,尽管该领域有一些理论成果。我建议你去 google scholar 并开始寻找关于这个主题的论文。

这里有一些帮助您入门的参考资料:

不确定我是否理解您要求的细微差别...但听起来条款可以很简单,但整个字符串需要加密?

如果是这样,我多次使用的模式是用 Field.STORE.NO 索引字段,然后将内容放入二进制字段中。我用它来创建文档存储,其中文档是类型化的结构化对象。定义要索引的属性,然后将压缩后的对象 json 序列化为二进制字段。

在您的情况下,二进制文件将是通过您需要的任何方式加密的字符串。

如果文本是用向量索引的(这意味着包含术语位置),这仍然存在文本可以(大部分)被重构的风险,这是 slop 查询所必需的(即 "fred wilma"~5 = "fred" 在 "wilma" 的 5 个术语之内)。 "mostly" 因为不会有停用词。如果你不需要 slop 那么你可以在没有的情况下建立索引。

稍加注意(可能是自定义分析器和查询分析器),您也可以加密术语。