【发布时间】:2019-07-15 17:19:22
【问题描述】:
我在我的 SQL 表中存储了 2 个用户之间的相互友谊。 一行看起来像
friendship_id | user_id_1 | user_id_2
(为简单起见,我选择了存储
friendship_id | user_id_2 | user_id_1
同样)
我的问题是:万一发生泄漏,黑客将拥有此表,以及将 user_id 与电子邮件地址和其他用户数据相关联的表,使他能够将姓名放在友谊上。 我真的想避免:我不想让任何人知道谁是谁的朋友。所以我想加密/散列/混淆/匿名这个表中的user_id(使其在泄漏的情况下无用)。
我在想类似的东西
friendship_id | hashed_user_id_1 | hashed_user_id_2
我的推理正确吗? 如果是这样,实现它的正确方法是什么? (我正在使用 PHP)。
我正在考虑使用 password_hash 函数,但我不确定使用 password_verify 时我的 SQL 查询会是什么样子。
或者也许使用多次迭代的 sha256 + 独特的盐就足够了? 但是,这是否意味着我必须为每个友谊生成和存储一个独特的盐?
【问题讨论】:
-
这不会解决你的问题,因为散列的用户 ID 仍然是相同的,黑客可以追踪哪个用户拥有该散列用户 ID。
-
如何开发这将取决于您需要能够对 SQL 表执行什么操作。服务器必须能够回答哪些问题?例如,您是否需要以下各项: user1 和 user2 是否链接?列出来自 user1 的所有链接。列出所有指向 user1 的链接。你心目中的攻击类型是什么?您是否试图确保专门的攻击者无法找到给定用户的单个链接?还是专门的攻击者无法验证提议的链接?或者一个随意的攻击者不能轻易地抓住所有的链接?这些都对您如何设计解决方案非常重要。
-
(对于上述问题,请将 服务器 必须能够执行的操作与客户端必须能够处理恰好位于服务器上的数据执行的操作分开。Afshin 的回答如果服务器不必进行任何处理,那么它就在正确的轨道上,但如果服务器确实必须独立于客户端进行处理,它就无济于事。)
-
这可能在security.stackexchange.com上问得更好
标签: encryption hash privacy