Реалізація Provably Fair верифікації в мобільному крипто-казино
Provably Fair — механізм, при якому ні казино, ні гравець не можуть вплинути на результат після початку раунду. Це не просто маркетинг: без коректної реалізації система залишається чесною лише на словах. Мобільна частина відповідає за commit-reveal на стороні клієнта та UI верифікації.
Схема commit-reveal
Стандартна схема працює так:
- Перед раундом сервер публікує
server_seed_hash = SHA256(server_seed). - Клієнт генерує
client_seed(випадкові 32 байти через CSPRNG). - Результат раунду:
HMAC-SHA256(server_seed, client_seed + nonce), де nonce — лічильник раундів. - Після раунду сервер розкриває
server_seed. Клієнт перевіряє:SHA256(server_seed) == server_seed_hash.
Мобільний додаток відповідає за кроки 2 та 4.
Генерація client_seed на мобільному
// iOS
var clientSeedBytes = Data(count: 32)
clientSeedBytes.withUnsafeMutableBytes {
SecRandomCopyBytes(kSecRandomDefault, 32, $0.baseAddress!)
}
let clientSeed = clientSeedBytes.map { String(format: "%02x", $0) }.joined()
// Android
val clientSeedBytes = ByteArray(32)
SecureRandom().nextBytes(clientSeedBytes)
val clientSeed = clientSeedBytes.joinToString("") { "%02x".format(it) }
Користувач повинен мати можливість змінити client_seed вручну — це стандартна практика для прозорих систем. Поле введення з кнопкою "Оновити" (генерує новий випадковий seed).
Верифікація на клієнті
Після раунду додаток повинен надати екран верифікації. Користувач бачить:
| Параметр | Значення |
|---|---|
| Server Seed Hash | a1b2c3... (показано до раунду) |
| Server Seed | deadbeef... (розкрито після) |
| Client Seed | f00f... |
| Nonce | 42 |
| Результат HMAC | 0x3f2a... |
| Итог | 6 (з HMAC mod 6 + 1) |
Верифікаційний розрахунок виконується локально в додатку — користувач бачить що саме вичисляється. SHA-256 та HMAC-SHA-256 є в CryptoKit (iOS) та javax.crypto (Android) без залежностей.
Додатково: посилання на третьосторонній верифікатор (наприклад, provablyfair.org/verify) — це підвищує довіру, навіть якщо клієнт не користується ним.
Що потрібно перевірити
Всі nonce за сесію з одним server_seed повинні давати різні результати — це перевіряємо автоматично. Зміна server_seed після кожних N раундів або при ручному запиті користувача. При ротації — негайне розкриття попереднього server_seed та публікація нового хешу.
Сроки — 3–5 днів: генерація client_seed, HMAC-розрахунок результату, екран верифікації, зміна seed за запитом, тест сумісності з серверною частиною.







