比较数据而不透露它

时间:2016-08-12 01:30:44

标签: security cryptography dataset

两家公司A和B希望比较各自的客户群并找出重叠。

显然,他们无法交换他们的客户群。因此,他们需要提出一个流程来比较他们的列表,而不会在两者的交集旁边披露任何信息(这违背了整个比较的想法)。

基本上,如果我是A的客户(通过我的电子邮件确定),也是B的客户。他们都应该能够在比较后知道。但是,如果我只是A的客户,B应该无法识别我,反之亦然。

此外,A和B都没有动力披露有关其数据集的任何定性信息,例如他们拥有多少客户,或者他们各自的重复率,“不正确”等......理想的解决方案应该传达有关交叉路口的信息。

明显的技术解决方案似乎在将标识符发送给其他方之前对其进行哈希处理。在使用完全相同的方法进行散列后,双方都可以与自己进行比较。他们可以找到标识符是否匹配但是他们无法识别其他标识符。但是,A和B都知道彼此数据集的确切大小。所有这一切都假设散列不可逆。还有什么办法可以解决这条路径后的问题?

正在考虑的另一个解决方案是找到一个可信任的第三方,它接收普通或散列数据集,进行比较并将交集发送到A和B.我不知道在哪里可以找到这样的服务。

2 个答案:

答案 0 :(得分:1)

值得信赖的第三方将是前往这里的方式。

散列解决方案不可行。为了能够比较散列,A和B都必须使用相同的散列算法。如果两者都为其所有客户电子邮件地址创建哈希值,然后A与B共享共享用户的哈希值,则B可以将哈希引用到明文电子邮件地址。

盐和其他此类技术也无济于事,因为双方都需要使用相同的盐来使哈希值具有可比性。

最后,即使A共享B没有的客户的哈希值,也可以相对容易地反转哈希值。例如,B可以散列所有潜在客户的列表并对其进行检查。 (这不会反转每个地址,但仍然存在太大的商业风险。)

如果找不到完全信任的第三方,混合方法可能效果最好: 哈希所有电子邮件地址,仅将 哈希发送给第三方,并让它检查哪些重叠。

答案 1 :(得分:1)

您可以使用以下方式,

  1. 添加一些假的细节,这肯定会增加数据,并且在某种程度上也可以是可逆的
  2. 使用诸如我的电子邮件ID为stackoverflow@example.com之类的技术,然后各方可以将其更改为某些预定义的方法,例如,
    • stackoverflow@example.com成为s#a#k#v#r#l#w@e#a#p#e.c#m
    • 除此之外,您还可以添加一些校验和" stackoverflow@example.com"使用预定义的方法,如ASCII值的字符。但是,字典攻击或此类场景也有可能检索有效的电子邮件ID,但会有一定程度的安全性。或者你也可以根据你的要求应用这样的逻辑来使它变得复杂。
  3. 您已经提到的受信任的第三方。