我正在考虑编写一款半流行纸牌游戏的电脑改编版。我想让它在没有中央服务器的情况下运行,并且我正在尝试提出一个方案,使作弊变得不可能而不必信任客户端。
我看到的基本问题是每个玩家都有几堆牌(抽牌,当前手牌和弃牌)。除非游戏规则允许(即抓牌或弃牌),否则任何玩家都不可能改变这些牌堆的组成,玩家也不应该知道他们或对手的牌堆中有什么。
我觉得应该有某种方法可以使用诸如公钥密码学之类的东西来实现这一点,但我一直在我的方案中发现漏洞。任何人都可以建议一个协议或向我指出有关此主题的一些资源吗?
[编辑] 好的,所以我一直在考虑这个问题,这是我想出的一个想法。如果你能在其中戳任何洞,请告诉我。
在洗牌的时候,玩家有一堆牌,他们知道牌的价值。他们获取这些值,将随机盐连接到每个值,然后对它们进行哈希处理。他们记录盐分,并将哈希值传递给他们的对手。
对手连接自己的盐,再次散列,然后将散列洗牌并将牌组传回给原来的玩家。
我相信在这一点上,套牌是随机的,任何玩家都不知道这些值。但是,当抽到一张牌时,对手可以显示他们的盐,让第一个玩家确定原始值是多少,而当出牌时,玩家会显示自己的盐,让对手验证卡值。