Jump to content

/dev/случайный

256-байтовый шестнадцатеричный дамп /dev/urandom

В -подобных операционных системах Unix /dev/random и /dev/urandom — это специальные файлы , которые служат криптографически безопасными генераторами псевдослучайных чисел (CSPRNG). Они обеспечивают доступ к CSPRNG , в который заложена энтропия (значение, обеспечивающее случайность ) из шума окружающей среды, собранного из драйверов устройств и других источников. [1] /dev/random обычно блокируется, меньше если доступной энтропии , чем запрошено; в последнее время (о различиях между операционными системами см. ниже) он обычно блокируется при запуске до тех пор, пока не будет собрана достаточная энтропия, а затем разблокируется навсегда. Устройство /dev/urandom обычно никогда не было блокирующим устройством, даже если начальное число генератора псевдослучайных чисел не было полностью инициализировано энтропией с момента загрузки. Не все операционные системы реализуют одни и те же методы для /dev/random и /dev/urandom .

Этот специальный файл появился в Linux в 1994 году. Он был быстро принят другими Unix-подобными операционными системами. [2]

Тестирование Rngtest /dev/random пул

Ядро Linux предоставляет отдельные файлы устройств. /dev/random и /dev/urandom . Начиная с версии ядра 5.6 от 2020 года, /dev/random блокируется только в том случае, если CSPRNG не инициализирован. После инициализации /dev/random и /dev/urandom ведет себя так же. [3]

В октябре 2016 года, с выпуском ядра Linux версии 4.8, ядро /dev/urandom был переключен на ChaCha20 . на основе реализацию криптографического генератора псевдослучайных чисел (CPRNG) [4] Теодор Цо , основанный на Бернштейна широко известном поточном шифре ChaCha20 .

Начиная с версии 5.17 ядра Linux, генератор случайных чисел перешёл с использования SHA-1 криптографической хэш-функции в сборщике энтропии на BLAKE2s , более новую, более быструю и безопасную хэш-функцию. [5]

Оригинальная реализация

[ редактировать ]

Генерация случайных чисел в пространстве ядра была реализована впервые для Linux. [2] в 1994 году Теодор Цо . [6] В реализации использовались безопасные хэши , а не шифры . [ нужны разъяснения ] чтобы избежать ограничений на экспорт криптографии , которые действовали при первоначальной разработке генератора. Реализация также была разработана с предположением, что любой данный хэш или шифр может в конечном итоге оказаться слабым, и поэтому конструкция устойчива к любым таким слабостям. Быстрое восстановление после компрометации пула не считается требованием, поскольку требований к компрометации пула достаточно для гораздо более простых и прямых атак на несвязанные части операционной системы.

В реализации Цо генератор сохраняет оценку количества бит шума в энтропийном пуле . Из этого пула энтропии создаются случайные числа. При чтении, Устройство /dev/random будет возвращать только случайные байты в пределах предполагаемого количества бит шума в энтропийном пуле. Когда энтропийный пул пуст, выполняется чтение из /dev/random будет блокироваться до тех пор, пока не будет собран дополнительный шум окружающей среды. [7] Цель состоит в том, чтобы служить криптографически безопасным генератором псевдослучайных чисел , предоставляя выходные данные с как можно большей энтропией. Авторы предлагают использовать это при генерации криптографических ключей для ценной или долгосрочной защиты. [7]

Аналог /dev/random это /dev/urandom («без ограничений» [8] /неблокирующий случайный источник [7] ), который повторно использует внутренний пул для создания большего количества псевдослучайных битов. Это означает, что вызов не будет блокироваться, но вывод может содержать меньшую энтропию, чем соответствующее чтение из /dev/случайный . Пока /dev/urandom по-прежнему задуман как генератор псевдослучайных чисел, подходящий для большинства криптографических целей, авторы соответствующей справочной страницы отмечают, что теоретически может существовать еще неопубликованная атака на алгоритм, используемый /dev/urandom , и что пользователи, обеспокоенные такой атакой, должны использовать Вместо этого /dev/random . [7] Однако такая атака вряд ли осуществится, поскольку, поскольку энтропийный пул становится непредсказуемым, он не снижает уровень безопасности на уменьшенное количество битов. [9]

Также можно написать на /dev/случайный . Это позволяет любому пользователю смешивать случайные данные в пуле. Неслучайные данные безвредны, поскольку только привилегированный пользователь может выполнить команду ioctl, необходимую для увеличения оценки энтропии. [ сомнительно обсудить ] Текущее количество энтропии и размер пула энтропии ядра Linux, измеряемые в битах, доступны в /proc/sys/kernel/random/ и может быть отображен командой cat /proc/sys/kernel/random/entropy_avail и cat /proc/sys/kernel/random/poolsize соответственно.

