RDRAND

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

RDRAND(для «чтения случайным образом»; известная как Intel Secure Key Technology, ранее известная как Bull Mountain ) - это инструкция для возврата случайных чисел из Intel на кристалле аппаратный генератор случайных чисел, который был засеян внутренним источником энтропии. RDRANDдоступен в процессорах Ivy Bridge и является частью Intel 64 и IA-32 архитектуры набора команд. AMD добавила поддержку этой инструкции в июне 2015 года.

Генератор случайных чисел соответствует стандартам безопасности и криптографии, таким как NIST SP 800-90A, FIPS 140-2, и. Intel также попросила Cryptography Research Inc. пересмотреть генератор случайных чисел в 2012 году, в результате чего был подготовлен документ «Анализ цифрового генератора случайных чисел Intel Ivy Bridge».

RDSEEDаналогичен RDRANDи обеспечивает доступ нижнего уровня к оборудованию, генерирующему энтропию. Генератор RDSEEDи инструкция процессора rdseedдоступны с процессорами Intel Broadwell и процессорами AMD Zen.

Содержание

  • 1 Обзор
    • 1.1 Производительность
    • 1.2 Компиляторы
  • 2 Приложения
  • 3 Прием
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки

Обзор

CPUID инструкцию можно использовать для проверки того, поддерживает ли центральный процессор (CPU) инструкцию RDRANDна процессорах AMD и Intel. Если поддерживается, бит 30 регистра ECX устанавливается после вызова стандартной функции CPUID 01H. Процессоры AMD проверяются на наличие этой функции с помощью того же теста. Доступность RDSEEDможно проверить на процессорах Intel аналогичным образом. Если RDSEEDподдерживается, бит 18 регистра EBX устанавливается после вызова стандартной функции CPUID 07H.

Код операции для RDRAND: 0x0F 0xC7, за которым следует байт ModRM, который указывает регистр назначения и необязательно в сочетании с префиксом REX в 64-битном режиме.

Intel Secure Key - это имя Intel для обоих Команда RDRANDи лежащая в ее основе аппаратная реализация генератора случайных чисел (RNG), который во время разработки получил кодовое название «Bull Mountain». Intel называет свой ГСЧ «цифровым генератором случайных чисел» или DRNG. Генератор берет пары 256-битных необработанных образцов энтропии, сгенерированных аппаратным источником энтропии, и применяет их к кондиционеру Advanced Encryption Standard (AES) (в режиме CBC-MAC ), который уменьшает их в одну 256-битную условную выборку энтропии. Детерминированный генератор случайных битов, называемый CTR_DRBG, определенный в NIST SP 800-90A, заполняется выходными данными кондиционера, предоставляя криптографически безопасные случайные числа приложениям, запрашивающим их через Инструкция RDRAND. Аппаратное обеспечение выдаст максимум 511 128-битных выборок перед изменением начального значения. Использование операции RDSEEDобеспечивает доступ к кондиционированным 256-битным выборкам из AES-CBC-MAC.

Инструкция RDSEEDбыла добавлена ​​в Intel Secure Key для заполнения другого генератора псевдослучайных чисел, доступного в процессорах Broadwell. Источник энтропии для инструкции RDSEEDработает асинхронно по самосинхронной схеме и использует тепловой шум внутри кремния для вывода случайного потока битов с частотой 3 ГГц, что ниже эффективных 6,4 Гбит / с. можно получить из RDRAND(обе скорости распределяются между всеми ядрами и потоками ). Инструкция RDSEEDпредназначена для заполнения программного ГПСЧ произвольной ширины, тогда как RDRANDпредназначена для приложений, которым просто требуются высококачественные случайные числа. Если криптографическая безопасность не требуется, программный ГПСЧ, такой как Xorshift, обычно работает быстрее.

Производительность

На Intel Core i7-7700K, 4500 МГц (45 x 100 МГц) (микроархитектура Kaby Lake-S), одна инструкция RDRANDили RDSEEDзанимает 110 нс или 463 тактовых цикла, независимо от размера операнда (16/32/64 бит). Это количество тактовых циклов применяется ко всем процессорам с микроархитектурой Skylake или Kaby Lake. В процессорах с микроархитектурой Silvermont каждая инструкция занимает около 1472 тактовых циклов, независимо от размера операнда; а на Ivy Bridge процессорах RDRANDтребуется до 117 тактовых циклов.

