CryptGenRandom

CryptGenRandom is a deprecated[1] cryptographically secure pseudorandom number generator function that is included in Microsoft CryptoAPI. In Win32 programs, Microsoft recommends its use anywhere random number generation is needed. A 2007 paper from Hebrew University suggested security problems in the Windows 2000 implementation of CryptGenRandom (assuming the attacker has control of the machine). Microsoft later acknowledged that the same problems exist in Windows XP, but not in Vista. Microsoft released a fix for the bug with Windows XP Service Pack 3 in mid-2008.[2]

Background

The Win32 API includes comprehensive support for cryptography through the Microsoft CryptoAPI, a set of cryptographic primitives provided by Microsoft for use in Windows applications. Windows technologies such as TLS support (via the Schannel API) and code signing rely on these primitives, which in turn rely on a cryptographically secure pseudorandom number generator (CSPRNG). CryptGenRandom is the standard CSPRNG supplied with the Microsoft CryptoAPI.

Method of operation

Before Windows Vista

Microsoft-provided cryptography providers share the same implementation of CryptGenRandom, currently based on an internal function called RtlGenRandom.[3] Only a general outline of the algorithm had been published as of 2007:

[RtlGenRandom] generates as specified in FIPS 186-2 appendix 3.1 with SHA-1 as the G function. And with entropy from:

  • The current process ID (GetCurrentProcessID).
  • The current thread ID (GetCurrentThreadID).
  • The tick count since boot time (GetTickCount).
  • The current time (GetLocalTime).
  • Various high-precision performance counters (QueryPerformanceCounter).
  • An MD4 hash of the user's environment block, which includes username, computer name, and search path. [...]
  • High-precision internal CPU counters, such as RDTSC, RDMSR, RDPMC

[omitted: long lists of low-level system information fields and performance counters] [4]

Windows Vista and above

Microsoft has documented the implementation of the Windows 10 random number generator in some detail, in a whitepaper published in 2019.[5] In Windows 10:

  • There exists a hierarchy of random number generators. The kernel has a "Root" PRNG, from which all randomness is ultimately derived. The kernel then uses the Root PRNG to seed one PRNG per logical processor (so the PRNG state is thread-local and requires no locking). When a process launches, it requests random bytes from the kernel per-processor PRNG to seed its own Process PRNG. It then uses the Process PRNG to also seed one buffered PRNG per logical processor.[5]
  • All userspace calls to fetch randomness, be it CryptGenRandom or RtlGenRandom, ultimately fall to ProcessPrng, which returns bytes from the process's per-processor PRNG. The PRNG always uses the AES-CTR-DRBG algorithm as specified by FIPS SP800-90. Although BCryptGenRandom accepts requests for older algorithms for backward compatibility, it only ever return random numbers from the per-processor PRNG.[5]: 8 
    • AES-CTR-DRBG, instead of FIPS 186, has been the default since Windows Vista and Windows Server 2008.[6]
    • The removal of other algorithms happened in Windows 10.[6]
  • The root RNG is periodically reseeded from the entropy pools.[5]: 9  At bootup when very little entropy is available, a special "initial seeding" procedure provides the seed from seed files, external entropy, TPM randomness, RDRAND/RDSEED instructions, ACPI-OEM0 table, UEFI entropy, and the current time.[5]: 11 
  • The kernel maintains multiple entropy pools. Multiple entropy sources append into pools, the main one being interrupt timing.[5]: 12  When a pool is used, the SHA-512 hash of its contents is taken as the output.[5]: 10  Windows does not estimate entropy.[5]: 16 

Security

The security of a cryptosystem's CSPRNG is crucial because it is the origin for dynamic key material. Keys needed "on the fly", such as the TLS session keys that protect HTTPS connections, originate from CSPRNGs. If these pseudorandom numbers are predictable, session keys are predictable as well. Because CryptGenRandom is the de facto standard CSPRNG in Win32 environments, its security is critical for Windows users.

Cryptanalysis

A cryptanalysis of CryptGenRandom, published in November 2007 by Leo Dorrendorf and others from the Hebrew University of Jerusalem and University of Haifa, found significant weaknesses in the Windows 2000 implementation of the algorithm.[7]

To take advantage of the vulnerability, an attacker would first need to compromise the program running the random number generator. The weaknesses in the paper all depend on an attacker siphoning the state bits out of the generator. An attacker in a position to carry out this attack would typically already be in a position to defeat any random number generator (for instance, they can simply sniff the outputs of the generator, or fix them in memory to known values). However, the Hebrew University team notes that an attacker only need steal the state bits once in order to persistently violate the security of a CryptGenRandom instance. They can also use the information they glean to determine past random numbers that were generated, potentially compromising information, such as credit card numbers, already sent.

