Факти про випадкові послідовності RNG
Випадкова послідовність - це не «хаос», а потік значень з перевіряються властивостями. В ігрових системах від якості цього потоку залежить чесність спінів, роздач, мультиплікаторів. Нижче - ключові факти про те, якою повинна бути послідовність RNG і як її перевіряють.
1) Незалежність важливіша за «красивість»
i.i.d. (незалежні і однаково розподілені) - золотий стандарт.
Відсутність видимих патернів не гарантує випадковість; важливі тести на кореляції і серійність, а не «на око».
2) Розподіл задано протоколом
У «сирого» потоку часто передбачається рівномірність (наприклад, 32-бітові слова рівноімовірні).
У грі рівномірні числа мапятся в події: символи слота, карти з «віртуальної колоди», сектора колеса. Коректний мепінг = відсутність «мертвих зон» і перекосів.
3) Період є завжди - питання в його довжині
У PRNG кінцевий період (циклічність). Хороший генератор має період настільки довгий, що в реальній експлуатації ви його не «обійдете».
Критично уникати збігів «стану» (state/nonce reuse), інакше повторяться підпослідовності.
4) Сід (seed) - корінь непередбачуваності
Неправильна ініціалізація сидом дає повторювані або передбачувані виходи.
Надійна система використовує багатоканальну ентропію і періодичний reseeding (документований).
5) Ентропія - не те ж саме, що «шум»
Бітова ентропія вимірює, наскільки непередбачуваний потік.
Апаратна ентропія (шум) зазвичай перетравлюється криптографічним DRBG (CSPRNG), щоб отримати швидкий і стійкий потік.
6) p-values не повинні бути «красивими»
У батареях тестів (частот, серій, «днів народження», рангів матриць тощо) p-values повинні розподілятися рівномірно по [0; 1], а не "збиратися близько 0. 5».
Один «червоний» тест не доводить проблему: враховують множинність перевірок і повторюють прогін.
7) Локальна «смуга» - не баг
У будь-якій істинно випадковій послідовності виникають кластери (довгі серії нулів/одиниць, повторів символів).
Смуги - нормальні; системний ризик - стійкі перекоси за великі вікна.
8) Лінійність - прихований ворог
Прості лінійні генератори виду LCG можуть проходити базові тести, але «сипляться» на складних (ранг матриці, лінійна складність, DFT).
В ігровій індустрії стандарт - криптостійкі DRBG (напр., на блокових шифрах/хешах).
9) Меппінг повинен бути стаціонарним і версіонованим
Будь-яка зміна таблиць відповідності «число → подія» = нова версія гри і повторна перевірка.
Хороша практика - жорстка фіксація меппінгу з хеш-сумами і цифровими підписами.
10) «Майже-виграш» - про інтерфейс, а не про потік
Near-miss - частина візуальної драматургії; частка і поведінка задаються математикою гри.
RNG видає число, а інтерфейс розповідає історію - ці шари повинні бути розведені.
11) Відтворюваність ≠ передбачуваність
Для аудиту кожен раунд логується так, щоб можна було відтворити результат (ID раунду, сід/nonce, хеші).
Це не робить потік передбачуваним в момент гри: секрети (сід) і стану захищені.
12) «Хороші» послідовності живуть на проді під наглядом
Після релізу важливий моніторинг: чи сходиться RTP до сертифікованого, чи немає дрейфу частот символів, повторів, «гарячих» номерів.
Алерти по порогах → ізоляція тайтла і техрозслідування.
13) Стан і потоки - окремо
Різні ігри/столи/інстанси використовують незалежні стани RNG.
Не можна «ділити» один потік на кілька продуктів - з'являються перехресні кореляції.
14) Forward/Backward-security важливіше, ніж здається
При компрометації поточного стану хороший CSPRNG не повинен розкривати минуле (backtracking resistance) і майбутнє (forward security) послідовності.
Це досягається криптопримітивами і регулярним reseeding.
15) «Provably fair» доводить непідлежне підміні
Коміт-ревіл (хеш серверного сиду → розкриття) + клієнтський сід дають гравцеві можливість перерахувати результат.
Це гарантує цілісність послідовності, але не замінює аудит математики гри і меппінгу.
Як виглядає погана послідовність (прикмети)
Повтор сидів/nonce → дублікати результатів при однакових входах.
Стабільний перекіс частот у великих вікнах (не одиничний кластер).
Виявляються періоди в DFT, «провали» в TestU01/BigCrush.
Дрейф емпіричного RTP від заявленого за розумні обсяги.
Як виглядає хороша послідовність
Рівні частоти і серійність в межах довірчих інтервалів; рівномірні p-values.
Відсутність кореляцій між сусідніми і віддаленими елементами.
Збіжність емпіричного RTP/частот подій до моделі.
Нульова різниця між продуктивним бінарем і сертифікованим (контроль хешів).
Міні-шпаргалки
Для студій/провайдерів
Використовуйте CSPRNG + документований reseeding з багатоканальної ентропії.
Поділяйте стани за потоками/іграми; ведіть журнал nonce.
Ганяйте NIST/Dieharder/TestU01, плюс масимуляції мепінгу до сходу RTP.
Фіксуйте меппінг і бінарії під цифровий підпис; забороните непідписані релізи.
Налаштуйте алерти на дрейф метрик в проді; план ізоляції і роллбека.
Для операторів
Звіряйте версії та хеші ігор з сертифікованими.
Моніторьте RTP/частоти/повтори; тримайте пороги і авто-алерти.
Зберігайте незмінні логи раундів з можливістю швидкого експорту за тікетом.
Для гравців
Перевіряйте інфо-екран: RTP, правила, версія, max win.
Не плутайте кластери з «підкруткою»: смуги - нормальні.
У суперечці просіть ID раунду і виписку - результат повинен відтворюватися.
Випадкова послідовність RNG - це інженерний артефакт з перевіряються властивостями: незалежність, коректний розподіл, довгий період, грамотний сидинг і стійкість до компрометації. В іграх чесність виникає там, де якісний потік з'єднаний з правильним меппінгом і процедурами контролю: сертифікація до релізу, логи і моніторинг після. Коли всі три шари на місці, «випадковість» перетворюється з обіцянки в надійну практику.