Инъекция энтропии

[ редактировать ]

Гаттерман, Пинкас и Рейнман в марте 2006 года опубликовали подробный криптографический анализ генератора случайных чисел Linux. [10] в котором они описывают несколько слабых мест. Возможно, самая серьезная проблема, о которой они сообщают, связана со встроенными системами или системами Live CD , такими как маршрутизаторы и бездисковые клиенты , для которых состояние загрузки предсказуемо, а доступный запас энтропии из среды может быть ограничен. Для системы с энергонезависимой памятью рекомендуют сохранять некоторое состояние из ГСЧ при выключении, чтобы его можно было включить в состояние ГСЧ при следующей перезагрузке. В случае маршрутизатора, для которого сетевой трафик представляет собой основной доступный источник энтропии, они отмечают, что сохранение состояния при перезагрузках «потребует от потенциальных злоумышленников либо подслушивать весь сетевой трафик» с момента первого ввода маршрутизатора в эксплуатацию, либо получать прямой доступ к внутреннему состоянию маршрутизатора. Они отмечают, что эта проблема особенно важна в случае беспроводного маршрутизатора, сетевой трафик которого можно перехватывать на расстоянии и который может использовать RNG для генерации ключей для шифрования данных.

Ядро Linux обеспечивает поддержку нескольких аппаратных генераторов случайных чисел , если они установлены. Необработанный вывод такого устройства может быть получен из /dev/hwrng . [11]

С ядром Linux 3.16 и новее [12] ядро само смешивает данные аппаратных генераторов случайных чисел в /dev/random по скользящей шкале, основанной на определяемом качестве оценки энтропии HWRNG. Это означает, что ни один демон пользовательского пространства, такой как звонок от rng-tools необходим для выполнения этой работы. В ядре Linux 3.17+ VirtIO RNG был изменен, чтобы качество по умолчанию было установлено выше 0. [13] и поэтому в настоящее время является единственным HWRNG, смешанным с /dev/random по умолчанию.

Пул энтропии можно улучшить с помощью таких программ, как таймер_энтропид , , случайный звук и т. д. С rng-tools , аппаратные генераторы случайных чисел, такие как Entropy Key и т. д., могут писать в /dev/случайный . Непреклонные испытаний программы несгибаемый , несгибаемый и ent может протестировать эти генераторы случайных чисел. [14] [15] [16] [17]

Критика введения энтропии

[ редактировать ]

В январе 2014 года Дэниел Дж. Бернштейн опубликовал критику. [18] о том, как Linux смешивает разные источники энтропии. Он описывает атаку, в которой один источник энтропии, способный контролировать другие источники энтропии, может изменить свои выходные данные, чтобы свести на нет случайность других источников энтропии. Рассмотрим функцию где H — хеш-функция, а x , y и z — источники энтропии, где z — результат вредоносного HRNG Z на базе ЦП:

  1. Z генерирует случайное значение r .
  2. Z вычисляет .
  3. Если вывод равен желаемому значению, выведите r как z .
  4. В противном случае повторите, начиная с 1.

Бернштейн подсчитал, что злоумышленнику придется повторить 16 раз, чтобы скомпрометировать DSA и ECDSA, заставив первые четыре бита выходного сигнала RNG быть равными 0. Это возможно, потому что Linux постоянно повторно заполняет H вместо использования одного высококачественного начального числа. [18]

Бернштейн также утверждает, что введение энтропии бессмысленно после инициализации CSPRNG. [18]

В ядре 5.17 (перенесенном в ядро ​​5.10.119) Джейсон А. Доненфельд предложил новый дизайн инфраструктуры энтропийного пула Linux. Доненфельд сообщил, что старый пул, состоящий из одного 4096-битного LFSR, уязвим для двух атак: (1) злоумышленник может отменить эффект известного ввода; (2) если состояние всего пула стало известно, злоумышленник может обнулить все биты в пуле. Его новый проект, более быстрый и безопасный, использует хэш-функцию blake2s для смешивания 256-битного пула. [19]

BSD-системы

[ редактировать ]

Операционная система FreeBSD предоставляет /dev/urandom ссылка на /dev/случайный . Оба блокируют только до тех пор, пока не будут правильно посеяны. PRNG FreeBSD ( Fortuna ) регулярно обновляется и не пытается оценить энтропию. В системе с небольшой сетевой и дисковой активностью перезаполнение выполняется через доли секунды. [20]

DragonFly BSD унаследовала случайные файлы устройств FreeBSD после своего разветвления. [21] [ нужен неосновной источник ] [22]

