Русская Википедия: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
Ссылки
- Behind Intel’s New Random-Number Generator. The random-number generator uses digital circuits to stump the smartest hackers // Greg Taylor, George Cox, 24 Aug 2011; перевод
- Устройство процессоров Intel Ivy Bridge: «Цифровой ГСЧ и Большой Брат» // ixbt.com, 29 ноября 2012
- Средства визуализации RdRand «Заметки об энтропии» // Intel IT Galaxy, блог icbook Шаблон:Не АИ
- ↑ 1,0 1,1 1,2 Шаблон:Cite web
- ↑ 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."
- ↑ 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"
- ↑ Intel Digital Random Number Generator (DRNG) Software Implementation Guide Шаблон:Wayback // Gael Hofemeier, 08/08/2012]