CryptGenRandom - CryptGenRandom

CryptGenRandom ескірген болып табылады [1] криптографиялық қауіпсіз псевдодан кездейсоқ генератор енгізілген функция Microsoft CryptoAPI. Жылы Win32 Microsoft корпорациясы кез-келген санды генерациялау қажет болған жерде қолдануға кеңес береді. Еврей университетінің 2007 жылғы мақаласында қауіпсіздік проблемалары туралы айтылды Windows 2000 CryptGenRandom-ті енгізу (шабуылдаушы машинаны басқара алады деп болжайды). Microsoft кейінірек дәл осындай проблемалар бар екенін мойындады Windows XP, бірақ емес Vista. Microsoft Windows XP 3-жаңарту бумасымен қатені түзетуді 2008 жылдың ортасында шығарды.[2]

Фон

The Win32 API криптографиялық қауіпсіздікті кешенді қолдауды қамтиды, оның ішінде жергілікті TLS қолдау (арқылы SCHANNEL API) және кодқа қол қою. Бұл мүмкіндіктер жергілікті Windows кітапханаларында криптографиялық операцияларға арналған, мысалы RSA және AES кілт генерациясы. Бұл кітапханалар өз кезегінде a криптографиялық қауіпсіз псевдодан кездейсоқ генератор (CSPRNG). CryptGenRandom бұл Win32 бағдарламалау ортасы үшін стандартты CSPRNG.

Жұмыс әдісі

Microsoft ұсынған криптография провайдерлер CryptGenRandom-тің дәл қазіргі уақытта ішкі негізіне сәйкес жүзеге асырады функциясы деп аталады RtlGenRandom.[3] Тек жалпы сұлбасы алгоритм 2007 жылғы жағдай бойынша жарияланған болатын:

[RtlGenRandom] көрсетілгендей етіп жасайды FIPS 186-2 3.1 қосымша SHA-1 G функциясы ретінде. Және энтропиямен:

  • Ағымдағы процесс идентификаторы (GetCurrentProcessID).
  • Ағымдық ағынның идентификаторы (GetCurrentThreadID).
  • Жүктеу уақытынан бастап кене саны (GetTickCount).
  • Ағымдағы уақыт (GetLocalTime).
  • Әр түрлі жоғары дәлдіктегі есептегіштер (QueryPerformanceCounter).
  • Ан MD4 пайдаланушы аты, компьютер атауы және іздеу жолы кіретін пайдаланушының қоршаған ортасының хэші. [...]
  • RDTSC, RDMSR, RDPMC сияқты жоғары дәлдіктегі ішкі CPU есептегіштері

[алынып тасталды: төмен деңгейлі жүйелік ақпарат өрістерінің ұзын тізімдері және өнімділік санауыштары][4]

Қауіпсіздік

Криптожүйенің CSPRNG қауіпсіздігі маңызды, себебі ол динамикалық кілт материалының бастауы болып табылады. «Жылдам» қажет кілттер, мысалы AES TLS сеансының кілттерін қорғайды HTTPS банктік веб-сайттармен, сессиялар CSPRNG-ден бастау алады. Егер бұл жалған кездейсоқ сандарды болжауға болатын болса, сессия кілттерін де болжауға болады. CryptGenRandom Win32 ортасында іс жүзінде стандартты CSPRNG болғандықтан, оның қауіпсіздігі Windows қолданушылары үшін өте маңызды.

CryptGenRandom алгоритмінің ерекшеліктері ресми түрде жарияланған жоқ. Кез-келген жарияланбаған кездейсоқ санды генерациялау алгоритмінде сияқты, ол теориялық әлсіздіктерге, соның ішінде ескірген алгоритмдерді қолдануға және энтропия жүйеге жергілікті қол жетімділікпен шабуылдаушы бағалауы немесе басқаруы мүмкін бірнеше монотонды өсетін есептегіштерге жинау.

Криптоанализ

A криптоанализ 2007 жылдың қараша айында Лео Доррендорф және басқалар шығарған CryptGenRandom туралы Иерусалимдегі Еврей университеті және Хайфа университеті, әлсіз жақтарын тапты Windows 2000 алгоритмді іске асыру.[5]

