私は、お互いを信頼していない 2 つのクライアント間で既知の値 (トランプのデッキなど) の配列をシャッフルする方法を探しています。
これまでのところ私は考えています...
for each item in array:
A tells B random number to use (Ra1) <~ prevent B from using pre-calculated password
B creates secret random number, and shows hash to A <~ can prove this number is used
B adds his own secret random number (Ra1+Rb1) <~ prevent A from using pre-calculated password
B encrypts a random array value using the combined password (Ra1+Rb1), removing from the stack
B gives encrypted value to A
A re-encrypts the value <~ prevent B from recognizing his package later
A stores at random index in new array of unknown items
A shows the full array to B <~ B can be confident that the array will not be tampered with
A does not know what is in each package, nor does B
B can now choose a package for himself, and A can then provide the password for that package, allowing B to recognize his package, and know the contents.
A can also choose a package, and request the key to unlock it form B.
After all transactions are agreed, and secrecy is no longer required, all secrets are revealed by both parties, who can both then verify the contents of the boxes
これはすべて私には非常に複雑に思えます-そして、当事者が信頼できる、または信頼できる必要がないような方法でA、B、およびCに対して機能させる方法を想像できません(後でキーを提供しない可能性があります-間のトランザクションを妨害します他の当事者)。
概要
理想的には、少なくとも 2 人の利害関係者が相互に情報を提供している限り、デックとカードをすべての関係者が後で検証できるように、2 つの信頼できない関係者の間でカードのデッキをシャッフルするアルゴリズムが必要です。最後に秘密。