Назад | Перейти на главную страницу

Некоторые вопросы о параметрах kernel.random. *

Я пытаюсь понять параметры ядра Linux, которые находятся под /proc/sys/kernel/random/, но у меня проблемы. Не могли бы вы помочь мне разобраться в некоторых вещах?

  1. Что boot_id параметр, используемый для? Я нашел только информацию, сгенерированную при загрузке, но не смог понять почему.
  2. Я знаю, что размер пула энтропии постоянный (4096 бит) и не может быть изменен. Почему число такое маленькое? Не может быть, скажем, 1048576 или больше? Может быть, иметь много бит энтропии - это плохо?
  3. Это похоже на второй вопрос, но касается entropy_avail параметр - какова цель не заполнять весь пул энтропии? Когда я проверяю параметр, он колеблется около 1000 бит, но размер пула равен 4096. Когда entropy_avail достигает порога, установленного в write_wakeup_threshold, он немного падает (обычно 100) и снова поднимается до точки, указанной в write_wakeup_threshold параметр. Так зачем нам это 4096 единиц энтропии?
  4. Есть ли причина, по которой мне следует увеличивать или уменьшать стоимость read_wakeup_threshold и write_wakeup_threshold параметры? Первый просто засыпает процесс, которому требуется энтропия от /dev/random устройство, но какая разница, когда я устанавливаю его на 64, 128 или 256? Просто зависает немного дольше, а может, есть что-то еще?

Параметр идентификатора загрузки на самом деле не имеет отношения к статистике энтропии. Он просто однозначно определяет текущую загрузку, что полезно, если вы хотите узнать, перезагружен ли компьютер или что-то в этом роде.

Пул энтропии хранит случайные данные определенным реализацией способом, который предназначен для обработки как черный ящик. В общем, хорошо иметь как можно больше битов энтропии, если вы полагаетесь на источник энтропии; Однако иметь слишком много - расточительно. Если ваш сервер много занимается криптографией (например, генерирует ключи сеанса TLS или часто генерирует ключи RSA или даже токены безопасности) или постоянно нуждается в сильных случайных числах по какой-то другой причине, вам нужно много энтропии, и есть даже устройства, которые вы может получить эту проблему гигабитными потоками (из физического источника).

Размер пула обычно можно изменить, указав новый размер в файле размера пула. Ядро будет накапливать энтропию, которую оно получает из различных источников (относительные тайминги событий - популярный способ), а также энтропию, которую оно получает от ввода в /dev/random (через RNDADDENTROPY ioctl; простая запись в это устройство изменяет данные, но не добавляет номинальные биты энтропии). Если бы у вас был аппаратный источник энтропии, который вы недостаточно использовали, вы бы действительно хотели, чтобы этот параметр не был бесконечным.

Порог записи-пробуждения используется редко, но хорош для упорядочивания; прирост производительности должен быть минимальным. Он пробуждает устройства, блокирующие запись в пул энтропии (т. Е. Источники, которые будут использовать вышеупомянутый ioctl для добавления энтропии в пул), когда пул становится низким. Очевидно, это не обязательно приведет к увеличению энтропии.

Порог чтения-пробуждения противоположен; это количество бит энтропии, которое должно быть доступно (т.е. число, указанное в entropy_avail), прежде чем мы разрешим что-либо читать из /dev/random. /dev/urandom игнорирует этот параметр (так как чтение из него не блокируется и не дожидается энтропии, вместо этого разрешая чтение псевдослучайных данных).