Почему ранние пользователи Linux не получают достаточно энтропии? - PullRequest
0 голосов
/ 28 сентября 2019

Мне трудно следовать указаниям в недавней ветке LKML о том, что делать с длительной (неограниченной?) Блокировкой вызова getrandom при инициализации системы.

Суть проблемы в том, что ядро ​​не получает и не создает достаточно энтропии для своевременного успешного вызова getrandom.

Линус Торвальдс, для меня непостижимо, выступал за нарушение пользовательского пространства в этой теме., изменив поведение ошибки getrandom на с EINVAL.(Кто мешает Линусу нарушить пользовательское пространство?)

Возможно, именно ядро ​​виновато в том, что недостаточно энтропии для пользовательского пространства даже в раннем пользовательском пространстве.

(void *)getauxval(AT_RANDOM) уже в процессе инициализациидает указатель на 128 бит случайности.(Библиотека AC может даже использовать ее для инициализации таких вещей, как значение __stack_chk_guard.)

Почему ядро ​​не может принять (те?) 128биты для инициализации CSPRNG, которые будут использоваться реализациями ядра getrandom(..., 0) и /dev/urandom, позволяя этим интерфейсам выводить любое запрошенное количество псевдослучайных значений?

Очевидно, что в OpenBSD такой проблемы нет.Его arc4random_buf функция всегда возвращает запрошенную случайность без возможности ошибки.Таким образом, я предполагаю, что ядро ​​OpenBSD всегда может получить достаточно энтропии, чтобы затем инициализировать CSPRNG либо в ядре, либо на стороне пользователя.

Какие были варианты, которые привели к тому, что в OpenBSD появилась функция без ошибок?И может ли ядро ​​/ пользовательское пространство Linux принять те или иные варианты для getrandom?

...