通过Internet交易卡时,分配种子值或实际对象更好吗?

问题描述

| 我正在研究一款黑桃游戏,该游戏通过互联网连接玩家,但我不知道该如何将卡片分发给玩家: 如果我将用于改组的SecureRandom对象的种子值发送给每个玩家,则理论上他们可以嗅探它们自己的流量,并查看源代码以创建自己的程序来类似地处理卡; 但是,如果我使用发牌者的机器来发牌并将其发送给其他玩家,理论上发牌者可能会作弊。 发送种子值会减少通过Internet发送的数据量,但是发送实际的卡似乎会使作弊更加困难。我已经考虑过要创建自己的受信任的第三方服务器,发牌者将向其发送种子值并将卡发送给其他玩家,但这需要设置EC2实例,我不知道如何甚至开始这样做。 还是我想得太多了?     

解决方法

您可以进行分散的纸牌游戏而不作弊。 但是,您应该考虑,只要玩家不竞争成为排行榜之类的东西,作弊就不会成为问题。 同样,如果发牌人仅将种子发送出去,他仍然可以作弊。     ,我认为防止作弊的唯一方法是让一个受信任的中央服务器处理卡,并通知每个用户他得到了什么卡。还是您没有一个中央的,受信任的服务器,而是使某个应用程序可供其他用户作为“经销商”运行的问题? 如果真是这样,我认为即使从理论上讲,这个问题也无法解决。如果有人运行服务器来处理卡,无论您如何管理,他总是可以捏造种子价值以将所需的每个卡提供给每个人,或者检查种子价值,以便他可以预测将要出现的所有卡。或者就此而言,他可以拦截来自服务器的输出流,并用他想要的任何卡代替它。 我曾短暂地想过,您可以随同与随机数生成器关联的每笔交易一起发送一些哈希值,以便接收端的程序可以验证哈希与发送的卡是否一致。假设哈希值是由某种安全的加密算法生成的,那么发牌人可能很难更换卡并生成与他发送的卡一致的伪造的哈希码。但这很容易被击败:经销商可以只运行交易程序数百次,获得有效交易和哈希码的列表,然后从中选择一个进行发送。 也许您可以让玩家发送一个令牌,该令牌已计入随机数生成器中。但是我想不出一种真正的算法来包含这样的令牌,而该令牌无法被交易商系统击败,只需重复对令牌进行的任何计算即可。     ,如果您发送种子,那么任何玩家都可以找出其他玩家持有的牌。同样,发牌人可以选择他发出的种子对他有利。 如果您从发卡行发送卡片,那么发卡行就会知道每个人都拿着什么。要么使用中央服务器,要么使用像尼克的答案所示的加密货币