stringtranslate.com

РДРАНД

RDRAND(для «read random») — инструкция для возврата случайных чисел из встроенного в чип аппаратного генератора случайных чисел Intel , который был затравлен встроенным источником энтропии. [1] Также известна как Intel Secure Key Technology , [2] под кодовым названием Bull Mountain . [3] Intel представила эту функцию около 2012 года, а AMD добавила поддержку инструкции в июне 2015 года. ( доступна в процессорах Ivy Bridge [a] и является частью архитектур набора инструкций Intel 64 и IA-32 .) [5]RDRAND

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

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

Обзор

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

Код операции для RDRAND0x0F 0xC7, за которым следует байт ModRM, указывающий целевой регистр, и опционально объединенный с префиксом REX в 64-битном режиме. [13]

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

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

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

На процессоре Intel Core i7-7700K, 4500 МГц (45 × 100 МГц) (микроархитектура Kaby Lake-S) одна инструкция RDRANDor RDSEEDзанимает 110 нс или 463 такта, независимо от размера операнда (16/32/64 бита). Это количество тактов применимо ко всем процессорам с микроархитектурой Skylake или Kaby Lake . На процессорах с микроархитектурой Silvermont каждая из инструкций занимает около 1472 тактов, независимо от размера операнда; а на процессорах Ivy BridgeRDRAND занимает до 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+ компилятора Intel C. Эти функции записывают случайные данные в местоположение, на которое указывает их параметр, и возвращают 1 в случае успеха. [24]

Приложения

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

Научное применение RDRANDв симуляторе Монте-Карло было оценено с упором на производительность и воспроизводимость по сравнению с другими генераторами случайных чисел. Это привело к выводу, что использование RDRANDв противовес Mersenne Twister не дает других результатов, но худшую производительность и воспроизводимость. [25] [20]

Прием

В сентябре 2013 года в ответ на статью в New York Times, раскрывающую усилия АНБ по ослаблению шифрования , [26] Теодор Цо публично опубликовал сообщение об использовании RDRANDfor /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 мы собираемся вернуться назад и удалить бэкэнды RDRANDPadlock и передать их в Yarrow вместо того, чтобы доставлять их вывод напрямую в /dev/random . По-прежнему будет возможен доступ к аппаратным генераторам случайных чисел, то есть RDRAND, Padlock и т. д., напрямую с помощью встроенной ассемблерной сборки или с помощью OpenSSL из пользовательского пространства, если это необходимо, но мы больше не можем им доверять». [28] [34] FreeBSD /dev/random использует Fortuna и RDRAND, начиная с FreeBSD 11. [35]

Проблемы безопасности

9 июня 2020 года исследователи из Амстердамского свободного университета опубликовали атаку по сторонним каналам под названием 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]

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

Примечания

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

