Реализация 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 по запросу, тест совместимости с серверной частью.







