安全的交换电子邮件地址(散列)的方式,以允许匹配另一个列表上的重叠,但不显示没有重叠的那些地址?
|
我在一个拥有大量电子邮件列表的组织(公司A)中。我正在将该列表的10,000个电子邮件子集发送给另一个组织(公司B)以测试是否重叠(发现两个列表中都有哪些电子邮件地址)。我想以一种易于B公司测试重叠的方式发送列表,但是对于B公司来说很难(理想情况下)“解码”尚未在其列表中的电子邮件地址。其次,我想确保如果我发送的列表在错误的手中(某个第三方)结束,其他任何人都很难了解列表上的实际电子邮件地址。
我当前的解决方案是简单地从数据库中提取电子邮件
SHA1(email + a_long_random_salt)
每个电子邮件地址使用相同的盐。
为了进行匹配,我将哈希和盐的列表(分别安全地发送)发送给了公司B,他们只需使用
SELECT email FROM members WHERE SHA1(email + the_salt) IN(hash1, hash2, hash3....)
(或者,他们为每个地址预先计算SHA1哈希,并将其与电子邮件地址一起存储在数据库中,因此在运行查询时无需进行哈希处理)
足够长/随机的盐会阻止使用预先计算的彩虹表破解哈希。我认为任何人都不可能拥有一个彩虹表格,其中有数以百万计的合理电子邮件地址加上我用作盐的任何100个字符的随机字符串。只要将盐保密,任何第三方都不会使用彩虹表或蛮力解码此列表。 (如果我在这里错了,请纠正我。)
我正在努力解决的问题是,很容易获得从Web上获取的数以百万计的电子邮件地址列表。 B公司很容易获得这些列表中的一个,使用我提供的盐计算哈希值,并恢复我发送的列表中的大部分电子邮件(当然不是全部,而是一部分)。
有什么策略可以完成我没想到的比赛吗?我唯一能想到的就是使用更复杂的哈希方法(即多次迭代),以使其与数亿个电子邮件地址的列表(从网络上抓取的理论列表)匹配时变慢。关键在于它实际上只会更慢-甚至不是很难。另外,我知道公司B自己的电子邮件列表在100万个地址范围内,因此我无法为他们提供一种哈希方案,该哈希方案需要花费几秒钟的时间来计算该100万个列表中的每个地址。简单地使其变慢并不能解决问题-我认为我需要一种完全不同的方法。
老实说,对我来说,这是一个更多的学术活动,而不是真正的安全问题。我相信B公司不会尝试这样做(我们经常合作),即使他们这样做了,也不会造成巨大损失。他们可能会知道的是我们邮件列表中的10,000个人的电子邮件地址-我们不是在谈论密码,信用卡号等。如果我们正在处理密码或信用卡号,我什至不会考虑开发自己的方案。而且,是的,我当然知道SHA-256或某些其他较新的算法可能比SHA1更好,但仅在一定程度上是有限的。这不是我担心的哈希的强力破解。
没有找到相关结果
已邀请:
3 个回复
凸晴
吞睫素
渐首洽陈染