Ana içeriğe geç

Kripto Para Dünyasında Entropi ve Rastgelelik: Neden Önemlidir?

Her kripto para özel anahtarı, her seed phrase ve kullandığınız her adres bir rastgele sayı ile başlar. Tüm kripto portföyünüzün güvenliği tek bir varsayıma dayanır: bu sayı gerçekten öngörülemezdi. Anahtarınızı üreten rastgele sayı üreteci zayıf, yanlı veya tahmin edilebilir ise fonlarınız çalınabilir; kriptografiyi kırarak değil, anahtarı tahmin ederek.

Bu rehber, kriptografik bağlamda entropinin ne anlama geldiğini, rastgele sayı üreteçlerinin nasıl çalıştığını, rastgelelik başarısız olduğunda tarihsel olarak nelerin yanlış gittiğini ve anahtar üretiminizin sağlam olmasını nasıl sağlayacağınızı açıklar.

Entropi Nedir?

Bilgi teorisinde entropi, bir veri parçasındaki belirsizlik veya öngörülemezlik miktarını ölçer. Kriptografide entropi, bir değerin kaç bit gerçek rastgelelik içerdiğini niceler.

256 bitlik bir özel anahtarın 256 bit entropiye sahip olması gerekir; bu da saldırganın onu bulmak için ortalama olarak 2^255 deneme yapması gerektiği anlamına gelir (arama uzayının ortalama yarısı). Anahtar yalnızca 32 bit gerçek entropiyle üretildiyse (RNG kusurlu olduğu için), saldırganın yalnızca yaklaşık 2^31 denemeye ihtiyacı vardır; bu da yaklaşık 2 milyardır ve modern bir bilgisayar bunu dakikalar içinde tüketebilir.

Entropinin Ölçülmesi

Entropi bit cinsinden ölçülür. Rastgele bir X değişkeninin entropisi:

H(X) = -sum(p(x) * log2(p(x))) for all possible values x

Düzgün dağıtılmış 256 bitlik rastgele bir sayı için:

  • Her bitin 0 veya 1 olma olasılığı 0.5’tir.
  • Entropi = 256 bit (bu boyut için maksimum).

Her bitin 1 olma olasılığının 0.7 olduğu yanlı bir üreteç için:

  • Bit başına entropi = -(0.7 * log2(0.7) + 0.3 * log2(0.3)) = 0.881 bit.
  • 256 bit için toplam entropi = 225.5 bit (ideale göre %11.9 daha az).

Küçük yanlılıklar bile çok sayıda bit boyunca birikir ve etkili güvenlik seviyesini önemli ölçüde düşürebilir.

BIP-39 Bağlamında Entropi

Mnemonic LengthEntropySecurity LevelBrute-Force at 10^12/sec
12 words128 bits128-bit~10^19 years
15 words160 bits160-bit~10^28 years
18 words192 bits192-bit~10^38 years
24 words256 bits256-bit~10^57 years

Bu sayılar entropinin gerçekten düzgün dağıtılmış olduğunu varsayar. RNG kusurluysa gerçek güvenlik seviyesi dramatik biçimde daha düşük olabilir.

Rastgele Sayı Üreteci Türleri

Gerçek Rastgele Sayı Üreteçleri (TRNG)

TRNG’ler, kuantum seviyesinde doğası gereği öngörülemez olan fiziksel olayları örnekler:

  • Isıl gürültü — Elektronların termal hareketinden kaynaklanan dirençlerdeki rastgele voltaj dalgalanmaları.
  • Shot noise — Elektron akışının ayrık doğası nedeniyle akımdaki rastgele dalgalanmalar.
  • Radyoaktif bozunma — Tekil bozunma olaylarının zamanlaması temelde öngörülemezdir.
  • Atmosferik gürültü — Yıldırım ve diğer atmosferik süreçlerden kaynaklanan radyo frekans gürültüsü.

Ledger ve Trezor gibi donanım cüzdanları çip üzeri TRNG’ler kullanır. Bunlar fiziksel gürültü kaynaklarını örnekler ve çıktıyı whitening ve sağlık testlerinden geçirir.

Avantajlar: Fizikten gelen gerçek rastgelelik; tahmin edilecek deterministik durum yoktur.
Dezavantajlar: Donanıma bağımlıdır; gürültü kaynağı bozulursa sessizce başarısız olabilir; çıktı hızı sınırlı olabilir.

