【问题标题】:What method of encryption is suitable for encrypting individual words, and also an entire document?哪种加密方法适合加密单个单词以及整个文档?
【发布时间】:2011-03-20 23:27:11
【问题描述】:

我需要将多个文档保存到云端,并且需要保存文档、文档元数据和用于搜索的单词/短语。

我的计划是使用对称密码来加密整个文档,但我不确定散列每个单词的正确方法。我想要一些安全的东西,但我不想不必要地增加每个单词中的字符数。

什么实现最适合对文档进行对称加密,什么是散列单词或短语而不使其比需要大很多倍的最佳方法?

【问题讨论】:

  • 加密单个单词的问题是您必须安全地存储 key,这与存储 word 大致相同安全...
  • 如果密钥从未上传到服务器并且始终在我的站点上,那么该私钥如何不安全?
  • 您要防御什么威胁?加密可能不是解决问题的正确工具,从密码分析的角度来看,您所描述的系统当然是一个坏主意。什么是资源,谁在攻击它,为什么您认为加密会有所帮助?
  • @Eric Lippert 我想将包含业务文档的大型 Lucene/Solr 索引外包到云端。数据可能由在 Azure 上实现此功能的第 3 方维护。 MSFT 和实施者都有保密的合同义务,但我想尽可能消除诱惑。这是一个受this Azure library 启发的理论思想。我尚未正式确定威胁模型,但对方向和反馈非常开放。
  • 我的理解是BPOS Archive(第三方产品)就是这样运作的。

标签: c# encryption hash cryptoapi encryption-symmetric


【解决方案1】:

首先,我建议使用不同的标签。听起来您真的很想以加密安全的方式将搜索卸载到服务器(这样服务器无法访问明文,并且客户端不需要传输整个索引)。

问题:

  • 攻击者能够找出索引中的哪些词(哪些不是)对您来说可能是个问题。您应该说明它是否是您要求的一部分。
  • 攻击者能够找出索引中哪些项目出现得更频繁,这对您来说可能是个问题。您应该说明它是否是您要求的一部分。
  • 能够将单词与文档相关联的攻击者对您来说可能是个问题。您应该说明它是否是您要求的一部分。
  • 攻击者可能能够完全颠覆服务器并观察查询/检索。在这种情况下,您也应该说明安全需求。
  • 可能还有其他我没有想到的。

我假设您正在设计自己的,但可能有一些现有技术、研究等比我在下面更聪明:

首先,我建议你应该对单词进行散列,在散列之前将明文与秘密(不与索引服务器共享)结合起来,并将散列截断到它可能是非唯一的点索引。这会降低您的哈希效率,但有助于防止攻击者将哈希用作明文等价物或通过实验确定秘密

对于第二个和第三个,您应该加密任何索引数据(例如计数或文档+位置)并在客户端对其进行解密。这可能会导致延迟。

第四,您需要考虑将真实请求隐藏在不相关的请求组中,诸如此类,但您需要进行大量数学运算,以确保您仍然不会受到统计分析的影响。

对于第五个,做一些网络研究。我相信会有一些东西,这是一个非常具体(而且不太常见)的需求,所以你会想要一个比我有更多想法的人。

【讨论】:

  • +1 这是一个非常聪明和有用的回复。我将继续寻找现有技术和任何有助于设计的东西
【解决方案2】:

您的要求是相互排斥的。这种元数据会泄露大量关于文档内容的信息,以至于不能称之为安全。

此外,加密单个单词是徒劳的。破解加密的难度通常被说成和破解密钥一样困难,但这是假设明文中的信息内容大于密钥中的信息内容。对于单个单词,这肯定不是真的。

【讨论】:

  • 我想到加密单词的原因是为了便于搜索保存在第 3 方位置的加密文档。有更好的解决方案吗?
  • @makerofthings:存储整个搜索索引数据库文件并将它们全部加密。每次添加文档时,创建者还必须更新索引、重新加密并上传索引。这可能只有在预期的读/写比率很高时才值得。您绝对不想做的是将多个帐户文档合并到一个索引中,因为任何用户都可以找到有关其索引中列出的任何文档的大量信息,即使他们没有解密文档的能力本身。
  • 如果重新上传一个综合索引太昂贵,你可以将索引分成两份——一份不经常更新并包含当时存在的所有文档,一份非常小的包含新添加的文件。每个搜索都会运行两次,针对两个索引中的每一个运行一次。定期将新文件的索引合并到大索引中,并重置新文档的索引。这样就不会经常传输大索引。
  • 那么,如果我把它放在 Lucene 的上下文中,如何进行搜索呢?加密的索引会被下载、解密和搜索吗?如果我想查找所有带有“AIG”或“内幕交易”字样的文件怎么办……我需要下载每个索引并完成该过程吗?有点扼杀了我想要实现的目标:安全搜索效率
  • @makerofthings:您有权访问的每个文档集合都有一个索引(如果使用上述累积/新拆分,则为 2)。您可能不得不经常重新下载/重新解密新索引,但累积的索引可能每月只会更改一次。在很大程度上,保密性和搜索效率是相互排斥的。如果您将所有内容都放在一个索引中,那么每个人都会知道您有一个与他们的搜索匹配的文档,即使他们不知道该文档包含的确切内容。通过多次搜索,他们可能会获得全部内容。
猜你喜欢
  • 2010-10-31
  • 2012-01-25
  • 2022-09-27
  • 1970-01-01
  • 2011-12-08
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多