fairnessprovably fairdice
會,確實有可能。線上的骰子是在你看不見的伺服器上擲出的,沒有任何實體的東西能阻止營運者在數字送到你的棋盤之前把它換掉。光看結果,永遠證明不了任何一方,所以誠實的問題不是動手腳有沒有可能。問題是,一款遊戲能不能證明它沒有動手腳。
我們自己就在做一款雙陸棋,所以在這件事上我們並不中立。正因如此,我們才想把話說清楚,包括那些不好聽的部分。
為什麼在每個網站上骰子都像被動過手腳?
因為雙陸棋的變異性毫不留情,而人的記憶是歪的。兩顆骰子有三十六種落法;連續的怪運不是故障,而是必然,今晚某處一定有一台誠實的伺服器,對著一個每步都走對的人連擲四次同點。你記得那個打中你落單棋子的 5-5。你不記得上週二救了你一命的那個奇蹟點數。輸留下來,救回的忘掉,連輸三盤之後骰子就變成私人恩怨。在真正的咖啡館、真正的棋盤上也一樣會變成私人恩怨。去問任何一個推了四十年木棋子的人。
陷阱就在這裡。一款真的動了手腳的遊戲,感覺會一模一樣。連續的怪運不能證明任何一方,所以如果你的證據是骰子給你的感覺,你就分不出誠實的伺服器和不誠實的伺服器。我們也分不出。這不是替線上骰子辯護。這正是它們的問題所在。
一個網站真的有辦法扭曲自己的骰子嗎?
技術上可以,而且一點也不難。伺服器在擲骰之前就看得到整個棋盤。想作弊的營運者可以:
- 只在最關鍵的時刻,每一百次裡偏轉少數幾次:打中的那一擲、從中欄進場失敗的那一擲、把敗局翻過來的那個同點。
- 把對局人為地維持在勢均力敵,好讓一場局撐得更久,輸也像是差一點就贏。
- 悄悄偏袒對營運者有利的那一方。
- 做得夠稀少,讓骰子仍然通得過玩家所能執行的任何統計檢驗。
我們沒有指控任何特定網站這麼做。我們說的是:這種架構容許它發生。封閉的伺服器是一間上了鎖的房間:營運者獨自擲骰,宣布一個數字,然後請你相信。站在門外,誠實和不誠實的營運者看起來一模一樣。
認證過的產生器不就證明骰子公平嗎?
看清楚那張證書實際涵蓋什麼。實驗室檢驗的是一個產生器:檯面上的一套演算法,產出數以百萬計、能通過統計檢查的數字。那證明的是零件。它完全沒有談到交付,也就是送到你棋盤上的那個數字,是不是在那一刻、從那個產生器、原封不動地送過來的。倉庫裡有一台校準過的磅秤,並不能證明你的麵包是用它秤的。
而且認證只是一張快照。線上運作的伺服器一直在重新部署,產生器與你這盤棋之間的程式碼路徑,在實驗室下班很久以後仍然在變。所以認證產生器回答的,是一個其實沒有人問過的問題。重點不是這棟大樓裡某處有沒有好骰子。重點是你這盤棋有沒有拿到,每一擲都拿到,就在今晚。
承諾揭露到底改變了什麼?
它把公平從承諾變成證據。一盤棋開始之前,伺服器抽出一個祕密種子,並公布它的指紋,也就是一段稱為承諾的 SHA-256 雜湊。接著這盤棋的每一擲都由那個種子推導出來,每擲一次做一回 HMAC-SHA256 運算,依序進行。棋局結束時,伺服器揭露種子。
現在任何人都能查兩件事。把揭露的種子做雜湊:它必須和第一步之前公布的承諾相符。重新推算每一擲:它們必須和棋盤上出現過的每一個數字相符。如果伺服器在看到你的局面之後改動了哪怕一顆骰子,帳就對不上。動手腳不再是一個你無法檢驗的疑心,而變成一個你能當場抓到的謊。
在棋局開始前就鎖死的骰子,無法對棋局作出反應。
這就是核心。真正有用的那種動手腳是反應式的:看到落單的棋子,就擲出打中的點。承諾揭露把伺服器的眼睛拿走了,因為整串點數在開局第一步之前就已經定死,承諾之後的任何介入都能用數學查出來。它做不到的是讓骰子變仁慈。那串點數是誠實的,不是慈悲的。你照樣會在最糟的時刻被打到中欄,只是現在你能證明那是公平的。
實際上要怎麼驗證一盤棋?
我們在 Orion 就是這麼做的。在我們伺服器上進行的每一盤棋,都帶著第一擲之前給出的承諾,伺服器在源頭驗證每一步,而檢查一盤已結束的棋大約只要一分鐘:
打開驗證頁. 用任何瀏覽器前往 orion.arthea.ai/verify。不必安裝任何東西,也不用註冊帳號。
輸入棋局編號. Orion 每一盤伺服器對局都有一組編號。貼上即可。
讓瀏覽器算. 頁面會用 Web Crypto 在本機、在你的瀏覽器裡重新推算承諾與每一擲。我們的說法不參與這項檢查。只要有一個數字被改過,重算就會說出來。
驗證頁今天就已經在運作。遊戲本身已經完成,orion.arthea.ai/go 的門口帶著 App Store 與 Google Play 的連結,並且永遠顯示此刻實際能取得什麼。無論如何,誠實的答案不變。是的,線上雙陸棋有可能被動手腳。解方不是一句更漂亮的承諾。解方是願意把算式攤開來的骰子。