Kriptografik Olarak Güvenli Sözde Rastgele Sayı Üreteçleri (CSPRNG)

CSPRNG, yeterince rastgele bir tohum verildiğinde gerçek rastgelelikten ayırt edilemeyen çıktı üreten deterministik bir algoritmadır:

  • Linux: /dev/urandom (ChaCha20 veya benzer bir şifre kullanır, donanım entropisinden tohumlanır).
  • macOS: /dev/urandom (arc4random, donanım entropisinden tohumlanır).
  • Windows: BCryptGenRandom (CNG sağlayıcısı).
  • Web tarayıcıları: crypto.getRandomValues() (işletim sistemi CSPRNG’sine devreder).
  • Python: os.urandom() veya secrets modülü.
  • Node.js: crypto.randomBytes().

Avantajlar: Hızlıdır; iyi çalışılmış algoritmalar; tüm platformlarda mevcuttur.
Dezavantajlar: Yalnızca başlangıç tohum entropisi kadar güçlüdür; deterministiktir, iç durum bilinirse tüm gelecekteki çıktı tahmin edilebilir.

Kriptografik Olmayan PRNG’ler (Anahtarlar İçin ASLA Kullanmayın)

Çoğu programlama dilindeki standart kütüphane rastgele fonksiyonları kriptografi için değil, istatistiksel simülasyon için tasarlanmıştır:

  • Python: random.random() (Mersenne Twister — deterministik, durum 624 çıktıdan geri kazanılabilir).
  • JavaScript: Math.random() (V8’de xorshift128+ — tahmin edilebilir).
  • C: rand() (lineer kongrüans üreteci — kolayca tahmin edilebilir).
  • Java: java.util.Random (lineer kongrüans — tahmin edilebilir).

Bu üreteçler düşük entropiye, kısa periyotlara ve tahmin edilebilir duruma sahiptir. Bunları anahtar üretimi için kullanmak, neredeyse hiç rastgelelik kullanmamakla eşdeğerdir. Bu fonksiyonlarla asla özel anahtar veya seed phrase üretmeyin.

Rastgeleliğin Tarihsel Başarısızlıkları

Android SecureRandom Hatası (2013)

Ağustos 2013’te Android’in SecureRandom uygulamasında kritik bir kusur keşfedildi. Java PRNG belirli Android cihazlarda düzgün tohumlanmıyordu; bu da birden fazla Bitcoin cüzdan uygulamasının özel anahtarları tahmin edilebilir bir durumdan üretmesine neden oldu. Bir saldırgan bunu kullanarak yaklaşık 55 BTC çaldı. Hata ECDSA imza nonce üretimini etkiliyordu; aynı nonce’un iki kez kullanılması, özel anahtarın iki imzadan hesaplanmasına izin verir.

"Blockchain Bandit" (2019)

Güvenlik araştırmacısı Adrian Bednarek, cüzdanların son derece zayıf özel anahtarlarla üretildiğini keşfetti; 1, 2, 3 gibi anahtarlar veya bir kez hash’lenmiş basit sözlük kelimeleri. Bir saldırgan yıllar boyunca bu adreslerden sistematik biçimde fonları süpürerek 45.000 ETH’den fazla biriktirdi. Bandit, düşük entropili anahtarları sırayla deneyip fon içerip içermediklerini kontrol etti.

Boşaltılan anahtar örnekleri:

  • Özel anahtar 0x0000000000000000000000000000000000000000000000000000000000000001 (1 sayısı)
  • Yaygın parolalardan ve ifadelerden türetilen özel anahtarlar

Milk Sad Zafiyeti (2023)

libbitcoin-explorer (bx) aracının seed komutu, yalnızca 32 bit sistem zamanıyla tohumlanan Mersenne Twister kullanıyordu. Bu, bu araçla üretilen tüm anahtarların en fazla 32 bit entropiye sahip olduğu anlamına geliyordu; yaklaşık 4.3 milyar olasılık. Saldırganlar bu anahtarları brute-force ile kırıp fonları çaldı.

Debian OpenSSL Zayıf Anahtar Hatası (2008)

