我正在考虑编写一款半流行纸牌游戏的电脑版本。我希望它在没有中央服务器的情况下运行,并且我正在尝试想出一种方案,使作弊变得不可能,而无需信任客户端。
据我所见,基本问题是每个玩家都有几堆牌(抽牌堆、手牌和弃牌堆)。除了按照游戏规则(例如抽牌或弃牌)允许之外,不能让任何一方玩家改变这些堆的组成,也不能让玩家知道他们或对手的牌堆中有什么。
我觉得应该有一种方式可以利用类似公钥密码学的东西来解决这个问题,但是我一直发现我的方案有漏洞。有人能建议一种协议或者指导一些相关资源吗?
[编辑]
好的,我又思考了一下,想到了一个想法。如果你能挑出任何漏洞,请让我知道。
在洗牌时,玩家拥有一堆已知值的牌。他们将这些值与随机盐连接起来,然后对其进行哈希。他们记录盐并将哈希传递给对手。
对手连接自己的盐,再次进行哈希,然后洗牌哈希并将牌组传回原始玩家。
我认为此时,牌组已经被随机化,没有任何一方玩家可以知道值。但是当抽取一张牌时,对手可以揭示他们的盐,使第一个玩家确定原始值是什么;而当玩家打出卡牌时,他们会揭示自己的盐,从而使对手验证其值。