CryptGenRandom - CryptGenRandom

CryptGenRandom eskirgan hisoblanadi [1] kriptografik xavfsiz pseudorandom raqamlar generatori kiritilgan funktsiya Microsoft CryptoAPI. Yilda Win32 dasturlari, Microsoft tasodifiy raqamlarni yaratish zarur bo'lgan joyda foydalanishni tavsiya qiladi. Ibroniy Universitetining 2007 yilgi maqolasida xavfsizlik muammolari haqida ma'lumot berilgan Windows 2000 CryptGenRandom dasturini amalga oshirish (tajovuzkor mashinani boshqarishi mumkin deb hisoblasa). Keyinchalik Microsoft ushbu muammolar mavjudligini tan oldi Windows XP, lekin emas Vista. Microsoft 2008 yil o'rtalarida Windows XP Service Pack 3 bilan tuzatilgan xatolarni tuzatdi.[2]

Fon

The Win32 API o'z ichiga kriptografik xavfsizlikni har tomonlama qo'llab-quvvatlashni o'z ichiga oladi TLS qo'llab-quvvatlash (orqali SHANNEL API) va kodni imzolash. Ushbu imkoniyatlar mahalliy Windows kutubxonalarida, masalan, kriptografik operatsiyalar uchun yaratilgan RSA va AES kalitlarni yaratish. Ushbu kutubxonalar o'z navbatida a kriptografik xavfsiz pseudorandom raqamlar generatori (CSPRNG). CryptGenRandom Win32 dasturlash muhiti uchun standart CSPRNG hisoblanadi.

Amaliyot usuli

Microsoft tomonidan taqdim etilgan kriptografiya provayderlar hozirda ichki tizimga asoslangan CryptGenRandom-ning bir xil dasturini baham ko'rishadi funktsiya deb nomlangan RtlGenRandom.[3] Faqatgina umumiy kontur algoritm 2007 yildan boshlab nashr etilgan:

[RtlGenRandom] ko'rsatilganidek hosil qiladi FIPS 186-2 ilova 3.1 bilan SHA-1 G funktsiyasi sifatida. Va entropiya bilan:

  • Amaldagi jarayon identifikatori (GetCurrentProcessID).
  • Joriy oqim identifikatori (GetCurrentThreadID).
  • Yuklash vaqtidan boshlab belgilash sanasi (GetTickCount).
  • Joriy vaqt (GetLocalTime).
  • Turli xil yuqori aniqlikdagi hisoblagichlar (QueryPerformanceCounter).
  • An MD4 foydalanuvchi nomi, kompyuter nomi va qidirish yo'lini o'z ichiga olgan foydalanuvchi atrof-muhit blokining aralashmasi. [...]
  • RDTSC, RDMSR, RDPMC kabi yuqori aniqlikdagi ichki CPU hisoblagichlari