Bir Debian geliştiricisi, OpenSSL rastgele sayı üretecine entropi sağlayan bir kod satırını yanlışlıkla kaldırdı. İki yıl boyunca (2006-2008), Debian ve Ubuntu sistemlerinde üretilen her kriptografik anahtar süreç kimliğinden gelen yalnızca 15 bit entropiye sahipti ve en fazla 32.767 benzersiz anahtar üretiyordu. Etkilenen sistemlerde bu dönemde üretilen tüm SSH anahtarları, SSL sertifikaları ve tüm kripto para anahtarları tehlikeye girdi.

Çıkarılan Dersler

  1. Doğrulama olmadan tek bir entropi kaynağına asla güvenmeyin.
  2. Küçük uygulama hataları entropiyi felaket düzeyinde azaltabilir.
  3. Saldırganlar zayıf rastgeleliği aktif olarak sömürür; bu teorik değildir.
  4. Entropi açısından kritik işlemler için açık kaynak ve denetlenmiş kod şarttır.

Entropi Kaynakları Ayrıntılı İnceleme

İşletim Sistemi Entropi Havuzu

Modern işletim sistemleri, birden çok kaynakla beslenen bir entropi havuzu tutar:

  • Kesme zamanlaması — Donanım kesmelerinin (klavye, fare, disk, ağ) zamanlaması öngörülemez girdi sağlar.
  • Disk I/O zamanlaması — Disk okuma/yazma işlemlerinin hassas zamanlaması mekanik ve elektronik etkenlere göre değişir.
  • Donanım RNG — Modern CPU’lar (Intel RDRAND, AMD) çip içi rastgele sayı üreteçleri içerir.
  • Açılış zamanı entropisi — Bazı sistemler yeniden başlatmalar arasında entropiyi saklar (Linux’ta /var/lib/systemd/random-seed).

İşletim sistemi bu kaynakları kriptografik ilkelere dayanarak entropi havuzunda karıştırır, ardından CSPRNG’sini tohumlamak için bu havuzu kullanır. Modern Linux çekirdeklerinde (5.18+), /dev/urandom açılışta yeterli entropi toplanana kadar bekler, ardından bir daha beklemez.

Tarayıcı Entropisi (crypto.getRandomValues)

SafeSeed’in üreteci gibi web tabanlı bir araç kullandığınızda, tarayıcının crypto.getRandomValues() API’si kullanılır. Bu, işletim sisteminin CSPRNG’sine devreder:

  • Chrome: İşletim sistemi CSPRNG’sine devreder (BoringSSL).
  • Firefox: İşletim sistemi CSPRNG’sine devreder (NSS).
  • Safari: İşletim sistemi CSPRNG’sine devreder (CommonCrypto).

Altta yatan işletim sistemi güvenliyse bu yöntem anahtar üretimi için güvenli kabul edilir. Ana endişe, işletim sistemi CSPRNG’sinin tehlikeye girebileceği bir ortamda çalışmaktır (ör. yetersiz entropi kaynaklarına sahip bir sanal makine veya tehlikeye girmiş bir işletim sistemi).

Donanım Cüzdanı Entropisi

Donanım cüzdanları çip üzeri gerçek rastgele sayı üreteçleri kullanır:

  • Ledger (Secure Element ST33): Analog gürültü örnekleyen ST33 çipinin TRNG’sini kullanır. Çıktı, kullanımdan önce NIST SP 800-90B sağlık testlerinden geçer.
  • Trezor: STM32 çipinin donanım RNG’sini kullanır. Trezor ayrıca kullanıcı tarafından sağlanan zar atışı entropisini karıştırmayı destekler.
  • Coldcard: ATECC608A secure element TRNG’si ile MCU’nun donanım RNG’sini birlikte kullanır ve iki kaynağı karıştırır.

Zar Atışı Entropisi

Elle zar atmak, en şeffaf entropi üretim yöntemidir:

  • Adil altı yüzlü bir zar, atış başına log2(6) = 2.585 bit entropi üretir.
  • 100 atış yaklaşık 258.5 bit entropi üretir; bu da 24 kelimelik bir seed phrase için yeterlidir.
  • Kullanıcı rastgeleliği fiziksel olarak doğrulayabilir (adil zar, adil atış, manipülasyon yok).

