Русская Википедия: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. Само сгенерированное случайное число передается в память по указателю.

См. также

Примечания

Шаблон:Примечания

Литература

  • 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

Ссылки

  1. 1,0 1,1 1,2 Шаблон:Cite web
  2. Torvalds shoots down call to yank 'backdoored' Intel RdRand in Linux crypto Шаблон:Wayback // 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 Шаблон:Wayback // блог 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 Шаблон:Wayback // Gael Hofemeier, 08/08/2012]