Kriptografik Olarak Güvenli PRNG'ler
/dev/urandom, ChaCha20-CSPRNG ve Fortuna'yı keşfedin.
Kriptografik Olarak Güvenli PRNG'ler, CoddyKit'te ücretsiz bir Cryptology Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cryptology Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cryptology Academy kursu toplamda 4 dersten oluşur.
CSPRNG Gereksinimlerinin Özeti
Bir CSPRNG şu koşulları sağlamalıdır: (1) sonraki bitin öngörülemezliği — önceki tüm bitler bilinse bile sonraki bit, 1/2 + ihmal edilebilir bir olasılıktan daha yüksek olasılıkla öngörülemez. (2) durum ele geçirildiğinde genişlemeye direnç — mevcut durum öğrenildiğinde geçmiş çıktı hakkında hiçbir bilgi açığa çıkmaz.
/dev/urandom ve getrandom()
Linux /dev/urandom, entropi havuzundan tohumlanan bir CSPRNG kullanır. İlk tohumlamadan (128 bit entropiden) sonra, havuz "boş" olsa bile kullanmak güvenlidir — CSPRNG kendi iç durumunu korur. getrandom(), bunun modern sistem çağrısı karşılığıdır.
ChaCha20 Tabanlı CSPRNG
Linux çekirdeği 5.17+, CSPRNG'sini ChaCha20 tabanlı bir tasarımla değiştirdi. ChaCha20 hızlıdır (donanım hızlandırması gerekmez), 256 bit güvenlik sağlar ve iyi anlaşılmış bir güvenlik ispatına sahiptir. Tek kullanımlık sayı olarak sayaç kullanılır; anahtar entropi havuzundan gelir.
Fortuna
Fortuna (Ferguson ve Schneier, 2003), 32 entropi havuzunu koruyan ve entropiyi sürekli biriktiren bir CSPRNG tasarımıdır. Üreteç, havuzlar doldukça bu havuzlardan yeniden tohumlanır. RNG sıfırlama ve kısmi durum ele geçirme saldırılarına dayanıklıdır.
DUAL_EC_DRBG Arka Kapısı
NIST SP 800-90A başlangıçta eliptik eğrilere dayanan DUAL_EC_DRBG'yi içeriyordu. Snowden belgeleri, NSA'nın bir arka kapı yerleştirdiğini ortaya çıkardı: EC noktaları, NSA'nın herhangi bir tohumdan üretilecek çıktıyı öngörebilmesini sağlayacak şekilde seçilmişti. DUAL_EC_DRBG'yi asla kullanmayın. NIST, bunu 2014'te kaldırdı.
CTR_DRBG
CTR_DRBG (NIST SP 800-90A), CSPRNG olarak sayaç kipinde AES kullanır. Tohum = 256 bitlik anahtar + 128 bitlik tek kullanımlık sayı. Her çağrı sayacı ilerletir. OpenSSL, BoringSSL ve Windows BCrypt'te yaygın olarak uygulanır. AES-NI işlemcilerinde donanım hızlandırmasından yararlanır.
HASH_DRBG ve HMAC_DRBG
HASH_DRBG, bir tohum değeriyle yinelemeli olarak bir karma işlevi (SHA-256) kullanır. HMAC_DRBG, karıştırma için HMAC kullanır. HMAC_DRBG'nin doğru biçimde uygulanması daha kolaydır ve birçok gömülü sistemde (mbedTLS, WolfSSL) kullanılır.
Yeniden Tohumlama ve Entropi Enjeksiyonu
CSPRNG'ler bile düzenli aralıklarla yeniden tohumlanmalıdır. CTR_DRBG'nin yeniden tohumlama aralığı 2^48 istektir. Fortuna, entropi havuzlarından yeniden tohumlanır. Elle yeniden tohumlama: başlangıçta ve fork() sonrasında CSPRNG durumuna yeni entropi (getrandom baytları) ekleyin.
Çatallanma Sorunu
Bir işlem çatallandığında, hem üst işlem hem de alt işlem aynı CSPRNG durumunu devralır — aynı çıktıyı üretirler. Çözüm: fork() sonrasında hemen yeniden tohumlamak için getrandom() çağırın. OpenSSL, son sürümlerde pthread_atfork() aracılığıyla bunu otomatik olarak ele alır.
Uygulamada CSPRNG: Python
import secrets key = secrets.token_bytes(32) # 256-bit key nonce = secrets.token_bytes(12) # 96-bit nonce for AES-GCM pin = secrets.randbelow(10**6) # 6-digit PIN # Never use random module for cryptography
Tarayıcı Kriptografisi
window.crypto.getRandomValues(typedArray), tarayıcının CSPRNG'sidir. İşletim sisteminin entropi kaynağını çağırır. WebCrypto API tarafından anahtar üretimi için kullanılır. Güvenlik amacıyla asla Math.random() kullanmayın — sistem zamanından tohumlanan kriptografik olmayan bir PRNG'dir.
Hızlı Kontrol
Kriptografik rastgele baytlar üretmek için hangi Python modülünü kullanmalısınız?
Özet
ChaCha20, CTR_DRBG ve Fortuna gibi CSPRNG'ler, entropi tohumlarından öngörülemez çıktılar üretir. DUAL_EC_DRBG, random.random() ve Math.random() kullanmaktan kaçının. Python'da secrets, tarayıcıda ise window.crypto kullanın. Sıradaki konu: gerçek dünyadaki entropi arızaları.
Sıkça Sorulan Sorular
“Kriptografik Olarak Güvenli PRNG'ler” dersi ücretsiz mi?
Evet — “Kriptografik Olarak Güvenli PRNG'ler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cryptology Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cryptology Academy kursu toplamda 4 dersten oluşur.
“Kriptografik Olarak Güvenli PRNG'ler” dersinde ne öğreneceğim?
/dev/urandom, ChaCha20-CSPRNG ve Fortuna'yı keşfedin. Cryptology Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cryptology Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cryptology Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Kriptografik Olarak Güvenli PRNG'ler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cryptology Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cryptology Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Gerçek Rastlantısallık ve Sözde Rastlantısallık
- Kriptografik Olarak Güvenli PRNG'ler
- Entropi Tükenmesi ve Zayıf Anahtar Hataları
- Anahtarları, Nonce'ları ve IV'leri Güvenle Üretme