The paper's attacks are based on the fact that CryptGenRandom uses the stream cipher RC4, which can be run backwards once its state is known. They also take advantage of the fact that CryptGenRandom runs in user mode, allowing anyone who gains access to the operating system at user level, for example by exploiting a buffer overflow, to get CryptGenRandom's state information for that process. Finally, CryptGenRandom refreshes its seed from entropy infrequently. This problem is aggravated by the fact that each Win32 process has its own instance of CryptGenRandom state; while this means that a compromise of one process does not transitively compromise every other process, it may also increase the longevity of any successful break.

Because the details of the CryptGenRandom algorithm were not public at the time, Dorrendorf's team used reverse engineering tools to discern how the algorithm works. Their paper is the first published record of how the Windows cryptographic random number generator operates[citation needed].

Common Criteria

Windows 2000, XP and 2003 have all successfully undergone EAL4+ evaluations, including the CryptGenRandom() and FIPSGenRandom() implementations. The Security Target documentation is available at the Common Criteria Portal, and indicates compliance with the EAL4 requirements. Few conclusions can be drawn about the security of the algorithm as a result; EAL4 measures products against best practices and stated security objectives, but rarely involves in-depth cryptanalysis.

FIPS validation

Microsoft has obtained validation of its RNG implementations in the following environments:

  • Windows Vista and Server 2008 RNG Implementation (certificate 435)[8]
  • Windows Vista RNG implementations (certificate 321)[8]
  • Windows 2003 Enhanced Cryptographic Provider (rsaenh.dll) (certificate 316)[8]
  • Windows 2003 Enhanced DSS and Diffie-Hellman Cryptographic Provider (dssenh.dll) (certificate 314)[8]
  • Windows 2003 Kernel Mode Cryptographic Module (fips.sys) (certificate 313)[8]
  • Windows CE and Windows Mobile Enhanced Cryptographic Provider (rsaenh.dll) (certificate 292)[8]
  • Windows CE and Windows Mobile Enhanced Cryptographic Provider (rsaenh.dll) (certificate 286)[8]
  • Windows CE Enhanced Cryptographic Provider (rsaenh.dll) (certificate 66)[8]

These tests are "designed to test conformance to the various approved RNG specifications rather than provide a measure of a product’s security. [...] Thus, validation should not be interpreted as an evaluation or endorsement of overall product security." Few conclusions can be drawn about the security of the algorithm as a result; FIPS evaluations do not necessarily inspect source code or evaluate the way RNG seeds are generated.[9]

The RNG validation list carries the following notice: "As of January 1, 2016, in accordance with the SP800-131A Revision 1 Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths, the use of RNGs specified in FIPS 186-2, [X9.31], and the 1998 version of [X9.62] is no longer approved. This list is provided for historical purposes only."[10]

Alternatives

API level

Windows developers have several alternative means of accessing the CryptGenRandom functionality; these alternatives invoke the same algorithm and share the same security characteristics, but may have other advantages.

Using RtlGenRandom

If backwards compatibility up to Windows XP is required for your program, the Windows API function RtlGenRandom (which resides in advapi32.dll[3]) can be called to generate secure random data, as shown below. If this is not an issue, the program should use the newer BCryptGenRandom call instead.

Historically, we always told developers not to use functions such as rand to generate keys, nonces and passwords, rather they should use functions like CryptGenRandom, which creates cryptographically secure random numbers. The problem with CryptGenRandom is you need to pull in CryptoAPI (CryptAcquireContext and such) which is fine if you're using other crypto functions.

On a default Windows XP and later install, CryptGenRandom calls into a function named ADVAPI32!RtlGenRandom, which does not require you load all the CryptAPI stuff. In fact, the new Whidbey CRT function, rand_s calls RtlGenRandom.[11]

Using RNGCryptoServiceProvider

Programmers using .NET should use the RNGCryptoServiceProvider Class.[12]

Using Cryptography API: Next Generation (CNG)

The CNG [13] is a long term replacement for the deprecated Crypto API. It provides an equivalent function BCryptGenRandom[14] as well as dedicated functions for key generation.

