Güvensiz Rastgelelik

günü tarafından yayınlandı.

Yağmurlu bir İstanbul gününde, yağmur damlalarının rastgele yağışını izlerken aklıma geldi. Acaba kodlarımızın içerisinde ürettiğimiz sayılarla, bu damlaların düştüğü noktalar arasında bir bağlantı kurulabilir mi? Yağış formülize edilebilir mi?
Bunun üzerine rastgele sayılar üzerine bir araştırma yaptım ve ne kadar güvensiz olduklarını öğrendim. Testlerde yeterince çeşitli olduğunu düşündüğümüz ama bir yerden sonra tekrar eden sayılar kümesi ile güvenliği sağlamaya çalışıyoruz. Farklılık yaratmak için kullanıldığında sorun olmayabilir ama güvenlik amaçlı kullanıldığında dayanaksız bir araçtır rastgelelik. Güvensizliğinin sebebi tahmin edilebilirliğidir.

Normalden biraz daha güvenli olması için tohumunda zaman faktörünü de kullanıyorlar ama bu da tavsiye edilmiyor. Henüz .NET kütüphanesinde güzel bir örnek bulamadım ama Java’da güvenli rastgelelik için ayrı bir class mevcut.

1
2
3
4
public static int generateRandom(int maximumValue) {
	SecureRandom ranGen = new SecureRandom();
	return ranGen.nextInt(maximumValue);
}