News

如何验证你的骰子是否公平

Orion 每局在第一掷前用 SHA-256 封住骰子。把对局编号贴到 orion.arthea.ai/verify,浏览器会重算每一掷。

provably fairdiceguide

验证双陆棋的骰子,靠的是一个棋局之前立下、棋局之后核对的承诺。Orion 在你第一掷之前公布对一枚秘密种子的 SHA-256 承诺值,在棋局结束时揭示种子,并让你的浏览器仅凭对局编号,在 orion.arthea.ai/verify 上重新计算每一掷。若全部吻合,说明骰子在开局之前就已固定,包括我们在内,没有任何人操纵过它们。

每个在线玩家都知道那种感觉。你在栏上跳了三轮。对手偏偏找到那个既能打中又能占位的数字。在木质棋盘上你会耸耸肩,因为你亲眼看着骰子从盅里出来。在线上,别人却要你去相信一个你从未见其诞生的数字。我们不想索要那份信任。我们想把它变成可以核对的东西。

承诺揭示究竟是什么意思

想象一只封好的信封。在你落座之前,庄家把整晚的骰子全写在里面,封好,再把封印的照片交给你。棋局结束时,信封被打开。若内容与封印相符,说明那些点数在棋局之前就已存在,中途不可能挑出什么来害你。承诺揭示就是那只信封,用算术造出来的。封印是一段 SHA-256 哈希,谁也造不出另一枚与之相符的种子。四个步骤把证明从我们的服务器送到你的浏览器。

棋局之前. 服务器抽取一枚秘密随机种子,并用 SHA-256 做哈希。那段哈希就是承诺值,在第一掷之前被附到你这局棋上。从那一刻起,整局棋的骰子就已经定了。服务器公布了一个它再也改不了的承诺。

棋局之中. 每一掷都用 HMAC-SHA256 从种子推导:输入是种子和掷骰序号,输出是两颗骰子。局面、比分、加倍骰、谁快赢了:没有一样进入计算。服务器不是在挑点数。它是在念一份你落子之前它就已承诺的清单。

棋局结束时. 种子被揭示,并与对局记录一同保存。这就是拆信封的时刻。任何人都可以把揭示的种子做哈希,与第一步之前公布的承诺值比对,两者必须完全相同。

自己验证. 用任何浏览器打开 orion.arthea.ai/verify,输入对局编号。页面用 Web Crypto,也就是浏览器自身内建的密码学,在本地把一切重算一遍:先是揭示种子的 SHA-256 对上原始承诺值,然后是这局棋的每一掷,一颗骰子一颗骰子地算。无需账号,无需应用,大约一分钟。

完全吻合一次立起三个事实:

  • 揭示的种子,哈希出的正是第一掷之前公布的那个承诺值
  • 这局棋的每一掷都由那枚种子经 HMAC-SHA256 推导而来,因此没有重掷、没有掉包
  • 骰子从未迎合过局面、比分或某位玩家

对不上又能证明什么

对不上不是显示错误。那是证据。如果揭示的种子哈希不出那个承诺值,说明骰子在开局之后被换过。如果哪怕一掷通不过 HMAC 校验,说明你看到的骰子不是被承诺的骰子。这两种失败中的任何一种,都是任何人都能从同一份记录、在任何机器上、永远可以复现的篡改证据。

这也正是你本不该看到它的原因。承诺值最先公布,早于任何一枚棋子的移动。一个想在这局棋上做手脚的庄家,必须先把自己作弊的证据提前公布出来,然后再把找出它的工具发给每一位玩家。我们不请求你相信我们诚实。我们把系统造成你不必相信的样子。

在棋局开始之前就被封住的一掷,谁也瞄不准。

既然可证明公平,为什么我还是掷得差

因为公平的骰子仍然是骰子。你会被封死在栏上。你需要除了 2-1 之外的任何点数,偏偏就来 2-1。经过数千局,数字会向真实分布抹平,但一个晚上什么都不保证。验证拿走的是那份烦躁底下的疑问。那记神来之笔在你们俩碰到棋子之前就已固定,它并不是冲着你来的。知道这一点不会让那一掷变柔和。但它让你可以停止审问宇宙,回到局面上来。

骰子是嗓门最大的怀疑,却不是唯一的怀疑。为你的点数作出承诺的那同一台服务器,也在源头校验每一步棋,所以被改过的客户端没法把棋子塞到规则不允许的地方。公平的点数与合法的着法,出自同一个权威。

现在就能试验证页吗

能。验证页今天已经在 orion.arthea.ai/verify 上运行,里面还带一个演示回放,所以你不必安装任何东西、也不用注册账号,就能看到一次完整的验证在示例对局上跑完。orion.arthea.ai/go 这道门带着 App Store 与 Google Play 的链接,并且永远显示此刻真正可用的东西。