安全散列只有几百万件物品

时间:2011-04-23 07:27:46

标签: cryptography hash

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

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

但是,如果服务器遭到入侵并且攻击者可以访问整个数据库甚至可能存在服务器上存储的任何私钥,该怎么办?如果攻击者可以找到公司列表或客户列表,那就没问题了,但他不应该找出哪些公司与哪个客户有关,最好不应该找到每个客户的地址。< / p>

客户端由其地址标识,而不是通过任何类型的唯一ID标识。在我的国家,只有大约500万个不同的地址。我虽然使用安全哈希来保护地址,但是计算500万个哈希并构建从哈希到地址的映射非常容易。即使哈希被腌制了。

我唯一可以想到的是通过默默无闻的安全性:我确保散列函数无法清晰识别并且在编译代码中,并且希望攻击者不够聪明,无法全面了解。

有什么方法可以让它真正安全吗?

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

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

或者这个思路中是否存在另一个(显而易见的?)缺陷?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您不应将数据库直接存储在网络服务器上。将其打包在无法直接从Web访问的服务器上。这将使每个骗子都变得更加困难。我没有为您准备好解决方案,但更好的一点是:面对同样问题的信用卡信息。 Google针对此类案例进行数据库建模,您将找到解决方案。