На процессоре AMD Ryzen каждая из инструкций занимает около 1200 тактовых циклов для 16-битной или 32-битный операнд, и около 2500 тактовых циклов для 64-битного операнда.

Астрофизический симулятор Монте-Карло исследовал время для генерации 10 64-битных случайных чисел, используя RDRANDна четырехъядерный процессор Intel i7-3740 QM. Они обнаружили, что реализация C RDRANDработает примерно в 2 раза медленнее, чем генератор случайных чисел по умолчанию в C, и примерно в 20 раз медленнее, чем Mersenne Twister. Хотя был создан модуль Python RDRAND, он оказался в 20 раз медленнее, чем генератор случайных чисел по умолчанию в Python.

Компиляторы

Visual C ++ 2015 обеспечивает внутреннюю поддержка оболочки для функций RDRANDи RDSEED. GCC 4.6+ и Clang 3.2+ предоставляют встроенные функции для RDRAND, когда -mrdrnd указан в flags, а также установка __RDRND__ для разрешения условной компиляции. В более новых версиях дополнительно предоставляется immintrin.hдля включения этих встроенных модулей в функции, совместимые с версией 12.1+ компилятора C Intel. Эти функции записывают случайные данные в место, на которое указывает их параметр, и в случае успеха возвращают 1.

Приложения

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

Первое научное применение RDRANDможно найти в астрофизике. Радионаблюдения за маломассивными звездами и коричневыми карликами показали, что некоторые из них излучают всплески радиоволн. Эти радиоволны вызваны магнитным пересоединением, тем же самым процессом, который вызывает солнечные вспышки на Солнце. RDRANDиспользовался для генерации большого количества случайных чисел для симулятора Монте-Карло, для моделирования физических свойств коричневых карликов и эффектов инструментов, которые их наблюдают. Они обнаружили, что около 5% коричневых карликов достаточно магнитны, чтобы излучать сильные радиовсплески. Они также оценили производительность инструкции RDRANDна языках C и Python по сравнению с другими генераторами случайных чисел.

Прием

В сентябре 2013 года в ответ на Статья в New York Times , раскрывающая попытки АНБ ослабить шифрование, Теодор Ц'о публично опубликовала информацию об использовании RDRANDдля / dev / random в ядре Linux :

Я так рад, что сопротивлялся давлению инженеров Intel, чтобы позволить / dev / randomполагаться только на Инструкция RDRAND. Цитата из [статьи в New York Times]: «К этому году они нашли способы внутри некоторых микросхем шифрования, которые шифруют информацию для предприятий и правительств, либо работая с производителями микросхем, чтобы вставить лазейки...» Полагаясь исключительно на аппаратный генератор случайных чисел, который использует реализацию, запечатанную внутри микросхемы, которую невозможно проверить, является ПЛОХОЙ идеей.

Линус Торвальдс отклонил опасения по поводу использования RDRANDв ядре Linux, и указал, что он не используется в качестве единственного источника энтропии для / dev / random, а скорее используется для улучшения энтропии путем объединения значений, полученных из RDRANDс другими источниками случайность. Однако Тейлор Хорнби из Defuse Security продемонстрировал, что генератор случайных чисел Linux может стать небезопасным, если в инструкцию RDRANDввести бэкдор, специально предназначенный для кода, использующего его. Контрольная реализация Хорнби работает на немодифицированном ядре Linux до версии 3.13. Проблема была исправлена ​​в ядре Linux в 2013 году.

Разработчики изменили ядро ​​FreeBSD, отказавшись от использования RDRANDи VIA PadLock непосредственно с комментарий «Для FreeBSD 10 мы собираемся вернуться и удалить бэкэнды RDRANDи Padlock и передать их в Yarrow вместо того, чтобы доставлять их вывод непосредственно в / dev / random. По-прежнему будет возможно получить доступ к аппаратным генераторам случайных чисел, то есть, RDRAND, Padlock и т. Д., Напрямую посредством встроенной сборки или с помощью OpenSSL из пользовательской среды, если потребуется, но мы больше не можем им доверять. " FreeBSD / dev / random использует Fortuna и RDRAND, запущенные из FreeBSD 11.

См. Также

Примечания

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-03 04:27:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте