CryptGenRandom - CryptGenRandom

CryptGenRandom kullanımdan kaldırıldı [1] kriptografik olarak güvenli sözde rasgele sayı üreteci dahil olan işlev Microsoft CryptoAPI. İçinde Win32 Microsoft, rasgele sayı üretiminin gerekli olduğu her yerde kullanılmasını önerir. İbrani Üniversitesi'nden 2007'de yayınlanan bir makale, Windows 2000 CryptGenRandom uygulaması (saldırganın makineyi kontrol ettiği varsayılarak). Microsoft daha sonra aynı sorunların şu ülkelerde de olduğunu kabul etti: Windows XP ama içinde değil Vista. Microsoft, 2008 ortalarında Windows XP Service Pack 3 ile ilgili hata için bir düzeltme yayınladı.[2]

Arka fon

Win32 API yerel dahil olmak üzere kriptografik güvenlik için kapsamlı destek içerir TLS destek (aracılığıyla SCHANNEL API) ve kod imzalama. Bu yetenekler, şifreleme işlemleri için yerel Windows kitaplıklarında oluşturulmuştur, örneğin RSA ve AES anahtar oluşturma. Bu kütüphaneler sırayla bir kriptografik olarak güvenli sözde rasgele sayı üreteci (CSPRNG). CryptGenRandom Win32 programlama ortamı için standart CSPRNG'dir.

Operasyon yöntemi

Microsoft tarafından sağlanan kriptografi sağlayıcılar aynı CryptGenRandom uygulamasını şu anda dahili bir işlevi aranan RtlGenRandom.[3] Sadece genel bir taslak algoritma 2007 itibariyle yayınlanmıştı:

[RtlGenRandom], belirtildiği gibi üretir FIPS 186-2 ek 3.1 ile SHA-1 G işlevi olarak. Ve entropi ile:

  • Geçerli işlem kimliği (GetCurrentProcessID).
  • Geçerli iş parçacığı kimliği (GetCurrentThreadID).
  • Önyükleme süresinden beri kene sayısı (GetTickCount).
  • Geçerli saat (GetLocalTime).
  • Çeşitli yüksek hassasiyetli performans sayaçları (QueryPerformanceCounter).
  • Bir MD4 kullanıcı adı, bilgisayar adı ve arama yolunu içeren kullanıcının ortam bloğunun hash değeri. [...]
  • RDTSC, RDMSR, RDPMC gibi yüksek hassasiyetli dahili CPU sayaçları

[atlandı: düşük seviyeli sistem bilgisi alanlarının ve performans sayaçlarının uzun listeleri][4]

Güvenlik

Bir şifreleme sisteminin CSPRNG'sinin güvenliği önemlidir çünkü dinamik anahtar materyalinin kaynağıdır. Koruma sağlayan AES TLS oturum anahtarları gibi "anında" gereken anahtarlar HTTPS Banka web sitelerindeki oturumlar, CSPRNG'lerden kaynaklanmaktadır. Bu sözde rasgele sayılar tahmin edilebilirse, oturum anahtarları da tahmin edilebilir. CryptGenRandom, Win32 ortamlarında fiili standart CSPRNG olduğundan, güvenliği Windows kullanıcıları için kritiktir.

CryptGenRandom algoritmasının özellikleri resmi olarak yayınlanmadı. Yayınlanmamış herhangi bir rasgele sayı üretme algoritmasında olduğu gibi, güncel olmayan algoritmaların kullanımı dahil olmak üzere teorik zayıflıklara karşı duyarlı olabilir ve entropi Sisteme yerel erişimi olan bir saldırgan tarafından bir dereceye kadar tahmin edilebilecek veya kontrol edilebilecek, monoton olarak artan birkaç sayaçta toplanma.

Kriptanaliz

Bir kriptanaliz CryptGenRandom'un Kasım 2007'de Leo Dorrendorf ve diğerleri tarafından Kudüs İbrani Üniversitesi ve Hayfa Üniversitesi, önemli zayıflıklar buldu Windows 2000 algoritmanın uygulanması.[5]

