Почему ядро ​​Linux использует get_random_int() для генерации stack_canary или stack_top?

Почему ядро ​​Linux использует get_random_int() для генерации stack_canary или stack_top?

В ядре Linux есть генератор случайных чисел. Обычно он называется LRNG (Linux Random Number Generator). Мы можем использовать его, вызвав get_random_bytes(). Но stack_canaryи stack_topгенерируются get_random_int(). Хотя в ядре Linux есть собственный хороший генератор случайных чисел (LRNG), почему ядро ​​Linux генерирует его get_random_int()? Я думаю, что это может быть из-за эффективности. Это верно?

решение1

Толькопрочитать источник:

Получить случайное слово только для внутреннего использования ядра. Аналогично urandom, но с целью минимального истощения пула энтропии. В результате случайное значение не является криптографически безопасным, но для нескольких применений стоимость истощения энтропии слишком высока

Вот почему get_random_intне просто берет вывод get_random_bytes. Как оказалось, аргументы здесь неверны по двум причинам:

  • Энтропия на самом деле не истощается. Это просто фиктивный расчет внутри ядра.
  • Даже если бы энтропия истощалась, это не было бы причиной не использовать криптографически безопасный генератор псевдослучайных чисел вместо специальной конструкции. Просто используйте отдельный экземпляр от того, который истощает энтропию для /dev/random. Производительность может быть причиной, но разница между надлежащим CSPRNG, таким как Hash_DRBG/SHA-2, и специальной конструкцией здесь с использованием MD5 крошечная.

решение2

Linux'ы /dev/random, /dev/urandom, и get_random_bytes()привязаны к одному и тому же внутреннему пулу энтропии. Вполне возможно осушить его при использовании только для RNG и вызвать /dev/randomблокировку и /dev/urandomвыдачу выходных данных с низкой энтропией. Это условие низкой энтропии создает проблемы для криптографии.

Связанный контент