fairnessprovably fairexplainer
认证随机数的意思是,某个独立实验室在某个时点检验过一台随机数生成器,判定它的输出在统计上站得住。可证明公平的意思是,游戏把一张属于你自己那局棋的密码学收据交到你手上,于是每一掷都能重新核对,不必相信任何人。一种模型审计机器。另一种证明你的这局棋。
这两个说法都出现在那些替你掷骰的在线游戏的信任页上,听上去可以互换。它们不能。它们回答的是不同的问题,出问题的方式也不同,而这个差别决定了你坐下来时被要求相信的到底是什么。
认证随机数究竟认证了什么
认证实验室取来一台生成器,把它的输出送进一整套统计检验,搜寻偏倚:出现得过于频繁的数字、重复的花样、漂移的序列。若数百万个样本看起来与纯粹的偶然无从分辨,实验室便在证书上签字。这份工作是真实的,也需要功力。它确立的是:那台生成器,按当时受测的样子,在那一天产出了站得住的随机性。
请留意证书看不见什么。它是在实验室里签发的,而你的骰子是在服务器上掷出的。
- 受测的代码,在若干个月和许多次更新之后,是不是仍是正在运行的代码。
- 生成器与你这局棋之间的接线:把一个原始随机数变成你那个 6 和 4 的代码。
- 任何一局棋里的任何一次单独掷骰。认证谈的是生成器这个一般之物,从不谈你周二晚上的那局棋。
所以认证带着一条不出声的附加条款:请相信自检验以来什么都没变,也请相信被认证的那条路径就是你这局棋真正走过的路径。多数工作室都遵守它。要点在于你无法核对。这套模型是对机器在某一刻的检查,加上此后每一刻的信任。
可证明公平是什么意思
可证明公平是另一笔交易。它不是指着一份你从未看过的审计,而是让游戏在开局之前就对自己的随机性作出承诺,事后再揭示足够多的东西,让你自己把每一掷重算一遍。证明随着这局棋一起旅行。实际上,它像一只封好的信封。
承诺. 在第一步之前,服务器生成一枚秘密种子,并公布它的 SHA-256 指纹。指纹对将要掷出的点数什么都不透露,却把种子钉在了原地。此后哪怕改动种子的一个比特,指纹就不再吻合。
掷骰. 对局期间,每一掷都用 HMAC-SHA256 从种子推导,每掷一次计算。骰子在信封被封上的那一刻就已定下。想在中途塞进一个更友善的数字,就绕不开已经公布的承诺值。
揭示. 棋局之后,种子被揭示。任何人都可以给它做哈希、与承诺值比对、重算每一掷,再把结果与棋盘上出现过的骰子并排放着看。若处处对得上,这局棋就不可能被操纵。若有什么被动过手脚,数学会说出来。
信任从公司转移到了算术。你不再需要相信审计做得细致,也不需要相信部署忠实。你需要的是 SHA-256 站得住,而这正是整个互联网的其余部分每天都在倚靠的同一个假设。
证书说的是我们去看的那天硬币是公平的。收据说的是你这一掷是公平的,并把算式亮出来。
那认证还重要吗
重要。承诺揭示证明的是你收到的正是被承诺的那份随机性。它并不证明被承诺的东西一开始就是好的。一个孱弱或可预测的种子来源,照样能产出完美通过校验的收据:粗劣骰子的可证明交付。判断来源的质量,恰恰是审计与统计检验的职责,而在受监管的行业里,证书根本就是硬性要求。
两种模型回答的是不同的问题。审计问:这份随机性好不好?收据问:我这局棋真的用上它了吗?只有前者的系统,靠的是对部署的永久信任。只有后者的系统,可以忠实地交付粗劣的骰子,并把这一点证明得明明白白。最稳的系统把两扇门都关上。
为什么公开的验证页很重要
因为没人读得懂的收据保护不了任何人。有些游戏公布承诺值,却不给玩家一条切实可行的核对途径,或者把验证塞进那款正被质疑的应用里面。那样没有闭上任何一个环。如果唯一能替一套系统作保的工具属于这套系统本身,你就又回到了信任,只是多绕了几步。
最稳的做法会公开三样东西。棋局之前的承诺值。棋局之后的种子。以及一条独立的、公开的、在应用之外运行的重算途径。这就是 Orion 的验证页住在浏览器里的原因,就在 orion.arthea.ai/verify:无需账号,无需安装,而我们的说法不参与这次核对。