Ссылки

  1. ^ abcd "Intel Digital Random Number Generator (DRNG): Руководство по внедрению программного обеспечения, редакция 1.1" (PDF) . Корпорация Intel . 2012-08-07 . Получено 2012-11-25 .
  2. ^ "Что такое технология Intel® Secure Key?". Intel . Получено 2020-09-23 .
  3. ^ Хофемайер, Гаэль (2011-06-22). "Узнайте о новой инструкции RDRAND от Intel". Блоги Intel Developer Zone . Получено 30 декабря 2013 г.
  4. ^ Семейство процессоров Intel Core 3-го поколения для настольных ПК, обновление спецификаций (PDF) . Корпорация Intel. Январь 2013 г.
  5. ^ "AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions" (PDF) . AMD Developer Guides, Manuals & ISA Documents . Июнь 2015 . Получено 16 октября 2015 .
  6. ^ Баркер, Элейн; Келси, Джон (январь 2012 г.). "Рекомендация по генерации случайных чисел с использованием детерминированных генераторов случайных битов" (PDF) . Национальный институт стандартов и технологий . doi :10.6028/NIST.SP.800-90A . Получено 16 сентября 2013 г. . {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  7. ^ Гамбург, Майк; Кохер, Пол; Марсон, Марк (2012-03-12). "Анализ цифрового генератора случайных чисел Ivy Bridge от Intel" (PDF) . Cryptography Research, Inc . Архивировано из оригинала (PDF) 2014-12-30 . Получено 2015-08-21 .
  8. ^ Хофемайер, Гаэль (2012-07-26). "Введение в инструкции Intel AES-NI и Intel SecureKey". Intel Developer Zone . Intel . Получено 2015-10-24 .
  9. ^ "AMD начинает поддержку Linux на архитектуре следующего поколения "Zen" - Phoronix". www.phoronix.com . Получено 25.10.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 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions" (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[бит 18] = 1
  13. ^ "Руководство по внедрению программного обеспечения цифрового генератора случайных чисел Intel® (DRNG)". Software.intel.com . Получено 2014-01-30 .
  14. ^ ab Тейлор, Грег; Кокс, Джордж (сентябрь 2011 г.). "Behind Intel's New Random-Number Generator". IEEE Spectrum . Архивировано из оригинала 6 сентября 2011 г.
  15. ^ Джон Мехалас (ноябрь 2012 г.). «Разница между RDRAND и RDSEED». software.intel.com . Корпорация Intel . Получено 1 января 2014 г. .
  16. ^ Mechalas, John. "Руководство по внедрению программного обеспечения цифрового генератора случайных чисел Intel (DRNG), раздел 3.2.1 Источник энтропии (ES)". Intel Software . 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чисел должно быть выше, чем у программного PRNG, такого как Xorshift.
  19. ^ ab http://www.agner.org/optimize/instruction_tables.pdf [ пустой URL-адрес PDF ]
  20. ^ ab Route, Matthew (10 августа 2017 г.). "Radio-flaring Ultracool Dwarf Population Synthesis". The Astrophysical Journal . 845 (1): 66. arXiv : 1707.02212 . Bibcode : 2017ApJ...845...66R. doi : 10.3847/1538-4357/aa7ede . S2CID  118895524.
  21. ^ abcd "Special Register Buffer Data Sampling". Intel . Получено 26 декабря 2020 г. .
  22. ^ "Список встроенных функций x86". docs.microsoft.com . 2020-02-28 . Получено 2020-05-07 .
  23. ^ «Встроенные функции X86 — использование коллекции компиляторов GNU (GCC)».
  24. ^ «Руководство и справочник разработчика Intel® C++ Compiler 19.1». 2019-12-23.
  25. ^ Route, Matthew (2019). "Intel Secure Key-Powered Radio-flaring Ultracool Dwarf Population Synthesis". Тезисы заседания Американского астрономического общества № 234 . 234 . Заседание Американского астрономического общества № 234, id. 207.01. Бюллетень Американского астрономического общества, том 51, № 4. Bibcode : 2019AAS...23420701R.
  26. ^ ab Perlroth, Nicole; Larson, Jeff; Shane, Scott (5 сентября 2013 г.). «АНБ способно нарушить основные гарантии конфиденциальности в Интернете». The New York Times . Получено 15 ноября 2017 г.
  27. ^ Ts'o, Theodore (6 сентября 2013 г.). «Я так рад, что устоял перед давлением инженеров Intel, которые хотели, чтобы /dev/random полагался...» Архивировано из оригинала 11.06.2018.
  28. ^ ab Ричард Чиргвин (2013-12-09). "FreeBSD отказывается от аппаратной случайности". The Register .
  29. Гэвин Кларк (10 сентября 2013 г.). «Торвальдс отвергает призыв выдернуть «бэкдор» Intel RDRAND из Linux crypto». theregister.co.uk . Получено 12 марта 2014 г.
  30. Тейлор Хорнби (6 декабря 2013 г.). «RDRAND backdoor proof of concept работает! Стандартное ядро ​​(3.8.13), изменена только инструкция RDRAND» . Получено 9 апреля 2015 г.
  31. ^ Тейлор Хорнби [@DefuseSec] (10 сентября 2013 г.). «Я написал короткий диалог, объясняющий, почему использование RDRAND в Linux проблематично. http://pastebin.com/A07q3nL3 /cc @kaepora @voodooKobra» ( Твит ) . Получено 11 января 2016 г. – через Twitter .
  32. ^ Daniel J. Bernstein; Tanja Lange (16 мая 2014 г.). "Генерация случайности" (PDF) . Получено 9 апреля 2015 г.
  33. ^ Ts'o, Theodore (2013-10-10). "random: mix in architecture randomness earlier in extract_buf()". GitHub . Получено 30 июля 2021 г. .
  34. ^ "Отчет о состоянии FreeBSD Quarterly". Freebsd.org . Получено 2014-01-30 .
  35. ^ "random(4)". www.freebsd.org . Получено 2020-09-25 .
  36. ^ abc Рагаб, Хани; Милберн, Алисса; Разави, Каве; Бос, Герберт; Джуффрида, Криштиану. «CrossTalk: спекулятивные утечки данных между ядрами реальны» (PDF) . Группа систем и сетевой безопасности, Амстердамский свободный университет (VUSec) . Проверено 26 декабря 2020 г.
  37. ^ "VUSec RIDL cpuid_leak PoC, измененный для утечки вывода rdrand". GitHub . Получено 26 декабря 2020 г. .
  38. ^ "Процессоры, на которые распространяется действие: выборка данных специального регистрового буфера". Intel Developer Zone . Получено 26 декабря 2020 г.

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