Deterministic RNG — генератор псевдовипадкових чисел: він обчислює значення за визначеною процедурою, а не вимірює нове випадкове фізичне явище для кожного з них. Він починає з даних під назвою seed і зберігає внутрішній стан — інформацію для наступного обчислення. Повторення всієї процедури з тими самими входами відтворює результати. Це зручно для тестів. Безпечному криптографічному генератору також потрібні належна конструкція й достатня ентропія: невизначеність вхідних даних з погляду нападника.
Уявіть, що обчислення призупинили й зберегли його пам’ять. Якщо відновити його в тому самому місці та подати ті самі наступні дані, воно може продовжитися однаково. NIST SP 800-90A описує такі генератори як DRBG. Значення мають алгоритм, налаштування та порядок запитів. Додавання свіжої ентропії, тобто reseeding, змінює стан. Тому однаковий seed не гарантує однакового виходу різних програм. [1]
Навіть проста програма для моделювання може створювати числа, схожі на випадкові. Цього замало для захисту гаманця. RFC 4086 попереджає, що деякі такі послідовності нападник може передбачити, навіть якщо вони проходять статистичні тести. Криптографічно сильний генератор має залишатися практично непередбачуваним після розкриття частини виходу. Важливі конструкція, якість і секретність початкових даних, а не саме слово «детермінований». [2]
Під час пошуку помилки корисно точно відтворити ту саму ситуацію. Тому функція randombytes_buf_deterministic() у libsodium повертає однакову послідовність для однакового seed. Розробник може опублікувати очікуваний результат, щоб інші його перевірили. Саме тому публічний тестовий seed не можна використовувати для справжнього гаманця: будь-хто зможе обчислити той самий «секрет». [3]
BIP32 використовує подібну відтворюваність для виведення ключів, але це не та сама процедура, що звичайне генерування випадкових даних. З одного seed утворюється дерево ключів. Шлях деривації визначає потрібну гілку. Однакові seed і шлях дозволяють знову отримати ті самі ключі. Ще одна похідна адреса сама по собі не додає нової незалежної ентропії до початкового секрету. [4]
У BIP39 слова відновлення, які називають mnemonic, є лише частиною входу. PBKDF2 поєднує їх із passphrase, необов’язковим додатковим секретом, щоб обчислити seed для подальшого виведення ключів. Інша passphrase дає інший результат навіть за незмінних слів. Отже, для тих самих ключів потрібні всі початкові дані та відповідний спосіб деривації. Самого збігу слів недостатньо. [5]
Цифровий підпис підтверджує, що власник відповідного секретного ключа схвалив транзакцію. RFC 6979 описує обчислення допоміжного значення k із цього ключа та повідомлення, яке підписують. На цьому кроці не потрібно щоразу отримувати нове випадкове значення. Однак вимога якісної випадковості під час початкового створення ключа залишається. Правильний підпис не виправить ключ, який від початку можна було вгадати. [6]
Відновити ті самі ключі через BIP32 — бажаний результат. Випадково повторити значення, які мали бути новими, — ні. Знімок віртуальної машини зберігає стан комп’ютера разом із пам’яттю. Як попереджає libsodium, відновлення знімка може повторити стан і вихід генератора. Тому, копіюючи середовище, не можна припускати, що кожна запущена копія автоматично створюватиме незалежні секрети. [3] [4]
Розробник порівнює результат із тестовим вектором: відомим входом і очікуваним виходом. Збіг показує, що програма правильно обчислює цей приклад. Він не доводить якості ентропії на реальному пристрої. NIST SP 800-90A окремо розглядає механізми та вимоги до їхніх входів. Важливі також версія, налаштування й поповнення ентропії. Сама позначка Deterministic RNG не підтверджує безпеки гаманця. [1]
Для повної картини прочитайте також CSPRNG, Random Number Generator, HD Wallet, Seed Generation. На цю статтю також посилаються CSPRNG, COLDCARD RNG Incident (2026).