Начиная с OpenBSD 5.1 (1 мая 2012 г.) /dev/random и /dev/arandom использует arc4random , функцию CSPRNG, основанную на RC4 . Функция была изменена для использования более мощной версии ChaCha20 с OpenBSD 5.5 (1 мая 2014 г.). Система автоматически использует аппаратные генераторы случайных чисел (например, те, которые имеются в некоторых концентраторах Intel PCI), если они доступны, через OpenBSD Cryptographic Framework . [23] [24] /dev/arandom был удален в OpenBSD 6.3 (15 апреля 2018 г.). [25]

NetBSD Реализация наследия arc4random() API также был переключен на ChaCha20. [26]

macOS, iOS и другие операционные системы Apple

[ редактировать ]

Все операционные системы Apple перешли на Fortuna как минимум с декабря 2019 года, а возможно, и раньше. [27] Он основан на SHA-256 . Используются несколько источников энтропии, такие как защищенный анклав RNG, дрожание синхронизации фазы загрузки, аппаратное прерывание (предполагаемое время). RDSEED/RDRAND используется на компьютерах Mac на базе процессоров Intel, которые его поддерживают. Начальные (энтропийные) данные также сохраняются для последующих перезагрузок.

До изменения в macOS и iOS использовалась 160-битная версия Yarrow на основе SHA-1 . [28]

Нет никакой разницы между /dev/random и /dev/urandom ; оба ведут себя одинаково. [29] [30]

Другие операционные системы

[ редактировать ]

/dev/random и /dev/urandom также доступен в Solaris, [31] НетБСД, [32] Tru64 UNIX 5.1B, [33] АИКС 5.2 [34] и HP-UX 11i v2. [35] Как и во FreeBSD, в AIX реализован собственный дизайн на основе Yarrow, однако AIX использует значительно меньше источников энтропии, чем стандартный. /dev/random и прекращает пополнение пула, когда считает, что он содержит достаточно энтропии. [36]

В Windows NT аналогичная функциональность обеспечивается ksecdd.sys , но чтение специального файла \Device\KsecDD не работает как в UNIX. Документированные методы генерации криптографически случайных байтов — это CryptGenRandom и RtlGenRandom . Windows PowerShell предоставляет доступ к криптографически безопасному генератору псевдослучайных чисел через Get-SecureRandom . Командлет [37]

Cygwin для Windows предоставляет реализации обоих /dev/random и /dev/urandom , который можно использовать в скриптах и ​​программах. [38]

См. также

