From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Sun 10 Aug 2003 - 19:02:23 EEST
Selamlar..
On Sun, 10 Aug 2003 18:01:27 +0300
Tongu=E7 Yumruk <tongucyumruk@interaktif.gen.tr> wrote:
>=20
> "Deterministik y=F6ntemlerle tesad=FCfi say=FD =FCretmeye kalkan adam
> kesinlikle b=FCy=FCk bir g=FCnahk=E2rd=FDr"
Haklidir. Bir seed degeri varsa, her zaman icin ayni tekrarlayan
sayilari uretmek tek yoldur. Ama aslolan bu seed degerini olabildigince
random uretebilmektir. Bu ise bir hayli mumkundur.
i810+ chipsetleri, silikonun kuantum surtunmelerinden kaynaklanan anlik
radyasyon (isi olarak belirlenir, sicaklik degil) degerlerini okuyabilen
bir duzenege sahiptir. Bu duzenekten son derece rasgele sayilar elde
edebilirsiniz. Yapmaniz gereken, /dev/intel_rng dosyasini okumaktir:
major 10, minor 183. Elbette kernele gerekli modulu eklemis olmalisiniz.
Bu pid vs. degerlerine gore cok daha tahmin edilemez hassasiyete
sahiptir.
Diger yandan daha farkli yontemlerle de son derece rasgele sayilar elde
edebilirsiniz. Mesela bir TV karti. Canli yayin orani yuksek herhangi
bir kanala ayarlayacaginiz TV kartindan capture edeceginiz herhangi bir
kac satir, son derece rasgele olacaktir. Hatta karti hic bir kanala
ayarlamazsaniz daha rasgele bir sonuc elde etmeniz mumkundur, ama aralik
cok daha dardir.=20
Aynisini radyo ile, canli yayin yapan bir istasyon icin
deneyebilirsiniz. Radyo'yu ayarlayin. Bilhassa parazitli bir kanal
bulun. Sonra ses kartina baglayin. 12 Bit hassasiyetinde random sayi
elde edersiniz. Gerci dinamik mevzusu yuzunden bu 6 Bit filan civarinda
kalir ama iki stereo kanaldan gelen 12 Bit, kisa bir bekleme (en az 3
periyot, kabaca 2 ms) sonra okunacak bir diger degerle bunu harmanlamak
mumkundur. Boylece sayi araligini cok daha buyutebilirsiniz.
Tek basina ses kartida bir hayli etkili bir rasgele sayi ureteci
olabilir. Bilhassa bir mikrofon takiliysa. Kazanci (kayit ses ayari)
maksimuma getirip 3-5 tane degeri okuyarak bunlari rasgele sayi olarak
kullanabilirsiniz.
Bu ureteclerin hepsi bir tur Pembe gurultu jeneratoru gibi calisir. Buda
yeterince rasgele degerler uretmek icin kafidir. i810 rng, digerlerinden
cok daha hassas sekilde cok daha genis aralikta cok daha hizli random
sayi uretebilir. Onun avantaji budur. Ama diger yontemlerde cok rasgele
sayilar uretmenize yardimci olur. Basitce ses kartinizi radyoya
baglayin, yada bir mikrofon takin, o da yoksa mikrofonun ses ayarini
sonuna kadar acin sadece. Veya TV kartinizin antenini cekin. sonra cat
/dev/dsp yazip bir bakin. TV karti icin de /dev/video deneyebilirsiniz.
Ekranda akip giden seylerin ne kadar rasgele oldugunu gorunce
sasiracaksiniz. Ama son derece rasgele tekrarlayan son derece kisitli
degerler gormeniz mumkun. Demekki bir kac sample'i harmanlamak makul bir
cozum olacaktir. Ne kadar yayinda parazit varsa, rasgelelik dereceside o
kadar yuksek olacaktir. Ama, soyledigim gibi, dogrudan degerleri degil,
ornegin 8 Baytin son ikiser bitlerini baz alip, 16 Bitlik bir deger elde
edin. Bu cok daha rasgele olacaktir.=20
Demekki bilgisayarlar kendi baslarina, en azindan multimedya olanlar,
rasgele sayi uretebilirmis.=20
Rasgele sayi uretmekte en emin yollar rasgele olabilen degerleri
kullanmaktir. Ses ve goruntu icin biz buna parazit ve gurultu deriz.
Parazitler onceden ongorulemez. Diyelimki, radyoyu temiz bir kanala
ayarladiniz. Sizinle ayni kanali kullanan cracker sizin ureteceginiz
sayinin cok yakininda deger uretebilir. Ama ortalikta bir parazit varsa
sesi bozan, bu parazitin aynisini uretmesi pek mumkun degildir. Bu
noktada uzun sureler icinde elde edeceginiz degerler dar bir bant icinde
kalir. Yani diyelimki bu gurultu kulakla duydugunuzda hisirti olarak
size yansir, mesela 12db yeginliginde, 6 KHz frekansinda. Ama, bunu cok
hizli incelerseniz, yani ornekleme frekansini (44Khz Ses karti, 10+ MHz
TV karti) yukseltirseniz, anlik degerlerin cok hizli ve kararsiz
degistigini gorursunuz. Bilhassa dogru durust cekmeyen bir TV karti,
mukemmel bir rasgele sayi ureteci olabilir. Ama piril piril gosteren bir
Digital SAT karti, hic bir zaman rasgele kavramina uyan iki sayi
uretemez kolay kolay. Burada rasgele sayi, baskalarinin tahmin
edemeyecegi sayi demektir. Ayni kanali seyreden baskasi derhal sizin
rasgele sayilariniza ulasabilir kolayca..
Diger yandan, gurultu denen seyi kodla simule edemeyeceginize gore,
sadece kod kullanarak rasgele (sahiden de rasgele) sayi uretmeniz mumkun
degildir. Ama, ornegin dk. da 3 posta gelen mail serverinize gelen son
10 postanin MD5 degeri bir hayli rasgele olabilir. Iste size yazilimla
rasgele sayi uretmenin puf noktasi. Bir mailbox acin. Kernel liste, LKD
listelerine vs. bol mesaj gelen bir kac listeye uye edin. Sonrada
mailboxlarin hashini cikarin: md5sum
/var/spool/mail/spamaacikmailhesabi. iste size bir hayli rasgele bir
deger. Cunku gurultu olarak addedilebilecek onceden kestirelemeyen pek
cok mesaj gelebilir. Mesajlarin icerikleri ayni olsa bile, alinma
zamanlari, yollanma zamanlari, message-id'leri vs. cok cok farkli
olacaktir. O kadarki PING bile bu iste son derece etkli olabilir. Cunku
networkun hizi ongoremeyeceginiz kadar cok degisebilir.=20
Diyelimki, bir suru clientiniz var. Masqueradingle internete cikiyorlar.
Birde squid kurdunuz. Tipik bir internet paylasimi.
cat /proc/net/ip_conntrack >dosya
netstat -ant >>dosya
md5sum dosya
Son derece mukemmel bir random sayi ureteci olabilir. Apache veya SMB
kullaniyorsunuz. Loglarini hash edin. Bilhassa su CodeRed Nimda
kurtlari, C paylasimi arayan script kiddie'ler filan son derece rasgele
olarak size saldirirlar. IP'ler, zamanlar vs. iste size son derece iyi
bir rasgele sayi kaynagi. Ne kadar cok hit aliyorsaniz, standart veya
saldiri amacli, o kadar rasgele bir deger elde edersiniz.
Demekki, teorik olarak, rasgele sayi ureten bir algoritma yapma
ihtimaliniz yok. Ama pratikte rasgele sayi bulabileceginiz bir ton yer
mevcut..
Saygi ve sevgiler..