的照片場景是不可能實現的:
你的方案爲您命名的原因是不可能的。
考慮一個函數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