Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 文件中的加密、可压缩、跨平台文件系统_Qt_Encryption_Lucene_Drm - Fatal编程技术网

Qt 文件中的加密、可压缩、跨平台文件系统

Qt 文件中的加密、可压缩、跨平台文件系统,qt,encryption,lucene,drm,Qt,Encryption,Lucene,Drm,我们希望制作一个桌面应用程序,搜索大小为几GB的本地打包文本数据库。我们正在考虑使用lucene 因此,基本上用户将搜索几个单词,本地lucene数据库将返回一个结果。但是,我们希望防止用户获取lucene索引的全文转储,因为文本数据库是有价值的和专有的。web应用程序不是这里的解决方案,因为客户希望此桌面应用程序在internet不可用的区域工作 我们如何加密lucene的数据库,以便只有客户端应用程序可以访问lucene的索引,而窥探的用户不能获取索引的全文转储 我们认为,实现这一点的一种方

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

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

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

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

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

有没有更简单/更好的方法

[这是针对客户端的。是的,是的,从概念上来说这是件坏事:-)但这是他们想要的方式。基本上,问题是只有桌面应用程序可以访问lucene索引,其他人不能访问。有人指出这本质上是DRM。是的,它类似于DRM]

我们如何加密lucene的数据库 只有客户端应用程序才能 访问lucene的索引和窥探 用户无法获取的全文转储 索引


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

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

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

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

或者买一个符合你需要的商业产品


[编辑]如果要使用加密索引,只需实现自己的索引。例如,请检查源代码中的
SimpleFSDirectory

这里的问题是,您试图同时向用户提供数据并拒绝em提供数据。这基本上是另一个名称下的DRM问题-攻击者(用户)完全控制应用程序的环境(硬件和操作系统)。在这种情况下不可能有安全感,只有模糊和安全错觉

虽然你可以让用户更难获得未加密的数据,但你永远无法阻止它——因为这意味着破坏你的应用程序。也许最接近的事情是提供一个密封的硬件盒,但这会使它无法使用


请注意,从法律角度来看,对安全性抱有半途而废的幻想可能就足够了(例如DMCA的反规避条款),但这超出了SO的范围。

为什么不建立一个只包含用户可以通过桌面应用程序访问和发送该索引的数据的索引呢?

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


不,它不是完全安全的,但它应该工作得足够好。

单向散列函数

你不存储明文,你存储散列。当您想要搜索一个术语时,您可以将该术语推送到函数中,然后搜索散列。如果数据库中有匹配项,请返回竖起大拇指


为了节省空间,您愿意接受误报吗?Bloom filter.

(对于DRM版本,请参见例如此问题:)实际上,密钥将来自标准的基于硬件的软件保护USB加密狗。@Sidhart:无论密钥存储在何处,用户都可以访问加密数据和密钥,因此您已经丢失了。正是由于这个原因,拷贝保护和DRM无法工作。(关于USB加密狗无用的原因,请参见)@Sidharth:HW加密狗可能会有所帮助(当它工作时——它的内部大多有一个串行到USB的乱码,渗出各种各样的快乐和喜悦),但是整个应用程序必须是加密安全的,否则,破解者只会找到检查硬件代码的地方,然后用“始终允许”对其进行修补,或者转储解密密钥,这样您就回到了第1步。我们想让它变得困难,但并非不可能。因此,是的,您可以进行内存转储并获取解密密钥(无论您使用的是软件密钥还是基于硬件的加密狗)。有没有办法让黑客们很难做到这一点。。。我们不想让它变得不可能。关键是客户端正在分发一个包含数千个有价值文本文件的数据库。他希望客户能够离线搜索他们。搜索是可以的,但不分青红皂白地窃取数据不是。是的,人们可以这样做。。。但是我们想让人们更难,而不是不可能。我建议让人们更容易使用你的应用程序,这样他们就没有动力把数据拿出来。花大量的钱让你的合法用户开心,而不是让他们因为版权保护而发疯(这只会让他们在没有版权保护、没有任何欺骗的情况下,下一个破解你的应用程序版本)。这不是我们的应用程序。。。这是给客户的。他们想要这样。我们不能和他们进行道德辩论。像这样的问题常常与哲学混淆在一起:-)。我们想知道如何做,而不是