RDRAND - RDRAND

RDRAND(for "les tilfeldig"; kjent som Intel Secure Key Technology , tidligere kjent som Bull Mountain ) er en instruksjon for å returnere tilfeldige tall fra en Intel on-chip hardware random number generator som har blitt seedet av en on-chip entropykilde. RDRANDer tilgjengelig i Ivy Bridge- prosessorer og er en del av arkitekturen for instruksjonssettene Intel 64 og IA-32 . AMD la til støtte for instruksjonene i juni 2015.

Tilfeldighetsnummergeneratoren er i samsvar med sikkerhets- og kryptografiske standarder som NIST SP 800-90A , FIPS 140-2 og ANSI X9.82 . Intel ba også Cryptography Research Inc. om å gjennomgå tilfeldighetsgeneratoren i 2012, noe som resulterte i papiranalyse av Intels Ivy Bridge Digital Random Number Generator .

RDSEEDer lik RDRANDog gir tilgang på lavere nivå til den entropi-genererende maskinvaren. Den RDSEEDgenerator og prosessor instruksjon rdseeder tilgjengelig med Intel Broadwell CPUer og AMD Zen CPUer .

Oversikt

Den CPUIDundervisningen kan brukes på både AMD og Intel prosessorer for å sjekke om RDRANDundervisningen støttes. Hvis det er det, settes bit 30 i ECX -registeret etter at du har kalt CPUID -standardfunksjonen 01H. AMD -prosessorer kontrolleres for funksjonen ved hjelp av den samme testen. RDSEEDtilgjengelighet kan kontrolleres på Intel -prosessorer på lignende måte. Hvis RDSEEDdet støttes, settes bit 18 i EBX -registeret etter at du har kalt CPUID -standardfunksjonen 07H.

Opkoden for RDRANDer 0x0F 0xC7, etterfulgt av en ModRM-byte som spesifiserer destinasjonsregisteret og eventuelt kombinert med et REX-prefiks i 64-biters modus.

Intel Secure Key er Intels navn på både RDRANDinstruksjonene og den underliggende maskinvareimplementeringen for tilfeldig tallgenerator (RNG), som ble kodenavnet "Bull Mountain" under utviklingen. Intel kaller deres RNG en "digital random number generator" eller DRNG. Generatoren tar par med 256-biters rå entropi-prøver generert av maskinvareentropikilden og bruker dem til en Advanced Encryption Standard (AES) (i CBC-MAC- modus) balsam som reduserer dem til en enkelt 256-biters betinget entropyprøve. En deterministisk tilfeldig bitgenerator kalt CTR_DRBG definert i NIST SP 800-90A blir seedet av utgangen fra balsamen , og gir kryptografisk sikre tilfeldige tall til applikasjoner som ber dem via RDRANDinstruksjonen. Maskinvaren vil maksimalt utstede 511 128-biters prøver før du endrer frøverdien. Bruk av RDSEEDoperasjonen gir tilgang til de betingede 256-biters prøvene fra AES-CBC-MAC.

Den RDSEEDundervisningen ble lagt til Intel Secure Key for seeding en annen pseudo nummer generator, tilgjengelig i Broadwell CPUer. Entropikilden for RDSEEDinstruksjonen går asynkront på en selvtimet krets og bruker termisk støy i silisiumet for å sende ut en tilfeldig strøm av biter med en hastighet på 3 GHz, langsommere enn den effektive 6,4 Gbit/s som kan oppnås fra RDRAND(begge hastighetene deles mellom alle kjerner og tråder ). Den RDSEEDinstruksjon er beregnet for poding av en programvare PRNG av vilkårlig bredde, mens den RDRANDer beregnet for anvendelser som bare krever høy kvalitet tilfeldige tall. Hvis kryptografisk sikkerhet ikke er nødvendig, er en PRNG -programvare som Xorshift vanligvis raskere.

Opptreden

