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).