安全的交换电子邮件地址(散列)的方式,以允许匹配另一个列表上的重叠,但不显示没有重叠的那些地址?

| 我在一个拥有大量电子邮件列表的组织(公司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更好,但仅在一定程度上是有限的。这不是我担心的哈希的强力破解。     
已邀请:
        您可以将交换作为安全的多方计算问题进行,目的是计算唯一的电子邮件地址。 引用维基百科   安全的多方计算(也   被称为安全计算或   多方计算(MPC)是   密码学的子领域。的目标   安全多方访问的方法   计算是为了使各方能够   共同计算一个函数   输入,同时保持   这些输入是私有的。 如果您访问页面http://en.wikipedia.org/wiki/Secure_multiparty_computation \“外部链接\”部分包含使您入门的库和参考。     
我能想到的一件事是对已知域的暴力攻击。请考虑以下因素: @ hotmail.com,@ gmail.com和@ yahoo.com在市场上占有很大份额 姓氏列表是有限的,并且不能太长。名字列表也一样 结合使用John和Doe的名字,我们可以构建一组地址,例如JDoe @ hotmail.com,DoeJ @ yahoo.com,JohnDow @ hotmail.com等。该地址集不会很广泛。 根据此类数据挖掘的重要性/有益程度(即B知道约翰·杜伊在您的名单中会获得多少收益),我所描述的攻击仍然可以获利。是的,我还记得盐的问题,但名称/域组合的数量仍然不算太大,对于良好的并行蛮力攻击来说牢不可破。     
        在我看来,您的问题可以重申为:   公司B可以访问列表1   百万电子邮件地址,列表A。   也可以访问不同的列表   数百万个电子邮件地址,列表   B.我希望B公司能够   运行算法以能够   确定哪个电子邮件地址   列表A中的内容也在我们的列表中,但是   无法针对列表B运行该算法。 像这样重述,这似乎是逻辑上不可能的-他们的客户数据库与他们可能已从其他地方下载的电子邮件地址列表之间确实没有区别。     

要回复问题请先登录注册