在不泄露来源的情况下比较秘密数据

Posted

技术标签:

【中文标题】在不泄露来源的情况下比较秘密数据【英文标题】:Comparing secret data without giving away source 【发布时间】:2016-01-11 06:58:06 【问题描述】:

问题:

A 公司拥有不想泄露给 B 公司的机密数据。 B 公司有他们不想泄露给 A 公司的秘密数据。

秘密数据是双方的IP地址。

但这两家公司想知道他们拥有的重叠 IP 的数量(两家公司在数据库中的 IP 地址)。

如果不使用第三方,我想不出一种方法来解决这个问题,而不会有一方泄露他们的秘密数据集。是否有任何类型的哈希算法可以解决这个问题?

【问题讨论】:

您可以轻松地对 ip 地址进行 MD5 哈希,并比较哈希列表。但是如果公司一定不能知道哪些地址匹配,即使这样也不好,因为如果你知道什么 IP 转换成什么哈希,你就可以看到哪些是共享的。 一个 ipv4 地址的 md5 对暴力破解来说是微不足道的 是的,他们不知道是哪一个。那不会解决问题。不过谢谢。 发邮件给我,我会做的。也请告诉我任何一家 tyvm 公司的联系方式。 没有任何“第三方”——比如中立的“中间人”——应用程序——我会说这是不可能的。您当然可以加密等,但有什么保证可以保证其中一家或两家公司不会嗅探网络流量? 【参考方案1】:

您应该能够使用homomorphic encryption 来执行计算。我想象在两个站点上创建类似位掩码的东西,执行加密,然后执行结果的 XOR。我认为this source 指出了一些关于您可以执行哪些支持 XOR 的加密的信息。

【讨论】:

有人需要解密结果,此时他们将拥有位掩码还是我遗漏了什么? 有两个选项 - 如果允许站点知道哪些是公共 IP,它们可以简单地解密数据。该解决方案仍将比天真的方法更好。或者,某些同态加密算法可能支持位计数算法。 我认为为您提供“最终”位数据的同一密钥也会为您提供中间位掩码,因为同一个密钥可以解密两者。 我正在考虑在第三个站点上执行计算,只提供最终结果 @j_random_hacker 不同之处在于第三方不可能解密数据——它不需要被信任【参考方案2】:

首先,我将描述一个简单但不太安全的想法。然后我将描述一种我认为可以轻松使其更加安全的方法。基本思想是让每家公司向另一家公司发送单向函数的编码

发送节目

作为热身,我们首先假设一家公司(假设 A)用某种语言开发了一个普通的计算机程序并将其发送给 B;然后 B 将运行它,提供它自己的电子邮件地址列表作为输入,程序将报告其中有多少也被 A 使用。此时,B 知道它与 A 共享了多少电子邮件地址。然后该过程可以重复,但 A 和 B 的角色互换。

发送 SAT 实例

用普通的编程语言直接实现这个程序会产生一个几乎很容易逆向工程的程序。为了缓解这种情况,首先,不是让程序直接报告计数,而是将问题重新表述为决策问题:另一家公司是否至少有 k 封电子邮件?(这涉及选择某个值 k 进行测试;当然,如果双方同意,则可以针对许多不同的 k 值执行整个过程。(但请参阅最后一节了解可能的后果。))现在程序可以表示为SAT instance 将电子邮件地址列表作为输入(一些位串编码),并输出一个位,指示其中 k 个或多个是否也属于创建实例的公司。

向 SAT 实例提供输入并读取输出位在计算上很容易,但是当实例很大时,(原则上)很难朝“另一个方向”前进——也就是说,找到一个满足输入的分配,即将输出位驱动为 1 的电子邮件地址列表:SAT 是一个 NP-hard 问题,所有已知的精确技术在问题大小上都需要时间指数。

使用散列使其更难

[编辑:实际上有 许多 多于 (n 选择 k) 个可能的哈希值进行或运算,因为任何有效的 子序列 (允许间隙)在包含至少 k 个共享地址的电子邮件地址列表中,需要打开输出位。如果每个电子邮件地址最多占用 b 位,则有超过 2^((n-k)b)*(n 选择 k) 种可能性。可能只对其中的一小部分进行采样是可行的,我不知道未采样的是否可以以某种方式变成“不关心”...]

我在这里提出的 SAT 实例肯定会非常大,因为它必须是所有 (n 选择 k) 可能允许的位串的析取 (OR)。 (让我们假设电子邮件地址需要以某种特定顺序列出,以消除 n 因素。)但是它具有非常规则的结构,可能使其易于分析,从而可以显着减少解决它所需的时间.为了解决这个问题,我们需要做的就是要求接收者对原始输入进行哈希处理,并提供这个哈希值作为输入。生成的 SAT 实例仍然看起来像 (n 选择 k) 可能的有效位串(现在表示字符串列表的哈希,而不是字符串的原始列表)的析取 (OR) - 但是,通过选择足够大的哈希大小并将一些logic minimisation 应用于生成的实例,我相信可以删除任何剩余的指示模式。 (如果对该领域有更多了解的人可以确认或否认这一点,请编辑或评论。)

可能的攻击

这种方法的一个缺点是没有什么能阻止接收器多次“运行”(向 SAT 实例提供输入)。因此,选择太低的 k 允许接收者通过使用自己地址的不同 k 组合和剩余输入位的虚拟值(例如无效的电子邮件地址)多次重新运行 SAT 实例来轻松隔离与发送者共享的电子邮件地址.例如。如果 k=2,那么接收者可以简单地尝试运行所有 n^2 对它自己的电子邮件地址和其余的无效电子邮件地址,直到找到一对打开输出位;然后可以将这些电子邮件地址中的任何一个与所有剩余的电子邮件地址配对,以在线性时间内检测它们。

【讨论】:

以上是关于在不泄露来源的情况下比较秘密数据的主要内容,如果未能解决你的问题,请参考以下文章

FISCO BCOS 区块链 零知识证明 可监管

在没有秘密的情况下解码 JWT 令牌

文档加密软件的秘密

iOS 11.3泄露大秘密:苹果将发新iPad 也支持人脸识别!

自动抓取最新的谷歌云平台秘密版本

广东省第四届“强网杯”网络安全大赛(“泄露的秘密WP”)