RDRAND
(для «чтение случайного», известное как Intel Secure Key Technology , [1] , ранее известная как Bull Mountain [2] ) является инструкцией для возвращения случайных чисел из Intel на чипе аппаратного генератора случайных чисел , который был посеян на включенном источник энтропии чипа. [3] RDRAND
доступен в процессорах Ivy Bridge [a] и является частью архитектур набора команд Intel 64 и IA-32 . AMD добавила поддержку этой инструкции в июне 2015 года. [5]
Генератор случайных чисел соответствует стандартам безопасности и криптографии, таким как NIST SP 800-90A , [6] FIPS 140-2 и ANSI X9.82 . [3] Intel также попросила Cryptography Research Inc. пересмотреть генератор случайных чисел в 2012 году, в результате чего был подготовлен документ « Анализ цифрового генератора случайных чисел Ivy Bridge от Intel» . [7]
RDSEED
аналогичен RDRAND
оборудованию, генерирующему энтропию, и обеспечивает доступ нижнего уровня к нему. RDSEED
Генератор и инструкция процессора rdseed
доступны с Intel Бродуэллы процессорами [8] и AMD Zen процессорами . [9]
Обзор [ править ]
CPUID
Инструкция может быть использована как на AMD и Intel процессоров проверить , является ли RDRAND
поддерживается инструкция. Если это так, бит 30 регистра ECX устанавливается после вызова стандартной функции CPUID 01H
. [10] Процессоры AMD проверяются на наличие этой функции с помощью того же теста. [11] RDSEED
Доступность можно проверить на процессорах Intel аналогичным образом. Если RDSEED
поддерживается, бит 18 регистра EBX устанавливается после вызова стандартной функции CPUID 07H
. [12]
Код операции для RDRAND
is 0x0F 0xC7
, за которым следует байт ModRM, который указывает регистр назначения и, возможно, в сочетании с префиксом REX в 64-битном режиме. [13]
Intel Secure Key - это название Intel как для RDRAND
инструкции, так и для аппаратной реализации основного генератора случайных чисел (RNG), [3] который во время разработки получил кодовое название «Bull Mountain». [14] Intel называет свой ГСЧ «цифровым генератором случайных чисел» или ГСЧ. Генератор берет пары 256-битных необработанных выборок энтропии, сгенерированных аппаратным источником энтропии, и применяет их к кондиционеру Advanced Encryption Standard (AES) (в режиме CBC-MAC ), который сокращает их до единственной 256-битной кондиционированной выборки энтропии. Детерминированный генератор случайных битов под названием CTR_DRBG, определенный в NIST SP 800-90A.заполняется выходными данными кондиционера, предоставляя криптографически безопасные случайные числа приложениям, запрашивающим их с помощью RDRAND
инструкции. [3] [14] Перед изменением начального значения аппаратное обеспечение выдаст максимум 511 128-битных выборок. Использование RDSEED
операции обеспечивает доступ к кондиционированным 256-битным выборкам из AES-CBC-MAC.
RDSEED
Инструкция была добавлена к Intel Secure Key для высева другого генератора псевдослучайных чисел, [15] доступны в Бродуэлла CPU. Источник энтропии для RDSEED
инструкции работает асинхронно по самосинхронной схеме и использует тепловой шум внутри кремния для вывода случайного потока битов со скоростью 3 ГГц, [16] медленнее, чем эффективные 6,4 Гбит / с, получаемые из RDRAND
(обоих скорости распределяются между всеми ядрами и потоками ). [17]RDSEED
инструкция предназначена для посева программного обеспечения PRNG произвольной ширины, в то время какRDRAND
предназначен для приложений, которым просто требуются случайные числа высокого качества. Если криптографическая безопасность не требуется, программный ГПСЧ, такой как Xorshift , обычно работает быстрее. [18]
Производительность [ править ]
На процессоре 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 тактов. [19]
В процессоре AMD Ryzen каждая инструкция занимает около 1200 тактовых циклов для 16-битного или 32-битного операнда и около 2500 тактовых циклов для 64-битного операнда. [19]
Астрофизический симулятор Монте-Карло исследовал время, необходимое для генерации 10 7 64-битных случайных чисел, используя RDRAND
четырехъядерный процессор Intel i7-3740 QM. Они обнаружили, что реализация C RDRAND
работает примерно в 2 раза медленнее, чем генератор случайных чисел по умолчанию в C, и примерно в 20 раз медленнее, чем Mersenne Twister . Хотя модуль Python был создан RDRAND
, он оказался в 20 раз медленнее, чем генератор случайных чисел по умолчанию в Python [20], хотя сравнение производительности между PRNG и CSPRNG невозможно.
Обновление микрокода, выпущенное Intel в июне 2020 года и предназначенное для устранения уязвимости CrossTalk (см. Раздел о проблемах безопасности ниже), отрицательно влияет на производительность RDRAND
и RDSEED
из-за дополнительных мер безопасности. На процессорах, к которым применены меры по снижению рисков, каждая затронутая инструкция вызывает дополнительную задержку, и одновременное выполнение ядер RDRAND
или RDSEED
между ними эффективно сериализуется. Intel представила механизм ослабления этих проверок безопасности, тем самым снижая влияние на производительность в большинстве сценариев, но процессоры Intel не применяют это ослабление безопасности по умолчанию. [21]
Компиляторы [ править ]
Visual C ++ 2015 обеспечивает внутреннюю поддержку обертки для RDRAND
и RDSEED
функций. [22] GCC 4.6+ и Clang 3.2+ предоставляют встроенные функции для RDRAND
случаев, когда -mrdrnd указан во флагах , [23] также устанавливая __RDRND__, чтобы разрешить условную компиляцию . В более новых версиях дополнительно предусмотрена immintrin.h
возможность включения этих встроенных модулей в функции, совместимые с версией 12.1+ компилятора C Intel. Эти функции записывают случайные данные в место, на которое указывает их параметр, и возвращают 1 в случае успеха. [24]
Приложения [ править ]
Это возможность генерировать криптографически безопасные случайные числа с использованием RDRAND
и RDSEED
в OpenSSL, чтобы помочь защитить связь.
Научное применение RDRAND
можно найти в астрофизике. [25] Радионаблюдения за маломассивными звездами и коричневыми карликами показали, что некоторые из них излучают всплески радиоволн. Эти радиоволны вызваны магнитным пересоединением , тем же самым процессом, который вызывает солнечные вспышки на Солнце. RDRAND
был использован для генерации большого количества случайных чисел для симулятора Монте-Карло , для моделирования физических свойств коричневых карликов и эффектов инструментов, которые их наблюдают. Они обнаружили, что около 5% коричневых карликов достаточно магнитны, чтобы излучать сильные радиовсплески. Они также оценили производительность RDRAND
инструкций на C и Python по сравнению с другими генераторами случайных чисел.[20]
Прием [ править ]
В сентябре 2013 года в ответ на Нью - Йорк Таймс статьи раскрывая усилия АНБ, чтобы ослабить шифрование , [26] Теодор Ts'o публично отправил относительно использования RDRAND
для /dev/random
в ядре Linux : [27]
Я так рад, что сопротивлялся давлению инженеров Intel и позволял
/dev/random
полагаться только наRDRAND
инструкции. Цитата из [статьи в New York Times [26] ]: «К этому году проект Sigint Enabling Project нашел способы внутри некоторых микросхем шифрования, которые шифруют информацию для предприятий и правительств, либо работая с производителями микросхем, чтобы вставить лазейки. .. 'Полагаться исключительно на аппаратный генератор случайных чисел, который использует реализацию, запечатанную внутри микросхемы, которую невозможно проверить, - это ПЛОХАЯ идея.
Линус Торвальдс отклонил опасения по поводу использования RDRAND
в ядре Linux и указал, что он не используется в качестве единственного источника энтропии /dev/random
, а скорее используется для улучшения энтропии путем объединения значений, полученных из RDRAND
других источников случайности. [28] [29] Однако Тейлор Хорнби из Defuse Security продемонстрировал, что генератор случайных чисел Linux может стать небезопасным, если в RDRAND
инструкцию, специально предназначенную для кода, использующего его, ввести бэкдор . Доказательная реализация Хорнби работает на немодифицированном ядре Linux до версии 3.13. [30] [31] [32] Проблема была исправлена в ядре Linux в 2013 году. [33]
Разработчики отказались от использования ядра FreeBSDRDRAND
и напрямую VIA PadLock с комментарием: «Для FreeBSD 10 мы собираемся откатить и удалить RDRAND
бэкенды Padlock и передать их в Yarrow вместо того, чтобы доставлять их вывод непосредственно в / dev / random . Он по-прежнему будет иметь возможность получить доступ к аппаратным генераторам случайных чисел, то есть RDRAND
Padlock и т. д., напрямую с помощью встроенной сборки или с помощью OpenSSL из пользовательской среды, если требуется, но мы больше не можем им доверять ». [28] [34] FreeBSD / dev / random использует Fortuna и RDRAND, запущенные из FreeBSD 11. [35]
Проблемы безопасности [ править ]
9 июня 2020 года исследователи из Vrije Universiteit Amsterdam опубликовали атаку по побочному каналу под названием CrossTalk ( CVE-2020-0543 ), которая затронула RDRAND
ряд процессоров Intel. [36] Они обнаружили, что выходные данные аппаратного цифрового генератора случайных чисел (DRNG) хранятся в промежуточном буфере, который используется всеми ядрами. Уязвимость позволяла вредоносному коду, запущенному на уязвимом процессоре, считывать RDRAND
и RDSEED
инструктировать результаты приложения-жертвы, запущенного на другом ядре того же процессора, включая приложения, работающие внутри анклавов Intel SGX . [36] Исследователи разработали доказательство концепции эксплойта [37]который извлек полный ключ ECDSA из анклава SGX, работающего на отдельном ядре ЦП, после всего лишь одной операции подписи. [36] Уязвимость затрагивает сценарии, в которых ненадежный код выполняется вместе с доверенным кодом на том же процессоре, например в среде общего хостинга.
Intel называет уязвимость CrossTalk специальной выборкой данных буфера регистров (SRBDS). В ответ на исследование Intel выпустила обновления микрокода, чтобы смягчить проблему. Обновленный микрокод гарантирует , что офф-ядра доступы не задерживается до тех пор , чувствительные операции - конкретно RDRAND
, RDSEED
, и EGETKEY
инструкция - завершена и буфер постановки был перезаписан. [21] Атака SRBDS также затрагивает другие инструкции, например, те, которые читают MSR , но Intel не применила к ним дополнительные меры безопасности из-за проблем с производительностью и уменьшения потребности в конфиденциальности результатов этих инструкций. [21]Пострадал широкий спектр процессоров Intel, выпущенных в период с 2012 по 2019 год, в том числе настольные, мобильные и серверные. [38] Сами меры по снижению рисков привели к отрицательному влиянию на производительность при использовании затронутых инструкций, особенно при параллельном выполнении многопоточными приложениями, из-за увеличенной задержки, вызванной проверками безопасности и эффективной сериализации затронутых инструкций по ядрам. Intel представила опцию отказа, настраиваемую через IA32_MCU_OPT_CTRL
MSR на каждом логическом процессоре, которая повышает производительность за счет отключения дополнительных проверок безопасности для инструкций, выполняемых за пределами анклава SGX. [21]
См. Также [ править ]
- Набор инструкций AES
- Bullrun (программа дешифрования)
- OpenSSL
Заметки [ править ]
- ^ В некоторых версиях Ivy Bridge из-за ошибки инструкция RDRAND вызывает исключение Illegal Instruction. [4]
Ссылки [ править ]
- ^ "Что такое технология Intel® Secure Key?" . Intel . Проверено 23 сентября 2020 .
- ^ Hofemeier, Гаэль (2011-06-22). «Узнайте о новой инструкции Intel RDRAND» . Блоги Intel Developer Zone . Проверено 30 декабря 2013 года .
- ^ a b c d «Цифровой генератор случайных чисел Intel (DRNG): Руководство по внедрению программного обеспечения, версия 1.1» (PDF) . Корпорация Intel . 2012-08-07 . Проверено 25 ноября 2012 .
- ^ Семейство процессоров Intel Core 3-го поколения для настольных ПК, обновление спецификаций (PDF) . Корпорация Intel. Январь 2013.
- ^ "Руководство программиста архитектуры AMD64 Том 3: Общие и системные инструкции" (PDF) . Руководства, руководства и документы ISA AMD для разработчиков . Июнь 2015 . Проверено 16 октября 2015 года .
- ^ Баркер, Элейн; Келси, Джон (январь 2012 г.). «Рекомендации по генерации случайных чисел с использованием детерминированных генераторов случайных битов» (PDF) . Национальный институт стандартов и технологий . Проверено 16 сентября 2013 года . Цитировать журнал требует
|journal=
( помощь ) - ^ Гамбург, Майк; Кохер, Пол; Марсон, Марк (2012-03-12). «Анализ цифрового генератора случайных чисел Intel Ivy Bridge» (PDF) . Cryptography Research, Inc . Архивировано из оригинального (PDF) 30 декабря 2014 года . Проверено 21 августа 2015 .
- ^ Hofemeier, Гаэль (2012-07-26). «Введение в инструкции Intel AES-NI и Intel SecureKey» . Зона разработчиков Intel . Intel . Проверено 24 октября 2015 .
- ^ «AMD запускает поддержку Linux на архитектуре Zen следующего поколения - Phoronix» . www.phoronix.com . Проверено 25 октября 2015 .
- ^ «Том 1, раздел 7.3.17,« Инструкция генератора случайных чисел » » (PDF) . Объединенные тома Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32: 1, 2A, 2B, 2C, 3A, 3B и 3C . Корпорация Intel. Июнь 2013. с. 177 . Проверено 24 июня 2013 года .
Все процессоры Intel, поддерживающие инструкцию RDRAND, указывают доступность инструкции RDRAND посредством сообщения CPUID.01H: ECX.RDRAND [bit 30] = 1
- ^ "Руководство программиста архитектуры AMD64 Том 3: Общие и системные инструкции" (PDF) . AMD. Июнь 2015. с. 278 . Проверено 15 октября 2015 года .
Поддержка инструкции RDRAND не является обязательной. На процессорах, поддерживающих инструкцию, CPUID Fn0000_0001_ECX [RDRAND] = 1
- ^ «Том 1, раздел 7.3.17,« Инструкция генератора случайных чисел » » (PDF) . Объединенные тома Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32: 1, 2A, 2B, 2C, 3A, 3B и 3C . Корпорация Intel. Июнь 2013. с. 177 . Проверено 25 октября 2015 года .
Все процессоры Intel, поддерживающие инструкцию RDSEED, указывают доступность инструкции RDSEED через сообщение CPUID. (EAX = 07H, ECX = 0H): EBX.RDSEED [bit 18] = 1
- ^ «Руководство по внедрению программного обеспечения Intel® Digital Random Number Generator (DRNG) | Intel® Developer Zone» . Software.intel.com . Проверено 30 января 2014 .
- ^ a b Тейлор, Грег; Кокс, Джордж (сентябрь 2011 г.). «За новым генератором случайных чисел Intel» . IEEE Spectrum .
- ^ Джон Mechalas (ноябрь 2012). «Разница между RDRAND и RDSEED» . software.intel.com . Корпорация Intel . Проверено 1 января 2014 года .
- ^ Мехалас, Джон. «Руководство по внедрению программного обеспечения Intel Digital Random Number Generator (DRNG), раздел 3.2.1 Источник энтропии (ES)» . Программное обеспечение Intel . Intel . Проверено 18 февраля 2015 года .
- ^ https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide говорит, что 800 мегабайт, что составляет 6,4 гигабита в секунду
- ^ Простейшая 64-битная реализация Xorshift имеет 3 операции XOR и 3 сдвига ; если они выполняются в жестком цикле на 4 ядрах на частоте 2 ГГц, пропускная способность составляет 80 Гбит / с. На практике это будет меньше из-за накладных расходов на загрузку / сохранение и т. Д., Но все же, вероятно, превысит 6,4 Гбит / с
RDRAND
. С другой стороны, качествоRDRAND
чисел должно быть выше, чем у программного ГПСЧ, такого как Xorshift. - ^ а б http://www.agner.org/optimize/instruction_tables.pdf
- ^ a b Маршрут, Мэтью (10 августа 2017 г.). "Синтез популяции ультрахолодных карликов с помощью радиоактивных вспышек". Астрофизический журнал . 845 : 66. arXiv : 1707.02212 . DOI : 10.3847 / 1538-4357 / aa7ede .
- ^ a b c d "Выборка данных буфера специального регистра" . Intel . Проверено 26 декабря 2020 года .
- ^ "Список встроенных функций x86" . docs.microsoft.com . 2020-02-28 . Проверено 7 мая 2020 .
- ^ «Встроенные функции X86 - Использование коллекции компиляторов GNU (GCC)» .
- ^ «Intel® C ++ Compiler 19.1 Руководство разработчика и справочник» . 2019-12-23.
- ^ "Intel Secure Key-Powered Radio-Flaring Ultracool Dwarf Population Synthesis" . Заседание Американского астрономического общества № 234, id. 207.01. Бюллетень Американского астрономического общества, Vol. 51, №4.
- ^ a b Перлрот, Николь; Ларсон, Джефф; Шейн, Скотт (5 сентября 2013 г.). «АНБ может нарушить основные гарантии конфиденциальности в Интернете» . Нью-Йорк Таймс . Проверено 15 ноября 2017 года .
- ^ Ts'o, Theodore (6 сентября 2013). «Я так рад, что сопротивлялся давлению инженеров Intel, чтобы позволить / dev / random полагаться ...» Архивировано из оригинала 2018-06-11.
- ^ a b Ричард Чиргвин (9 декабря 2013 г.). «FreeBSD отказывается от аппаратной случайности» . Реестр .
- ↑ Гэвин Кларк (10 сентября 2013 г.). «Торвальдс опровергает призыв к удалению« бэкдорированного »Intel RDRAND в криптографии Linux» . theregister.co.uk . Проверено 12 марта 2014 .
- ↑ Тейлор Хорнби (6 декабря 2013 г.). «Доказательство концепции бэкдора RDRAND работает! Стандартное ядро (3.8.13), изменена только инструкция RDRAND» . Проверено 9 апреля 2015 года .
- ^ Тейлор Хорнби [@DefuseSec] (10 сентября 2013 г.). «Я написал короткий диалог, объясняющий, почему использование RDRAND в Linux проблематично. Http://pastebin.com/A07q3nL3 / cc @kaepora @voodooKobra» (твит) . Проверено 11 января 2016 г. - через Twitter .
- ^ Дэниел Дж. Бернштейн; Таня Ланге (16 мая 2014 г.). «Генерация случайности» (PDF) . Проверено 9 апреля 2015 года .
- ^ Хорнби, Тейлор (2017-05-09). «Вы хотите, чтобы RDRAND оставался включенным. То, что я сделал, только что показало, что в более старой версии ядра RDRAND потенциально может управлять выводом» . @DefuseSec . Проверено 30 октября 2019 .
- ^ «Ежеквартальный отчет о состоянии FreeBSD» . Freebsd.org . Проверено 30 января 2014 .
- ^ "случайный (4)" . www.freebsd.org . Проверено 25 сентября 2020 .
- ^ a b c Рагаб, Хани; Милберн, Алисса; Разави, Кавех; Бос, Герберт; Джуффрида, Криштиану. «Перекрестный разговор: предполагаемые утечки данных по ядрам реальны» (PDF) . Группа систем и сетевой безопасности, Университет Амстердама (VUSec) . Проверено 26 декабря 2020 года .
- ^ "VUSec RIDL cpuid_leak PoC, модифицированный для утечки вывода rdrand" . GitHub . Проверено 26 декабря 2020 года .
- ^ "Затронутые процессоры: Специальная выборка данных буфера регистров" . Зона разработчиков Intel . Проверено 26 декабря 2020 года .
Внешние ссылки [ править ]
- Библиотека RdRand .NET
- Проект с открытым исходным кодом RdRand .NET