Осалдықты пайдалану үшін шабуылдаушы алдымен кездейсоқ сандар генераторы жұмыс істейтін бағдарламаны бұзуы керек. Қағаздағы әлсіз жақтардың барлығы шабуылдаушының генератордың күй биттерін сифондауына байланысты. Бұл шабуылды орындай алатын шабуылдаушы кез-келген кездейсоқ сандардың генераторын жеңе алады (мысалы, олар генератордың шығуын иіскеп немесе белгілі мәндерге дейін жадында сақтай алады). Алайда, Еврей Университетінің командасы шабуылдаушыға CryptGenRandom данасының қауіпсіздігін үнемі бұзу үшін мемлекет биттерін бір рет ұрлау қажет екенін ескертеді. Олар жиналған ақпаратты бұрынғы пайда болған кездейсоқ сандарды анықтау үшін қолдана алады, мысалы, несие картасының нөмірлері сияқты ықтимал ақпарат жібереді.

Қағаз шабуылдары CryptGenRandom ағын шифрын қолданатындығына негізделген RC4, оның күйі белгілі болғаннан кейін артқа жүгіруге болады. Олар сондай-ақ CryptGenRandom-дің жұмыс істейтіндігін пайдаланады пайдаланушы режимі, операциялық жүйеге пайдаланушы деңгейінде қол жеткізуге мүмкіндік беретін кез келген адамға, мысалы, a буферден асып кету, CryptGenRandom күйі туралы ақпаратты осы процеске алу үшін. Соңында, CryptGenRandom өзінің тұқымын жаңартады энтропия сирек. Әрбір Win32 процесінде CryptGenRandom күйінің жеке данасы болуы бұл мәселені қиындатады; бұл дегеніміз, бір процестің ымырасы барлық басқа процестерге өтпелі түрде ымыраға келмейді, сонымен қатар кез-келген сәтті үзілістің ұзақ мерзімін арттыруы мүмкін.

CryptGenRandom алгоритмінің егжей-тегжейлері көпшілікке жария болмағандықтан, Доррендорф командасы қолданды кері инженерия алгоритмнің қалай жұмыс істейтінін анықтайтын құралдар. Олардың жұмысы Windows криптографиялық кездейсоқ сандар генераторының қалай жұмыс істейтіндігі туралы алғашқы жарияланған жазба болып табылады[дәйексөз қажет ].

Жалпы критерийлер

Windows 2000, XP және 2003 барлық EAL4 + бағалауларынан, соның ішінде CryptGenRandom () және FIPSGenRandom () бағдарламаларынан сәтті өтті. Қауіпсіздік мақсатындағы құжаттама мекен-жайы бойынша қол жетімді жалпы критерийлер порталы, және EAL4 талаптарына сәйкестігін көрсетеді. Нәтижесінде алгоритмнің қауіпсіздігі туралы бірнеше қорытынды жасауға болады; EAL4 өнімдерді озық тәжірибелер мен қауіпсіздіктің белгіленген мақсаттарына қарсы өлшейді, бірақ сирек криптоанализді қамтиды.

FIPS тексеру

Майкрософтта бар алынған валидация оның келесі ортадағы RNG-ді іске асыруы:

  • Windows Vista RNG бағдарламалары (сертификат 321)[6]
  • Windows 2003 жақсартылған криптографиялық провайдері (rsaenh.dll) (сертификат 316)[6]
  • Windows 2003 жақсартылған DSS және Diffie-Hellman криптографиялық провайдері (dssenh.dll) (сертификат 314)[6]
  • Windows 2003 ядролық режимінің криптографиялық модулі (fips.sys) (сертификат 313)[6]
  • Windows CE және Windows Mobile жақсартылған криптографиялық провайдері (rsaenh.dll) (сертификат 292)[6]
  • Windows CE және Windows Mobile жақсартылған криптографиялық провайдері (rsaenh.dll) (сертификат 286)[6]
  • Windows CE жетілдірілген криптографиялық провайдері (rsaenh.dll) (сертификат 66)[6]

Бұл сынақтар «өнімнің қауіпсіздігін өлшеу үшін емес, әр түрлі бекітілген RNG сипаттамаларына сәйкестікті тексеруге арналған. [...] Осылайша, валидация жалпы өнім қауіпсіздігін бағалау немесе түзету ретінде түсіндірілмеуі керек.» Нәтижесінде алгоритмнің қауіпсіздігі туралы бірнеше қорытынды жасауға болады; FIPS бағалауы міндетті түрде бастапқы кодты тексермейді немесе RNG тұқымдарының жасалу жолын бағалайды.[7]

Балама нұсқалар

API деңгейі

Windows әзірлеушілерінде CryptGenRandom функционалдығына қол жеткізудің бірнеше балама құралдары бар; бұл баламалар бірдей алгоритмді қолданады және бірдей қауіпсіздік сипаттамаларына ие, бірақ басқа артықшылықтары болуы мүмкін.

