📝 Niyazi'nin Blogu

📑 İçindekiler

"True Random: Donanım Entropy'si Neden Önemli?"

📅 2026-08-04  ·  ⏱ 5 dk okuma  ·  👁 14 kez okundu  ·  yazilimguvenlikkriptografiapirandom

Her programlama dilinde bir random() fonksiyonu vardir. Python'da random.randint(), JavaScript'te Math.random(), Rust'ta rand::thread_rng(). Bu fonksiyonlari kullanirken cogumuz bir an bile durup dusunmeyiz: Bu sayilar gercekten rastgele mi?

Cevap: Hayir. Ve cogu durumda bu sorun degil. Ama bazi durumlarda hayati onem tasiyor.

Pseudo-Random: Matematiksel Bir Illuzyon

random() fonksiyonlari gercekten rastgele sayi uretmez. Urettikleri sey, matematiksel bir formulle hesaplanan bir sayi dizisidir. Bu dizinin baslangic noktasina "seed" denir. Ayni seed'i verirseniz, ayni sayi dizisini alirsiniz. Her seferinde.

Bunu kendiniz test edebilirsiniz. Python'da:

import random
random.seed(42)
print(random.randint(1, 100))  # 82
random.seed(42)
print(random.randint(1, 100))  # 82

Ayni seed, ayni sonuc. Bu, "pseudo-random" (sahte rastgele) demektir. Sayilar rastgele gorunur ama aslinda tamamen deterministiktir. Seed'i bilen biri, tum "rastgele" sayilarinizi onceden bilebilir.

Cogu uygulama icin bu sorun degil. Oyunlarda, simulasyonlarda, A/B testlerinde pseudo-random yeterli. Kimse Python'in random() fonksiyonuyla oyun yapip "bu sayi gercekten rastgele mi diye" sormaz.

Ama kriptografide? Banka sifreleri uretirken? Blockchain private key uretirken? API token olustururken? Orada seed'i bilmek, her seyi bilmek demek.

True Random: Fizikten Gelen Rastgelelik

Gercek rastgelelik, matematikten degil, fizikten gelir. Bir zar attiginizda sonuc matematiksel olarak hesaplanabilir ama o kadar cok degisken var ki (zarin sekli, atis gucu, hava direnci, masanin sekli, zarin donus hizi) ongormek pratikte imkansizdir. Bu, "true random" demektir.

Bilgisayarlarda true random uretmenin bir kac yolu var. Hepsi fiziksel bir surecten gelir.

RDRAND: Islemcinin Icindeki TRNG

Modern Intel ve AMD islemcilerde RDRAND adinda bir komut var. Bu komut, islemcinin icine gomulu bir donanim rastgele sayi uretecinden (TRNG) okur. Calisma prensibi: Silikon uzerindeki termal gurultu (thermal noise). Atomik seviyede, elektronlarin hareketi tamamen rastgeledir. Bu rastgelelik, islemcinin icindeki bir devre tarafindan olculur ve bitlere cevrilir.

Rust'ta cagirmak bu kadar basit:

use std::arch::x86_64::_rdrand64_step;

let mut val: u64 = 0;
unsafe { _rdrand64_step(&mut val); }
// val = true random 64-bit number

Bu, bir matematiksel formul degil. Bir olcumdur. Islemcinin icindeki fiziksel bir surecin sonucudur. Seed yok. Deterministik degil. Ayni komutu iki kez cagirirsaniz, iki farkli sayi alirsiniz. Ve bu sayilar arasinda hicbir matematiksel iliski yoktur.

/dev/hwrng: Cekirdek Seviyesinde Entropy

Linux cekirdegi, birden fazla donanim kaynagindan entropy toplar: RDRAND, disk I/O zamanlamasi, ag paketlerinin gelis sirasi, kesmeler (interrupts). Bu kaynaklari karistirir ve /dev/hwrng uzerinden sunar. Cekirdek seviyesinde calistigi icin, tek bir kaynaga bagimlilik riski azdir.

CPU Sicakligi: Termal Gurultu

Islemcinin sicakligi sabit degildir. Mikro-saniyeler icinde kucuk dalgalanmalar olur. Bu dalgalanmalarin en dusuk bitleri (least significant bits) rastgelelik icerir. Sicaklik sensorunden okudugunuz degerin son bir iki biti, termal gurultuden gelir. Tek basina yavastir ama diger kaynaklarla karistirilirsa katki saglar.

Zamanlama: Mikro-Saniye Farklari

Bir islemin ne kadar surdugunu olcerken, nano-saniye seviyesindeki farklar rastgeledir. Isletim sistemi scheduling'i, cache hit/miss, RAM erisim suresi, bunlarin hepsi mikro-saniye farkliliklari yaratir. Bu farkliliklar, entropy kaynagi olarak kullanilabilir.

Karistirma: SHA-256 ile Guvenlik

Tek bir entropy kaynagi guvenilir olabilir ama guvenlik acisindan, birden fazla kaynagi karistirmak her zaman daha iyidir. Neden? Cunku tek bir kaynak bozulursa veya zayiflasa bile, digerleri toplam rastgeleligi korur.

