Security 网络上的两个客户端(a&B)如何协商一个随机数N,使得a和B都不能事先知道N的值?

Security 网络上的两个客户端(a&B)如何协商一个随机数N,使得a和B都不能事先知道N的值?,security,random,Security,Random,情景: 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 p

情景:

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.
现在假设玩家A的移动到达玩家B,在B发出他的移动之前。 现在,从理论上讲,球员B可以改变他的动作,以赢得这场比赛

如何改变移动的交换,使得玩家B不能像上面描述的那样作弊


上述任务相当于在两个客户端a和B之间协商随机数N,使得a和B都不能强制N为特定数


有人知道我的问题的解决方案吗?

您所描述的场景可以通过使用;这样的协议可以用于协商一个随机数,方法是让双方提交一个随机数,然后将这些数异或在一起。存在许多这样的方案,在它们的约束(即,其中一方改变其承诺的价值有多容易)和它们的隐藏(即,其中一方确定另一方承诺的价值有多容易)方面具有一些不同的性质

我能想到的最简单的方法是让双方交换他们移动的散列,然后一旦双方都有了散列,就交换内容。产生散列冲突不是为了pocket的弱者,Schneier通过产生SHA1冲突。所以使用SHA2。您的游戏应该是安全的。

这可能过于简单,但他们是否可以将自己的移动加密发送给对方,当他们收到其他人的移动时,他们可以发送密钥。这将需要一个新的关键每一步。不,这不会解决它。假设双方都发送了加密的移动。现在,A先发送他的钥匙,B可以得到A的移动。现在,根据A所做的移动,B计算出一个密钥,这样当A使用该密钥解密B的移动时,B将获胜。密码的一个典型设计特征是,不可能计算出可用于将给定密文解密到选定消息的密钥。(这是可行的密码容易受到已知的明文攻击。)唯一的另一种可能性是各方将其移动发送给可信的第三方。加密承诺方案似乎解决了我的问题(英文维基百科甚至给出了与我类似的例子);我这里唯一的问题是,为了实现a和B的公平博弈,我需要一个承诺方案,它既具有完全的约束力(a不应该改变她的行动),又具有完全的自负性(B不应该根据a的行动决定他的行动)。正如维基百科中所述,如果A或B拥有无限的计算资源,则不存在满足这两个要求的方案。据我所知,您的方法是一个承诺方案,它具有完美的约束力,因为A和B都不应该能够计算共享同一签名的移动(因此他们都不能改变主意)。你的承诺方案不是完全隐藏的,如果移动的次数很小(B只需计算所有移动的签名,并将其与他从A收到的签名进行比较,以确定A做出了什么移动),那么在你的方案中,第二个移动的玩家在这种情况下占上风。这很容易处理,如果移动是受约束的,那么只包括一个,比如说16字节的随机材料,这些材料将被忽略。