我正在构建一个需要存储敏感信息的应用程序,这意味着我的数据库中的数据是加密的,因此有权访问数据库的黑客/员工无法破译敏感数据。但是,它仍然需要是可搜索的(在一定程度上)。
我理解可能需要做出某些妥协。例如,如果有必要,我愿意保留一些未加密的数据属性以使它们可索引,但是“主体”必须是加密的。
对于存储需要由授权人员查看、搜索和/或排序的敏感数据,有哪些最佳实践和方法?
(我正在考虑从“正文”中提取非stop words,并在加密正文之前将它们随机放在一个字段中,然后将该字段提供给搜索索引器,我怀疑这是否提供了任何真正的安全性。)
发布于 2011-02-12 08:09:51
我目前正在寻找解决这个问题的方法。
我发现的最好的想法之一,是来自https://docs.microsoft.com/en-us/archive/blogs/raulga/indexing-encrypted-data的这篇文章。
他建议使用MAC来创建一个可索引的列。该解决方案适用于MS SQL Server,但也可以应用于其他系统。
发布于 2015-10-14 04:50:24
更新:您将希望查看CipherSweet,而不是滚动自己的设计。它负责大量的subtle security details,并且有一个straightforward security argument。
散列函数不是这里的解决方案。正如公认的答案所暗示的那样,indexing encrypted data需要一个“盲目索引”,由MAC促成。
假设你在加密社保号码。当您将它们插入到数据库中时,您可能会执行如下操作:
$ssn_encrypted = \Defuse\Crypto\Crypto::encrypt($ssn, $our_encryption_key);
$ssn_blind_idx = \hash_hmac('sha512', $ssn, $our_search_key);
然后将这两个值存储在数据库中。当您需要根据SSN输入快速获取一个值时,您可以重新计算HMAC并基于此进行搜索。
数据库永远不会看到SSN,并且您的加密密钥永远不应该签入到源代码控制(SVN、git等)中。
发布于 2013-01-16 13:57:44
您需要使用一类新的加密算法,称为格式保留加密(搜索Wiki)。
我会明智地随意使用这样的算法,因为它们对文献来说是相对较新的,并且这是一个经验法则,在您可以将算法用于严肃的目的之前,您需要等待算法经过(比方说)十年的加密分析。我也不确定这种加密格式是否有任何标准。只有2010年提交的标准草案。http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/ffx/ffx-spec.pdf
因此,请考虑明智地使用它。对于需要超过(比方说)5年的保密跨度的信息,不要依赖格式保留加密。
https://stackoverflow.com/questions/4961603
复制相似问题