跳到正文
Clash Watchdog实验室计数
菜单

种子更换:可自行验证的哈希检查看不到什么

主题
公平性和验证
发布日期
更新日期
篇幅
约 4 分钟读完
本页内容

可自行验证的检查证明的是,揭晓的种子和开局前显示的哈希对得上,所以一局在事后没有被改过。它看不到种子什么时候换,也看不到为什么换。如果一款游戏可以按照进来的下注,挑换种子的时刻,每一局照样都能通过检查。这个缺口值得弄懂。

哈希检查证明了什么?

在可自行验证的游戏里,游戏商在开局前公布一个保密的服务器种子的哈希,就锁定了这个种子。种子揭晓之后,任何人都可以算出它的哈希来对比。对得上,就证明这个种子在下注之前就存在,之后也没有被改过。我们的哈希检查工具在你的浏览器里做这个对比。

这个保障是真的,但范围很窄。哈希检查只回答关于一个种子的一个问题。其他问题,它都不说:

  • 这个种子是什么时候开始用的,什么时候停用的?
  • 游戏为什么在那个时刻换上新的种子?
  • 一个种子刚开始用和快停用时,结果看起来一样吗?

换种子是什么?

服务器种子不会永远用下去。到某个时候,游戏会停用它,把它揭晓,让过去的局可以检查,然后开始用一个新的种子,而新种子的哈希早就公布了。这个切换就是换种子。换种子可以由玩家触发(比如改自己的客户端种子),可以按时间表进行,也可以由系统决定。

换种子是正常、健康的:正是把旧种子揭晓出来,过去的局才能检查。

理论上的攻击是什么?

担心的不是种子在锁定之后被改。担心的是,换种子的时机可能是挑过的。

大致是这样:假设一个系统手上留着几个已经锁定的种子,又能事先算出哪一个在刚开始几局会给出低的结果。如果它能在一笔大额下注进来的时候,刚好换上那个种子,这笔大额下注就会落在一个低的局上。新种子的哈希早就公布了,所以每一局照样验证得过。没有任何一次哈希检查会失败。

实际上,有两件事限制了这种攻击:

  • 很多大家共用局的游戏,事先就把整个顺序定了。它们的每一局都来自一条长的哈希链,并在开局前公布链的末端。顺序既然定了,就没有什么可以换。
  • 玩家自己设定的客户端种子,在每一个结果里混进一个服务器控制不了的输入,让事先算出结果难得多。

所以这种攻击,主要和这样的设计有关:每个玩家或每一场换一次种子,而客户端种子是系统设的,不是玩家设的。

要检验它,需要什么?

换种子的问题是统计问题,看的是很多次换种子,而不是一局。需要的数据包括:

问题需要的数据
换种子是不是扎堆出现在大额下注之后?换种子的时间和下注大小,互相对应
刚换种子之后的结果,是不是比平常低?每局结果,标出换种子的分界
换种子在时间上分布得平不平均?一份很长的换种子时间记录
系统触发的换种子,和玩家触发的有没有不同?每次换种子是谁触发的

这些大部分在公开的试玩或结果直播里都看不到。尤其是下注大小,那是运营游戏的网站才有的数据。这就是为什么 Clash Watchdog 实验室目前不公布换种子的发现:它公布的数字是局的计数,附上样本量和误差范围,而这个问题需要它没有的数据。我们在这里讲它,是为了让哈希检查的限制清楚明白。

玩家能做什么?

在游戏允许的范围里,几个习惯可以缩小这个缺口:

  • 自己设定客户端种子,如果游戏让你设的话。你自己选的输入,服务器没办法事先算。
  • 抽查几个揭晓的种子,和它们的哈希对比。花一分钟,就能确认锁定有没有被守住。《自己动手验证哈希》一步一步讲怎么做。
  • 换种子之后出现一串低的局,不要从里面读出什么意思。一串低的局,在每一款崩盘游戏里都很常见。《连串的错觉》解释为什么;规律和好运时段的检查,讲的是相关的另一种想法:某些时刻回报比较好。

为什么这件事的意义不只在换种子?

