В чем разница между устройством ввода случайных чисел и устройством вывода?
Страница man для rngd в Linux говорит -o
(/dev/random) используется для вывода случайных чисел, в то время как -r
(/dev/hwrng) для ввода случайных чисел. Что это значит? Чем отличаются эти файлы устройств и почему они используются по-разному? Насколько я понимаю, ядро генерирует свои собственные случайные последовательности из аппаратных событий и вставляет их в /dev/random. Так зачем rngd понадобиться устройство ввода?
2 ответа
/dev/hwrng
это устройство специально для аппаратного источника случайных чисел. Страница man предоставляет дополнительные источники, из которых rngd может читать при желании.
По умолчанию rngd читает из этого источника и пишет в /dev/random
,
Эффект написания /dev/random
это добавить данные в пул энтропии ядра.
Количество источников, из которых ядро может самостоятельно собирать энтропийные данные, ограничено. Использование процесса пользовательского пространства, который может собирать энтропию из дополнительных источников и предоставлять ее ядру, означает, что вероятность того, что энтропия исчерпается, если /dev/random
интенсивно используется.
Насколько я понимаю, ядро генерирует свои собственные случайные последовательности из аппаратных событий и вставляет их в / dev / random.
Из открытых аппаратных драйверов да, из аппаратных случайных модулей (/dev/hwrng) нет. Разработчики Linux считают уровень доверия непрозрачного случайного оборудования достаточно важным, чтобы не включать его по умолчанию, перенося решение в пространство пользователя.
rngd, будучи пользовательской программой, также позволяет легко смешивать неядерные исходники, такие как NIST Randomness Beacon. (Хотя может быть забавно иметь виртуальную игру в кости для лабораторной игры, этот поток битов общедоступен, никогда не используйте его для крипто-секретов.)