【发布时间】:2011-08-11 09:33:43
【问题描述】:
我有一个包含公司及其客户的数据库。数据库需要能够回答“哪些公司的客户住在地址 X?”这个问题,当然这通常很容易实现。
我要避免的是,攻击者可以通过某种方式找到所有公司与客户的关系。该数据库将驻留在网络服务器上,对它的查询将受到限制,以避免暴力下载所有数据。
但是,如果服务器遭到入侵,并且攻击者可以访问整个数据库,甚至可能访问存储在服务器上的任何私钥,该怎么办?如果攻击者可以找到公司列表或客户列表,那是可以的,但他不应该能够找出哪些公司与哪个客户相关,最好他不应该能够检索每个客户的地址。
客户是通过他们的地址来识别的,而不是通过任何类型的唯一 ID。在我的国家,只有大约 500 万个不同的地址。我虽然使用安全哈希来保护地址,但计算 500 万个哈希并构建从哈希到地址的映射非常容易。即使哈希是盐渍的。
我唯一能想到的就是通过晦涩难懂的安全性:我确保散列函数无法清晰识别并且存在于编译代码中,并希望攻击者不够聪明,无法弄清楚这一切。
有什么方法可以让这变得真正安全吗?
编辑:a3_nm 和 Nick Johnson 的 cmets 当然是正确的:如果攻击者可以访问所有数据,则不可能确保其安全。感谢您指出这个(明显的)缺陷。
所以我需要一些没有存储在数据库中的东西。为了确保只有公司和客户可以访问他们自己的数据,我可以使用他们自己的密码对其进行加密。因此,公司的客户列表将使用该公司的密码进行加密,该密码永远不会存储在服务器上,并且必须与每个请求一起发送。我认为可以假设攻击者无法拦截包含密码的请求。
或者这种思路还有另一个(明显的?)缺陷吗?
【问题讨论】:
-
因此,如果您的所有数据被暴露,您不希望攻击者能够访问这些信息 - 但您仍然希望自己能够访问?我希望我们不必指出为什么这是不可能的。
标签: cryptography hash