Programming languages

  • the Microsoft C library function rand_s uses RtlGenRandom to generate cryptographically secure random numbers.[11]
  • the Python function urandom in the os module, which uses /dev/urandom on Unix-like systems, calls CryptGenRandom on Windows systems.[15]
  • the SunMSCAPI JCA provider available with OpenJDK and Oracle distributions of the JRE on Windows provides a SecureRandom implementation with the algorithm name Windows-PRNG. This class forwards all queries for random or seed bytes as well as setting additional seed bytes to CryptGenRandom.[16]

See also

References

  1. ^ CryptGenRandom Function (Windows) "Important: This API is deprecated. New and existing software should start using Cryptography Next Generation APIs. Microsoft may remove this API in future releases." (This notice applies to all of CryptoAPI.)
  2. ^ "Microsoft confirms that XP contains random number generator bug". Archived from the original on 2008-06-22.
  3. ^ a b "RtlGenRandom function (ntsecapi.h)". Microsoft Learn. Microsoft. 22 February 2024. Retrieved 7 November 2024.
  4. ^ Howard, Michael; Leblanc, David (2003). Writing Secure Code, Second Edition. Pearson Education. ISBN 0-7356-1722-8.
  5. ^ a b c d e f g h Ferguson, Niels (October 2019). "The Windows 10 random number generation infrastructure" (PDF). download.microsoft.com.
  6. ^ a b "CNG Algorithm Identifiers (Bcrypt.h) - Win32 apps". learn.microsoft.com. 13 April 2023. Note: Beginning with Windows Vista with SP1 and Windows Server 2008, the random number generator is based on the AES counter mode specified in the NIST SP 800-90 standard. [...] Windows 10: Beginning with Windows 10, the dual elliptic curve random number generator algorithm has been removed. Existing uses of this algorithm will continue to work; however, the random number generator is based on the AES counter mode specified in the NIST SP 800-90 standard.
  7. ^ Dorrendorf, Leo; Zvi Gutterman; Benny Pinkas. "Cryptanalysis of the Random Number Generator of the Windows Operating System" (PDF). Archived from the original (PDF) on 2012-05-18. Retrieved 2007-11-12.
  8. ^ a b c d e f g h "RNG Validation List". NIST Computer Security Division. Retrieved 20 March 2024.
  9. ^ "The Random Number Generator Validation System (RNGVS)" (PDF). National Institute of Standards and Technology Computer Security Division. 31 January 2005. Archived from the original (PDF) on 24 February 2013. Retrieved 18 June 2013.
  10. ^ "Cryptographic Algorithm Validation Program: rng Validation List".
  11. ^ a b "rand_s". Microsoft Learn. Microsoft. 2 December 2022. Retrieved 7 November 2024.
  12. ^ "Archived copy". Archived from the original on 2006-09-08. Retrieved 2007-08-27.{{cite web}}: CS1 maint: archived copy as title (link)
  13. ^ Crypto API Next Generation (Windows)
  14. ^ BCryptGenRandom (Windows)
  15. ^ https://docs.python.org/2/library/os.html#os.urandom Python Library Reference, OS module
  16. ^ http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunMSCAPI Oracle Java SE 8 technical documentation, Sun Providers

Read other articles:

BlackgazeDeafheaven di Kopenhagen pada tahun 2017. Dari kiri ke kanan: Shiv Mehra, Chris Johnson, George Clarke, dan Kerry McCoy, dengan Daniel Tracy di latar belakang.Nama lain Alternative black metal Black metal alternatif Sumber aliranBlack metalshoegazeatmospheric black metal[1]post-metalpost-rockpost-hardcore[2]Sumber kebudayaanAwal hingga pertengahan 2000-an, Prancis Deafheaven membawa blackgaze menjadi terkenal dengan album 2013 Sunbather. Blackgaze adalah genre campura...

 

 

Thai Nama lain Siam klasikSiam tradisional Asal  Thailand Julukan umum Kucing kepala apel Standar ras TICA standar FIFe standar WCF standar FFE standar Kucing domestik (Felis catus) Kucing thai (Thai: วิเชียรมาศcode: th is deprecated , [wí.tɕʰīan.mâːt] simakⓘ, RTGS: wichianmat, artinya 'bulan berlian'; disebut juga siam klasik atau siam tradisional) adalah salah satu ras kucing domestik yang berasal dari Thailand. Kucing ini merupakan kucing berbadan sed...

 

 

ساردار فالاباي باتل (بالإنجليزية: Vallabhbhai Patel)‏    مناصب [1]   تولى المنصب24 يناير 1947  نائب رئيس وزراء الهند   في المنصب15 أغسطس 1947  – 15 ديسمبر 1950    مورارجي ديساي  معلومات شخصية الميلاد 31 أكتوبر 1875   نادياد  الوفاة 15 ديسمبر 1950 (75 سنة) [2]  مومباي...

