的照片场景是不可能实现的:
你的方案为您命名的原因是不可能的。
考虑一个函数f,它需要两组照片s1和s2。 如果s1 = s2,则f(s1,s2)返回true,如果s1!= s2则返回false。 也就是说,这个函数实现你想要的方案。
鲍勃可以随时提供他拥有的照片的子集,并了解哪张照片的查理没有。 没有办法解决这个问题,任何拥有你想要的属性的函数都不能拥有你想要的安全性。
间谍情景更是不可能的:
由于Kent Fredric指出间谍方案具有更大的固有缺陷。 它具有照片场景中的所有问题,加上只有四个秘密的额外弱点。
在照片场景中,Bob很可能会随机猜测Charlies照片中的一张。 Bob在间谍场景中猜测Alices选择(1/4)是微不足道的。 间谍只有四个他们可以属于的国家,因为他们都是四个代理人,他们都知道每个国家的所有密码字。因此,鲍勃可以假装为中国人工作来测试爱丽丝。
不同类型的解决方案:
一些海报已经注意到,能够实现安全性,如果你减弱f的精度提高。 当然,如果不准确的话是什么意思。我提出了一种不同类型的解决方案。
希望开始比较的一方必须首先证明这是一个新的比较,并且不使用之前的任何图片。
编辑:问题与双哈希
我提出有关doublhash协议的一些假设,但...
- 对于照片方案中,doublehash协议不大于f好,因为62位密码必须由一组照片构成,以便进行比较以获得有意义的结果。原始问题中提到的子集攻击在这里仍然适用。尝试使用所有照片的子集来暴力化你可以产生的秘密,因此鲍勃可以看到他是否能够产生与艾丽丝相同的秘密。
使用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))
宾果,aliceSecret == s3。
DoubleHash是仅作为强,因为它是难以暴力破解A或B
Implementating DoubleHash
相反doubleHash(A + doubleHash(b)中),试图doubleHash(一个,MD5(二))。 DoubleHash(A + doubleHash(B))是不好的,因为鲍勃可能产生冲突的哈希值,像这样:
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的版本。
啊。相反,我们专注于你提出的问题的细节。 :-) – Omniwombat 2009-08-26 23:34:46