CryptGenRandom

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 29. december 2019; checks kræver 2 redigeringer .

CryptGenRandom er en kryptografisk sikker pseudo-tilfældig  talgeneratorfunktion . Det er inkluderet i Microsofts Cryptographic Application Programming Interface . Microsoft anbefaler at bruge det i alle Win32- programmer, der kræver generering af tilfældige tal. I 2007 påpegede et papir fra det hebraiske universitet problemer i implementeringen af ​​CryptGenRandom under Windows 2000 (forudsat at kryptanalytikeren havde adgang til maskinen). Senere fastslog Microsoft, at disse problemer også var til stede i Windows XP , og i Windows Vista blev de ikke længere observeret. Disse fejl blev rettet med udgivelsen af ​​Windows XP Service Pack 3 i midten af ​​2008. [en]

Baggrund

Win32 API'et understøtter fuldt ud metoder til at beskytte mod kryptografiske angreb, herunder TLS og digital signatur . Denne support er baseret på native Windows-biblioteker til kryptografiske opgaver såsom nøglegenerering til RSA- eller AES- algoritmer . Disse biblioteker bruger en kryptografisk stærk pseudo-tilfældig talgenerator. CryptGenRandom er standardgeneratoren af ​​denne art til Win32 udviklingsmiljøet.

Algoritme

Microsoft bruger en implementering af CryptGenRandom baseret på en eller anden indbygget "RtlGenRandom" funktion. [2] I 2007 blev der kun offentliggjort en generel oversigt over driften af ​​denne algoritme:

[ RtlGenRandom ] fungerer som specificeret i FIPS 186-2 Appendiks 3.1 med SHA-1 som G-funktion. Kilderne til entropi er:

[udeladt: lang liste over informationselementer og tællere på lavt niveau] Kilde: Writing Secure Code, Second Edition. isbn=0-7356-1722-8  (engelsk) .

Sikkerhed

Den kryptografiske stabilitet af tilfældige talgeneratorer er meget vigtig, da sådanne generatorer er direkte involveret i skabelsen af ​​dynamiske nøgler. Nøgler, der er nødvendige i farten (f.eks. AES TLS-sessionsnøgler til at sikre HTTPS -sessioner på bankwebsteder) beregnes også ved hjælp af disse generatorer. Således giver forudsigeligheden af ​​generatorernes adfærd dig direkte mulighed for at forudsige værdierne af de genererede nøgler. Da CryptGenRandom i virkeligheden er standardgeneratoren i Win32-miljøet, er dens sikkerhed afgørende for Windows-brugere.

Funktioner i CryptGenRandom-algoritmen er ikke officielt offentliggjort. Som enhver upubliceret tilfældig talgenereringsalgoritme kan CryptGenRandom være teoretisk sårbar på grund af brugen af ​​forældede algoritmer eller for eksempel brugen af ​​flere monotone entropitællere, der kan bruges af en kryptoanalytiker med adgang til systemet.

Cryptanalysis (Hebrew University)

I 2007 offentliggjorde Leo Dorrendorf sammen med en gruppe videnskabsmænd fra det hebraiske universitet og universitetet i Haifa resultaterne af CryptGenRandom cryptanalysis , der afslørede betydelige sårbarheder i implementeringen af ​​algoritmen under Windows 2000. [3]

For at udnytte disse sårbarheder skal en angriber kompromittere et kørende program, der bruger denne tilfældige talgenerator. Alle manglerne ved CryptGenRandom afhænger af siphoning af generatortilstandsbits. Hvis en angriber er i stand til at udføre dette angreb, så kan han med en høj grad af sandsynlighed bryde enhver tilfældig talgenerator (for eksempel kan han blot gentage generatorens outputværdier eller rette dem direkte i hukommelsen med allerede kendte værdier). Forskere fra det hebraiske universitet fandt dog ud af, at en kryptoanalytiker kun behøver at kende statusbits én gang for at kunne uddele et alvorligt slag mod sikkerheden i CryptGenRandom. En angriber kan derefter bruge statusbitinformationen til at hente de tal, der er genereret af algoritmen under tidligere kørsler, og derved få adgang til potentielt følsomme oplysninger, såsom kreditkortnumre, der allerede er indsendt. Dette er muligt, fordi CryptGenRandom bruger RC4 stream cipher , som er reversibel, hvis der er mindst én kendt tilstand. Det er blevet observeret, at CryptGenRandom kører i brugertilstand , hvilket giver alle med brugerniveauadgang til operativsystemet mulighed for at få oplysninger om tilstanden for CryptGenRandom for denne proces, for eksempel ved hjælp af et bufferoverløb . Endelig opdaterer CryptGenRandom sjældent kilder til at beregne entropi. Problemet forværres af det faktum, at hver Win32-proces har sin egen forekomst af CryptGenRandom-tilstande. En sådan uafhængighed af processer øger kun tiden for uautoriseret brug af systemet efter et vellykket hack. Analysen foretaget af en gruppe videnskabsmænd ledet af Dorrendorf er faktisk det første offentliggjorte arbejde om funktionen af ​​en kryptografisk stærk tilfældig talgenerator under Windows.

Fælles kriterier