RtlGenRandom пайдалану

«Тарихи тұрғыдан біз әрдайым әзірлеушілерге кілттер, несстер мен құпия сөздерді жасау үшін rand сияқты функцияларды пайдаланбауды бұйырды, олар криптографиялық қауіпсіз кездейсоқ сандарды жасайтын CryptGenRandom сияқты функцияларды қолдануы керек. CryptGenRandom-тің проблемасы - CryptoAPI (CryptAcquireContext) және басқа), егер сіз басқа крипто-функцияларды қолдансаңыз жақсы болады.

Әдепкі Windows XP-де және одан кейінгі орнатуда CryptGenRandom ADVAPI32! RtlGenRandom деп аталатын функцияға шақырады, бұл сізге барлық CryptAPI материалдарын жүктеуді қажет етпейді. Шындығында, жаңа Уидби CRT функциясы, rand_s RtlGenRandom шақырады «.[8]

RNGCryptoServiceProvider пайдалану

Бағдарламашылар қолданады .NET пайдалану керек RNGCryptoServiceProvider сыныбы.[9]

Криптографиялық API қолдану: жаңа буын (CNG)

CNG [10] - бұл ескірген Crypto API үшін ұзақ мерзімді ауыстыру. Бұл баламалы функцияны қамтамасыз етеді BCryptGenRandom[11] сонымен қатар кілтті генерациялауға арналған арнайы функциялар.

Бағдарламалау тілдері

  • Microsoft C ++ кітапханасының функциясы rand_s RtlGenRandom пайдаланады және Microsoft корпорациясы қауіпсіз қосымшалар үшін ұсынады.[12]
  • The Python функциясы урандом ішінде os пайдаланатын модуль / dev / urandom қосулы Unix тәрізді жүйелер, Windows жүйелерінде CryptGenRandom шақырады.[13]
  • The Java Windows-тағы JRE-дің OpenJDK және Oracle дистрибутивтерімен жабдықталған JCA жеткізушісі «SunMSCAPI» Windows-PRNG алгоритмі бар SecureRandom іске асыруын қамтамасыз етеді. Бұл сынып кездейсоқ немесе тұқымдық байттарға арналған барлық сұраныстарды жібереді, сондай-ақ жергілікті CryptGenRandom үшін қосымша байттарды орнатады.[14]

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ CryptGenRandom функциясы (Windows)
  2. ^ «Microsoft XP-де кездейсоқ сандар генераторының қатесі бар екенін растайды». Архивтелген түпнұсқа 2008-06-22.
  3. ^ RtlGenRandom функциясы (Windows)
  4. ^ Қауіпсіз кодты жазу, екінші басылым. ISBN  0-7356-1722-8.
  5. ^ Доррендорф, Лео; Зви Гуттерман; Бенни Пинкас. «Windows операциялық жүйесінің кездейсоқ сандар генераторының криптоанализі» (PDF). Архивтелген түпнұсқа (PDF) 2012-09-06. Алынған 2007-11-12.
  6. ^ а б в г. e f ж «RNG тексеру тізімі». NIST компьютерлік қауіпсіздік бөлімі. Алынған 18 маусым 2013.
  7. ^ «Кездейсоқ сандар генераторын тексеру жүйесі (RNGVS)» (PDF). Ұлттық стандарттар және технологиялар институты компьютерлік қауіпсіздік бөлімі. 31 қаңтар 2005 ж. Мұрағатталған түпнұсқа (PDF) 2013 жылғы 24 ақпанда. Алынған 18 маусым 2013.
  8. ^ Майкл Ховардтың веб журналы: Windows-тағы кездейсоқ нөмірді криптографиялық түрде, криптоапиді қолданбай-ақ қауіпсіздендіру
  9. ^ «Мұрағатталған көшірме». Архивтелген түпнұсқа 2006-09-08. Алынған 2007-08-27.CS1 maint: тақырып ретінде мұрағатталған көшірме (сілтеме)
  10. ^ Crypto API Next Generation (Windows)
  11. ^ BCryptGenRandom (Windows)
  12. ^ http://msdn.microsoft.com/kk-us/library/sxtz2fa8(VS.80).aspx Visual C ++ әзірлеушілер орталығы, rand_s
  13. ^ https://docs.python.org/2/library/os.html#os.urandom Python Library анықтамалығы, ОЖ модулі
  14. ^ http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunMSCAPI Oracle Java SE 8 техникалық құжаттамасы, Sun Provider

Сыртқы сілтемелер