因为它说明了一条通用的规则:哈希检查是一条底线,不是完整的保障。它证明一个锁定的结果没有被改过。它证明不了游戏返还的就是游戏商说的数字,也证明不了锁定周围的每一个设计选择都是中立的。

返还率是另一个问题,要靠数很多局,再拿测量出来的数字和它的误差范围,去和官方说的对比来回答。这是实验室对它涵盖的每一款游戏做的核心工作,包括像 Aviator 这样可自行验证的游戏,也包括像 Spaceman 这样第三方认证随机、完全没办法一局一局检查的游戏。至于一款游戏是不是被操控这个还没有答案的问题,见是不是被操控?的检查。

这些都不会让任何一局变得可以预测。揭晓的种子,是在一局结束之后解释这一局。历史记录说明的是过去的表现,它预测不了下一局。

这一页对你有用吗?

匿名:不用账号,也不设 cookie。

问答

检查换种子,和检查哈希是同一回事吗?
不是。哈希检查检验的是一局:揭晓的种子和锁定对不对得上?换种子的问题检验的是整个系统:种子是不是在和玩家下注对得上的时刻换的?一款游戏可以每一次哈希检查都通过,却照样会引出第二个问题,因为哈希检查从来不看时机。
有没有崩盘游戏被证实在换种子上动手脚?
我们不知道有任何公开、经过证实的案例。这不能证明这种攻击从来没发生过;它也不是发生过的证据。这是哈希检查涵盖范围里一个已知的缺口。诚实的说法是:对能观察到换种子时机的游戏来说,这是一个还没有答案的问题。
Clash Watchdog 会检验换种子有没有被动手脚吗?
目前不在公布的测量里。要检验它,需要在很多局里,把换种子的时间和下注情况对应起来,而公开的试玩和结果直播,通常不会提供这些。实验室公布的数字,是局的计数:返还率、分布和误差范围。这篇讲这个问题,是为了让读者知道,哈希检查留下了什么没有回答。
大家共用局的游戏,能避开这个问题吗?
部分可以。很多大家共用局的崩盘游戏,每一局都来自一条事先定好的长哈希链,并在开局前公布链的末端。如果整条链事先就定了,就没有种子可以挑方便的时刻换。每个玩家或每一场换一次种子的游戏,留给这个问题的空间就比较大。

全部文章

  • 可自行验证是什么:先不用数学讲一遍,再用数学讲一遍

    可自行验证(provably fair)是一种密码学方法,让玩家可以在事后检查,平台没有改过一局的结果。它用 SHA-256 哈希,在开局前锁定一个随机种子,开局后再把种子揭晓:揭晓的种子和事先锁定的哈希对得上,这一局就没有被动过。这篇先用直白的方式讲这个概念,再给想看的人讲数学,最后说清楚可自行验证能证明什么、不能证明什么。

  • 自己动手验证哈希:一步一步检查可自行验证的一局

    检查一局可自行验证的崩盘游戏,只要几分钟,不需要任何特别的软件,只要一个新一点的浏览器,愿意复制粘贴两串十六进制字符就行。这篇一步一步讲「服务器种子、客户端种子和 nonce」这种设计的一般做法,教你确认锁定有没有被守住。

  • 崩盘游戏随机数:SHA-256 哈希怎样变成倍数

    崩盘游戏的随机性,来自一个伪随机数生成器(PRNG)。现代的伪随机数生成器,只要种子设得好,产生的数列在任何实际用途上,用统计都分不出和真正的随机有什么不同。这篇讲伪随机数生成器在崩盘游戏里怎么运作、「种子设得好」是什么意思,以及如果没人盯着,一个作弊的平台怎样照样能让检查通过。

  • 证据分级:要数多少局,一个数字才有意义

    关于一款游戏的数字,分量不是都一样的。游戏商公布的返还率,是官方说法。几百局的计数,几乎说明不了什么。超过 1 万局、附上误差范围公布的计数,才开始检验官方说法;局数越多,能看出的差距就越小。这篇解释这几级证据,以及在游戏页面上怎么看。