我需要将多个文档保存到云端,并且需要保存文档、文档元数据和用于搜索的单词/短语。
我的计划是使用对称密码来加密整个文档,但我不确定散列每个单词的正确方法。我想要一些安全的东西,但我不想不必要地增加每个单词中的字符数。
哪种实现最适合对文档进行对称加密,以及在不使其比所需大小大很多倍的情况下散列单词或短语的最佳方法是什么?
我需要将多个文档保存到云端,并且需要保存文档、文档元数据和用于搜索的单词/短语。
我的计划是使用对称密码来加密整个文档,但我不确定散列每个单词的正确方法。我想要一些安全的东西,但我不想不必要地增加每个单词中的字符数。
哪种实现最适合对文档进行对称加密,以及在不使其比所需大小大很多倍的情况下散列单词或短语的最佳方法是什么?
首先,我建议使用不同的标签。听起来您真的很想以加密安全的方式将搜索卸载到服务器(这样服务器就无法访问明文,并且客户端不需要传输整个索引)。
问题:
我假设您正在设计自己的,但可能有一些现有技术、研究等比我在下面更聪明:
首先,我建议您应该对单词进行散列,在散列之前将明文与秘密(不与索引服务器共享)结合起来,并将散列截断到索引中可能不唯一的点。这会降低您的哈希效率,但有助于防止攻击者将哈希用作明文等价物或通过实验确定秘密
对于第二个和第三个,您应该加密任何索引数据(例如计数或文档+位置)并在客户端对其进行解密。这可能会花费您的延迟。
对于第四点,您需要考虑将真正的请求隐藏在不相关的请求组中,诸如此类,但您需要进行大量数学运算以确保您仍然不会受到统计分析的影响。
第五,做一些网络研究。我相信那里会有一些东西,这是一个非常具体(而且不太常见)的需求,所以你会想要一个比我有更多想法的人。
您的要求是相互排斥的。这种元数据会泄露大量关于文档内容的信息,以至于不能称之为安全。
此外,加密单个单词是徒劳的。破解加密的难度通常被称为破解密钥的难度,但这是假设明文中的信息内容大于密钥中的信息内容。对于单个单词,这肯定不是真的。