Zar adilliğini doğrulama:

  • Kumarhane kalitesinde hassas zarlar kullanın (keskin kenarlı, yuvarlatılmış değil).
  • Sert, düz bir yüzeyde ve bir stop ile atın.
  • Zarı "yerleştirmeyin"; serbestçe yuvarlanmasına izin verin.
  • Her sonucu hemen ve sırayla kaydedin.
SafeSeed Aracı

SafeSeed Seed Phrase Generator, bir BIP-39 seed phrase üretmek için kendi entropinizi (zar atışı sonuçları gibi) girmenize olanak tanır. Bu, aracın doğru BIP-39 uygulamasından faydalanırken rastgelelik kaynağını doğrulamanızı sağlar. Maksimum güvenlik için aracı çevrimdışı kullanın; Offline Key Generation guide rehberimize bakın.

Rastgeleliği Test Etme ve Doğrulama

NIST Statistical Test Suite

NIST SP 800-22, rastgele sayı üreteçlerini değerlendirmek için bir dizi istatistiksel test tanımlar:

  • Frequency test — 0 ve 1 sayıları yaklaşık eşit mi?
  • Block frequency test — Bit alt blokları yaklaşık eşit dağılıyor mu?
  • Runs test — Art arda gelen aynı bit dizileri (runs) beklenen uzunlukta mı?
  • Longest run test — En uzun run beklenen sınırlar içinde mi?
  • Matrix rank test — İkili matris sıraları beklenen dağılımları izliyor mu?
  • Spectral test — Bit dizisinin DFT’si beklenen özellikleri gösteriyor mu?

Bu testler yanlılıkları ve kalıpları tespit edebilir, ancak bir üretecinin güvenli olduğunu kanıtlayamaz. Yalnızca başarısızlıkları tespit edebilir.

Dieharder Test Suite

Orijinal Diehard testlerine ek testler içeren daha kapsamlı bir istatistiksel test paketidir. Linux’ta açık kaynak yazılım olarak mevcuttur.

Kullanıcılar İçin Pratik Doğrulama

Çoğu kullanıcı NIST test paketlerini çalıştıramaz. Pratik doğrulama adımları:

  1. Kaynak doğrulaması — Araç crypto.getRandomValues(), os.urandom() veya donanım RNG kullanıyor mu? Kaynak kodunu kontrol edin.
  2. Çapraz üretim testi — Birden fazla seed phrase üretin ve her seferinde farklı olduklarını doğrulayın.
  3. Entropi gösterimi — Bazı araçlar ham entropiyi gösterir; rastgele göründüğünü doğrulayın (bariz kalıplar olmadan).
  4. Açık kaynak denetimi — Araç açık kaynak mı ve denetlendi mi?

Entropi Kaynaklarını Karıştırma

Yüksek güvenlikli anahtar üretimi için en iyi uygulama, birden fazla entropi kaynağını karıştırmaktır:

Final Entropy = Hash(Hardware RNG output || OS CSPRNG output || User dice rolls || Timing data)

Kaynakları karıştırmak, bir kaynak tehlikeye girmiş veya yanlı olsa bile en az bir kaynak yeterli entropi sağladığı sürece nihai çıktının güvenli kalmasını sağlar. İyi tasarlanmış donanım cüzdanları ve anahtar üretim araçları bu yaklaşımı kullanır.

XOR Karıştırma

Basit bir karıştırma yöntemi XOR’dur: A kaynağından 256 bit ve B kaynağından 256 bit varsa:

Mixed = A XOR B

A veya B’den biri gerçekten rastgeleyse sonuç gerçekten rastgeledir. Her ikisi de yanlı ama bağımsızsa sonuç her birinden daha az yanlıdır.

Hash Karıştırma

Farklı uzunluk veya kalitedeki kaynakları karıştırmak için birlikte hash’leyin:

Mixed = SHA-256(Source_A || Source_B || Source_C)

Hash fonksiyonu bir entropi çıkarıcı gibi davranır ve giriş biçiminden bağımsız olarak düzgün bir çıktı üretir.

Multi-Signature Kurulumlarında Entropi

Multi-signature cüzdanlar bir tür entropi yedekliliği sağlar: bir anahtar zayıf entropiyle üretilmiş olsa bile saldırganın diğer anahtarları da tehlikeye atması gerekir. Her anahtarın bağımsız üretildiği 2-of-3 multisig, en zayıf anahtarın değil en güçlü anahtarın güvenliğini sağlar.

