Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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]

Код операции для RDRANDis 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 . Он по-прежнему будет иметь возможность получить доступ к аппаратным генераторам случайных чисел, то есть RDRANDPadlock и т. д., напрямую с помощью встроенной сборки или с помощью 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_CTRLMSR на каждом логическом процессоре, которая повышает производительность за счет отключения дополнительных проверок безопасности для инструкций, выполняемых за пределами анклава SGX. [21]

См. Также [ править ]

  • Набор инструкций AES
  • Bullrun (программа дешифрования)
  • OpenSSL

Заметки [ править ]

  1. ^ В некоторых версиях Ivy Bridge из-за ошибки инструкция RDRAND вызывает исключение Illegal Instruction. [4]

Ссылки [ править ]

  1. ^ "Что такое технология Intel® Secure Key?" . Intel . Проверено 23 сентября 2020 .
  2. ^ Hofemeier, Гаэль (2011-06-22). «Узнайте о новой инструкции Intel RDRAND» . Блоги Intel Developer Zone . Проверено 30 декабря 2013 года .
  3. ^ a b c d «Цифровой генератор случайных чисел Intel (DRNG): Руководство по внедрению программного обеспечения, версия 1.1» (PDF) . Корпорация Intel . 2012-08-07 . Проверено 25 ноября 2012 .
  4. ^ Семейство процессоров Intel Core 3-го поколения для настольных ПК, обновление спецификаций (PDF) . Корпорация Intel. Январь 2013.
  5. ^ "Руководство программиста архитектуры AMD64 Том 3: Общие и системные инструкции" (PDF) . Руководства, руководства и документы ISA AMD для разработчиков . Июнь 2015 . Проверено 16 октября 2015 года .
  6. ^ Баркер, Элейн; Келси, Джон (январь 2012 г.). «Рекомендации по генерации случайных чисел с использованием детерминированных генераторов случайных битов» (PDF) . Национальный институт стандартов и технологий . Проверено 16 сентября 2013 года . Цитировать журнал требует |journal=( помощь )
  7. ^ Гамбург, Майк; Кохер, Пол; Марсон, Марк (2012-03-12). «Анализ цифрового генератора случайных чисел Intel Ivy Bridge» (PDF) . Cryptography Research, Inc . Архивировано из оригинального (PDF) 30 декабря 2014 года . Проверено 21 августа 2015 .
  8. ^ Hofemeier, Гаэль (2012-07-26). «Введение в инструкции Intel AES-NI и Intel SecureKey» . Зона разработчиков Intel . Intel . Проверено 24 октября 2015 .
  9. ^ «AMD запускает поддержку Linux на архитектуре Zen следующего поколения - Phoronix» . www.phoronix.com . Проверено 25 октября 2015 .
  10. ^ «Том 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
  11. ^ "Руководство программиста архитектуры AMD64 Том 3: Общие и системные инструкции" (PDF) . AMD. Июнь 2015. с. 278 . Проверено 15 октября 2015 года . Поддержка инструкции RDRAND не является обязательной. На процессорах, поддерживающих инструкцию, CPUID Fn0000_0001_ECX [RDRAND] = 1
  12. ^ «Том 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
  13. ^ «Руководство по внедрению программного обеспечения Intel® Digital Random Number Generator (DRNG) | Intel® Developer Zone» . Software.intel.com . Проверено 30 января 2014 .
  14. ^ a b Тейлор, Грег; Кокс, Джордж (сентябрь 2011 г.). «За новым генератором случайных чисел Intel» . IEEE Spectrum .
  15. ^ Джон Mechalas (ноябрь 2012). «Разница между RDRAND и RDSEED» . software.intel.com . Корпорация Intel . Проверено 1 января 2014 года .
  16. ^ Мехалас, Джон. «Руководство по внедрению программного обеспечения Intel Digital Random Number Generator (DRNG), раздел 3.2.1 Источник энтропии (ES)» . Программное обеспечение Intel . Intel . Проверено 18 февраля 2015 года .
  17. ^ https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide говорит, что 800 мегабайт, что составляет 6,4 гигабита в секунду
  18. ^ Простейшая 64-битная реализация Xorshift имеет 3 операции XOR и 3 сдвига ; если они выполняются в жестком цикле на 4 ядрах на частоте 2 ГГц, пропускная способность составляет 80 Гбит / с. На практике это будет меньше из-за накладных расходов на загрузку / сохранение и т. Д., Но все же, вероятно, превысит 6,4 Гбит / сRDRAND. С другой стороны, качествоRDRANDчисел должно быть выше, чем у программного ГПСЧ, такого как Xorshift.
  19. ^ а б http://www.agner.org/optimize/instruction_tables.pdf
  20. ^ a b Маршрут, Мэтью (10 августа 2017 г.). "Синтез популяции ультрахолодных карликов с помощью радиоактивных вспышек". Астрофизический журнал . 845 : 66. arXiv : 1707.02212 . DOI : 10.3847 / 1538-4357 / aa7ede .
  21. ^ a b c d "Выборка данных буфера специального регистра" . Intel . Проверено 26 декабря 2020 года .
  22. ^ "Список встроенных функций x86" . docs.microsoft.com . 2020-02-28 . Проверено 7 мая 2020 .
  23. ^ «Встроенные функции X86 - Использование коллекции компиляторов GNU (GCC)» .
  24. ^ «Intel® C ++ Compiler 19.1 Руководство разработчика и справочник» . 2019-12-23.
  25. ^ "Intel Secure Key-Powered Radio-Flaring Ultracool Dwarf Population Synthesis" . Заседание Американского астрономического общества № 234, id. 207.01. Бюллетень Американского астрономического общества, Vol. 51, №4.
  26. ^ a b Перлрот, Николь; Ларсон, Джефф; Шейн, Скотт (5 сентября 2013 г.). «АНБ может нарушить основные гарантии конфиденциальности в Интернете» . Нью-Йорк Таймс . Проверено 15 ноября 2017 года .
  27. ^ Ts'o, Theodore (6 сентября 2013). «Я так рад, что сопротивлялся давлению инженеров Intel, чтобы позволить / dev / random полагаться ...» Архивировано из оригинала 2018-06-11.
  28. ^ a b Ричард Чиргвин (9 декабря 2013 г.). «FreeBSD отказывается от аппаратной случайности» . Реестр .
  29. Гэвин Кларк (10 сентября 2013 г.). «Торвальдс опровергает призыв к удалению« бэкдорированного »Intel RDRAND в криптографии Linux» . theregister.co.uk . Проверено 12 марта 2014 .
  30. Тейлор Хорнби (6 декабря 2013 г.). «Доказательство концепции бэкдора RDRAND работает! Стандартное ядро ​​(3.8.13), изменена только инструкция RDRAND» . Проверено 9 апреля 2015 года .
  31. ^ Тейлор Хорнби [@DefuseSec] (10 сентября 2013 г.). «Я написал короткий диалог, объясняющий, почему использование RDRAND в Linux проблематично. Http://pastebin.com/A07q3nL3 / cc @kaepora @voodooKobra» (твит) . Проверено 11 января 2016 г. - через Twitter .
  32. ^ Дэниел Дж. Бернштейн; Таня Ланге (16 мая 2014 г.). «Генерация случайности» (PDF) . Проверено 9 апреля 2015 года .
  33. ^ Хорнби, Тейлор (2017-05-09). «Вы хотите, чтобы RDRAND оставался включенным. То, что я сделал, только что показало, что в более старой версии ядра RDRAND потенциально может управлять выводом» . @DefuseSec . Проверено 30 октября 2019 .
  34. ^ «Ежеквартальный отчет о состоянии FreeBSD» . Freebsd.org . Проверено 30 января 2014 .
  35. ^ "случайный (4)" . www.freebsd.org . Проверено 25 сентября 2020 .
  36. ^ a b c Рагаб, Хани; Милберн, Алисса; Разави, Кавех; Бос, Герберт; Джуффрида, Криштиану. «Перекрестный разговор: предполагаемые утечки данных по ядрам реальны» (PDF) . Группа систем и сетевой безопасности, Университет Амстердама (VUSec) . Проверено 26 декабря 2020 года .
  37. ^ "VUSec RIDL cpuid_leak PoC, модифицированный для утечки вывода rdrand" . GitHub . Проверено 26 декабря 2020 года .
  38. ^ "Затронутые процессоры: Специальная выборка данных буфера регистров" . Зона разработчиков Intel . Проверено 26 декабря 2020 года .

Внешние ссылки [ править ]

  • Библиотека RdRand .NET
  • Проект с открытым исходным кодом RdRand .NET