[ редактировать ]
  1. ^ «random(7) — страница руководства Linux» . 10 февраля 2023 г. Проверено 24 ноября 2023 г.
  2. ^ Jump up to: а б Ллойд, Джек (9 декабря 2008 г.). «В /dev/random Syllable» . Проверено 21 августа 2019 г.
  3. ^ «/dev/random больше похож на /dev/urandom в Linux 5.6 — Phoronix» . www.phoronix.com .
  4. ^ «kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . ядро.org. 27 июля 2016 г. Проверено 23 ноября 2016 г.
  5. ^ «Генератор случайных чисел Linux 5.17 видит увеличение скорости и переключается с SHA1 на BLAKE2 — Phoronix» . www.phoronix.com .
  6. ^ "/dev/случайный" . Всё2 . 8 июня 2003 г. Архивировано из оригинала 17 ноября 2009 г. Проверено 3 июля 2013 г.
  7. ^ Jump up to: а б с д random(4) Linux программиста Руководство – Специальные файлы
  8. ^ "Реализация /dev/random и /dev/urandom в Linux 1.3.39, функция random_read_unlimited" . 1995-11-04 . Проверено 21 ноября 2013 г.
  9. ^ Филиппо Вальсорда (29 декабря 2015 г.). Простая реальность энтропии .
  10. ^ Гаттерман, Цви; Пинкас, Бенни; Рейнман, Цахи (6 марта 2006 г.). «Анализ генератора случайных чисел Linux» (PDF) . Архивировано (PDF) из оригинала 03 октября 2008 г. Проверено 3 июля 2013 г.
  11. ^ «Руководство пользователя криптографии» . Техасские инструменты . 04.06.2013. Архивировано из оригинала 16 апреля 2018 г. Проверено 3 июля 2013 г.
  12. ^ "kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux @ be4000bc4644d027c519b6361f5ae3bbfc52c347 "hwrng: создать ветку-заполнитель" " . Git.kernel.org . Проверено 18 октября 2016 г.
  13. ^ "kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux @ 34679ec7a0c45da8161507e1f2e1f72749dfd85c "virtio: rng: добавить коэффициент снижения мощности для использования ядром hwrng" " . Git.kernel.org . Проверено 18 октября 2016 г.
  14. ^ "??" . Ванхойсден.com . Архивировано из оригинала 21 сентября 2013 г. Проверено 23 октября 2016 г.
  15. ^ «Архив кода Google для стойких» . Code.google.com . Проверено 18 октября 2016 г.
  16. ^ «Компакт-диск со случайными числами Марсальи, включая Непреклонную батарею тестов на случайность» . Stat.fsu.edu . Архивировано из оригинала 25 января 2016 г. Проверено 23 октября 2016 г.
  17. ^ "rng-инструменты" . Gnu.org . Проверено 23 октября 2016 г.
  18. ^ Jump up to: а б с Дэниел Дж. Бернштейн (5 февраля 2014 г.). "cr.yp.to: 2014.02.05: Энтропийные атаки!" . Есть ли какой-нибудь серьезный аргумент в пользу того, что постоянное добавление новой энтропии — это хорошо? На странице руководства Linux /dev/urandom утверждается, что без новой энтропии пользователь «теоретически уязвим для криптографической атаки», но (как я уже упоминал в различных местах) это смехотворный аргумент.
  19. ^ «[ИСПРАВЛЕНИЕ 5.15 038/145] случайное: используйте вычислительный хэш для извлечения энтропии» . lore.kernel.org .
  20. ^ random(4) FreeBSD по интерфейсам ядра Руководство
  21. ^ «случайный(4)» . Страницы онлайн-руководства DragonFly . Проверено 15 июня 2024 г.
  22. ^ «Сравнение скорости /dev/random в Linux и BSD» . ianix.com . Проверено 15 июня 2024 г.
  23. ^ random(4) OpenBSD по интерфейсам ядра Руководство
  24. ^ дерадт , изд. (21 июля 2014 г.). "libc/crypt/arc4random.c" . Перекрестная ссылка BSD, OpenBSD src/lib/ . Проверено 13 января 2015 г. Генератор случайных чисел на основе ChaCha для OpenBSD.
  25. ^ Надди, изд. (14 ноября 2017 г.). "src/etc/MAKEDEV.common" . Зеркало исходного кода GitHub OpenBSD src/etc/ . Проверено 14 ноября 2017 г. /dev/arandom удален из OpenBSD.
  26. ^ Риастрад, изд. (16 ноября 2014 г.). "libc/gen/arc4random.c" . Перекрестная ссылка BSD, NetBSD src/lib/ . Проверено 13 января 2015 г. Устаревший API arc4random(3) из OpenBSD, перереализованный с использованием ChaCha20 PRF с состоянием каждого потока.
  27. ^ «Безопасность платформы Apple» . Apple Инк.
  28. ^ "xnu-1456.1.26/bsd/dev/random" . Apple Inc., дата обращения 18 октября 2016 г.
  29. ^ random(4) Darwin и macOS по интерфейсам ядра Руководство
  30. ^ «Безопасность iOS» (PDF) . Apple Inc. , октябрь 2012 г. Архивировано из оригинала (PDF) 5 апреля 2014 г. . Проверено 27 мая 2015 г.
  31. ^ Моффат, Даррен (12 сентября 2013 г.). «Генерация случайных чисел Solaris» . Блог Oracle Solaris . Проверено 30 апреля 2022 г.
  32. ^ rnd(4) NetBSD по интерфейсам ядра Руководство
  33. ^ «случайный(4)» . 19 сентября 1999 г. Проверено 3 июля 2013 г.
  34. ^ «случайные и случайные устройства» . Информационный центр pSeries и AIX . 15 марта 2010 г. Архивировано из оригинала 03 марта 2021 г. Проверено 3 июля 2013 г.
  35. ^ «Генератор сильных случайных чисел HP-UX» . 23 июля 2004 г. Проверено 3 июля 2013 г.
  36. ^ Робертс, Иэн (25 апреля 2003 г.). «Устройства AIX 5.2 /dev/random и /dev/urandom» . Lists.gnupg.org. Архивировано из оригинала 22 февраля 2012 г. Проверено 3 июля 2013 г.
  37. ^ «Get-SecureRandom (Microsoft.PowerShell.Utility) — PowerShell» . Learn.microsoft.com . Проверено 16 июня 2024 г.
  38. ^ «Как работают /dev/random и urandom Cygwin?» . www.linuxquestions.org . Проверено 9 марта 2018 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b88dd21c2ab1f29859b85e27415971d5__1722117780
URL1:https://arc.ask3.ru/arc/aa/b8/d5/b88dd21c2ab1f29859b85e27415971d5.html
Заголовок, (Title) документа по адресу, URL1:
/dev/random - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)