[chiqarib tashlandi: past darajadagi tizim ma'lumot maydonlarining uzun ro'yxatlari va ishlash ko'rsatkichlari][4]

Xavfsizlik

Kriptosistemaning CSPRNG xavfsizligi juda muhim, chunki u dinamik kalit material uchun asosdir. "Tezda" kerak bo'lgan kalitlar, masalan, himoya qiladigan AES TLS sessiya tugmachalari HTTPS bank veb-saytlari bilan sessiyalar, CSPRNG-lardan kelib chiqadi. Agar bu yolg'on tasodifiy raqamlarni taxmin qilish mumkin bo'lsa, sessiya tugmachalarini ham bashorat qilish mumkin. CryptGenRandom Win32 muhitida amalda standart CSPRNG bo'lgani uchun uning xavfsizligi Windows foydalanuvchilari uchun juda muhimdir.

CryptGenRandom algoritmining o'ziga xos xususiyatlari rasmiy ravishda e'lon qilinmagan. Har qanday nashr etilmagan tasodifiy raqamlarni yaratish algoritmida bo'lgani kabi, u ham eskirgan algoritmlardan foydalanish va unga bog'liq bo'lgan nazariy zaif tomonlarga ta'sir qilishi mumkin. entropiya tizimga mahalliy kirish huquqi bilan tajovuzkor tomonidan taxmin qilinadigan yoki boshqarilishi mumkin bo'lgan bir nechta monotonik ravishda ko'payadigan hisoblagichlarga yig'ilish.

Kriptanaliz

A kriptanaliz 2007 yil noyabr oyida Leo Dorrendorf va boshqalar tomonidan nashr etilgan CryptGenRandom to'plami Quddusning ibroniy universiteti va Hayfa universiteti, da sezilarli zaif tomonlarni topdi Windows 2000 algoritmni amalga oshirish.[5]

Zaiflikdan foydalanish uchun tajovuzkor birinchi navbatda tasodifiy raqamlar generatorini ishlatadigan dasturni buzishi kerak. Qog'ozdagi zaif tomonlarning barchasi, tajovuzkorning generatorning holatini o'chirib tashlashiga bog'liq. Ushbu hujumni amalga oshiradigan tajovuzkor odatda har qanday tasodifiy raqamlar generatorini mag'lubiyatga uchratishi mumkin edi (masalan, ular shunchaki generatorning chiqishlarini hidlashlari yoki xotirada ularni ma'lum qiymatlarga o'rnatishi mumkin). Biroq, Ibroniy universiteti jamoasi, tajovuzkor faqat bir marta CryptGenRandom nusxasi xavfsizligini doimiy ravishda buzishi uchun davlat bitlarini o'g'irlashi kerakligini ta'kidlamoqda. Bundan tashqari, ular to'plangan ma'lumotlardan foydalanib, paydo bo'lgan o'tgan tasodifiy raqamlarni aniqlashlari mumkin, bu allaqachon yuborilgan kredit karta raqamlari kabi zarar etkazishi mumkin.

Qog'ozning hujumlari CryptGenRandom oqim shifrini ishlatishiga asoslanadi RC4, uning holati ma'lum bo'lgandan keyin orqaga qarab yurish mumkin. Ular, shuningdek, CryptGenRandom-ning ishlashidan foydalanadilar foydalanuvchi rejimi, operatsion tizimga foydalanuvchi darajasida kirish huquqiga ega bo'lgan har bir kishiga ruxsat berish, masalan, a buferni to'ldirish, bu jarayon uchun CryptGenRandom holati to'g'risida ma'lumot olish uchun. Va nihoyat, CryptGenRandom o'z urug'ini yangilaydi entropiya kamdan-kam hollarda. Ushbu muammoni har bir Win32 jarayonining o'ziga xos CryptGenRandom holatining nusxasi bo'lishi kuchaytirmoqda; bu shuni anglatadiki, bitta jarayonning murosasi boshqa har qanday jarayonga o'tish davri bilan murosaga kelmaydi, shuningdek, har qanday muvaffaqiyatli tanaffusning umrini oshirishi mumkin.

CryptGenRandom algoritmining tafsilotlari ommaviy bo'lmaganligi sababli, Dorrendorf jamoasi foydalangan teskari muhandislik algoritm qanday ishlashini aniqlash vositalari. Ularning qog'ozi Windows-ning kriptografik tasodifiy sonlar ishlab chiqaruvchisi qanday ishlashiga oid birinchi nashr qilingan yozuvdir[iqtibos kerak ].

Umumiy mezonlar

Windows 2000, XP va 2003 dasturlari EAL4 + baholaridan muvaffaqiyatli o'tdi, shu jumladan CryptGenRandom () va FIPSGenRandom () dasturlari. Xavfsizlik maqsadli hujjatlari quyidagi manzilda mavjud umumiy mezonlar portali va EAL4 talablariga muvofiqligini bildiradi. Natijada algoritm xavfsizligi to'g'risida ozgina xulosalar chiqarish mumkin; EAL4 mahsulotlarni eng yaxshi amaliyotlar va belgilangan xavfsizlik maqsadlariga qarshi o'lchaydi, ammo kamdan-kam hollarda chuqur kriptanalizni o'z ichiga oladi.

FIPS tekshiruvi

Microsoft-da mavjud olingan tasdiqlash uning quyidagi muhitdagi RNG dasturlari:

  • Windows Vista RNG dasturlari (321-guvohnoma)[6]
  • Windows 2003 kengaytirilgan kriptografik provayder (rsaenh.dll) (sertifikat 316)[6]
  • Windows 2003 yaxshilangan DSS va Diffie-Hellman kriptografik ta'minotchisi (dssenh.dll) (sertifikat 314)[6]
  • Windows 2003 yadrosi rejimi kriptografik moduli (fips.sys) (sertifikat 313)[6]
  • Windows CE va Windows Mobile kengaytirilgan kriptografik provayder (rsaenh.dll) (sertifikat 292)[6]
  • Windows CE va Windows Mobile kengaytirilgan kriptografik provayder (rsaenh.dll) (sertifikat 286)[6]
  • Windows CE kengaytirilgan kriptografik provayder (rsaenh.dll) (sertifikat 66)[6]

Ushbu testlar "mahsulotning xavfsizligini o'lchash o'rniga, turli xil tasdiqlangan RNG spetsifikatsiyalariga muvofiqligini tekshirish uchun ishlab chiqilgan. [...] Shunday qilib, tasdiqlash mahsulotning umumiy xavfsizligini baholash yoki izohlash sifatida talqin qilinmasligi kerak." Natijada algoritm xavfsizligi to'g'risida ozgina xulosalar chiqarish mumkin; FIPS baholari manba kodini tekshirishi yoki RNG urug'ini yaratish usulini baholashi shart emas.[7]

Shu bilan bir qatorda

API darajasi

Windows ishlab chiquvchilari CryptGenRandom funksiyalariga kirishda bir nechta muqobil vositalarga ega; ushbu alternativalar bir xil algoritmni chaqiradi va bir xil xavfsizlik xususiyatlariga ega, ammo boshqa afzalliklarga ega bo'lishi mumkin.

RtlGenRandom-dan foydalanish

"Tarixiy jihatdan biz har doim ishlab chiquvchilarga rand kabi funktsiyalarni kalitlarni, noces va parollarni yaratish uchun ishlatmaslikni aytdik, aksincha ular CryptGenRandom kabi funktsiyalardan foydalanishi kerak, bu esa kriptografik jihatdan xavfsiz tasodifiy sonlarni yaratadi. CryptGenRandom bilan bog'liq muammo shundaki, siz CryptoAPI (CryptAcquireContext) va shunga o'xshash), agar siz boshqa kripto funktsiyalaridan foydalansangiz yaxshi bo'ladi.

Standart Windows XP va undan keyingi o'rnatishda, CryptGenRandom ADVAPI32! RtlGenRandom nomli funktsiyaga qo'ng'iroq qiladi, bu sizga barcha CryptAPI narsalarini yuklashni talab qilmaydi. Aslida, yangi Vidbi CRT funktsiyasi, rand_s RtlGenRandom-ni chaqiradi ".[8]

RNGCryptoServiceProvider-dan foydalanish

Dasturchilar foydalanmoqda .NET dan foydalanish kerak RNGCryptoServiceProvider sinfi.[9]

Kriptografiya API-dan foydalanish: Keyingi avlod (CNG)

CNG [10] eskirgan Kripto API-ni uzoq muddatli almashtirishdir. Bu teng funktsiyani ta'minlaydi BCryptGenRandom[11] shuningdek, kalitlarni yaratish uchun maxsus funktsiyalar.

Dasturlash tillari

  • Microsoft C ++ kutubxonasi funktsiyasi rand_s RtlGenRandom-dan foydalanadi va xavfsiz dasturlar uchun Microsoft tomonidan tavsiya etiladi.[12]
  • The Python funktsiya urandom ichida os ishlatadigan modul / dev / urandom kuni Unixga o'xshash tizimlari, Windows tizimlarida CryptGenRandom-ni chaqiradi.[13]
  • The Java Windows-da JRE ning OpenJDK va Oracle distributivlari bilan ta'minlangan "SunMSCAPI" JCA Provayderi Windows-PRNG algoritm nomi bilan SecureRandom dasturini taqdim etadi. Ushbu sinf tasodifiy yoki urug 'baytlari bo'yicha barcha so'rovlarni yuboradi, shuningdek, mahalliy CryptGenRandom-ga qo'shimcha urug'lik baytlarini o'rnatadi.[14]

Shuningdek qarang

Adabiyotlar

  1. ^ CryptGenRandom funktsiyasi (Windows)
  2. ^ "Microsoft XP tasodifiy raqamlar ishlab chiqaruvchisi xatosini o'z ichiga olganligini tasdiqlaydi". Arxivlandi asl nusxasi 2008-06-22.
  3. ^ RtlGenRandom funktsiyasi (Windows)
  4. ^ Xavfsiz kodni yozish, ikkinchi nashr. ISBN  0-7356-1722-8.
  5. ^ Dorrendorf, Leo; Zvi Gutterman; Benni Pinkas. "Windows operatsion tizimining tasodifiy raqamlar generatorini kriptanalizi" (PDF). Arxivlandi asl nusxasi (pdf) 2012-09-06. Olingan 2007-11-12.
  6. ^ a b v d e f g "RNGni tasdiqlash ro'yxati". NIST kompyuter xavfsizligi bo'limi. Olingan 18 iyun 2013.
  7. ^ "Tasodifiy raqamlar generatorini tasdiqlash tizimi (RNGVS)" (PDF). Milliy standartlar va texnologiyalar instituti kompyuter xavfsizligi bo'limi. 31 yanvar 2005. Arxivlangan asl nusxasi (PDF) 2013 yil 24 fevralda. Olingan 18 iyun 2013.
  8. ^ Maykl Xovardning veb-jurnali: Windows-dagi tasodifiy raqamni kriptografik himoyalash, CryptoAPI-dan foydalanmasdan
  9. ^ "Arxivlangan nusxa". Arxivlandi asl nusxasi 2006-09-08 kunlari. Olingan 2007-08-27.CS1 maint: nom sifatida arxivlangan nusxa (havola)
  10. ^ Kripto API yangi avlod (Windows)
  11. ^ BCryptGenRandom (Windows)
  12. ^ http://msdn.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx Visual C ++ dasturchilar markazi, rand_s
  13. ^ https://docs.python.org/2/library/os.html#os.urandom Python Library ma'lumotnomasi, OS moduli
  14. ^ http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunMSCAPI Oracle Java SE 8 texnik hujjatlari, Sun Providers

Tashqi havolalar