碰撞遊戲結果驗證:算法,安全性

1)驗證目的: 您確切確認的內容

不可更改性:操作員無法在出價後更改結果(以犧牲服務器座椅哈希為代價)。

可重復性:通過輸入,您可以獲得與遊戲相同的乘數。

過程完整性:嚴格按照規範應用消息格式,「nonce」嵌入式,舍入規則和「house edge」。

2)無法驗證的數據

1.Server Seed Hash (commit)-在使用相應的「Server Seed」之前發布。

2.Server Seed(稍後/期末披露)。

3.Client Seed(您的sid;您自己設置它或平臺生成)。

4.Nonce(當前的「服務器種子」中的費率計數器)。

5.散列算法(通常為「HMAC-SHA 256」或「SHA-256」)。

6.消息格式(例如:' '),精確的分隔符/寄存器/編碼。

7.哈希mapping公式→乘數(和舍入規則/最小規則)。

💡 整個規格必須位於運營商的Fairness/Provably Fair部分。如果沒有什麼是紅旗(參見第10條)。

3)驗證算法(7步)

1.核對commit:計算「SHA-256 (ServerSeed)」並與發布的「ServerSeedHash」進行比較。

2.收集消息:嚴格采用平臺格式(例如「msg=ClientSeed+」:「+Nonce」)。

3.計算回合哈希:
  • при `HMAC-SHA256`: `RoundHash = HMAC_SHA256(key=ServerSeed, msg=message)`;
  • 使用「SHA-256」:「RoundHash=SHA256(ServerSeed ||消息)」或規範中指定的。
  • 4.取出隨機性:拿起第一個'k'bit(通常是52), →整體'r',然後'u=r/2^k'。
  • 5.應用映射公式:將「u」轉換為乘數(根據遊戲文檔計算房屋邊緣/特殊案例)。
  • 6.根據遊戲規則四舍五入(例如,最多2個標誌,最少1個。00 ×等)。
  • 7.與歷史上的回合結果進行比較。匹配=正確的誠實。

4)偽代碼(可以改編為Python/JS)

python
從您的平臺插入精確的mapping公式而不是stub_mapping()

import hmac, hashlib, math

def round_hash(server_seed: bytes, client_seed: str, nonce: int) -> bytes:
message=f 「{client_seed}:{nonce} 」.encode(「utf-8」)格式請參閱BOM
return hmac.new(server_seed, message, hashlib.sha256).digest()或hashlib。sha256(...)

def take_u_from_hash(h: bytes, k_bits=52) -> float:
把年長的位作為一個整體r
r = int.from_bytes(h, "big") >> (256 - k_bits)
return r / (1 << k_bits) u в [0, 1)

def stub_mapping(u: float) -> float:
ZAGLUSHKA!更換您的遊戲文檔中的公式
例如,有時會使用視圖轉換:crash=floor((const/( r+1)100)/100)
和/或「房屋邊緣」作為罕見的強制性1。00×.不要在實際檢查中使用此工具。
return max(1.00, round(1.0 / max(1e-12, 1.0 - u), 2))

def verify(server_seed_hex, server_seed_hash_hex, client_seed, nonce, shown_multiplier):
server_seed = bytes.fromhex(server_seed_hex)
1)Commit
assert hashlib.sha256(server_seed).hexdigest() == server_seed_hash_hex.lower()
2-3)哈希回合
h = round_hash(server_seed, client_seed, nonce)
4) u
u = take_u_from_hash(h)
5-6)mapping+四舍五入
calc_mult = stub_mapping(u)
7)比較
return abs(calc_mult - shown_multiplier) < 1e-9

重要的是:請應用平臺的Fairness部分中的精確公式而不是「stub_mapping」;否則,驗證將是不正確的。

5)私人案件和陷阱

