Сообщить об ошибке.

Генерация случайных байтов средствами OS

Функции генерации случайных байтов OS:

os.getrandom(size, flags=0):

Функция os.getrandom() возвращает случайные байты до размера size. Функция может вернуть меньше байтов, чем запрошено.

Эти байты могут использоваться для заполнения генераторов случайных чисел в пространстве пользователя или для криптографических целей.

Функция os.getrandom() использует энтропию, полученную от драйверов устройств и других источников шума окружающей среды. Чрезмерное чтение больших объемов данных будет иметь негативное влияние на других пользователей устройств /dev/random и /dev/urandom.

Аргумент flags представляет собой битовую маску, которая может содержать ноль или более следующих значений ORed вместе: os.GRND_RANDOM и os.GRND_NONBLOCK.

Смотрите также страницу руководства Linux по getrandom().

Доступность: Linux 3.17 и новее.

os.urandom(size):

Функция os.urandom() возвращает строку случайных байтов размером size, пригодную для криптографического использования.

Эта функция возвращает случайные байты из специфичного для операционной системы источника случайности. Возвращаемые данные должны быть достаточно непредсказуемыми для криптографических приложений, хотя их точное качество зависит от реализации ОС.

В Linux, если доступна системный вызов getrandom(), то она используется в режиме блокировки: блокируется до инициализации системного пула энтропии urandom (ядро собирает 128 бит энтропии). В Linux функция os.getrandom() может использоваться для получения случайных байтов в неблокирующем режиме, используя флаг os.GRND_NONBLOCK или для опроса до тех пор, пока не будет инициализирован системный пул энтропии urandom.

В Unix-подобной системе случайные байты считываются с устройства /dev/urandom. Если устройство /dev/urandom недоступно или не читается, возникает исключение NotImplementedError.

Изменено в Python 3.11: в Windows используется BCryptGenRandom() вместо устаревшего CryptGenRandom().

Смотрите также:

  • модуль secrets предоставляет функции более высокого уровня.
  • Простой в использовании интерфейс генератора случайных чисел, предоставляемый вашей платформой random.SystemRandom.

os.GRND_NONBLOCK:

Значение os.GRND_NONBLOCK стоит по умолчанию при чтении из /dev/random блокирует os.getrandom(), если нет доступных случайных байтов, а при чтении из /dev/urandom блокируется, если пул энтропии еще не был инициализирован.

Если установлен флаг os.GRND_RANDOM, то os.getrandom() в этих случаях не блокируется, а немедленно вызывает исключение BlockingIOError.

os.GRND_RANDOM:

Если этот бит установлен, то случайные байты извлекаются из пула /dev/random вместо пула /dev/urandom.