2

我们希望制作一个桌面应用程序来搜索本地打包的文本数据库,该数据库大小为几 GB。我们正在考虑使用 lucene。

所以基本上用户会搜索几个词,本地 lucene 数据库就会返回一个结果。但是,我们希望防止用户获取 lucene 索引的全文转储,因为文本数据库是有价值的和专有的。Web 应用程序不是这里的解决方案,因为客户希望此桌面应用程序在互联网不可用的区域工作。

我们如何加密 lucene 的数据库,以便只有客户端应用程序可以访问 lucene 的索引,而窥探用户不能获取索引的全文转储?

我们认为,这样做的一种方法是 lucene 索引是否可以存储在文件内的加密文件系统中(类似于 truecrypt)。因此桌面应用程序将“挂载”包含 lucene 索引的文件。

这需要跨平台(Linux、Windows)......我们将使用 Qt 或 Java 来编写桌面应用程序。

有没有更简单/更好的方法来做到这一点?

[这是给客户的。是的,是的,从概念上讲这是一件坏事:-) 但这就是他们想要的。基本上关键是只有桌面应用程序应该能够访问 lucene 索引,而没有其他人。有人指出,这本质上是 DRM。是的,它类似于 DRM]

4

6 回答 6

5

我们如何加密 lucene 的数据库,以便只有客户端应用程序可以访问 lucene 的索引,而窥探用户不能获取索引的全文转储?

你没有。用户将拥有密钥和加密数据,因此他们可以访问所有内容。您可以将密钥隐藏在混淆文件中,但这只会增加一点延迟。它当然不会阻止窥探用户。你需要重新考虑。

于 2010-06-30T11:59:37.250 回答
3

这里的问题是您试图同时向用户提供数据并拒绝来自他们的数据。这基本上是不同名称的 DRM 问题 - 攻击者(用户)完全控制应用程序的环境(硬件和操作系统)。在这种情况下,没有安全是可能的,只有混淆和安全幻觉。

虽然您可以让用户更难获取未加密的数据,但您永远无法阻止它——因为这意味着破坏您的应用程序。可能最接近的方法是提供一个密封的硬件盒,但恕我直言,这会使它无法使用。

请注意,从法律角度(例如 DMCA 的反规避条款)来说,对安全性做出半信半疑的错觉可能就足够了——但这超出了 SO 的范围。

于 2010-06-30T12:09:30.157 回答
2

从技术上讲,您无能为力。Lucene 是用 Java 编写的,Java 代码总是可以反编译或在调试器中运行以获取您需要存储在某处的密钥(可能在您出售给用户的许可证密钥中)。

您唯一的选择是法律(或与用户的合同)。文本数据受版权保护,因此如果用户以超出许可协议范围的任何方式使用它,您可以起诉用户。

或者您可以编写自己的文本索引系统。

或者购买满足您需求的商用产品。

[编辑]如果你想使用加密索引,只需实现你自己的FSDirectory. 检查源以SimpleFSDirectory获取示例。

于 2010-06-30T12:08:43.917 回答
1

为什么不构建一个仅包含用户可以访问的数据的索引并使用桌面应用程序发送该索引?

于 2010-06-30T12:29:46.737 回答
1

对我来说,True-crypt 听起来像是一个可靠的计划。您可以安装卷并以各种疯狂的矫枉过正的方式对其进行加密,并像访问任何其他文件一样访问它们。

不,它并不完全安全,但它应该足够好用。

于 2010-07-01T13:28:23.660 回答
1

单向哈希函数

您不存储明文,而是存储哈希值。当你想搜索一个词时,你通过函数推送这个词,然后搜索哈希。如果数据库中有匹配项,则返回竖起大拇指。

您是否愿意接受误报以节省空间?布隆过滤器。

于 2011-07-31T22:36:58.430 回答