在同一回合中有兩個賭註:在許多平臺中,「nonce」的每個賭註都會增加,即使它們是在同一回合中完成的(例如:投註A → 「nonce=42」,投註B → 「nonce=43」)。檢查故事。

更改「Client Seed」:更改座位時,通常會重置「nonce」(或開始新流)。檢查您的平臺規則。

Batchy 「Server Seed」:一個「Server Seed」在一系列回合中運行,然後發布新的公文。不要混淆不同時期的種子。

四舍五入/最低限度:第二個符號的不匹配-在90%的情況下,四舍五入/最低限度(例如固定1)規則存在錯誤。00 ×在香料條件下)。

編碼/空格:多余的空格/字符串翻譯、不正確的寄存器、非UTF-8斷開驗證。

6)快速回合檢查清單

1.「SHA-256 (ServerSeed)」是否與發布的「ServerSeedHash」相匹配?

2.「Message」和「nonce」格式是否正確形成?

3.是否嚴格按照規格應用了算法(「HMAC-SHA 256」/「SHA-256」)和字段密鑰/順序?

4.圖解和四舍五入是否與文檔相同?

5.是否考慮特殊情況(罕見的「即時崩潰」,最低1。00 ×,帽子)?

6.結果是否與一分錢的遊戲歷史相吻合?

7)控制自動化(實踐)

Logs:保留其「client_seed」、「nonce」序列、時間戳、最終乘數。

Sampling:在「咆哮」「Server Seed」之後,偶爾會進行20-50回合;記錄匹配百分比(必須是100%)。

回歸:更改遊戲/提供程序版本時,運行相同的集合。

導出:將CSV/JSON與源代碼一起存儲是您的「審核跟蹤」。

8)安全: 如何不弄錯,不讓自己作弊

在本地/離線檢查:不要僅依靠操作員的Web驗證器;保持自己的腳本。

不信任沒有完整數據包的回合:沒有公式/格式-沒有驗證。

強大「客戶端種子」:詢問隨機性,定期更改(這不會提高RTP,但會消除可重現性問題)。

TLS/會話:僅通過HTTPS、2FA、輸入跟蹤和歷史記錄上載登錄。

不要將「服務器種子」傳遞給任何人:它由運營商在一段時間後發布;你的任務是鉆探,不要提前「提取」它。

9)典型的「新手錯誤」

字段的順序混淆(「Nonce:ClientSeed」而不是「ClientSeed:Nonce」)。

從頭開始計數「nonce」而不是1(反之亦然)。

使用了整個平臺的哈希(global nonce),需要您的個人「nonce」。

忽略規則四舍五入(銀行家的rounding vs floor/ceil)。

與活動而不是已經披露的「Server Seed」進行對賬。

10)操作員的「紅旗」

在此期間開始之前沒有公開的Server Seed Hash。

您無法設置您的Client Seed或查看nonce。

沒有將哈希拼寫為乘數的公共公式。

回合的歷史記錄並不能為對賬提供最低限度的數據。

格式和算法在沒有通知/規範存檔的情況下發生了變化。

11)澳大利亞語境(AU)

貨幣:在AUD中管理收益/投註,存儲故事的卸載(支持,有爭議的問題)。

負責任的遊戲(RG):存款/時間限制,暫停和自我排序-在真正的應用程序中提供;使用它們。

平臺實踐:在真正的運營商中,「公平性/推廣博覽會」塊包含完整的描述和驗證示例;缺乏細節是選擇其他服務的理由。

12)結果

驗證崩潰遊戲的結果是一個明確的過程:
  • 「Server Seed Hash」 Commite,
  • 通過「服務器種子」,「客戶端種子」,「nonce」和算法恢復「RoundHash」,
  • 應用已發布的mapping公式和舍入規則,
  • 在您的驗證和遊戲歷史中具有相同的乘數。

保持自己的腳本,編寫輸入,並定期檢查隨機回合。所以你不是在言語上確認誠實,而是在數學上確認誠實。

Caswino Promo