Questa voce o sezione sull'argomento idrologia non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Bacino del MediterraneoMappa geografica del bacino del Mediterraneo Stati Albania Algeria Bosnia ed Erzegovina Cipro Croazia Egitto Francia Gibilterra Grecia Israele Italia Libano Libia Malta...

 

 

City in Shabwah Governorate, YemenAtaq City عتقCityAtaqPart of old Ataq city with some modern buildings.Ataq CityLocation in YemenCoordinates: 14°32′11″N 46°49′59″E / 14.53639°N 46.83306°E / 14.53639; 46.83306Country YemenGovernorateShabwah GovernorateArea • Total1,300 km2 (500 sq mi)Elevation11291,146 m (1,146 ft)Population (2004)5012 • Total37,315 • Density28.70/km2 (74.3/sq mi...

 

 

AnguillaAnguilla (Inggris) Bendera Lambang Semboyan: Strength and Endurance(Inggris: Kekuatan dan Ketahanan)Lagu kebangsaan: God Save the KingLagu nasional: God Bless Anguilla 1 Ibu kota(dan kota terbesar)The Valley18°13′15″N 63°03′06″W / 18.22083°N 63.05167°W / 18.22083; -63.05167Bahasa resmiInggrisPemerintahanDependensi parlementer• Raja Charles III• Gubernur Dileeni Daniel-Selvaratnam• Deputi Gubernur Perin A. Bradley�...

Mr.Soedarisman Poerwokoesoemo Wali Kota Yogyakarta Ke-2Masa jabatan22 Juli 1947 – 22 September 1966PresidenSoekarnoWakil PresidenBung HattaPendahuluM. EnochPenggantiSoedjono A. Y. Informasi pribadiLahir(1913-10-22)22 Oktober 1913Yogyakarta, Hindia BelandaMeninggal29 Februari 1988(1988-02-29) (umur 74)Yogyakarta, IndonesiaKebangsaanIndonesiaPartai politikPNIAlma materRechtshoogeschool te BataviaSunting kotak info • L • B Kangjeng Pangeran Haryo Soedarisman Poe...

 

 

US attack on militant groups in Syria2008 Abu Kamal raidPart of the Iraq WarThe Al-Qa'im/Abu Kamal area on the Iraqi-Syrian border.TypeSpecial operationsLocationAbu Kamal, SyriaPlanned by United StatesTargetforeign fighter logistics networkDate26 October 2008; 15 years ago (2008-10-26)Executed byDelta ForceCIA's Special Activities DivisionOutcomeOperational successCasualties8 killed7 wounded[1]vteIraq War (Outline)Timeline 2003 2004 2005 2006 2007 2008...

 

 

周處除三害The Pig, The Snake and The Pigeon正式版海報基本资料导演黃精甫监制李烈黃江豐動作指導洪昰顥编剧黃精甫主演阮經天袁富華陳以文王淨李李仁謝瓊煖配乐盧律銘林孝親林思妤保卜摄影王金城剪辑黃精甫林雍益制片商一種態度電影股份有限公司片长134分鐘产地 臺灣语言國語粵語台語上映及发行上映日期 2023年10月6日 (2023-10-06)(台灣) 2023年11月2日 (2023-11-02)(香�...

Marjorie LordLord di The Middleton Family at the New York World's FairLahirMarjorie Wollenberg(1918-07-26)26 Juli 1918[1][2]San Francisco, California, A.S.Meninggal28 November 2015(2015-11-28) (umur 97)Beverly Hills, California, A.S.PekerjaanAktrisTahun aktif1935–2008Suami/istriJohn Archer ​ ​(m. 1941; c. 1955)​ Randolph Hale ​ ​(m. 1958; meninggal 1974)​ Harry Volk ...

 

 

Batang otak Apnea (Belanda: apneucode: nl is deprecated ) atau henti napas merupakan suatu kondisi berhentinya proses pernapasan dalam waktu singkat (beberapa detik hingga satu atau dua menit) tetapi dapat juga terjadi dalam jangka panjang.[1] Penyebab Bernapas merupakan suatu aktivitas biologis yang dikendalikan secara otonom oleh pusat pernapasan yang terletak pada batang otak (kumpulan dari saraf yang menghubungkan otak dengan tulang belakang).[1] Pusat pernapasan mengirimk...

 

 

Period of history since 1945 This article is about the historical era. For the comic-book miniseries, see Atomic Age (comics). For the design style, see Atomic Age (design). An early nuclear power plant that used atomic energy to generate electricity History of technology By technological eras Premodern Prehistoric Stone Age (lithic) Neolithic Revolution Copper Age Bronze Age Iron Age Ancient Modern Proto-industrialization First Industrial Revolution Standardization Second Industrial Revoluti...

بنية مجموعة ميثوكسي. مجموعة الميثوكسي في الكيمياء العضوية هي مجموعة وظيفية تتألف بنيوياً من مجموعة ميثيل مرتبطة برابطة تساهمية أحادية مع ذرة أكسجين، بحيث يكون لها الصيغة العامة -CH3-O. تعد مجموعة الميثوكسي وفق معادلة هاميت من المجموعات المانحة للإلكترونات. من الأمثلة على ال...

 

 

1996 United States Senate election in Alaska ← 1990 November 5, 1996 2002 →   Nominee Ted Stevens Jed Whittaker Theresa Obermeyer Party Republican Green Democratic Popular vote 177,893 29,037 23,977 Percentage 76.71% 12.52% 10.34% Results by state house districtStevens:      50–60%      60–70%      70–80%      80–90% U.S. senator before election Ted Stev...

 

 

2019 South Korean television series Romance Is a Bonus BookPromotional posterAlso known asRomance Is a SupplementHow to Publish LoveHangul로맨스는 별책부록Revised RomanizationRomaenseuneun Byeolchaekburok GenreRomantic comedyCreated byStudio DragonWritten byJung Hyun-jungDirected byLee Jeong-hyoStarringLee Na-youngLee Jong-sukCountry of originSouth KoreaOriginal languageKoreanNo. of episodes16ProductionExecutive producerHwang Jee-wooCamera setupSingle cameraProduction companyStory &am...

Alyssa CampanellaAlyssa Campanella di Hollywood pada 28 September 2011.LahirAlyssa Campanella21 Maret 1990 (umur 34)Manalapan, New Jersey, A.S.Tinggi174 m (570 ft 10+1⁄2 in)GelarMiss New Jersey Teen USA 2007Miss California USA 2011Miss USA 2011Pemenang kontes kecantikanWarna rambutMerahWarna mataHijauKompetisiutamaMiss Teen USA 2007(Juara II)Miss USA 2011(Juara)Miss Universe 2011(Top 16) Alyssa Campanella (lahir 21 Maret 1990) adalah pemenang kontes kecantikan dari ...

 

 

Der Beispielsatz: „Minh noi tieng Viet“ in Chu Nom: 𨉟呐㗂越 Mình nói tiếng Việt – zu deutsch: „Wir sprechen Vietnamesisch“ oder „Ich spreche Vietnamesisch.“ Beide Formen sind korrekt. Dieser Artikel oder Abschnitt bedarf einer grundsätzlichen Überarbeitung. Näheres sollte auf der Diskussionsseite angegeben sein. Bitte hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung. Chữ Nôm (vietnamesisch 𡦂喃, auch 𡨸喃 / 字喃 chữ nôm) ist d...

 

 

MPZL1 معرفات أسماء بديلة MPZL1, b, PZR, PZR1b, PZRa, PZRb, myelin protein zero like 1 معرفات خارجية الوراثة المندلية البشرية عبر الإنترنت 604376 MGI: MGI:1915731 HomoloGene: 2939 GeneCards: 9019 علم الوجود الجيني وظائف جزيئية • ‏GO:0001948، ‏GO:0016582 ربط بروتيني• structural molecule activity مكونات خلوية • مكون تكاملي للغشاء• cell surface• integral comp...

145-й истребительный авиационный полк Вооружённые силы ВС СССР Вид вооружённых сил ВВС Род войск (сил) истребительная авиация Формирование 29.12.1939 Расформирование (преобразование) 04.04.1942 Районы боевых действий 1941-1942: Оборона Заполярья Преемственность Преемник 19-й гвардейс�...

 

 

Village in Nangarhar Province, Afghanistan Gandamak is a village of Afghanistan located between Kabul and Jalalabad, 35 miles (56 km) from Jalalabad on the old road to Kabul. History During the retreat from Kabul of General Elphinstone's army in 1842, a hill near Gandamak was the scene of the Battle of Gandamak, during which the last survivors of the force—twenty officers and forty-five British soldiers of the 44th East Essex Regiment—were killed,[1] leaving only one survivo...