Bizim API'mizde dort kaynak var: RDRAND, /dev/hwrng, CPU sicakligi ve zamanlama. Bu dort kaynaktan gelen tum veriler, SHA-256 ile karistirilir. SHA-256, tek yonlu bir hash fonksiyonudur: Girdiyi bilmeden ciktiyi tahmin edemezsiniz. Ve cikti, girdinin her bir bitinden etkilenir. Yani bir kaynak zayif olsa bile, diger kaynaklarin entropy'si ciktiyi guvenli kilar.

Bu yontem, NIST (ABD Ulusal Standartlar ve Teknoloji Enstitusu) tarafindan onaylanan bir yaklasimdir.

True Random Nerede Kullanilmali?

Kriptografi bunun en kritik kullanim alani. Ama sadece orada degil:

Sifre uretimi: Bir sifrenin guclu olmasi icin rastgele olmasi gerekir. "password123" rastgele degil. 16 karakterlik, tum karakter setini kullanan bir sifre 103 bit entropy verir. Bu, 2^103 olasi kombinasyon demek. Dunyadaki tum bilgisayarlar birlikte calissa, milyarlarca yil surer. Ama bu sifre pseudo-random ile uretilmise ve seed biliniyorsa, bir saniyede kirilir.

UUID uretimi: Bir sistemde benzersiz ID'ler uretmek icin. RFC 4122 v4 UUID'ler rastgele byte'lardan uretilir. Eger rastgelelik pseudo ise, ID'ler carpisabilir. True random ile carpisma ihtimali pratikte sifir.

API token ve session ID: Web uygulamalarinda kullanici oturumlari icin token uretirken. Pseudo-random token, tahmin edilebilir. True random token, tahmin edilemez.

Blockchain private key: Bitcoin, Ethereum, Solana cuzdanlarinin private key'i rastgele bir sayidir. Eger bu sayi pseudo-random ile uretilirse ve seed biliniyorsa, cuzdaniniz bosaltilabilir. Gercekten oldu: 2015'te Android'de SecureRandom bug'i yuzunden bazi Bitcoin cuzdanlari calindi.

Oyun ve lotto: Online kumar sitelerinde, poker kartlarinin dagilimi veya rulet tekerleginin sonucu rastgele olmalidir. Pseudo-random kullanilirsa, bir saldirgan kartlari ongorebilir. Gercek kumar siteleri, donanimsal TRNG kullanir.

Monte Carlo simulasyonlari: Bilimsel arastirmalarda, rastgele ornekleme ile hesaplama yapilirken. Pseudo-random, bias'li sonuclar verebilir. True random, daha dogru istatistiksel sonuclar uretir.

##entropy_bits: Sifre Guvenliginin Olcusu

Bir sifrenin guclugunu olcen metrik "entropy bits" tir. Her ekstra bit, olasi kombinasyon sayisini ikiye katlar.

  • 20 bit = 1 milyon kombinasyon. Aninda kirilir.
  • 40 bit = 1 trilyon kombinasyon. Bir kac saatte kirilir.
  • 60 bit = 1 milyar trilyon kombinasyon. Gunlerce surer.
  • 80 bit = Guclu ama buyuk bir cluster ile kirilabilir.
  • 103 bit = Banka seviyesi. Pratikte kirilamaz.
  • 128 bit = AES-128 standardi. Kriptografik seviye.
  • 256 bit = Devlet seviyesi. Pratikte kirilamaz, kuantum bilgisayarlarla bile. Grover algoritmasi 128 bit'e dusurur ama 128 bit hala kirilamaz.

Bizim API'miz, 16 karakterlik bir sifre icin 103 bit entropy uretiyor. Cunku tum karakter setini kullaniyor (88 farkli karakter) ve true random ile uretiyor. Ayni uzunlukta pseudo-random bir sifre, seed biliniyorsa 0 bit entropy verir.

True RNG API

Bu yaziyi yazma nedenim, true random number generator API'sini yayinlamis olmamiz. API, yukarida anlattigim dort entropy kaynagini (RDRAND, /dev/hwrng, CPU sicakligi, zamanlama) SHA-256 ile karistirarak true random sayilar uretiyor.

Endpoint'ler:

  • /random/int - True random integer
  • /random/bytes - True random bytes
  • /random/uuid - RFC 4122 v4 UUID
  • /random/password - Kriptografik sifre
  • /entropy/status - Entropy havuzu durumu ve kaynaklar

API, RapidAPI uzerinde yayinda. Free plan: ayda 100 istek ucretsiz. Denemek isterseniz: https://trng.niyazi.cv

Pseudo-random cogu zaman yeterli. Ama kriptografi icin, gercek rastgelelik sart. Fizikten gelen rastgeleligin yerini hicbir matematiksel formul tutamaz.

← Önceki"True Random: Why Hardware Entropy Matters"Sonraki →Prism API - Multidisciplinary Problem Analysis
M
3x
j/ sonraki k/ önceki s kaydır f mod +/ font Esc çık