~/sibercrew
Kriptografi

Kriptografik Rastgelelik: CSPRNG ve Öngörülemezliğin Önemi

Neden "rastgele" görünen her sayı üretecinin kriptografik amaçlar için güvenli olmadığı.

Kriptografide kullanılan hemen her mekanizma (anahtar üretimi, IV/nonce, oturum token'ları) rastgeleliğe dayanır — ancak "rastgele" kelimesi, kriptografik bağlamda çok özel ve katı bir anlam taşır. Bu makale, neden sıradan rastgele sayı üreteçlerinin kriptografik amaçlar için tehlikeli olduğuna ve CSPRNG'lerin (Cryptographically Secure Pseudorandom Number Generator) bu sorunu nasıl çözdüğüne odaklanır.

PRNG ile CSPRNG Arasındaki Fark

  • Sıradan PRNG (Pseudorandom Number Generator): Programlama dillerinin genel amaçlı random() fonksiyonları (örneğin çoğu dilin varsayılan Math.random()'ı), genelde Mersenne Twister gibi algoritmalar kullanır. Bunlar istatistiksel olarak "rastgele görünen" ama TAMAMEN ÖNGÖRÜLEBİLİR sayılar üretir — eğer bir saldırgan üretecin iç durumunu (state) veya yeterli sayıda ardışık çıktısını gözlemlerse, GELECEKTEKİ tüm çıktıları matematiksel olarak hesaplayabilir.
  • CSPRNG: Kriptografik olarak güvenli üreteçler, çıktısının önceki veya sonraki değerlerden istatistiksel/hesaplamalı olarak TAHMİN EDİLEMEZ olmasını garanti edecek şekilde tasarlanır — bu, kriptografik güvenlik için zorunlu bir özelliktir.

Neden Bu Fark Kritik? Somut Bir Saldırı Örneği

Bir web uygulaması, şifre sıfırlama token'larını sıradan bir PRNG ile üretiyorsa, bir saldırgan kendi hesabı için bir sıfırlama token'ı alıp bu token'ın üretildiği andaki PRNG durumunu (bazı PRNG'lerde bu, sistem saatinden türetilir ve tahmin edilebilir) analiz edebilir. Bu bilgiyle, PRNG'nin İÇ DURUMUNU yeniden inşa edip, BAŞKA bir kullanıcı için üretilecek (veya üretilmiş) token'ı önceden tahmin edebilir — bu, hesap ele geçirmenin (account takeover) doğrudan bir yolu olabilir. Bu tür zafiyetler, gerçek dünyada birden fazla platformda tespit edilmiş, somut ve pratik saldırılardır.

Entropi Kaynakları: Rastgeleliğin Kökeni

Bir CSPRNG'nin güvenliği, başlangıçta beslendiği (seed) "entropi"nin gerçekten öngörülemez olmasına dayanır. İşletim sistemleri, bu entropiyi genelde donanım kaynaklarından toplar:

  • Fare hareketlerinin zamanlaması ve konumu.
  • Klavye tuşlarına basma zamanlaması (tuşlar arası milisaniye farkları).
  • Disk erişim zamanlamaları.
  • Modern CPU'larda bulunan donanım rastgele sayı üreteçleri (Intel'in RDRAND komutu gibi — ancak bu tür donanım kaynaklarının kendisi de zaman zaman güvenlik topluluğunda incelemeye/tartışmaya konu olmuştur, bu yüzden işletim sistemleri genelde birden fazla kaynağı harmanlayarak tek bir kaynağa aşırı güvenmekten kaçınır).

Linux'ta bu havuz /dev/urandom (ve daha kısıtlayıcı /dev/random) aracılığıyla uygulamalara sunulur; modern kriptografi kütüphaneleri (OpenSSL gibi) bu işletim sistemi kaynaklarını temel alarak kendi CSPRNG'lerini besler.

Gerçek Dünya Vakası: Debian OpenSSL Zafiyeti

2006-2008 yılları arasında Debian Linux'un OpenSSL paketinde yapılan bir kod değişikliği, kazara entropi havuzunu ciddi şekilde zayıflattı — bu hatalı sürümle üretilen SSH ve SSL anahtarlarının olası değer uzayı, milyonlarca yerine sadece birkaç yüz bin değere düştü. Sonuç olarak, bu hatalı sürümle üretilen tüm anahtarlar pratik olarak brute-force ile taranabilir hâle geldi — bu olay, entropi kaynağındaki görünüşte küçük bir kod hatasının, üzerine kurulu TÜM kriptografik güvenliği nasıl çökertebileceğinin ders niteliğinde bir örneğidir.

Pratik Senaryo

Bir geliştirici, API anahtarları üretmek için hızlı olsun diye programlama dilinin varsayılan (kriptografik olmayan) rastgele sayı fonksiyonunu kullanıyor. Güvenlik denetimi sırasında, bu fonksiyonun iç durumunun sistem başlangıç zamanından (epoch'tan) türetildiği ve bu yüzden üretilen "rastgele" API anahtarlarının aslında sunucunun ne zaman başlatıldığı bilgisiyle önemli ölçüde daraltılabilir bir arama uzayına sahip olduğu tespit ediliyor. Ekip, anahtar üretimini dilin kriptografik amaçlı CSPRNG fonksiyonuna (örneğin crypto.randomBytes gibi) taşıyarak bu zafiyeti kapatıyor.

Bu makale, kriptografik rastgeleliğin orta-ileri seviye teknik bir özetidir; SiberCrew ekibi tarafından hazırlanmış özgün içeriktir.