På en Intel Core i7-7700K, 4500 MHz (45 x 100 MHz) prosessor (Kaby Lake-S mikroarkitektur), tar en enkelt RDRANDeller RDSEEDinstruksjon 110ns eller 463 klokkesykluser, uavhengig av operandstørrelsen (16/32/64 bits). Dette antallet klokkesykluser gjelder for alle prosessorer med Skylake eller Kaby Lake mikroarkitektur. På Silvermont mikroarkitekturprosessorer tar hver av instruksjonene rundt 1472 klokkesykluser, uavhengig av operandstørrelse; og på Ivy BridgeRDRAND tar prosessorer opptil 117 klokkesykluser.

På en AMD Ryzen CPU tar hver av instruksjonene rundt 1200 klokkesykluser for 16-biters eller 32-biters operand, og rundt 2500 klokkesykluser for en 64-biters operand.

En astrofysisk Monte Carlo-simulator undersøkte tidspunktet for å generere 10 7 64-biters tilfeldige tall ved bruk RDRANDav en firekjerners Intel i7-3740 QM-prosessor. De fant at en C -implementering av RDRANDkjørte omtrent 2 × tregere enn standard tilfeldig tallgenerator i C, og omtrent 20 × tregere enn Mersenne Twister . Selv om en Python -modul RDRANDer konstruert, ble den funnet å være 20 × tregere enn standard tilfeldig tallgenerator i Python, selv om en ytelses sammenligning mellom en PRNG og CSPRNG ikke kan gjøres.

En mikrokodeoppdatering utgitt av Intel i juni 2020, designet for å dempe CrossTalk -sårbarheten (se delen om sikkerhetsproblemer nedenfor), påvirker ytelsen til RDRANDog på RDSEEDgrunn av ytterligere sikkerhetskontroller negativt . På prosessorer med reduserte begrensninger påføres hver berørt instruksjon ekstra ventetid, og samtidig utførelse av RDRANDeller på RDSEEDtvers av kjerner blir effektivt serialisert. Intel introduserte en mekanisme for å slappe av disse sikkerhetskontrollene, og dermed redusere ytelsespåvirkningen i de fleste scenarier, men Intel -prosessorer bruker ikke denne sikkerhetskoplingen som standard.

Kompilatorer

Visual C ++ 2015 gir egenverdi wrapper støtte for RDRANDog RDSEEDfunksjoner. GCC 4.6+ og Clang 3.2+ gir inneboende funksjoner for RDRANDnår -mrdrnd er angitt i flaggene , og angir også __RDRND__ for å tillate betinget kompilering . Nyere versjoner gir også mulighet for immintrin.hå pakke disse innebygde inn i funksjoner som er kompatible med versjon 12.1+ av Intels C Compiler. Disse funksjonene skriver tilfeldige data til stedet som parameteren peker på, og returnerer 1 når de lykkes.

applikasjoner

Det er et alternativ for å generere kryptografisk sikre tilfeldige tall ved hjelp av RDRANDog RDSEEDi OpenSSL, for å sikre kommunikasjon.

En vitenskapelig anvendelse av RDRANDkan finnes i astrofysikk. Radioobservasjoner av lavmassestjerner og brune dverger har avslørt at flere av dem avgir utbrudd av radiobølger. Disse radiobølgene er forårsaket av magnetisk ny tilkobling , den samme prosessen som forårsaker solfakkel på solen. RDRANDble brukt til å generere store mengder tilfeldige tall for en Monte Carlo -simulator, for å modellere fysiske egenskaper til de brune dvergene og effekten av instrumentene som observerer dem. De fant ut at omtrent 5% av brune dverger er tilstrekkelig magnetiske til å avgi sterke radiosur. De evaluerte også utførelsen av RDRANDinstruksjonene i C og Python sammenlignet med andre tilfeldige tallgeneratorer.

Resepsjon

I september 2013, som svar på en artikkel i New York Times som avslørte NSAs forsøk på å svekke kryptering , publiserte Theodore Ts'o offentlig om bruk av RDRANDfor /dev/randomi Linux -kjernen :

Jeg er så glad jeg motsto press fra Intel -ingeniører til å la /dev/randombare stole på RDRANDinstruksjonene. For å sitere fra [New York Times -artikkelen]: 'I år hadde Sigint Enabling Project funnet måter inne i noen av krypteringsbrikkene som krypterer informasjon for bedrifter og myndigheter, enten ved å jobbe med chipmakers for å sette inn bakdører ...' Å stole utelukkende på maskinvarens tilfeldige tallgenerator som bruker en implementering forseglet inne i en brikke som er umulig å kontrollere er en dårlig idé.