Güvenlik açığından yararlanmak için, bir saldırganın önce rastgele sayı oluşturucuyu çalıştıran programı tehlikeye atması gerekir. Kağıttaki zayıflıkların tümü, bir saldırganın durum bitlerini jeneratörden çekmesine bağlıdır. Bu saldırıyı gerçekleştirecek konumda olan bir saldırgan, genellikle herhangi bir rasgele sayı üretecini yenebilecek bir konumdadır (örneğin, üretecin çıktılarını basitçe koklayabilir veya bellekte bilinen değerlere sabitleyebilirler). Ancak, İbrani Üniversitesi ekibi, bir saldırganın bir CryptGenRandom örneğinin güvenliğini sürekli olarak ihlal etmek için durum bitlerini yalnızca bir kez çalması gerektiğini belirtiyor. Ayrıca, elde ettikleri bilgileri, önceden gönderilmiş olan kredi kartı numaraları gibi potansiyel olarak tehlikeye atılan geçmiş rastgele sayıları belirlemek için de kullanabilirler.

Gazetenin saldırıları, CryptGenRandom'un akış şifresini kullandığı gerçeğine dayanıyor. RC4, durumu bilindikten sonra geriye doğru çalıştırılabilir. Ayrıca CryptGenRandom'un çalıştığı gerçeğinden de yararlanırlar. Kullanıcı modu, işletim sistemine kullanıcı düzeyinde erişim sağlayan herkesin, örneğin bir arabellek taşması, CryptGenRandom'un bu işlem için durum bilgilerini almak için. Son olarak, CryptGenRandom tohumunu entropi seyrek olarak. Bu sorun, her Win32 işleminin kendi CryptGenRandom durumu örneğine sahip olmasıyla daha da kötüleşir; bu, bir sürecin uzlaşmasının diğer tüm süreçleri geçişli olarak tehlikeye atmadığı anlamına gelirken, herhangi bir başarılı kesintinin ömrünü de uzatabilir.

CryptGenRandom algoritmasının ayrıntıları halka açık olmadığından, Dorrendorf'un ekibi tersine mühendislik algoritmanın nasıl çalıştığını ayırt etmek için araçlar. Makaleleri, Windows şifreleme rasgele sayı üretecinin nasıl çalıştığına dair yayınlanan ilk kayıttır.[kaynak belirtilmeli ].

Ortak Kriterler

Windows 2000, XP ve 2003, CryptGenRandom () ve FIPSGenRandom () uygulamaları da dahil olmak üzere EAL4 + değerlendirmelerinden başarıyla geçti. Güvenlik Hedefi belgeleri şu adreste mevcuttur: Ortak Kriterler Portalı ve EAL4 gerekliliklerine uygunluğu gösterir. Sonuç olarak algoritmanın güvenliği hakkında çok az sonuç çıkarılabilir; EAL4, ürünleri en iyi uygulamalara ve belirtilen güvenlik hedeflerine göre ölçer, ancak nadiren derinlemesine kriptanalizi içerir.

FIPS doğrulaması

Microsoft, elde edilen doğrulama Aşağıdaki ortamlarda RNG uygulamaları:

  • Windows Vista RNG uygulamaları (sertifika 321)[6]
  • Windows 2003 Enhanced Cryptographic Provider (rsaenh.dll) (sertifika 316)[6]
  • Windows 2003 Gelişmiş DSS ve Diffie-Hellman Şifreleme Sağlayıcısı (dssenh.dll) (sertifika 314)[6]
  • Windows 2003 Kernel Mode Cryptographic Module (fips.sys) (sertifika 313)[6]
  • Windows CE ve Windows Mobile Gelişmiş Şifreleme Sağlayıcısı (rsaenh.dll) (sertifika 292)[6]
  • Windows CE ve Windows Mobile Gelişmiş Şifreleme Sağlayıcısı (rsaenh.dll) (sertifika 286)[6]
  • Windows CE Enhanced Cryptographic Provider (rsaenh.dll) (sertifika 66)[6]

Bu testler, "bir ürünün güvenliğini ölçmek yerine çeşitli onaylanmış RNG spesifikasyonlarına uygunluğu test etmek için tasarlanmıştır. [...] Bu nedenle, doğrulama, genel ürün güvenliğinin bir değerlendirmesi veya desteği olarak yorumlanmamalıdır." Sonuç olarak algoritmanın güvenliği hakkında çok az sonuç çıkarılabilir; FIPS değerlendirmelerinin kaynak kodunu incelemeye veya RNG tohumlarının üretilme şeklini değerlendirmesine gerek yoktur.[7]

Alternatifler

API seviyesi

Windows geliştiricilerinin CryptGenRandom işlevselliğine erişmek için birkaç alternatif yolu vardır; bu alternatifler aynı algoritmayı çağırır ve aynı güvenlik özelliklerini paylaşır, ancak başka avantajları da olabilir.

