验证秘密的等效性

时间:2009-08-26 22:52:36

标签: cryptography

爱丽丝&鲍勃是秘密的四重代理人,可以在美国,俄罗斯或中国工作。他们希望提出一个方案:

  1. 如果他们同时为同一方工作,请相互证明这一点,以便他们可以畅所欲言。

  2. 如果他们为不同方面工作,则不会公开有关他们所在的任何方面的任何其他信息。

  3. 哦,由于他们所做的敏感性,没有可信赖的第三方能够对他们进行比较。

    哪种协议能够满足这两种需求?

    理想情况下,任何协议也可以推广到多个参与者和多个状态,但这不是必需的。

    我已经困惑了一段时间,我找不到满意的解决方案,主要是因为条件2。

    编辑:这是促使我寻找解决方案的原始问题。 “查理”有一些他与我分享的个人照片,后来发现他还与“鲍勃”分享了这些照片。我们都想知道我们是否有相同的照片集,但同时,如果查理没有与我们任何一方分享某张照片,他可能有充分的理由不这样做,我们不想泄漏信息。

    我的第一个想法是让我们每个人连接所有照片并提供MD5总和。如果他们匹配,那么我们有相同的照片,但如果他们没有,任何一方都不会知道对方有哪些照片。然而,我很快意识到这个方案仍然会泄漏信息,因为Bob可以为他拥有的每个照片子集生成一个MD5,如果他们中的任何一个匹配我的总和,他就会知道我没有的照片。我还没有找到一个令人满意的解决方案来解决这个问题,但我想我会将其概括为一般,以避免人们关注我的情况。

9 个答案:

答案 0 :(得分:1)

所以他们保证是四重代理商?那就是他们保证为一个派别秘密工作,同时假装工作一秒钟而假装工作三分之一而假装工作四分之一?它们仅限于美国,俄罗斯或中国?如果是这样,那意味着总会有至少一个派系,他们都假装工作,并同时实际工作。这似乎否定了他们成为四重代理人的能力,因为他们肯定不会为美国人工作,同时秘密为美国人工作,同时秘密为美国人工作,同时秘密为美国人工作。

你说理想的解决方案会推广到任意数量的状态和间谍堆栈。秘密特工的程度可以高于,等于还是低于国家的数量?这可能很重要。此外,爱丽丝总是保证与鲍勃具有相同程度的代理人身份吗?即他们总是都是三重代理人,或者总是由五人代理人?模数运算符让人想起......

请详细说明。

作为一个潜在的答案,您可以将状态枚举为位域。 US = 1俄罗斯= 2,中国= 4,马达加斯加= 8,图瓦= 16等。构建一个本质上是AND门的设备。 Alice构建并带来一半,Bob构建并带来另一半。用布料隔开,每个按下他们真正工作状态的按钮。如果AND门的输出很高,那么它们就在同一侧。如果没有,那么他们会悄悄地取下布料,然后与机器各自的一半离开,这样按钮就无法通过指纹来确定。

这不是理论上的或严谨的,而是实用的。

答案 1 :(得分:1)

对于您的照片问题,请为照片的所有子集创建哈希值;随机选择这些的子集,并在约定数量的随机生成的哈希值中随机抽取。鲍勃做同样的事情,你交换这些集合。如果Bob发送给你的那些哈希比例与你可以通过散列你的照片子集产生的哈希值有很大不同,那么你很可能会得到与他不同的照片集。如果您同意的随机哈希比例很高,则您可能无法检测到您的照片集中的微小差异;如果比例很低,您可能会暴露有关丢失照片的信息;你必须选择一个合适的折衷点。

答案 2 :(得分:1)

对于这两个问题,您可以使用Secure two-party computation等式算法。有许多方案,例如Damgard,Fitzi,K​​iltz,Nielsen和Toft:Unconditionally Secure Constant Round Multi-Party Computation for Equality, Comparison, Bits and Exponentiation

当然,经纪人可以尝试从另一方面扮演代理人,以获得1/3的机会发现另一方的真实方面,但这似乎是不可避免的。

一个更简单的照片问题方案,应该与安全多方计算一样好,如下:

  1. Alice和Bob对他们的照片进行排序并生成SHA-512哈希。
  2. Alice将她的哈希的第一位发送给Bob。
  3. Bob将该位与其哈希的第一位进行比较。如果不同,他们知道他们收到了不同的照片。否则他们会继续。
  4. Bob将他的哈希的第二位发送给Alice。
  5. Alice检查此位并决定是否继续。
  6. 继续,直到协议中止或检查完所有位。

答案 3 :(得分:0)

有趣。

我认为,无论采用何种方案,都需要涉及随机故障的一个组成部分。这是因为要求相互矛盾。你需要一个方案,偶尔,即使它们在同一侧,也不起作用。因为如果它始终有效,他们会立即确定它们不在同一侧。

你的观点'B'也含糊不清。你说你不想暴露他们所在的一面。这是否意味着信息无法指向具体其中一方?如果Alice认为Bob来自其中任何一个人,这样可以吗?

另外,您是否尝试过将此电子邮件发送至cryptography mailing list?可以在那里得到更好的回应。这是一个有趣的想法:)

答案 4 :(得分:0)

这是我最接近解决方案的地方:

假设有一个函数doubleHash,使

doubleHash(a+doubleHash(b)) == doubleHash(b+doubleHash(a))

Alice会生成62位密码,并将2位国家/地区代码附加到其末尾,对其进行哈希并给予Bob doubleHash(a)。

