Cryptography 仅对数百万项进行安全哈希

Cryptography 仅对数百万项进行安全哈希,cryptography,hash,Cryptography,Hash,我有一个公司及其客户的数据库。数据库需要能够回答“哪些公司的客户住在地址X?”的问题,当然,这通常非常容易实现 我想避免的是,攻击者可以以某种方式找到所有公司客户关系。该数据库将驻留在Web服务器上,对它的查询将受到限制,以避免强行下载所有数据 但是,如果服务器遭到破坏,攻击者可以访问整个数据库,甚至可能访问存储在服务器上的任何私钥,该怎么办?如果攻击者可以找到公司列表或客户列表,这是正常的,但他不应该能够找出哪些公司与哪个客户相关,最好是他不应该能够检索每个客户的地址 客户是通过他们的地址识别

我有一个公司及其客户的数据库。数据库需要能够回答“哪些公司的客户住在地址X?”的问题,当然,这通常非常容易实现

我想避免的是,攻击者可以以某种方式找到所有公司客户关系。该数据库将驻留在Web服务器上,对它的查询将受到限制,以避免强行下载所有数据

但是,如果服务器遭到破坏,攻击者可以访问整个数据库,甚至可能访问存储在服务器上的任何私钥,该怎么办?如果攻击者可以找到公司列表或客户列表,这是正常的,但他不应该能够找出哪些公司与哪个客户相关,最好是他不应该能够检索每个客户的地址

客户是通过他们的地址识别的,而不是通过任何一种唯一的ID。在我的国家,只有大约500万个不同的地址。我曾想过使用安全的散列来保护地址,但计算500万个散列并构建从散列到地址的映射非常容易。即使是咸的

我能想到的唯一一件事是通过模糊性实现安全性:我确保哈希函数不是清晰可识别的,并且是在编译代码中,希望攻击者不够聪明,无法完全解决这一问题

有没有办法让这一切变得真正安全

编辑:a3_nm和Nick Johnson的评论当然是正确的:如果攻击者可以访问所有数据,则不可能使其安全。感谢您指出这个(明显的)缺陷

所以我需要一些没有存储在数据库中的东西。为了确保只有公司和客户才能访问他们自己的数据,我可以使用他们自己的密码对其进行加密。因此,一家公司的客户名单将使用该公司的密码加密,该密码永远不会存储在服务器上,并且必须与每个请求一起发送。我认为我可以假设攻击者无法拦截包含密码的请求


或者在这一思路中是否还有另一个(明显的)缺陷

不应将数据库直接存储在Web服务器上。将其打包到无法直接从web访问的服务器上。这将使每一个攻击者都更加困难。我没有现成的解决方案,但有一个更好的起点:信用卡信息面临同样的问题。谷歌为这种情况下的数据库建模,你会找到解决方案

我不确定是否有可能做到这一点。您可能希望完全访问服务器的攻击者无法获得服务器应该回答的查询的答案。如果攻击者具有服务器访问权限,他可以使用服务器来回答服务器可以回答的任何查询--这是无法解决的。

因此,如果您的所有数据都被公开,您不希望攻击者能够访问此信息,但您仍然希望自己能够访问吗?我希望我们不必指出为什么这是不可能的。将数据库放在另一台服务器上并不能从根本上保证它的安全。充其量,这将使攻击者更难对付。在最坏的情况下,这一点都不重要。但是我很感激关于信用卡信息的提示,我会调查的。