CryptGenRandom — функція криптографічно стійкого генератора псевдовипадкових чисел. Вона включена в Microsoft's . Microsoft рекомендує використовувати її у всіх Win32-додатках, де потрібна генерація випадкових чисел. У 2007 році в роботі з Єврейського університету були вказані проблеми в реалізації CryptGenRandom на операційній системі Windows 2000 (припускаючи наявність доступу до машини у криптоаналітика). Пізніше в Microsoft встановили, що ці проблеми також присутні і в Windows XP, проблема була повністю вирішена у Windows Vista. Ці помилки були виправлені з виходом Windows XP Service Pack 3 в середині 2008 року.
Передумови
Win32 API повністю підтримує методи захисту від криптографічних атак, включаючи TLS і цифровий підпис. Ця підтримка заснована на рідних для Windows бібліотеках для вирішення таких криптографічних завдань, як генерація ключів для алгоритму RSA або AES. Ці бібліотеки використовують криптографічно стійкий генератор псевдовипадкових чисел. CryptGenRandom є стандартним генератором подібного роду для середовища розробки під Win32.
Алгоритм
Microsoft використовують одну реалізацію CryptGenRandom, засновану на деякій вбудованій функції «RtlGenRandom». В 2007 році був оприлюднений лише загальний начерк роботи цього алгоритму:
[RtlGenRandom] працює, як зазначено в FIPS 186-2, додаток 3.1, використовуючи SHA-1 як G-функцію. Джерелами для ентропії є:
- ID поточного процесу.
- ID поточної гілки виконання.
- Число тактів з моменту останнього завантаження.
- Поточний час.
- Різні високоточні лічильники.
- Хеш-функції MD4 від персональних даних користувача, таких як логін, ім'я комп'ютера, та ін.
- Високоточні внутрішньопроцесорні лічильники, такі, як RDTSC, RDMSR, RDPMC.
[опущено: довгий список основних інформаційних елементів і лічильників] Джерело: Writing Secure Code, Second Edition. isbn=0-7356-1722-8.
Безпека
Криптографічна стійкість генераторів випадкових чисел дуже важлива, оскільки такі генератори безпосередньо беруть участь у створенні динамічних ключів. Ключі, потреба в яких виникає «на льоту» (наприклад, сеансові ключі AES TLS для захисту HTTPS сесій на банківських сайтах), також обчислюються з допомогою цих генераторів. Таким чином передбачуваність поведінки генераторів безпосередньо дозволяє предбачити значення створюваних ключів. Оскільки CryptGenRandom є, фактично, стандартним генератором в середовищі Win32, то його захищеність критично важлива для користувачів Windows.
Особливості алгоритму CryptGenRandom офіційно не опубліковані. Як і будь-який неопублікований алгоритм генерації випадкових чисел, CryptGenRandom може бути теоретично вразливим через використання застарілих алгоритмів або, наприклад, використання декількох монотонних лічильників для підрахунку ентропії, які можуть бути використані криптоаналітиком при наявності доступу до системи.
Криптоаналіз (Єврейський університет)
У 2007 році Лео Дорредорф спільно з групою вчених з Єврейського університету і Хайфського університету опублікував результати криптоаналізу CryptGenRandom, виявивши значні уразливості в реалізації алгоритму під Windows 2000.
Для того, щоб скористатися цими уразливостями, зловмисникові необхідно здійснити атаку на запущену програму, яка використовує цей генератор випадкових чисел. Всі недоліки CryptGenRandom залежать від перетікання бітів станів генератора. Якщо зловмисник в змозі виконати цю атаку, то з великою часткою ймовірності він може зламати будь-який генератор випадкових чисел (наприклад, він може просто повторювати вихідні значення генератора або виправляти їх безпосередньо в пам'яті на вже відомі величини). Тим не менше вчені з Єврейського університету встановили, що криптоаналітику необхідно всього лише один раз дізнатися біти станів для того, щоб завдати серйозного удару по безпеці CryptGenRandom. Після цього зловмисник може використовувати інформацію про біти станів для отримання чисел, згенерованих алгоритмом під час попередніх запусків, і тим самим отримати доступ до потенційно важливої інформації, наприклад, до вже відправлених номерів кредитних карт. Це можливо у зв'язку з тим, що CryptGenRandom використовують потоковий шифр RC4, який є оборотним в разі хоча б одного відомого стану.
Було помічено, що CryptGenRandom працює в режимі користувача, що дозволяє будь-кому, хто має доступ до операційної системи на рівні користувача, отримати інформацію про стан CryptGenRandom для цього процесу, наприклад, використовуючи переповнення буфера. Нарешті, CryptGenRandom досить рідко оновлює джерела для обчислення ентропії. Проблема посилюється тим фактом, що кожен Win32-процес має свій власний примірник станів CryptGenRandom. Така незалежність процесів тільки збільшує час несанкціонованого використання системи після успішного злому. Аналіз групи вчених під керівництвом Дорредорфа по суті є першою опублікованою роботою про функціонування криптостойкого генератора випадкових чисел під Windows.
Windows 2000, XP і Windows 2003, включаючи реалізації CryptGenRandom() і FIPSGenRandom(), успішно пройшли тести EAL4+. Перевірка безпеки алгоритмів виявила повну відповідність необхідним нормам EAL4, документація доступна на порталі . Звідси можна зробити висновок про те, що система повірки EAL4 працює добре в більшості випадків, але не включає в себе більш глибокий криптоаналіз.
FIPS-перевірки
Наступні реалізації генераторів випадкових чисел Microsoft були успішно протестовані: Windows Vista (сертифікат 321), Windows 2003 Enhanced Cryptographic Provider (rsaenh.dll) (сертифікат 316), Windows 2003 Enhanced DSS and Diffie-Hellman Cryptographic Provider (dssenh.dll) (сертифікат 314), Windows 2003 Kernel Mode Cryptographic Module (fips.sys) (сертифікат 313), Windows CE and Windows Mobile Enhanced Cryptographic Provider (rsaenh.dll) (сертифікат 292), Windows CE and Windows Mobile Enhanced Cryptographic Provider (rsaenh.dll) (сертифікат 286), Windows CE Enhanced Cryptographic Provider (rsaenh.dll) (сертифікат 66)
Ці тести призначені для перевірки відповідності різним затвердженим специфікаціям генераторів випадкових чисел, а не для оцінки рівня безпеки продукції. Таким чином, перевірка не повинна бути витлумачена як оцінка чи схвалення загальної безпеки продукції. Звідси можна зробити висновки про те, що такі перевірки можуть оминати деякі особливості генераторів випадкових чисел (наприклад, використовувані групою вчених з Єврейського університету).
Вихідний код
Існує цілий ряд утиліт для отримання доступу до вихідного коду програм компанії Microsoft (зазвичай захищені EULA), але неможливо поділитися цим самим кодом із широким загалом людей.
Розбирання (Disassembly)
Бібліотеки для платформ Windows можна розібрати за допомогою таких інструментів, як і objdump. Крім того, на відміну від більшості постачальників програм з закритим вихідним кодом, Microsoft надає символи відлагодження для своїх бінарних файлів. В результаті ці файли часто оцінюють сторонні практики. Згадана вище атака Дорредорфа базувалась саме на таких розборках.
Альтернативні засоби
API-рівень
Розробники Windows мають декілька альтернативних засобів доступу до функцій CryptGenRandom. Ці варіанти викликають той же алгоритм, мають той же рівень безпеки, але, можливо, мають і інші переваги.
Використання RtlGenRandom
«Історично, ми завжди говорили розробникам не використовувати такі функції, як rand(), для генерації ключів і паролів. Набагато краще використовувати функції CryptGenRandom, які є криптографічно стійкими генераторами випадкових чисел. Проблема з використанням саме CryptGenRandom пов'язана з необхідністю підключення CryptoAPI (CryptAcquireContext і подібні), що, втім, прийнятно, якщо інші функції CryptoAPI вами вже використовуються. За умовчанням в Windows XP CryptGenRandom викликає функцію ADVAPI32!RtlGenRandom, яка не вимагає підключення всього набору CryptAPI. Насправді нова функція Whidbey CRT rand_s() викликає RtlGenRandom.
Використання RNGCryptoServiceProvider
Програмісти, які користуються .Net, повинні використовувати клас RNGCryptoServiceProvider.
Мови програмування
- рекомендується використовувати функцію rand_s з бібліотеки Microsoft З++ (заснована на RtlGenRandom).
- функція os.urandom() [ 17 лютого 2018 у Wayback Machine.] мови Python в операційних системах Windows викликає CryptGenRandom.
Дивись також
Примітки
- . Архів оригіналу за 22 червня 2008. Процитовано 25 квітня 2018.
- . Архів оригіналу за 14 жовтня 2008. Процитовано 25 квітня 2018.
- Dorrendorf, Leo. Cryptanalysis of the Random Number Generator of the Windows Operating System (PDF). Архів оригіналу (pdf) за 6 вересня 2012.
- (PDF). Архів оригіналу (PDF) за 26 січня 2007. Процитовано 25 квітня 2018.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 28 грудня 2005. Процитовано 25 квітня 2018.
- . Архів оригіналу за 8 вересня 2006. Процитовано 25 квітня 2018.
- http://msdn.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx [ 9 квітня 2016 у Wayback Machine.] Visual C++ Developer Center, rand_s
- http://docs.python.org/lib/os-miscfunc.html [ 14 вересня 2008 у Wayback Machine.] Python Library Reference, OS module
Посилання
- Microsoft documentation for CryptGenRandom [ 23 квітня 2008 у Wayback Machine.]
- Overview of Windows 2000 Common Criterion evaluation [ 17 травня 2008 у Wayback Machine.]
- Microsoft FIPS 140 evaluations
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
CryptGenRandom funkciya kriptografichno stijkogo generatora psevdovipadkovih chisel Vona vklyuchena v Microsoft s Microsoft rekomenduye vikoristovuvati yiyi u vsih Win32 dodatkah de potribna generaciya vipadkovih chisel U 2007 roci v roboti z Yevrejskogo universitetu buli vkazani problemi v realizaciyi CryptGenRandom na operacijnij sistemi Windows 2000 pripuskayuchi nayavnist dostupu do mashini u kriptoanalitika Piznishe v Microsoft vstanovili sho ci problemi takozh prisutni i v Windows XP problema bula povnistyu virishena u Windows Vista Ci pomilki buli vipravleni z vihodom Windows XP Service Pack 3 v seredini 2008 roku PeredumoviWin32 API povnistyu pidtrimuye metodi zahistu vid kriptografichnih atak vklyuchayuchi TLS i cifrovij pidpis Cya pidtrimka zasnovana na ridnih dlya Windows bibliotekah dlya virishennya takih kriptografichnih zavdan yak generaciya klyuchiv dlya algoritmu RSA abo AES Ci biblioteki vikoristovuyut kriptografichno stijkij generator psevdovipadkovih chisel CryptGenRandom ye standartnim generatorom podibnogo rodu dlya seredovisha rozrobki pid Win32 AlgoritmMicrosoft vikoristovuyut odnu realizaciyu CryptGenRandom zasnovanu na deyakij vbudovanij funkciyi RtlGenRandom V 2007 roci buv oprilyudnenij lishe zagalnij nacherk roboti cogo algoritmu RtlGenRandom pracyuye yak zaznacheno v FIPS 186 2 dodatok 3 1 vikoristovuyuchi SHA 1 yak G funkciyu Dzherelami dlya entropiyi ye ID potochnogo procesu ID potochnoyi gilki vikonannya Chislo taktiv z momentu ostannogo zavantazhennya Potochnij chas Rizni visokotochni lichilniki Hesh funkciyi MD4 vid personalnih danih koristuvacha takih yak login im ya komp yutera ta in Visokotochni vnutrishnoprocesorni lichilniki taki yak RDTSC RDMSR RDPMC opusheno dovgij spisok osnovnih informacijnih elementiv i lichilnikiv Dzherelo Writing Secure Code Second Edition isbn 0 7356 1722 8 BezpekaKriptografichna stijkist generatoriv vipadkovih chisel duzhe vazhliva oskilki taki generatori bezposeredno berut uchast u stvorenni dinamichnih klyuchiv Klyuchi potreba v yakih vinikaye na lotu napriklad seansovi klyuchi AES TLS dlya zahistu HTTPS sesij na bankivskih sajtah takozh obchislyuyutsya z dopomogoyu cih generatoriv Takim chinom peredbachuvanist povedinki generatoriv bezposeredno dozvolyaye predbachiti znachennya stvoryuvanih klyuchiv Oskilki CryptGenRandom ye faktichno standartnim generatorom v seredovishi Win32 to jogo zahishenist kritichno vazhliva dlya koristuvachiv Windows Osoblivosti algoritmu CryptGenRandom oficijno ne opublikovani Yak i bud yakij neopublikovanij algoritm generaciyi vipadkovih chisel CryptGenRandom mozhe buti teoretichno vrazlivim cherez vikoristannya zastarilih algoritmiv abo napriklad vikoristannya dekilkoh monotonnih lichilnikiv dlya pidrahunku entropiyi yaki mozhut buti vikoristani kriptoanalitikom pri nayavnosti dostupu do sistemi Kriptoanaliz Yevrejskij universitet U 2007 roci Leo Dorredorf spilno z grupoyu vchenih z Yevrejskogo universitetu i Hajfskogo universitetu opublikuvav rezultati kriptoanalizu CryptGenRandom viyavivshi znachni urazlivosti v realizaciyi algoritmu pid Windows 2000 Dlya togo shob skoristatisya cimi urazlivostyami zlovmisnikovi neobhidno zdijsniti ataku na zapushenu programu yaka vikoristovuye cej generator vipadkovih chisel Vsi nedoliki CryptGenRandom zalezhat vid peretikannya bitiv staniv generatora Yaksho zlovmisnik v zmozi vikonati cyu ataku to z velikoyu chastkoyu jmovirnosti vin mozhe zlamati bud yakij generator vipadkovih chisel napriklad vin mozhe prosto povtoryuvati vihidni znachennya generatora abo vipravlyati yih bezposeredno v pam yati na vzhe vidomi velichini Tim ne menshe vcheni z Yevrejskogo universitetu vstanovili sho kriptoanalitiku neobhidno vsogo lishe odin raz diznatisya biti staniv dlya togo shob zavdati serjoznogo udaru po bezpeci CryptGenRandom Pislya cogo zlovmisnik mozhe vikoristovuvati informaciyu pro biti staniv dlya otrimannya chisel zgenerovanih algoritmom pid chas poperednih zapuskiv i tim samim otrimati dostup do potencijno vazhlivoyi informaciyi napriklad do vzhe vidpravlenih nomeriv kreditnih kart Ce mozhlivo u zv yazku z tim sho CryptGenRandom vikoristovuyut potokovij shifr RC4 yakij ye oborotnim v razi hocha b odnogo vidomogo stanu Bulo pomicheno sho CryptGenRandom pracyuye v rezhimi koristuvacha sho dozvolyaye bud komu hto maye dostup do operacijnoyi sistemi na rivni koristuvacha otrimati informaciyu pro stan CryptGenRandom dlya cogo procesu napriklad vikoristovuyuchi perepovnennya bufera Nareshti CryptGenRandom dosit ridko onovlyuye dzherela dlya obchislennya entropiyi Problema posilyuyetsya tim faktom sho kozhen Win32 proces maye svij vlasnij primirnik staniv CryptGenRandom Taka nezalezhnist procesiv tilki zbilshuye chas nesankcionovanogo vikoristannya sistemi pislya uspishnogo zlomu Analiz grupi vchenih pid kerivnictvom Dorredorfa po suti ye pershoyu opublikovanoyu robotoyu pro funkcionuvannya kriptostojkogo generatora vipadkovih chisel pid Windows Common Criteria Windows 2000 XP i Windows 2003 vklyuchayuchi realizaciyi CryptGenRandom i FIPSGenRandom uspishno projshli testi EAL4 Perevirka bezpeki algoritmiv viyavila povnu vidpovidnist neobhidnim normam EAL4 dokumentaciya dostupna na portali Zvidsi mozhna zrobiti visnovok pro te sho sistema povirki EAL4 pracyuye dobre v bilshosti vipadkiv ale ne vklyuchaye v sebe bilsh glibokij kriptoanaliz FIPS perevirki Nastupni realizaciyi generatoriv vipadkovih chisel Microsoft buli uspishno protestovani Windows Vista sertifikat 321 Windows 2003 Enhanced Cryptographic Provider rsaenh dll sertifikat 316 Windows 2003 Enhanced DSS and Diffie Hellman Cryptographic Provider dssenh dll sertifikat 314 Windows 2003 Kernel Mode Cryptographic Module fips sys sertifikat 313 Windows CE and Windows Mobile Enhanced Cryptographic Provider rsaenh dll sertifikat 292 Windows CE and Windows Mobile Enhanced Cryptographic Provider rsaenh dll sertifikat 286 Windows CE Enhanced Cryptographic Provider rsaenh dll sertifikat 66 Ci testi priznacheni dlya perevirki vidpovidnosti riznim zatverdzhenim specifikaciyam generatoriv vipadkovih chisel a ne dlya ocinki rivnya bezpeki produkciyi Takim chinom perevirka ne povinna buti vitlumachena yak ocinka chi shvalennya zagalnoyi bezpeki produkciyi Zvidsi mozhna zrobiti visnovki pro te sho taki perevirki mozhut ominati deyaki osoblivosti generatoriv vipadkovih chisel napriklad vikoristovuvani grupoyu vchenih z Yevrejskogo universitetu Vihidnij kod Isnuye cilij ryad utilit dlya otrimannya dostupu do vihidnogo kodu program kompaniyi Microsoft zazvichaj zahisheni EULA ale nemozhlivo podilitisya cim samim kodom iz shirokim zagalom lyudej Rozbirannya Disassembly Biblioteki dlya platform Windows mozhna rozibrati za dopomogoyu takih instrumentiv yak i objdump Krim togo na vidminu vid bilshosti postachalnikiv program z zakritim vihidnim kodom Microsoft nadaye simvoli vidlagodzhennya dlya svoyih binarnih fajliv V rezultati ci fajli chasto ocinyuyut storonni praktiki Zgadana vishe ataka Dorredorfa bazuvalas same na takih rozborkah Alternativni zasobiAPI riven Rozrobniki Windows mayut dekilka alternativnih zasobiv dostupu do funkcij CryptGenRandom Ci varianti viklikayut toj zhe algoritm mayut toj zhe riven bezpeki ale mozhlivo mayut i inshi perevagi Vikoristannya RtlGenRandom Istorichno mi zavzhdi govorili rozrobnikam ne vikoristovuvati taki funkciyi yak rand dlya generaciyi klyuchiv i paroliv Nabagato krashe vikoristovuvati funkciyi CryptGenRandom yaki ye kriptografichno stijkimi generatorami vipadkovih chisel Problema z vikoristannyam same CryptGenRandom pov yazana z neobhidnistyu pidklyuchennya CryptoAPI CryptAcquireContext i podibni sho vtim prijnyatno yaksho inshi funkciyi CryptoAPI vami vzhe vikoristovuyutsya Za umovchannyam v Windows XP CryptGenRandom viklikaye funkciyu ADVAPI32 RtlGenRandom yaka ne vimagaye pidklyuchennya vsogo naboru CryptAPI Naspravdi nova funkciya Whidbey CRT rand s viklikaye RtlGenRandom Vikoristannya RNGCryptoServiceProvider Programisti yaki koristuyutsya Net povinni vikoristovuvati klas RNGCryptoServiceProvider Movi programuvannya rekomenduyetsya vikoristovuvati funkciyu rand s z biblioteki Microsoft Z zasnovana na RtlGenRandom funkciya os urandom 17 lyutogo 2018 u Wayback Machine movi Python v operacijnih sistemah Windows viklikaye CryptGenRandom Divis takozhKriptografichno stijkogo generator psevdovipadkovih chisel Ataka na GPVChPrimitki Arhiv originalu za 22 chervnya 2008 Procitovano 25 kvitnya 2018 Arhiv originalu za 14 zhovtnya 2008 Procitovano 25 kvitnya 2018 Dorrendorf Leo Cryptanalysis of the Random Number Generator of the Windows Operating System PDF Arhiv originalu pdf za 6 veresnya 2012 PDF Arhiv originalu PDF za 26 sichnya 2007 Procitovano 25 kvitnya 2018 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 28 grudnya 2005 Procitovano 25 kvitnya 2018 Arhiv originalu za 8 veresnya 2006 Procitovano 25 kvitnya 2018 http msdn microsoft com en us library sxtz2fa8 VS 80 aspx 9 kvitnya 2016 u Wayback Machine Visual C Developer Center rand s http docs python org lib os miscfunc html 14 veresnya 2008 u Wayback Machine Python Library Reference OS modulePosilannyaMicrosoft documentation for CryptGenRandom 23 kvitnya 2008 u Wayback Machine Overview of Windows 2000 Common Criterion evaluation 17 travnya 2008 u Wayback Machine Microsoft FIPS 140 evaluations