鲍勃做了同样的事情并给了Alice doubleHash(b)。

Alice将原始秘密附加到Bob给她的哈希值,哈希并将其发布为doubleHash(a + doubleHash(b))。

鲍勃做同样的事情并发布doubleHash(b + doubleHash(a))。

如果两个哈希匹配,则它们来自同一个国家/地区。另一方面,如果它们不匹配,那么Bob无法解密哈希,因为他不知道爱丽丝的秘密,反之亦然。

然而,这样的方案依赖于doubleHash函数的存在,我不确定这样的事情是否可能。

答案 5 :(得分:0)

我能想到的最简单的事情可能就是这样的照片:

  1. 使用4096位哈希值散列所有照片。
  2. 按照哈希值对照片进行排序。 (哈希是事后的,只是一个大数字的字符串表示)
  3. 使用该排序顺序,使用流式系统来管道和散列这些照片,就像它们是单个文件一样。
  4. 分享你的哈希。
  5. 如果哈希匹配,则您拥有相同的文件。 (不正确的正匹配的低风险,但在4K哈希时,它有点不太可能)
  6. 当然,这里有一些弱点:

    1. 不要分享你有多少张照片。这样做可以允许具有更多照片的一方对数据进行智能排列,并使用该数字作为指导从他们怀疑您可能没有的哈希集中删除照片,并找到(以极大的计算费用)一组与您的哈希匹配的图像。
    2. 他们可以在没有数字的情况下做1,但更难,如果实际上他们的照片更少,他们就会失去运气。
    3. 他们可以创建一个假哈希,只需使用随机数生成器,并将其发送给您,给您的印象是当您真正拥有相同数据集时。
    4. 上述弱点在您所在国家/地区的代码识别系统中也很普遍,当然,除了更少的熵之外,它的更容易欺诈系统。 (因此,无论你的哈希算法多么花哨,你都可以通过蛮力来解决他们是谁,或者让你自己通过蛮力来解决问题) 如果情况并非如此,那么您可能已经被您所工作的代理机构找到了,因为可靠和安全的东西将是确定的火灾方式来进行安全的背景检查。

答案 6 :(得分:0)

照片情景无法实现:

由于你的名字,你的计划是不可能的。

考虑一个函数f,它需要两组照片,s1和s2。 如果s1 = s2,则f(s1,s2)返回true,如果s1!= s2,则返回false。 也就是说,此函数实现了您想要的方案。

鲍勃可以随时提供他拥有的照片子集,并了解哪张照片的查理没有。 没有办法解决这个问题,任何具有你想要的属性的函数都无法获得你想要的安全性。

间谍情景更加不可能:

正如Kent Fredric指出,间谍情景具有更大的内在弱点。 它具有照片场景的所有问题,以及仅有四个秘密的额外弱点。

在照片场景中,Bob不太可能随机猜测一张Charlies照片。 在Bob的间谍场景中,猜测Alices的选择(1/4)是微不足道的。 这些间谍只有四个他们可以属于的国家,因为他们都是四元代理人,他们都知道每个国家的所有密码字。 因此,鲍勃可以假装为中国人工作以测试爱丽丝。

不同类型的解决方案:

有些海报已经注意到,如果你削弱f的准确性,可以增加安全性。 当然如果不准确又有什么意义呢。我提出了一种不同类型的解决方案。

  • 不要让他们进行比较 照片不止一次。

希望启动比较的一方必须首先证明这是一个新的比较,并且不使用之前的任何图片。

编辑:Double Hash问题

我对doublhash协议做了一些假设,但是......

  1. 对于照片方案,doublehash协议并不比f好,因为62位秘密必须由一组照片构成,以便比较有意义。原始问题中提到的子集攻击仍然适用于此处。尝试所有照片子集来暴力破解你可以产生的秘密,因此鲍勃可以看出他是否可以产生与爱丽丝相同的秘密。
  2. 使用doublehash属性Bob仍然可以强行破解秘密。

    doubleHash(s1+doubleHash(b)) != doubleHash(aliceSecret+doubleHash(a))
    
    doubleHash(s2+doubleHash(b)) != doubleHash(aliceSecret+doubleHash(a))
    
    doubleHash(s3+doubleHash(b)) == doubleHash(aliceSecret+doubleHash(a))
    

    Bingo,aliceSecret == s3。

    DoubleHash只有强大而且难以强制使用a或b

    实施DoubleHash

    取而代之的是doubleHash(a + doubleHash(b)),尝试使用doubleHash(a,md5(b))。 DoubleHash(a + doubleHash(b))很糟糕,因为Bob可能会产生碰撞哈希:

    doubleHash((12 + doubleHash(34)) + doubleHash(5678))  
    = doubleHash((34 + doubleHash(12)) + doubleHash(5678))
    = doubleHash(5678 + doubleHash(12 + doubleHash(34)) 
    = doubleHash(5678 + doubleHash(34 + doubleHash(12)) 
    

    以下是使用新配方的doubleHash实现

    Doublehash(a, hashOfB){
       hashOfA = md5(a)
       combinedHash = hashOfA xor hashOfB
       return md5(combinedHash)
    }
    

    也可以使用blind signatures后面的数学来表示doubleHash的版本。

答案 7 :(得分:-1)

RSA不会在这里工作吗?每个国家都知道它的私钥,你发布你的公钥,只有相同的国家才能解密信息。我猜第二个人会知道第一个人不是和他们在同一个方面。

嗯。

答案 8 :(得分:-2)