Triknya, dalam satu paragraf
Hash kriptografi mengubah input apa pun menjadi sidik jari panjang tetap dengan dua sifat yang penting di sini: Anda tidak dapat bekerja mundur dari sidik jari ke input, dan Anda tidak dapat menemukan dua input dengan sidik jari yang sama. Jadi jika seseorang menunjukkan Anda sidik jari rahasia hari ini dan rahasia besok, Anda dapat hash rahasia tersebut dan memeriksa bahwa itu cocok. Jika cocok, rahasia yang mereka tunjukkan adalah yang mereka miliki kemarin. Mereka tidak bisa menukarnya di antara, karena rahasia yang berbeda akan memiliki sidik jari yang berbeda, dan mereka tidak bisa memilih rahasia agar sesuai dengan sidik jari, karena itu berarti membalikkan hash.
Itu adalah skema komitmen, dan itu adalah seluruh konten kriptografi dari "provably fair". House menghasilkan server seed, menerbitkan hash SHA-256-nya, memainkan round yang berasal dari seed, dan mengungkapkan seed ketika pasangan pensiun. Segala yang lain adalah plumbing.
ENGINE-VERIFIED_shared/seedApi.ts: getRandomKey mengembalikan {serverSeedHashed, clientSeed, nonce}; renewRandomKey mengembalikan pasangan segar bersama dengan previousServerSeed dan previousServerSeedHashed, pengungkapannya. _shared/SeedPanel.tsx memberi label pada bidang "server seed (sha-256 commitment)". _shared/rng.ts: sha256Hex() menghitung sidik jari dan hmacSha256Utf8() hash per-round, dengan komentar bahwa demo engine "GENERATES outcomes dengan primitif yang sama yang digunakan verifier untuk CHECK mereka — satu implementasi, jadi demo tidak pernah bisa menyimpang dari apa yang verifier terima".
Tiga hal yang terbukti
| KLAIM | MENGAPA INI BERLAKU | PEMERIKSAANNYA |
|---|---|---|
| Server seed sudah diperbaiki sebelum taruhan Anda | Perubahan apa pun pada seed akan mengubah hashnya, dan hash ditampilkan sebelum round pertama | Perhatikan komitmen di panel seed sebelum Anda bermain |
| Seed yang diungkapkan adalah yang berkomitmen | Seed yang berbeda tidak dapat menghasilkan sidik jari SHA-256 yang sama | Hash seed yang diungkapkan; bandingkan dengan komitmen yang Anda catat |
| Setiap hasil mengikuti dari pasangan seed dan nomor round | Hasilnya adalah HMAC-SHA256(server seed, "client seed-nonce-cursor") yang dilewatkan melalui derivasi yang dipublikasikan game | Hitung ulang round di browser Anda dari empat input; panel melakukan ini untuk Anda |
Ketiga pemeriksaan bersifat lokal: mereka membutuhkan seed yang diungkapkan, client seed Anda, nonce dan kode derivasi, dan tidak ada dari house pada saat pemeriksaan.
Klaim ketiga adalah yang melakukan pekerjaan untuk pemain, dan itu bergantung pada derivasi yang bersifat publik. Hash dari seed tidak memberi tahu Anda apa pun tentang bagaimana seed menjadi lemparan dadu atau kartu. Di sini fungsi itu dikirim di klien, kode yang sama yang digunakan demo untuk menghasilkan hasil dan verifier gunakan untuk memeriksanya, jadi round yang dihitung ulang adalah penghitungan ulang yang sebenarnya daripada permintaan ke server untuk mengonfirmasi dirinya sendiri.
ENGINE-VERIFIED_shared/demoLocal.ts: uAt() derives the per-round number as u64(hmacSha256Utf8(serverSeed, `${clientSeed}-${nonce}-${cursor}`)), described as matching RandomUtils.generateHash on the server; _shared/rng.ts turns the first seven bytes of the HMAC into a uniform number in [0, 1) “matching the server’s Long→Double rounding bit-for-bit”. Each game’s derive module then maps that number to a roll, a card or a multiplier.
Panduan verifikasi melakukan ketiga langkah pada putaran nyata. Jika Anda belum pernah melakukannya, lakukan sekali; poin dari skema ini bukan bahwa Anda memeriksa setiap putaran tetapi bahwa Anda bisa memeriksa salah satu dari mereka, dan rumah tidak dapat mengatakan sebelumnya mana.
Tiga hal yang tidak dapat dibuktikannya
Tidak dapat membuktikan benih itu acak. Komitmen mengikat benih; itu tidak mengatakan apa pun tentang bagaimana benih dipilih. Jika rumah mengetahui benih klien Anda ketika menghasilkan benih server, pada prinsipnya dapat menghasilkan benih sampai menemukan yang putaran pertamanya disukainya, dan berkomitmen pada yang itu. Hash akan cocok dengan sempurna. Pertahanan standar adalah pemesanan: benih server berkomitmen terlebih dahulu, dan benih klien ditetapkan setelahnya, sehingga apapun yang berkomitmen rumah, itu tidak tahu apa yang akan dikombinasikan.
Pemesanan itu adalah tempat panel situs ini memiliki batas yang perlu dinyatakan dengan jelas. Menetapkan benih klien di sini tidak membiarkan benih server saat ini tetap di tempat; ia memutar pasangan, dan benih server baru dihasilkan oleh permintaan yang sama yang membawa benih klien baru Anda. Dari klien tidak mungkin untuk menunjukkan bahwa benih baru diperbaiki sebelum permintaan dibaca. Apakah server pra-menghasilkan benih berikutnya, seperti yang dilakukan beberapa operator dengan menerbitkan komitmen berikutnya sebelumnya, tidak terlihat di API klien, dan tidak ada bidang "hash benih server berikutnya" untuk diperiksa. Ini telah diangkat ke tim permainan, dan perbaikannya sangat kecil: komitkan benih server berikutnya sebelum benih klien yang akan dipasangkan dengannya diterima, dan tampilkan komitmen itu di panel.
ENGINE-VERIFIED_shared/seedApi.ts: setClientSeed(clientSeed) calls renewRandomKey with the new client seed and returns a fresh pair at nonce 0; rotate() calls the same endpoint without a seed. IHouseSeed carries serverSeedHashed, clientSeed and nonce, plus the previous pair on rotation; no next-seed commitment is present in the type.
Sampai saat itu, versi praktis dari pertahanan adalah yang telah diberikan skema kepada Anda dalam setiap aspek lain: pengungkapan. Rumah yang menggiling benih melawan benih klien Anda masih harus mengungkapkan setiap benih pada rotasi, dan setiap putaran di bawahnya dapat diperhitungkan. Apa yang berarti batas adalah bahwa garis curiga di putaran pertama setelah perubahan benih tidak dapat dikecualikan oleh hash saja; itu hanya dapat diperiksa, putaran demi putaran, setelah pengungkapan.
Tidak dapat membuktikan permainan itu adil dalam arti lain. "Provably fair" berarti keacakan itu jujur, bukan bahwa peluangnya sama. Permainan dadu dapat sepenuhnya dapat diverifikasi dan masih mengembalikan 99% menurut desain; tepinya tinggal di tabel pembayaran, yang merupakan angka yang diterbitkan dan janji terpisah. Etika house edge tentang janji itu. Komitmen diam tentang hal itu.
Tidak membuktikan apa pun tentang putaran yang tidak ada yang periksa. Skema ini adalah pencegah, bukan jaminan. Putaran yang tidak pernah Anda hitung ulang adalah putaran yang Anda terima dengan kepercayaan, persis seperti yang Anda lakukan di tempat lain; yang berubah adalah kepercayaan itu opsional, dan rumah tidak dapat tahu kapan Anda akan menggunakannya. Itu peningkatan besar atas mesin pengocok yang tidak dapat Anda lihat di dalamnya, dan lebih kecil daripada yang disarankan kata "bukti".
Hash adalah kwitansi untuk keacakan. Ini bukan sertifikat untuk permainan. kalimat untuk diingat
Apa yang akan membuktikan lebih banyak
- Benih berikutnya yang berkomitmen sebelumnya. Menerbitkan hash benih server berikutnya sebelum benih klien apa pun dapat dipasangkan dengannya menutup kesenjangan pemesanan di atas. Ini adalah perubahan tunggal yang akan membiarkan panel membuktikan bahwa benih diperbaiki sebelum input Anda diketahui.
- Sumber keacakan publik. Mencampurkan beacon yang tidak dikontrol siapa pun, seperti jaringan drand, menghilangkan pertanyaan siapa yang memilih benih; di dalam drand menjelaskan cara kerjanya dan apa biayanya.
- Derivasi yang diterbitkan, tetap publik. Sudah terjadi di sini, dan bagian yang paling mudah hilang ketika klien ditulis ulang. Verifier hanya sejujur kode yang dijalankannya.
Tidak ada dari perubahan ini apa hash itu. Mereka mengubah apa yang menjadi sidik jari hash, dan kapan. Skema cukup sederhana sehingga batasnya juga sederhana, dan pemain yang tahu tiga hal yang dibuktikannya berada dalam posisi yang lebih baik daripada orang yang telah diberitahu itu membuktikan segalanya.
FAQ
Apa itu komitmen hash dalam kasino yang provably fair?
Sidik jari SHA-256 dari benih server rahasia rumah, ditampilkan sebelum bermain dan diperiksa terhadap benih ketika diungkapkan. Ini membuktikan bahwa benih diperbaiki sebelum taruhan Anda dan bahwa benih yang diungkapkan adalah yang berkomitmen.
Apakah hash yang cocok membuktikan permainan itu adil?
Ini membuktikan bahwa keacakan tidak diubah setelah komitmen dan, dengan derivasi yang diterbitkan, bahwa setiap hasil mengikuti dari pasangan benih. Itu tidak membuktikan bahwa benih dipilih secara acak, dan tidak mengatakan apa pun tentang house edge, yang merupakan angka terpisah yang diterbitkan.
Bisakah rumah memilih server seed yang menguntungkan dirinya?
Hanya jika ia mengetahui client seed yang akan dipasangkan dengan server seed saat memilihnya. Pertahanannya adalah melakukan komitmen server seed sebelum client seed ditetapkan. Di situs ini perubahan client seed memutar pasangan dalam permintaan yang sama, sehingga urutan tidak dapat dikonfirmasi dari klien; artikel menjelaskan batasnya dan perbaikan yang telah diusulkan.
Bagaimana cara saya memeriksa ronde sendiri?
Putar seed untuk mengungkap server seed yang sudah pensiun, hash-nya untuk mengonfirmasi bahwa cocok dengan komitmen yang Anda lihat, kemudian hitung ulang HMAC-SHA256 dari server seed di atas client seed Anda, nonce, dan kursor, dan teruskan hasilnya melalui derivasi yang dipublikasikan game. Panel seed melakukan perhitungan ulang di browser Anda.
Mengapa kode derivasi penting?
Karena hash hanya mengunci seed. Mengubah seed menjadi roll atau kartu adalah fungsi, dan kecuali fungsi itu bersifat publik, hash yang cocok tidak memberi tahu Anda apa pun tentang apakah hasilnya adalah yang tersirat oleh seed. Di sini klien mengirimkan derivasi yang sama yang digunakan demo untuk menghasilkan hasil.
Apakah provably fair lebih baik daripada audit RNG berlisensi?
Mereka menjawab pertanyaan yang berbeda. Audit mensertifikasi perilaku statistik generator selama banyak pengundian; komitmen memungkinkan Anda memeriksa ronde tertentu setelahnya. Keduanya tidak saling menggantikan, dan tidak ada yang mengubah house edge.
SUMBER & REFERENSI
- Wikipedia — Commitment scheme: hiding and binding, dan hash-based commitments
- Wikipedia — HMAC: keyed hashing dan penggunaannya sebagai pseudorandom function
- Betkyo engine source: _shared/seedApi.ts (commit, reveal dan rotation), _shared/rng.ts (sha256Hex, hmacSha256Utf8, uniform 7-byte), _shared/demoLocal.ts (uAt derivation), _shared/SeedPanel.tsx
GAME-GAME DALAM ARTIKEL INIDice — rules & free play →Limbo — rules & free play →