【问题标题】:Secure hashing of just a few million items仅几百万个项目的安全散列
【发布时间】:2011-08-11 09:33:43
【问题描述】:

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

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

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

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

我唯一能想到的就是通过晦涩难懂的安全性:我确保散列函数无法清晰识别并且存在于编译代码中,并希望攻击者不够聪明,无法弄清楚这一切。

有什么方法可以让这变得真正安全吗?

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

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

或者这种思路还有另一个(明显的?)缺陷吗?

【问题讨论】:

  • 因此,如果您的所有数据被暴露,您不希望攻击者能够访问这些信息 - 但您仍然希望自己能够访问?我希望我们不必指出为什么这是不可能的。

标签: cryptography hash


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 将数据库放在另一台服务器上并不能使其从根本上更安全。充其量只会让攻击者稍微难一些。在最坏的情况下,它根本不重要。但我很欣赏有关信用卡信息的提示,会调查一下。
    猜你喜欢
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2012-04-04
    相关资源
    最近更新 更多