RDRAND - RDRAND
RDRAND(pro „čtení náhodně“; známá jako Intel Secure Key Technology , dříve známá jako Bull Mountain ) je instrukce pro vrácení náhodných čísel z hardwarového generátoru náhodných čísel Intel na čipu, který byl nasazen zdrojem entropie na čipu. je k dispozici v procesorech Ivy Bridge a je součástí architektur instrukčních sad Intel 64 a IA-32 . AMD přidalo podporu pro instrukce v červnu 2015.
RDRAND
Generátor náhodných čísel je kompatibilní s bezpečnostními a kryptografickými standardy, jako jsou NIST SP 800-90A , FIPS 140-2 a ANSI X9.82 . Společnost Intel také v roce 2012 požádala společnost Cryptography Research Inc., aby zkontrolovala generátor náhodných čísel, což vyústilo v papírovou analýzu generátoru digitálních náhodných čísel Intel Ivy Bridge .
RDSEEDje podobný RDRANDa poskytuje přístup nižší úrovně k hardwaru generujícímu entropii. Pokyny pro RDSEEDgenerátor a procesor rdseedjsou k dispozici u procesorů Intel Broadwell a AMD Zen .
Přehled
CPUIDInstrukce může být použit jak na AMD a Intel procesory zkontrolovat, zda RDRANDinstrukce je podporována. Pokud ano, je bit 30 registru ECX nastaven po volání standardní funkce CPUID 01H. Procesory AMD jsou zkontrolovány na funkci pomocí stejného testu. RDSEEDdostupnost lze zkontrolovat na procesorech Intel podobným způsobem. Pokud RDSEEDje podporováno, bit 18 registru EBX se nastaví po volání standardní funkce CPUID 07H.
Za operačním kódem RDRANDje 0x0F 0xC7následován bajtem ModRM, který určuje cílový registr a volitelně kombinovaný s předponou REX v 64bitovém režimu.
Intel Secure Key je Intel se jmenuje jak pro RDRANDvýuku a základní generátor náhodných čísel plnění (RNG) hardware, který byl s kódovým označením ‚Bull Mountain‘, v průběhu vývoje. Intel nazývá jejich RNG „generátor digitálních náhodných čísel“ nebo DRNG. Generátor odebírá páry 256bitových vzorků surové entropie generovaných hardwarovým zdrojem entropie a aplikuje je na kondicionér Advanced Encryption Standard (AES) (v režimu CBC-MAC ), který je redukuje na jeden 256bitový podmíněný vzorek entropie. Deterministický generátor náhodných bitů nazvaný CTR_DRBG definovaný v NIST SP 800-90A je nasazen výstupem z kondicionéru, který poskytuje kryptograficky bezpečná náhodná čísla aplikacím, které je požadují prostřednictvím RDRANDinstrukce. Hardware před změnou počáteční hodnoty vydá maximálně 511 128bitových vzorků. Použití RDSEEDoperace poskytuje přístup k podmíněným 256bitovým vzorkům z AES-CBC-MAC.
RDSEEDPokyn byl přidán Intel Secure Key pro setí další generátor pseudonáhodných čísel, která je dostupná v Broadwell CPU. Zdroj entropie pro RDSEEDinstrukci běží asynchronně na samočinném obvodu a využívá tepelný šum v křemíku k výstupu náhodného proudu bitů rychlostí 3 GHz, pomalejší než efektivních 6,4 Gbit/s, které lze získat RDRAND(obě rychlosti jsou sdílené mezi všemi jádry a vlákny ). RDSEEDPokyn je určen pro setí se softwarovou PRNG svévolné šířky, zatímco RDRANDje určen pro aplikace, které vyžadují pouze vysoce kvalitní náhodných čísel. Pokud není vyžadováno kryptografické zabezpečení, software PRNG, jako je Xorshift, je obvykle rychlejší.
Výkon
Na procesoru Intel Core i7-7700K, 4500 MHz (45 x 100 MHz) (mikroarchitektura Kaby Lake-S) trvá jedna instrukce RDRANDnebo RDSEEDinstrukce 110ns nebo 463 hodinových cyklů bez ohledu na velikost operandu (16/32/64 bitů). Tento počet hodinových cyklů platí pro všechny procesory s mikroarchitekturou Skylake nebo Kaby Lake . Na mikroarchitekturních procesorech Silvermont trvá každý z pokynů přibližně 1472 hodinových cyklů bez ohledu na velikost operandu; a na procesorech Ivy BridgeRDRAND trvá až 117 hodinových cyklů.
Na procesoru AMD Ryzen trvá každá z instrukcí přibližně 1200 hodinových cyklů pro 16bitový nebo 32bitový operand a přibližně 2500 hodinových cyklů pro 64bitový operand.
Astrofyzický simulátor Monte Carla zkoumal čas na generování 10 7 64bitových náhodných čísel pomocí RDRANDčtyřjádrového procesoru Intel i7-3740 QM. Zjistili, že implementace C RDRANDběžela asi 2 × pomaleji než výchozí generátor náhodných čísel v C a asi 20 × pomaleji než Mersenne Twister . Přestože RDRANDbyl zkonstruován modul Pythonu , bylo zjištěno, že je 20 × pomalejší než výchozí generátor náhodných čísel v Pythonu, přestože srovnání výkonu mezi PRNG a CSPRNG nelze provést.
Aktualizace mikrokódu vydaná společností Intel v červnu 2020, navržená tak, aby zmírnila zranitelnost CrossTalk (viz část o problémech se zabezpečením níže), negativně ovlivňuje výkon RDRANDa RDSEEDkvůli dalším kontrolám zabezpečení. Na procesorech s uplatněnými zmírněními každá ovlivněná instrukce přináší další latenci a současné provádění RDRANDnebo RDSEEDpřes jádra se efektivně serializuje. Intel zavedl mechanismus k uvolnění těchto bezpečnostních kontrol, čímž se ve většině scénářů sníží dopad na výkon, ale procesory Intel tuto relaxaci zabezpečení ve výchozím nastavení nepoužívají.
Překladače
Visual C ++ 2015 poskytuje vnitřní obalovou podporu funkcí RDRANDa RDSEED. GCC 4.6+ a Clang 3.2+ poskytují vestavěné funkce pro RDRANDkdyž -mrdrnd je uvedeno v vlajky , také nastavení __RDRND__ povolit podmíněný překlad . Novější verze navíc umožňují immintrin.hzabalit tyto vestavěné funkce do funkcí kompatibilních s verzí 12.1+ kompilátoru C společnosti Intel. Tyto funkce zapisují náhodná data na místo, na které ukazuje jejich parametr, a vrátí 1 při úspěchu.
Aplikace
Je to možnost generovat kryptograficky zabezpečená náhodná čísla pomocí RDRANDa RDSEEDv OpenSSL, což pomáhá zabezpečené komunikaci.
Vědeckou aplikaci RDRANDlze nalézt v astrofyzice. Rádiová pozorování hvězd s nízkou hmotností a hnědých trpaslíků odhalila, že řada z nich vyzařuje výbuchy rádiových vln. Tyto rádiové vlny jsou způsobeny opětovným magnetickým spojením , stejným procesem, který způsobuje sluneční erupce na Slunci. RDRANDbyl použit ke generování velkého množství náhodných čísel pro simulátor Monte Carlo , k modelování fyzikálních vlastností hnědých trpaslíků a účinků nástrojů, které je pozorují. Zjistili, že asi 5% hnědých trpaslíků je dostatečně magnetických na to, aby vyzařovaly silné rádiové výbuchy. Rovněž vyhodnotili výkon RDRANDinstrukce v C a Pythonu ve srovnání s jinými generátory náhodných čísel.
Recepce
V září 2013, v reakci na článek New York Times odhalující snahu NSA oslabit šifrování , Theodore Ts'o veřejně zveřejnil informace o použití RDRANDfor /dev/randomv linuxovém jádře :
Jsem tak rád, že jsem odolal tlaku inženýrů Intelu, aby se mohli
/dev/randomspolehnout pouze naRDRANDpokyny. Citovat z [článku New York Times]: „Do tohoto roku našel Sigint Enabling Project způsoby uvnitř některých šifrovacích čipů, které míchají informace pro firmy a vlády, a to buď spoluprací s výrobci čipů na vložení zadních dveří ...“ Spoléhat se pouze na hardwarový generátor náhodných čísel, který používá implementaci uzavřenou uvnitř čipu, který není možné auditovat, je BAD nápad.
Linus Torvalds odmítl obavy z používání RDRANDjádra Linuxu a poukázal na to, že není používán jako jediný zdroj entropie /dev/random, ale spíše se používá ke zlepšení entropie kombinací hodnot získaných z RDRANDjiných zdrojů náhodnosti. Taylor Hornby z Defuse Security však předvedl, že generátor náhodných čísel Linuxu by se mohl stát nejistým, pokud se do RDRANDinstrukce, která cílí konkrétně na kód, pomocí něj zavede zadní vrátka . Implementace proof-of-concept Hornby funguje na nemodifikovaném jádře Linuxu před verzí 3.13. Problém byl v jádře Linuxu zmírněn v roce 2013.
Vývojáři změnili jádro FreeBSD mimo používání RDRANDa VIA PadLock přímo s komentářem „U FreeBSD 10 budeme stahovat a odstraňovat RDRANDa Visací zámek backendovat a vkládat je do Yarrow místo toho, abychom jejich výstup doručovali přímo do /dev /random . Stále to bude je možné přistupovat k hardwarovým generátorům náhodných čísel, tj RDRAND. k visacímu zámku atd., přímo pomocí vložené sestavy nebo pomocí OpenSSL z uživatelské země, je -li to požadováno, ale již jim nemůžeme věřit. “ FreeBSD /dev /random use Fortuna a RDRAND začínají od FreeBSD 11.
Bezpečnostní problémy
9. června 2020 vědci z Vrije Universiteit Amsterdam zveřejnili útok postranním kanálem s názvem CrossTalk ( CVE-2020-0543 ), který ovlivnil RDRANDřadu procesorů Intel. Zjistili, že výstupy z hardwarového generátoru digitálních náhodných čísel (DRNG) byly uloženy ve vyrovnávací paměti fázování, která byla sdílena přes všechna jádra. Tato chyba zabezpečení umožnila škodlivému kódu spuštěnému na ovlivněném procesoru číst RDRANDa RDSEEDinstruovat výsledky z obětní aplikace běžící na jiném jádru stejného procesoru, včetně aplikací běžících v enklávách Intel SGX . Vědci vyvinuli důkaz koncepčního využití, který extrahoval kompletní klíč ECDSA z enklávy SGX běžící na samostatném jádru CPU, po jediné operaci podpisu. Tato chyba zabezpečení ovlivňuje scénáře, kdy nedůvěryhodný kód běží vedle důvěryhodného kódu na stejném procesoru, například ve sdíleném hostitelském prostředí.
Intel označuje zranitelnost CrossTalk jako SRBDS (Special Register Buffer Data Sampling). V reakci na výzkum společnost Intel vydala aktualizace mikrokódu, aby problém zmírnila. Aktualizované mikrokód zajišťuje, že mimo jádro přístupy jsou opožděné, dokud citlivé operace - konkrétně RDRAND, RDSEEDa EGETKEYinstrukce - jsou dokončeny a staging pufr byl přepsán. Útok SRBDS ovlivňuje i další instrukce, například ty, které čtou MSR , ale Intel na ně nepoužil dodatečnou bezpečnostní ochranu kvůli problémům s výkonem a snížené potřebě důvěrnosti výsledků těchto pokynů. Byla ovlivněna široká řada procesorů Intel vydaných v letech 2012 až 2019, včetně stolních, mobilních a serverových procesorů. Samotná zmírnění měla za následek negativní dopady na výkon při používání ovlivněných instrukcí, zejména při paralelním spouštění vícevláknovými aplikacemi, kvůli zvýšené latenci zavedené kontrolami zabezpečení a efektivní serializací ovlivněných instrukcí napříč jádry. Intel představil možnost opt-out, konfigurovatelnou přes IA32_MCU_OPT_CTRLMSR na každém logickém procesoru, což zlepšuje výkon tím, že deaktivuje dodatečné bezpečnostní kontroly pro instrukce prováděné mimo enklávu SGX.