情景:
Suppose two clients A and B are connected over some network.
A and B are playing a strategy game.
Both A and B have all the information of the current state of the game and
both know all circumstances when the game is won, lost or drawn.
Both players are making a move at the same time and inform the other about it.
现在假设在B发送他的移动之前,玩家A的移动到达玩家B. 现在,从理论上讲,球员B可以改变他的举动,赢得这场比赛。
如何更改动作的交换,以便玩家B不能像上面所描述的那样作弊?
上述任务相当于在两个客户A和B之间协商一个随机数N,这样A和B都不能强制N为特定数字。
有人知道我的问题的解决方案吗?
答案 0 :(得分:1)
您所描述的场景可以通过使用cryptographic commitment scheme来解决;这样的协议可以用来通过让双方都提交一个随机数来协商一个随机数,然后将这些数字混合在一起。存在许多这样的方案,在它们的绑定方面有一些不同的属性(也就是说,其中一方更改其提交的值是多么容易)以及它们的隐藏(也就是说,其中一方确定另一方承诺的价值是多么容易)。
答案 1 :(得分:1)
我能想到的最简单的方法是让各方交换他们行动的哈希值,然后一旦两者都有哈希值,就交换内容。产生哈希冲突不适合口袋的弱点,Schneier传递an estimate that by 2015 it'd only take 2048 server-years来产生SHA1冲突。所以使用SHA2。你的游戏应该是安全的。