“Rastgele” bir iddiadır, olgu değil. Bir seçimin adil olması için iki şeyin doğru olması gerekir: sayıların kaynağı öngörülemez olmalı ve her seçenek eşit olasılığa sahip olmalı.
Her ikisi de uygulanabilir, her ikisi de sık sık yanlış yapılır ve birbirlerinden bağımsız olarak başarısız olurlar. Bir aracın mükemmel bir rastgele kaynağı ve yanlı bir eşlemesi olabilir ya da öngörülebilir sayılarla beslenen kusursuz tekdüze bir eşlemesi olabilir.
Rastgelelik Nereden Gelir
Gerçek rastgelelik, önceki duruma bağlı olmayan fiziksel süreçlerden gelir:
- Radyoaktif bozunma — bir atomun bozunduğu an öngörülemez
- Termal gürültü — bir dirençteki rastgele voltaj dalgalanmaları
- Atmosferik gürültü — yıldırım etkinliğinden kaynaklanan arka plan paraziti
- Kuantum ölçümü — gerçekten belirsiz olan sonuçlar
Bir bilgisayar bunları doğrudan gözlemleyemez. Yaptığı şey, donanım üretecini — /dev/urandom ve eşdeğerlerini — örneklemektir; bu üreteç de fiziksel süreçlerle tohumlanır. İşte bu gerçek rastgele sayı üretecidir.
Çok daha yaygın durum sözde rastgele sayı üretecidir: yalnızca rastgele görünen bir dizi üreten deterministik bir algoritma.
next = (previous × multiplier + increment) mod modulus
Kritik özellik ince değildir. Algoritmayı ve tohumu biliyorsanız, dizinin üreteceği her değeri hesaplayabilirsiniz. Yaklaşık olarak değil, tam olarak. Bu yüzden çoğu web sitesinin kullandığı Math.random(), önem taşıyan hiçbir şey için uygun değildir: çıktısı iç duruma bağlıdır ve gözlenen çıktılardan bu durumu geri kurtarmak, gelecekteki her sonucu öngörülebilir kılar.
Soruyu Belirleyen Orta Yol
Modern platformlar her çağrıda ham donanım entropisi kullanmaz. Kriptografik olarak güvenli bir PRNG kullanırlar: deterministik, ancak donanım entropisiyle tohumlanır ve çıktıları gözlemlemenin durumu açığa çıkarmayacağı şekilde tasarlanır.
| Donanım TRNG | CSPRNG | Sıradan PRNG | |
|---|---|---|---|
| Fiziksel entropiye dayanır | Evet | Evet | Hayır |
| Durum verildiğinde deterministik | Hayır | Evet | Evet |
| Çıktı durumu açığa çıkarır | Hayır | Hayır | Evet |
| Ödül çekilişi için uygun | Evet | Evet | Hayır |
Bir CSPRNG, kullandığınız her yazılımın deterministik olmasıyla tamamen aynı anlamda deterministiktir. Onu kabul edilebilir kılan şey, durumunun şimdiye kadar ürettiklerinden geri kurtarılamamasıdır.
Tarayıcılar bunu crypto.getRandomValues() üzerinden sunar. Buradaki çekilişlerin kullandığı kaynak budur.
Tekdüzelik Ayrı Bir Sorundur
İyi bir kaynağa sahip olmak yeterli değildir. Rastgele bir sayıdan seçime giden eşleme yine de yanlı olabilir ve çoğu aracın yaptığı hata tam da budur.