RtlGenRandom Kullanımı

"Tarihsel olarak, geliştiricilere anahtar, nonces ve parola oluşturmak için rand gibi işlevleri kullanmamalarını, bunun yerine CryptGenRandom gibi kriptografik olarak güvenli rastgele sayılar oluşturan işlevleri kullanmalarını söyledik. CryptGenRandom ile ilgili sorun, CryptoAPI (CryptAcquireContext ve benzeri) diğer kripto işlevlerini kullanıyorsanız sorun değil.

Varsayılan bir Windows XP ve sonraki yüklemede, CryptGenRandom, tüm CryptAPI öğelerini yüklemenizi gerektirmeyen ADVAPI32! RtlGenRandom adlı bir işlevi çağırır. Aslında yeni Whidbey CRT işlevi, rand_s RtlGenRandom "u çağırır.[8]

RNGCryptoServiceProvider'ı kullanma

Kullanan programcılar .AĞ kullanmalı RNGCryptoServiceProvider Sınıfı.[9]

Şifreleme API'sini Kullanma: Yeni Nesil (CNG)

CNG [10] kullanımdan kaldırılan Crypto API'nin uzun vadeli bir alternatifidir. Eşdeğer bir işlev sağlar BCryptGenRandom[11] ve anahtar üretimi için özel işlevler.

Programlama dilleri

  • Microsoft C ++ kitaplık işlevi rand_s RtlGenRandom kullanır ve güvenli uygulamalar için Microsoft tarafından tavsiye edilir.[12]
  • Python işlevi urandom içinde işletim sistemi kullanan modül / dev / urandom açık Unix benzeri sistemler, Windows sistemlerinde CryptGenRandom'u çağırır.[13]
  • Java Windows üzerinde JRE'nin OpenJDK ve Oracle dağıtımlarında bulunan JCA Sağlayıcısı "SunMSCAPI", Windows-PRNG algoritma adıyla bir SecureRandom uygulaması sağlar. Bu sınıf, rastgele veya çekirdek baytlar için tüm sorguları iletmenin yanı sıra ek çekirdek baytları yerel CryptGenRandom'a ayarlar.[14]

Ayrıca bakınız

Referanslar

  1. ^ CryptGenRandom İşlevi (Windows)
  2. ^ "Microsoft, XP'nin rastgele sayı oluşturucu hatası içerdiğini onayladı". Arşivlenen orijinal 2008-06-22 tarihinde.
  3. ^ RtlGenRandom İşlevi (Windows)
  4. ^ Güvenli Kod Yazma, İkinci Baskı. ISBN  0-7356-1722-8.
  5. ^ Dorrendorf, Leo; Zvi Gutterman; Benny Pinkas. "Windows İşletim Sisteminin Rastgele Sayı Üreticisinin Kriptanalizi" (PDF). Arşivlenen orijinal (pdf) 2012-09-06 tarihinde. Alındı 2007-11-12.
  6. ^ a b c d e f g "RNG Doğrulama Listesi". NIST Bilgisayar Güvenliği Bölümü. Alındı 18 Haziran 2013.
  7. ^ "Rastgele Sayı Üreteci Doğrulama Sistemi (RNGVS)" (PDF). Ulusal Standartlar ve Teknoloji Enstitüsü Bilgisayar Güvenliği Bölümü. 31 Ocak 2005. Arşivlenen orijinal (PDF) 24 Şubat 2013 tarihinde. Alındı 18 Haziran 2013.
  8. ^ Michael Howard'ın Web Günlüğü: CryptoAPI kullanmadan Windows'ta Cryptographically Secure Random number on Windows
  9. ^ "Arşivlenmiş kopya". Arşivlenen orijinal 2006-09-08 tarihinde. Alındı 2007-08-27.CS1 Maint: başlık olarak arşivlenmiş kopya (bağlantı)
  10. ^ Crypto API Yeni Nesil (Windows)
  11. ^ BCryptGenRandom (Windows)
  12. ^ http://msdn.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx Visual C ++ Geliştirici Merkezi, rand_s
  13. ^ https://docs.python.org/2/library/os.html#os.urandom Python Kitaplık Referansı, işletim sistemi modülü
  14. ^ http://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunMSCAPI Oracle Java SE 8 teknik belgeleri, Sun Sağlayıcıları

Dış bağlantılar