可自行验证的检查证明的是,揭晓的种子和开局前显示的哈希对得上,所以一局在事后没有被改过。它看不到种子什么时候换,也看不到为什么换。如果一款游戏可以按照进来的下注,挑换种子的时刻,每一局照样都能通过检查。这个缺口值得弄懂。
哈希检查证明了什么?
在可自行验证的游戏里,游戏商在开局前公布一个保密的服务器种子的哈希,就锁定了这个种子。种子揭晓之后,任何人都可以算出它的哈希来对比。对得上,就证明这个种子在下注之前就存在,之后也没有被改过。我们的哈希检查工具在你的浏览器里做这个对比。
这个保障是真的,但范围很窄。哈希检查只回答关于一个种子的一个问题。其他问题,它都不说:
- 这个种子是什么时候开始用的,什么时候停用的?
- 游戏为什么在那个时刻换上新的种子?
- 一个种子刚开始用和快停用时,结果看起来一样吗?
换种子是什么?
服务器种子不会永远用下去。到某个时候,游戏会停用它,把它揭晓,让过去的局可以检查,然后开始用一个新的种子,而新种子的哈希早就公布了。这个切换就是换种子。换种子可以由玩家触发(比如改自己的客户端种子),可以按时间表进行,也可以由系统决定。
换种子是正常、健康的:正是把旧种子揭晓出来,过去的局才能检查。
理论上的攻击是什么?
担心的不是种子在锁定之后被改。担心的是,换种子的时机可能是挑过的。
大致是这样:假设一个系统手上留着几个已经锁定的种子,又能事先算出哪一个在刚开始几局会给出低的结果。如果它能在一笔大额下注进来的时候,刚好换上那个种子,这笔大额下注就会落在一个低的局上。新种子的哈希早就公布了,所以每一局照样验证得过。没有任何一次哈希检查会失败。
实际上,有两件事限制了这种攻击:
- 很多大家共用局的游戏,事先就把整个顺序定了。它们的每一局都来自一条长的哈希链,并在开局前公布链的末端。顺序既然定了,就没有什么可以换。
- 玩家自己设定的客户端种子,在每一个结果里混进一个服务器控制不了的输入,让事先算出结果难得多。
所以这种攻击,主要和这样的设计有关:每个玩家或每一场换一次种子,而客户端种子是系统设的,不是玩家设的。
要检验它,需要什么?
换种子的问题是统计问题,看的是很多次换种子,而不是一局。需要的数据包括:
| 问题 | 需要的数据 |
|---|---|
| 换种子是不是扎堆出现在大额下注之后? | 换种子的时间和下注大小,互相对应 |
| 刚换种子之后的结果,是不是比平常低? | 每局结果,标出换种子的分界 |
| 换种子在时间上分布得平不平均? | 一份很长的换种子时间记录 |
| 系统触发的换种子,和玩家触发的有没有不同? | 每次换种子是谁触发的 |
这些大部分在公开的试玩或结果直播里都看不到。尤其是下注大小,那是运营游戏的网站才有的数据。这就是为什么 Clash Watchdog 实验室目前不公布换种子的发现:它公布的数字是局的计数,附上样本量和误差范围,而这个问题需要它没有的数据。我们在这里讲它,是为了让哈希检查的限制清楚明白。
玩家能做什么?
在游戏允许的范围里,几个习惯可以缩小这个缺口:
- 自己设定客户端种子,如果游戏让你设的话。你自己选的输入,服务器没办法事先算。
- 抽查几个揭晓的种子,和它们的哈希对比。花一分钟,就能确认锁定有没有被守住。《自己动手验证哈希》一步一步讲怎么做。
- 换种子之后出现一串低的局,不要从里面读出什么意思。一串低的局,在每一款崩盘游戏里都很常见。《连串的错觉》解释为什么;规律和好运时段的检查,讲的是相关的另一种想法:某些时刻回报比较好。
为什么这件事的意义不只在换种子?
因为它说明了一条通用的规则:哈希检查是一条底线,不是完整的保障。它证明一个锁定的结果没有被改过。它证明不了游戏返还的就是游戏商说的数字,也证明不了锁定周围的每一个设计选择都是中立的。
返还率是另一个问题,要靠数很多局,再拿测量出来的数字和它的误差范围,去和官方说的对比来回答。这是实验室对它涵盖的每一款游戏做的核心工作,包括像 Aviator 这样可自行验证的游戏,也包括像 Spaceman 这样第三方认证随机、完全没办法一局一局检查的游戏。至于一款游戏是不是被操控这个还没有答案的问题,见是不是被操控?的检查。
这些都不会让任何一局变得可以预测。揭晓的种子,是在一局结束之后解释这一局。历史记录说明的是过去的表现,它预测不了下一局。
这一页对你有用吗?
匿名:不用账号,也不设 cookie。