484 / 736TRNG

True Random Number Generator

Физический генератор случайных чисел

TRNG получает случайность из физического процесса, например электрического шума. Чтобы помочь безопасно создать кошелёк, устройство должно правильно измерять и обрабатывать этот шум и обнаруживать неисправности.

True Random Number Generator, или TRNG, получает новые непредсказуемые входные данные, измеряя физический процесс. Этим он отличается от генератора, который лишь вычисляет следующие значения из сохранённого состояния. На практике они могут работать вместе. Но слово «true» не гарантирует качество: физический источник тоже бывает плохо спроектированным или неисправным.

Схема может измерять небольшие электрические колебания и превращать их в числа. Важно, какую часть результата атакующий не сможет предсказать. Быстро произвести много данных недостаточно. Поэтому NIST SP 800-90B оценивает конкретный источник шума, его выборку, возможную обработку и проверки работоспособности. Название физического явления не заменяет такую оценку. [1]

Источник может выдавать нули чаще единиц. Обработка под названием conditioning помогает уменьшить эту неравномерность и сосредоточить имеющуюся энтропию, то есть неопределённость с точки зрения атакующего, в более коротком выходе. Недостающую неопределённость она не создаёт. Поэтому NIST SP 800-90B связывает засчитываемую выходную энтропию с входом и методом. Даже хеш, вычисленный отпечаток данных, не доказывает непредсказуемость: зная вход, можно снова вычислить тот же отпечаток. [1]

Если источник постоянно возвращает одно значение, устройство не должно это пропустить. NIST SP 800-90B использует Repetition Count Test для повторений и Adaptive Proportion Test для необычных частот. Эти проверки ищут определённые неисправности, а не автоматически выявляют каждую атаку или ошибку. При обнаружении устойчивого отказа источник не должен продолжать выдавать данные как при нормальной работе. [1]

Само наличие TRNG не доказывает безопасность кошелька. Важно и то, как конкретная версия использует данные и обрабатывает ошибки. Поэтому NIST SP 800-90C рассматривает источники вместе с последующими генераторами. Оценка одной детали не равна оценке всего кошелька. Даже отличный источник случайности не защитит резервную копию, которую вы позже раскроете. [4]

Длинная запись с работающего устройства показывает другие стороны его поведения, чем повторные выключения и запуски. Поэтому NIST SP 800-90B включает и тесты перезапуска. Оценка должна соответствовать конкретному источнику и условиям работы. Результат одной выборки нельзя автоматически распространить на все устройства или среды. Изменение прошивки, то есть программы внутри устройства, также может потребовать новой оценки. [1]

В технической документации встречаются команды RDRAND и RDSEED. Intel описывает их в руководстве по DRNG, аппаратному генератору случайных чисел. RDRAND предоставляет результаты детерминированного генератора, вычисляющего значения из внутреннего состояния. RDSEED выдаёт обработанную энтропию для инициализации, то есть создания начального состояния генератора. Оба пути могут начинаться с физического источника, но это не означает прямого чтения необработанного шума. [2]

Процессор не обязательно имеет готовый результат для каждого запроса. Поэтому Intel требует проверять флаг состояния CF для RDRAND и RDSEED: 1 означает доступный результат, 0 — его отсутствие. Недостаточно искать числовой нуль в целевом регистре, небольшом хранилище процессора. Программа должна прочитать флаг успеха. Поддержка команды процессором ещё не означает, что конкретный запрос выполнен успешно. [2]

В Linux интерфейс hw_random позволяет читать аппаратный источник через /dev/hwrng подобно файлу. Документация прямо предупреждает, что этот интерфейс сам не выполняет проверки качества данных. Неисправное или изменённое оборудование может возвращать неверные данные, которые приложение всё же прочитает. Успешное чтение не доказывает достаточной энтропии. Нужно оценивать и источник, и то, как программа использует его результаты. [3]

Для полной картины прочитайте эту статью вместе с Cryptographic Entropy, Random Number Generator, CSPRNG, Entropy Mixing. На эту статью также ссылаются Entropy Mixing.

DOC · 001NIST SP 800-90B — Entropy sources, conditioning and health testsСпецификация DOC · 002Intel DRNG guide — RDRAND, RDSEED and CFДокументация DOC · 003Linux kernel — Hardware random number generator interfaceДокументация DOC · 004NIST SP 800-90C — Complete RBG constructionsСпецификация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией