RdRand

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

Rdrand (также RDRAND) это инструкция процессоров, относящихся к архитектуре x86, для генерации случайного числа при помощи внутреннего генератора случайных чисел.[1] Rdrand является опциональным расширением набора инструкций x86-64 и IA-32. В процессорах Intel доступна, начиная с архитектуры Ivy Bridge, в процессорах AMD — начиная с модели Ryzen. Данный генератор случайных чисел соответствует стандартам безопасности и криптографическим стандартам, таким как NIST SP800-90, FIPS 140-2, и ANSI X9.82.[1]

По некоторым мнениям, может представлять собой пример клептографии (умышленного внедрения криптографически слабого элемента)[2]. Внедрение уязвимости гипотетически возможно, к примеру, путём изменения типа допирования в одном из транзисторов (требуется модификация как минимум двух литографических масок)[3]

Условные названия[править | править код]

Intel Secure Key, также известный как Bull Mountain, — условное название Intel для инструкции rdrand и реализующего её аппаратного генератора случайных чисел (RNG).[1] Intel называет их ГСЧ и «цифровой генератор случайных чисел». Генератор использует встроенный в процессор источник энтропии.

Описание[править | править код]

Синтаксис ассемблерной команды: rdrand reg. Здесь reg — операнд команды, представляющий собой регистр общего назначения: 16-и, 32-х или 64-разрядный. Последний вариант возможен только в 64-битном режиме процессора.

Для проверки поддержки процессором RDRAND можно использовать инструкцию CPUID. При наличии поддержки бит 30 регистра ECX оказывается установлен после вызова функции 01H инструкции CPUID. Опкод (машинный код инструкции) RDRAND: 0x0F 0xC7.

Алгоритм[править | править код]

1. Инструкция rdrand генерирует случайное целое двоичное число соответствующего размера и помещает его в регистр-операнд.

2. Если операция выполнилась успешно, устанавливается флаг переноса cf, в противном случае сбрасывается.

Метод генерации[править | править код]

Две пары чисел по 256 бит, полученных из аппаратного источника энтропии, передаются в аппаратный блок, выполняющий криптографический алгоритм AES в режиме CBC-MAC. Полученное 256-битное значение используется для инициализации ГПСЧ (CTR_DRBG из раздела 10.2.1 стандарта NIST SP 800-90, с использованием AES)[4]

Использование в C++[править | править код]

Компилятор C++, входящий в MS Visual Studio 2013, поддерживает RDRAND посредством функций _rdrand16_step(unsigned short *random_val) и _rdrand32_step(unsigned int *random_val). Если удалось сгенерировать случайное число, используя аппаратный генератор процессора, функция возвращает 1, в противном случае возвращается 0. Само сгенерированное случайное число передается в память по указателю.

См. также[править | править код]

Примечания[править | править код]

  1. 1 2 3 Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revision 1.1 (PDF). Intel Corporation (7 августа 2012). Дата обращения: 25 ноября 2012. Архивировано из оригинала 18 мая 2013 года.
  2. Torvalds shoots down call to yank 'backdoored' Intel RdRand in Linux crypto Архивная копия от 9 ноября 2019 на Wayback Machine // The Register, Gavin Clarke, 10th September 2013: "RdRand - used for generating random numbers and feared to be nobbled by US spooks to produce cryptographically weak values."
  3. Bruce Schneier, Surreptitiously Tampering with Computer Chips Архивная копия от 16 сентября 2013 на Wayback Machine // блог Schneier on Security, September 16, 2013: ""Stealthy Dopant-Level Hardware Trojans." Basically, you can tamper with a logic gate to be either stuck-on or stuck-off by changing the doping of one transistor. This sort of sabotage is undetectable by functional testing or optical inspection. And it can be done at mask generation -- very late in the design process"
  4. Intel Digital Random Number Generator (DRNG) Software Implementation Guide Архивная копия от 12 января 2014 на Wayback Machine // Gael Hofemeier, 08/08/2012]

Литература[править | править код]

  • A 4Gbps 0.57pJ/bit Process-Voltage-Temperature Variation Tolerant All-Digital True Random Number Generator in 45 nm CMOS // 2009 22nd International Conference on VLSI Design doi:10.1109/VLSI.Design.2009.69
  • 2.4 GHz 7 mW all-digital PVT-variation tolerant True Random Number Generator in 45 nm CMOS // 2010 IEEE Symposium on VLSI Circuits (VLSIC) doi:10.1109/VLSIC.2010.5560296
  • Georg T. Becker, Stealthy Dopant-Level Hardware Trojans // Cryptographic Hardware and Embedded Systems - CHES 2013, Lecture Notes in Computer Science Volume 8086, 2013, pp 197–214

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