Naif yaklaşım — 0 ile 1 arasındaki rastgele bir ondalık sayıyı aralığa ölçeklemek — alt ucu yanlı yapar. 40 isimle, bazı rastgele değerler son kovanın ötesine düşer ve bu değerler atılmak yerine kırpılırsa ilk isim son isimden biraz daha sık çıkar.
Yanlılık, kimsenin fark etmeyeceği kadar küçüktür; çoğu uygulamada ayakta kalmasının nedeni de tam olarak budur.
Doğru yaklaşım reddetme örneklemesidir: çekin ve sonuç eksik kalan son kovaya düşerse onu atıp yeniden çekin. Dağılım tam olarak tekdüze hale gelir, böylece her girdinin 1/N şansı olur — 40 isimlik bir çekilişte ölçeklenmiş ondalık uygulamasının ilk isme çok az daha yüksek olasılık verdiği durum da dahil.
Aynı teknik buradaki kısa kimlik üretecinde de görülür; burada kabul oranı 252/256’dır ve ortaya çıkan yanlılık on milyonda yaklaşık ikidir. Göz ardı edilecek kadar küçük ve dikkatsiz bir uygulamanın fark edilmeden geçebileceği kadar küçük — ölçmeye değer olmasının nedeni de tam olarak budur.
Aracın Değil, İnsanın Üç Hatası
Kumarbaz yanılgısı. Üst üste beş tura geldikten sonra yazı gelmesi gerekiyormuş gibi hissettirir. Her çekiliş bağımsızdır. Paranın adil olmadığına dair bir hafızası yoktur ve beş turadan sonra doğru olasılık hâlâ her yüz için tam olarak 1/6’dır.
Kümelenme yanılsaması. Rastgele verideki seriler desenli gelir çünkü onları arıyorsunuzdur. Üst üste üç aynı sonuç, sezgilerin önerdiğinden çok daha sık gerçekleşir. Ve gerçekten rastgele veri kısa dizilerde pürüzlü görünür — kusursuz eşit görünen bir dizi, gerçek olmaktan çok uydurma olma olasılığı taşır.
Doğum günü paradoksu. 23 kişilik bir grupta ikisinin doğum günü büyük olasılıkla aynıdır. Bu psikoloji değil aritmetiktir, ama insanların rastgeleliği tahmin etmede neden bu kadar kötü olduğunu gösterir: bireysel olasılıklar küçüktür ve çarpılırlar.
Ortak nokta şudur: tek bir gözlem, iki yönde de hiçbir şeyi kanıtlamaz. Tuhaf görünen bir çekiliş, düzenli görünen bir çekiliş kadar bilgi vermez.
Pratikte En Çok Önem Taşıyan İki Hata
Mekanizmayı izledikten sonra, bir seçim tartışmaya açıldığında gerçekte neyin yanlış gittiğini adlandırmaya değer — ve bunların ikisi de kaynakla ilgili değildir.
İşlemi yapan kişi sonucu geçersiz kıldı. Yeniden çevirmek, elle düzeltmek, çekiliş ortasında olmayan bir ismi atlamak. Mükemmel bir üreteç ve değiştirilmiş bir sonuç, yine değiştirilmiş bir sonuçtur ve izleyen herkes bunu görür.
Havuz, ilan edilen havuz değildi. Bir isim eklemek veya sessizce birini çıkarmak, algoritmadan bağımsız olarak seçimi değiştirir.
İkisi de süreç hatasıdır ve kayıtlı bir çekilişin önlediği şey tam olarak budur. Bu yüzden katılımcı listesi görüntüde olacak şekilde kayıt almak, herhangi bir teknik özellikten daha değerlidir: ikisini de baştan engeller.
Bu Düzeyde Titizlik Nerede Gerekli
Öğle yemeği seçmek için bunların hiçbiri önemli değildir. Herhangi bir üreteç kabul edilebilir bir öğle yemeği üretir.
Ortada bir çıkar, bir itibar veya hukuki bir boyut olduğunda bu belirleyici hale gelir:
- Ödül çekilişleri ve yarışmalar. Doğrulanabilir bir sonuç işin özüdür
- Çalışan veya görev ataması. İnsanlar süreci inceleyecektir
- Bilimsel ve klinik randomizasyon. Alanın standardı belgelenmiş, tohumlanmış, yeniden üretilebilir rastgeleliktir
- Düzenleyici ve denetim bağlamları. Belgelenmiş rastgelelik genellikle bir tercih değil bir gerekliliktir
Bunların hepsindeki gereksinimler aynı dört tanedir ve kısadır: havuz sabit ve ilan edilmiştir, varsa ağırlıklar ilan edilmiştir, kaynak öngörülemezdir ve sonuç havuz görünürken kaydedilir.
Kendiniz Nasıl Kontrol Edersiniz
Bir tarayıcı sekmesinde bir CSPRNG’yi denetleyemezsiniz, ama mekanizma hakkında akıl yürütebilirsiniz ve bu yeterlidir.
Kaynağın ne olduğunu sorun. Yanıt “rastgele bir fonksiyon” ise, öngörülebilir olan mı olduğunu sorun. crypto.getRandomValues() belirli ve kontrol edilebilir bir yanıttır.
Tekdüzeliğin nasıl sağlandığını sorun. Yanıt, reddetme örneklemesinden söz etmeden bir ondalık sayıyı aralığa ölçeklemeyi içeriyorsa, eşleme büyük olasılıkla yanlıdır. Az ama ölçülebilir biçimde.
İşlemi yapanın neyi değiştirebileceğini sorun. Hiçbir şeyi değiştiremiyorsa sonuç savunulabilir. Bir isim atlanabiliyor veya çekiliş yeniden çalıştırılabiliyorsa değildir — kaynaktan bağımsız olarak.
Adalet sayfası, bu sitedeki uygulamayı daha ayrıntılı ele alır. Sorgulanacak bir karar için araç seçiyorsanız bir kez okumaya değer.