Linus Torvalds avviste bekymringer for bruken av RDRANDi Linux -kjernen, og påpekte at den ikke brukes som den eneste entropikilden for /dev/random, men snarere brukes til å forbedre entropien ved å kombinere verdiene mottatt fra RDRANDmed andre tilfeldighetskilder. Imidlertid demonstrerte Taylor Hornby fra Defuse Security at Linux -tilfeldighetsgeneratoren kan bli usikker hvis en bakdør blir introdusert i RDRANDinstruksjonene som spesifikt retter seg mot koden som bruker den. Hornbys implementering av proof-of-concept fungerer på en umodifisert Linux-kjerne før versjon 3.13. Problemet ble redusert i Linux -kjernen i 2013.

Utviklere endret FreeBSD -kjernen fra å bruke RDRANDog VIA PadLock direkte med kommentaren "For FreeBSD 10 kommer vi til å spore tilbake og fjerne RDRANDog Padlock backends og mate dem inn i Yarrow i stedet for å levere produksjonen direkte til /dev /random . Det vil fortsatt være mulig å få tilgang til maskinvare for tilfeldige tallgeneratorer, det vil si RDRANDhengelås etc., direkte ved inline -montering eller ved å bruke OpenSSL fra brukerlandet, om nødvendig, men vi kan ikke stole på dem lenger. " FreeBSD /dev /tilfeldig bruk Fortuna og RDRAND startet fra FreeBSD 11.

Sikkerhetsproblemer

Juni 2020 publiserte forskere fra Vrije Universiteit Amsterdam et sidekanalangrep ved navn CrossTalk ( CVE-2020-0543 ) som påvirket RDRANDen rekke Intel-prosessorer. De oppdaget at utganger fra maskinvarens digitale tilfeldighetsgenerator (DRNG) ble lagret i en mellomlagringsbuffer som ble delt på tvers av alle kjerner. Sårbarheten tillot ondsinnet kode som kjører på en berørt prosessor for å lese RDRANDog RDSEEDinstruere resultater fra et offerprogram som kjører på en annen kjerne av den samme prosessoren, inkludert programmer som kjøres inne i Intel SGX -enklaver . Forskerne utviklet et proof of concept exploit som hentet ut en komplett ECDSA -nøkkel fra en SGX -enklave som kjører på en egen CPU -kjerne , etter bare én signaturoperasjon. Sårbarheten påvirker scenarier der upålitelig kode kjøres sammen med klarert kode på samme prosessor, for eksempel i et delt vertsmiljø.

Intel omtaler CrossTalk -sårbarheten som Special Register Buffer Data Sampling (SRBDS). Som svar på forskningen ga Intel ut mikrokodeoppdateringer for å redusere problemet. De oppdaterte mikrokode sikrer at off-kjerne aksesser blir forsinket inntil følsomme operasjoner - nærmere bestemt den RDRAND, RDSEED, og EGETKEYinstruksjoner - er fullført og staging bufferen har blitt overskrevet. SRBDS -angrepet påvirker også andre instruksjoner, for eksempel de som leser MSR , men Intel brukte ikke ytterligere sikkerhetsbeskyttelse på dem på grunn av ytelsesproblemer og redusert behov for konfidensialitet for disse instruksjonene. Et bredt spekter av Intel -prosessorer utgitt mellom 2012 og 2019 ble påvirket, inkludert stasjonære, mobile og serverprosessorer. Begrensningene i seg selv resulterte i negative ytelsespåvirkninger ved bruk av de berørte instruksjonene, spesielt når de ble utført parallelt med flertrådede applikasjoner, på grunn av økt latens som ble introdusert av sikkerhetskontrollene og effektiv serialisering av berørte instruksjoner på tvers av kjerner. Intel introduserte et opt-out-alternativ, som kan konfigureres via IA32_MCU_OPT_CTRLMSR på hver logisk prosessor, noe som forbedrer ytelsen ved å deaktivere de ekstra sikkerhetskontrollene for instruksjoner som utføres utenfor en SGX-enklave.

Se også

Merknader

Referanser

Eksterne linker