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 的連結,並且永遠顯示此刻實際能取得什麼。