Bu, yüksek değerli depolama için multi-signature kurulumları lehine güçlü bir argümandır.

SSS

Kripto parada entropi nedir?

Entropi, kriptografik anahtar üretiminde kullanılan verinin rastgelelik veya öngörülemezlik ölçüsüdür. Kripto parada özel anahtarlarınızın ve seed phrase’lerinizin güvenliği tamamen yeterli entropiye bağlıdır. 256 bitlik bir anahtar 256 bit gerçek rastgelelik içermelidir; entropi daha düşükse anahtar tahmin edilebilir hale gelir.

Güvenli bir cüzdan için ne kadar entropiye ihtiyacım var?

12 kelimelik bir BIP-39 seed phrase 128 bit entropi, 24 kelimelik bir ifade ise 256 bit entropi sağlar. Her ikisi de mevcut teknolojiyle brute-force saldırılarına karşı güvenli kabul edilir. Yüksek değerin uzun vadeli saklanması için maksimum güvenlik payı sunması adına 256 bit (24 kelime) önerilir.

Kripto anahtar üretimi için Math.random() güvenli midir?

Kesinlikle hayır. Math.random() ve benzer kriptografik olmayan PRNG’ler (Python random, C rand()) deterministik, tahmin edilebilir ve düşük entropilidir. Kriptografik anahtar üretimi için asla kullanılmamalıdır. Tarayıcılarda her zaman crypto.getRandomValues(), Python’da os.urandom() veya bir donanım rastgele sayı üreteci kullanın.

Kendi rastgeleliğimi rastgele sayılar düşünerek üretebilir miyim?

Hayır. İnsanlar rastgele sayı üretmede kötü şöhrete sahiptir. Çalışmalar, insanların seçtiği "rastgele" dizilerin göründüğünden çok daha az entropi içerdiğini sürekli gösterir. Bunun yerine fiziksel bir süreç (zar, donanım RNG) veya kriptografik olarak güvenli bir yazılım RNG kullanın.

Cüzdanımın rastgele sayı üretecinin güvenli olduğunu nasıl doğrularım?

Cüzdanın kaynak kodunu (açık kaynaksa) kontrol ederek CSPRNG veya donanım TRNG kullandığını doğrulayın. crypto.getRandomValues(), os.urandom() veya donanım RNG API çağrılarını arayın. Donanım cüzdanları için üreticinin güvenlik dokümantasyonunu ve üçüncü taraf denetim raporlarını inceleyin.

"blockchain bandit" nedir ve entropi hakkında ne öğretir?

"blockchain bandit", zayıf özel anahtarlarla (1, 2, 3 gibi sayılar veya basit parolalardan türetilmiş anahtarlar) üretilen cüzdanlardan sistematik olarak kripto para çalan bir saldırgandır. Bu olay, saldırganların düşük entropili anahtarları aktif olarak tarayıp buldukları fonları anında süpürdüğünü gösterdi. Yüksek entropili rastgele sayı üretiminin kritik önemini vurgular.

Donanım cüzdanı rastgele sayı üreteçleri güvenilir midir?

Donanım cüzdanı TRNG’leri genel olarak güvenilirdir, ancak tek bir güven noktası oluştururlar. Maksimum güvenlik için donanım RNG çıktısını kullanıcı tarafından sağlanan entropiyle (zar atışları) karıştırabilirsiniz. Bazı donanım cüzdanları (Trezor ve Coldcard gibi) bunu yerel olarak destekler. Bu, donanım RNG tehlikeye girse bile ortaya çıkan anahtarın güvenli kalmasını sağlar.

İşletim sistemi (Linux, macOS, Windows) anahtar güvenliğini etkiler mi?

Evet. İşletim sisteminin CSPRNG kalitesi ve uygulaması anahtar güvenliğini etkiler. Linux, macOS ve Windows’un modern sürümleri kriptografik olarak güvenli rastgele sayı üreteçleri sağlar (/dev/urandom, arc4random, BCryptGenRandom). Ancak 2006-2008 Debian OpenSSL hatası, işletim sistemi seviyesindeki zafiyetlerin entropiyi felaket düzeyinde azaltabileceğini gösterdi. İşletim sisteminizi güncel tutun ve iyi denetlenmiş yazılımlar kullanın.

İlgili Rehberler