Windows 2000, XP og Windows 2003 , inklusive implementeringerne CryptGenRandom() og FIPSGenRandom(), bestod EAL4+-testene med succes. Sikkerhedstjekket af algoritmerne afslørede fuld overensstemmelse med de påkrævede EAL4-standarder, dokumentationen er tilgængelig på Common Criteria -portalen . Ud fra dette kan vi konkludere, at det gennemprøvede EAL4-verifikationssystem fungerer godt i de fleste tilfælde, men inkluderer ikke dybere krypteringsanalyse.

FIPS kontrollerer

Følgende implementeringer af Microsoft tilfældige talgeneratorer er blevet testet med succes: Windows Vista (Certificate 321) Windows 2003 Enhanced Cryptographic Provider (rsaenh.dll) (Certificate 316) Windows 2003 Enhanced DSS og Diffie-Hellman Cryptographic Provider (dssenh.dll) (Certificate) 314) Windows 2003 Kernel Mode Cryptographic Module (fips.sys) (Certifikat 313) Windows CE og Windows Mobile Enhanced Cryptographic Provider (rsaenh.dll) (Certifikat 292) Windows CE og Windows Mobile Enhanced Cryptographic Provider (rsaenh.dll) (Certifikat 286) ) Windows CE Enhanced Cryptographic Provider (rsaenh.dll) (Certificate 66)

Disse tests har til formål at verificere overensstemmelse med forskellige godkendte specifikationer for tilfældige talgeneratorer og ikke at vurdere niveauet af produktsikkerhed. […] Derfor bør verifikation ikke opfattes som en vurdering eller godkendelse af produktets overordnede sikkerhed." Ud fra dette kan vi konkludere, at sådanne kontroller kan omgå nogle funktioner i tilfældige talgeneratorer (for eksempel brugt af en gruppe videnskabsmænd fra det hebraiske universitet). [fire]

Kildekode

Der er en række hjælpeprogrammer til at få adgang til kildekoden til Microsoft-programmer (normalt beskyttet af EULA), men det er ikke muligt at dele netop denne kode med offentligheden.

Demontering

Biblioteker til Windows-platforme kan skilles ad ved hjælp af værktøjer som IDA Pro og objdump . I modsætning til de fleste leverandører af lukket kildesoftware leverer Microsoft også fejlfindingssymboler til sine binære filer. Som et resultat bliver disse filer ofte evalueret af tredjepartspraksis. Dorrendorfs angreb nævnt ovenfor var netop baseret på sådanne opgør.

Alternative midler

API-niveau

Windows-udviklere har flere alternative måder at få adgang til CryptGenRandom-funktioner på. Disse muligheder påberåber sig den samme algoritme, har det samme sikkerhedsniveau, men kan også have andre fordele.

Brug af RtlGenRandom

"Historisk set har vi altid fortalt udviklere ikke at bruge funktioner som rand() til at generere nøgler og adgangskoder. Det er meget bedre at bruge funktioner som CryptGenRandom, som er kryptografisk stærke tilfældige talgeneratorer. Problemet med at bruge CryptGenRandom hænger sammen med behovet for at forbinde CryptoAPI (CryptAcquireContext og lignende), hvilket dog er acceptabelt, hvis du allerede bruger andre funktioner fra CryptoAPI. Som standard på Windows XP kalder CryptGenRandom funktionen ADVAPI32!RtlGenRandom, som ikke kræver, at hele CryptAPI-sættet er inkluderet. Faktisk kalder den nye Whidbey CRT rand_s() funktion RtlGenRandom. [5]

Brug af RNGCryptoServiceProvider

.Net - programmører bør bruge klassen RNGCryptoServiceProvider. [6]

Programmeringssprog

  • det anbefales at bruge rand_s-funktionen fra Microsoft C++-biblioteket (baseret på RtlGenRandom). [7]
  • Python os.urandom()- funktionen på Windows -operativsystemer kalder CryptGenRandom. [otte]

Se også

Noter

  1. Microsoft bekræfter, at XP indeholder fejl til generator af tilfældige tal Arkiveret 22. juni 2008.
  2. RtlGenRandom-funktion (Windows) . Hentet 22. december 2011. Arkiveret fra originalen 14. oktober 2008.
  3. Dorrendorf, Leo; Zvi Gutterman, Benny Pinkas. Krypteringsanalyse af Random Number Generator i Windows-operativsystemet (pdf). Arkiveret fra originalen den 6. september 2012.
  4. Arkiveret kopi (link ikke tilgængeligt) . Dato for adgang: 22. december 2011. Arkiveret fra originalen 26. januar 2007. 
  5. Michael Howards weblog: Kryptografisk sikkert tilfældigt nummer på Windows uden brug af CryptoAPI . Hentet 22. december 2011. Arkiveret fra originalen 28. december 2005.
  6. Tabt omdirigering Arkiveret fra originalen den 8. september 2006.
  7. http://msdn.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx Arkiveret 9. april 2016 på Wayback Machine Visual C++ Developer Center, rand_s
  8. Arkiveret kopi (link ikke tilgængeligt) . Hentet 22. december 2011. Arkiveret fra originalen 14. september 2008.   Python Library Reference, OS-modul

Links