Багато крипто-казино обіцяють чесну гру, але без Provably Fair це лише слова. Ми реалізували цю Provably Fair систему в мобільних додатках для iOS та Android, де кожен раунд можна перевірити локально за 2-3 мілісекунди. Верифікація використовує криптографічний протокол commit-reveal з апаратною генерацією клієнтського seed. Замовте таку ж реалізацію — зв'яжіться з нами.
Особливу увагу приділяємо генерації client_seed — основі довіри між гравцем та казино. Сервер не може вплинути на результат, оскільки seed створюється безпосередньо на пристрої за допомогою захищених механізмів: на iOS — SecRandomCopyBytes з Security framework, на Android — SecureRandom CryptoProvider. Згенеровані 32 байти перетворюються на hex-рядок і відображаються користувачеві. Крім того, інтерфейс повинен дозволяти змінити client_seed вручну — це стандартна вимога для прозорих систем. Такий підхід виключає будь-яку можливість підтасовки з боку сервера, оскільки seed генерується в ізольованому середовищі додатку та недоступний для підміни.
Commitment scheme на Wikipedia описує теоретичну основу.
Як генерується client_seed на мобільному пристрої?
Для генерації використовується лише апаратний CSPRNG:
// 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) — це підвищує довіру, навіть якщо клієнт не стане ним користуватися.
Чому важлива локальна генерація client_seed?
Якщо client_seed приходить з сервера, казино може теоретично підібрати seed, що дає бажаний результат. Локальна генерація на пристрої виключає цю атаку: seed відомий лише клієнту до розкриття. Наш досвід показує, що користувачі довіряють додаткам, де вони самі керують seed'ом.
Схема 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. Примітно, що локальна верифікація в 10 разів швидша за серверну — вона не вимагає обміну даними з бекендом та забезпечує 100% прозорість.
Що входить в роботу
- Розробка модуля генерації client_seed з UI для ручного оновлення.
- Інтеграція HMAC-розрахунку з результатом (наприклад, dice roll 0-5).
- Екран верифікації з відображенням всіх параметрів та автоматичною перевіркою.
- Підтримка ротації server_seed: розкриття старого та публікація нового хеша.
- Документація по API та тестування на 10 000 раундів.
- Розгортання в App Store та Google Play з дотриманням гайдлайнів.
Процес роботи
- Аналітика: вивчаємо вашу серверну схему, визначаємо формат HMAC та nonce.
- Проектування: малюємо UX верифікації, пишемо специфікацію API.
- Реалізація: кодимо на Swift/Kotlin, використовуємо CryptoKit/javax.crypto. На тестовому сервері прогоняємо 1000 раундів.
- Тест: перевіряємо сумісність з сервером, автоматично верифікуємо 10 000 раундів.
- Деплой: публікуємо в сторах, надаємо доступ до вихідних кодів.
Терміни орієнтовно
Від 3 до 5 робочих днів на базову реалізацію. Якщо потрібна кастомна генерація результату (наприклад, для покеру) — до 10 днів. Вартість розраховується індивідуально після аналізу вашого бекенда.
Порівняння: локальна vs серверна верифікація
| Параметр | Локальна (наша) | Серверна |
|---|---|---|
| Залежність від мережі | Ні | Так |
| Прозорість для користувача | Повна | Обмежена |
| Можливість шахрайства | Виключена | Теоретично є |
| Швидкість перевірки | Миттєво | Залежить від пінгу |
Довіра та гарантії
Наша гарантія: вихідний код відкритий для аудиту, всі хеші публічні. Ми маємо 5-річний досвід у мобільній розробці та реалізували Provably Fair для 15+ проектів. Отримайте консультацію з інтеграції Provably Fair у ваш мобільний додаток — просто напишіть нам.







