一些服务(例如 ProtonMail)声称存储电话号码的哈希值,而不是电话号码本身(虽然他们没有说明如何对其进行哈希处理)。现在,考虑到潜在有效电话号码的数量非常少(8 位电话号码中的信息价值约为 26 位),从其哈希中恢复电话号码应该很容易。
那么有什么意义呢?
一些服务(例如 ProtonMail)声称存储电话号码的哈希值,而不是电话号码本身(虽然他们没有说明如何对其进行哈希处理)。现在,考虑到潜在有效电话号码的数量非常少(8 位电话号码中的信息价值约为 26 位),从其哈希中恢复电话号码应该很容易。
那么有什么意义呢?
ProtonMail 可能会要求您的电话号码进行人工检查:
然后,ProtonMail 不再需要您的电话号码,但它仍然需要使用它来防止垃圾邮件发送者创建多个帐户。
对电话号码进行哈希处理可以使其不存储原始号码,并防止有人使用相同的号码两次。
但是,使用相同的电话号码将导致获得相同的加密哈希,因此通过比较哈希,我们可以检测到电话号码或电子邮件地址的重复使用以进行人工验证。
因此,ProtonMail 似乎没有使用独特的盐。
多亏了 Bart Butler(ProtonMail 首席技术官)的一条推文,我们也知道:
我们使用慢速密码哈希(使用盐)并刷新列表并以不规则的时间间隔轮换盐。
总之:暴力破解它们是可能的,但它既不实用也不有用。
哈希作为间接映射很有用,即使它不如典型的哈希设置安全。最大的好处之一是纯粹的社交。散列(即使是弱散列)为员工划清界限,了解可以查看的内容。为查看真实电话号码设置任何障碍将有助于让诚实的人保持诚实。
从哈希中恢复电话号码应该很容易
容易是一个相对的术语。诚然,这种散列设置对于愿意执行散列破解的坚定攻击者可能没有多大帮助。但是您还必须考虑 99% 的其他有权访问数据的员工,他们甚至不知道哈希到底是什么,更不用说如何破解它们了。
关键是不要以明文形式存储它们。
大概就是这样。正如德国之声在他的评论中指出的那样,Benoit 的回答告诉你他们存储电话号码的原因以及他们对它们进行哈希处理的原因。ProtonMail 没有告诉你为什么他们散列它们。我们都只能推测这一点,直到 ProtonMail 的员工告诉我们确切的原因。
最可能的原因是(在我看来)如下:
ProtonMail 是一家公司,其整个商业模式建立在安全产品和保护客户隐私之上。如果他们告诉你,他们以明文形式保存了电话号码,那就太奇怪了。在这方面散列它们更有意义,你不觉得吗?
另一方面,ProtonMail 不会将电话号码哈希链接到用户个人资料,它们会定期刷新哈希,正如您自己所说,电话号码并没有什么好处。
如果必须存储电话号码,则对其进行哈希处理总比不对其进行哈希处理要好。这就是他们这样做的原因。
是否大大加强了安全性?不。
它比以明文形式存储它们更好吗?是的。
存储散列电话号码有两个原因,一个有用,另一个没有:
1) 允许验证用户。在这里,一个加盐的慢散列很有用。虽然暴力破解电话号码比密码更快,但它仍然提供了额外的安全性。
2)假装提供更安全的查找(即在几个whatsapp竞争对手中)。在这里,您不能对哈希进行加盐,因为仅知道电话号码时您将无法搜索哈希。这意味着彩虹表很容易创建,因为无盐哈希的搜索空间非常小。
请注意,当您拥有数据库时,1) 仍然提供了一个简单的存在证明。使用数据库中使用的所有盐对您的电话号码进行哈希处理并进行查找。如果它存储在那里,你会找到它。