可驗證公平性全解析

什麼是「可驗證公平性」?

玩家常常擔心在網路遊戲中被作弊,
這是可以理解的,因為從技術層面來說,遊戲提供方要讓你輸是非常容易的事。 在 Jemlit,我們提出了解決方案:可驗證公平性(Provably Fair)。 這是一種工具,讓你(玩家)可以自行驗證每一次擲骰結果, 確保整個過程完全公平、無任何造假!


可驗證公平性的運作原理是什麼?

在這個系統中,每次擲骰結果都是由以下變數共同計算而得:

  • 伺服器種子 - 由我們提供的一串隨機字元
  • 用戶端種子 - 由你的瀏覽器產生,你可以自行修改
  • Nonce遊玩次數 - 每次你遊玩時會遞增的數字

你會在遊戲開始前拿到一組加密過的 Server Seed
由於這是事先提供給你的,我們無法在之後更改。 不過它是加密狀態,所以你無法預先推算出結果(只有在日後獲得 未加密 的 Server Seed 時才能驗證)。 伺服器種子是透過 SHA512 雜湊演算法加密處理的。

你的瀏覽器會隨機產生一組 Client Seed,但你可以(也建議)在開始遊戲前手動修改, 這樣網站就無法預先得知你的 Client Seed。

當你第一次下注時,Nonce 會從 1 開始, 每進行一次遊戲,這個數字就會加 1。


擲骰結果是怎麼計算的?

現在來點技術內容!有3個步驟帶我們到達這個遊戲的最終擲骰結果。

步驟1 - 哈希處理變數

在這一步中,我們使用 HMACSHA512/256算法,將 Server Seed 作為 金鑰,並將 Client SeedNonce 作為 數據,並用 連字符 (-) 連接。

你可以自己計算;去 這裡,並運行以下代碼:
echo hash_hmac('sha512/256', 'your client seed-your nonce', 'server seed');
結果將是 38611068f6936027c4657138536fb5bb8f82a6cb2d883f1acb47cb24013f9e93

步驟2 - 將哈希轉換為數字

在第二步中,我們將上一個步驟中得到的結果轉換為數字;去 這裡,並運行以下代碼:
echo number_format(hexdec('38611068f6936027c4657138536fb5bb8f82a6cb2d883f1acb47cb24013f9e93'), 0, ".", "");
你將得到 25501016943689873370561741542489390377389678092728534236058081515070178721792,一個非常長的數字。

步驟3 - 計算最終的擲骰結果

由於我們希望擲出的是一個介於 0 和 100 之間的十進制數字,首先,我們將前一步中的數字除以最大可能數字,即 1664(64 是在步驟1中獲得的哈希字串的長度)。
最後,擲骰結果計算如下:
roll = 0 + 除後的數字 * 100.
在這個例子中,結果是 22.0231


獎品是如何選擇的?

當你進入 eBox 頁面時,可以點擊 顯示機會 來切換中獎機率顯示, 也可以在頁面底部點擊 「查看開盒結果」 來查看歷史擲骰紀錄。
每個盒中物品都會顯示需要擲出的數字範圍,例如:95.54 到 97.22, 這表示若你擲出的數值 大於 95.54 且 小於或等於 97.22,就能贏得該獎品。


如何驗證一切公平?

為了驗證沒有作弊,只需按照前面提到的步驟操作。
當然,你只能在揭示 Server Seed 後驗證遊戲。
你可以在頁面頂部的 "Fairness" 彈出窗口中找到你的 Server SeedClient SeedNonce(如果你在移動設備上訪問 JemLit,則可以在左上角的菜單中找到)。