BIP-39 Standardı Açıklandı: Mnemonik Seed Phrase'ler Nasıl Çalışır?
BIP-39 (Bitcoin Improvement Proposal 39), kripto para cüzdan anahtarlarını türetmek için kullanılan entropiyi kodlayan, alışık olduğumuz 12 veya 24 kelimelik dizileri oluşturan mnemonik cümle standardını tanımlar. 2013 yılında Marek Palatinus, Pavol Rusnak, Aaron Voisine ve Sean Bowe tarafından yayımlanan BIP-39, neredeyse tüm büyük kripto paralarda cüzdan yedekleme için baskın standart haline gelmiştir.
BIP-39'u teknik düzeyde anlamak, seed phrase yedeğinizin güvenilir olduğuna dair güven sağlar ve farklı cüzdan uygulamalarının güvenlik özelliklerini değerlendirmenize yardımcı olur.
BIP-39 Genel Bakış
BIP-39 iki süreci tanımlar:
- Mnemonik üretimi — Rastgele entropinin insan tarafından okunabilir kelime dizisine dönüştürülmesi.
- Seed türetimi — Mnemonik kelimelerin (ve isteğe bağlı bir passphrase'in) BIP-32 ile hiyerarşik deterministik anahtar üretiminde kullanılabilecek 512 bitlik ikili bir seed'e dönüştürülmesi.
Bu iki süreç bilinçli olarak ayrıdır. Mnemonik, insan dostu gösterimdir; seed ise anahtar türetme için kullanılan kriptografik girdidir.
Adım 1: Entropi Üretimi
Süreç, kriptografik olarak güvenli rastgele veriden (entropi) oluşan bir blokla başlar. BIP-39 beş entropi boyutunu destekler:
| Entropi (bit) | Checksum (bit) | Toplam (bit) | Kelime |
|---|---|---|---|
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |
Pratikte neredeyse tüm cüzdanlar 128 bit (12 kelime) veya 256 bit (24 kelime) kullanır. Diğer boyutlar spesifikasyona göre geçerlidir, ancak nadiren uygulanır.
Entropi kaynağının kalitesi kritik önemdedir. Rastgele sayı üreteci yanlıysa, tahmin edilebilirse veya yetersiz entropiye sahipse, ortaya çıkan seed phrase bir saldırgan tarafından tahmin edilebilir. Bu konunun ayrıntılı ele alımı için Entropi ve Rastgelelik rehberimize bakın.
Entropi Kaynakları
- Donanım rastgele sayı üreteçleri (HRNG) — Ledger ve Trezor gibi donanım cüzdanlarında kullanılır. Gerçek rastgelelik üretmek için fiziksel olguları (termal gürültü, shot noise) örnekler.
- İşletim sistemi CSPRNG — Linux/macOS'ta
/dev/urandom, Windows'taCryptGenRandomveya tarayıcılardacrypto.getRandomValues(). Bunlar, donanım entropi kaynaklarıyla tohumlanmış kriptografik olarak güvenli sözde rastgele sayı üreteçleridir (CSPRNG). - Zar atışları — Bazı kullanıcılar entropiyi casino kalitesinde zarlarla manuel üretir, atışları ikili değerlere veya kelime indekslerine eşler. Bu, yazılım veya donanım RNG'ye duyulan güveni ortadan kaldırır.
Adım 2: Checksum Hesaplama
Entropi üretildikten sonra bir checksum eklenir:
- Entropi baytlarının SHA-256 hash'ini hesaplayın.
- Hash'in ilk
ENT / 32bitini alın (ENT burada bit cinsinden entropi uzunluğudur). - Bu checksum bitlerini entropiye ekleyin.
256 bit entropi için bu işlem 8 checksum biti üretir ve toplam 264 bit olur.
Checksum bir hata tespit mekanizmasıdır: kurtarma sırasında seed phrase'inizi cüzdana girdiğinizde cüzdan checksum'ı yeniden hesaplar. Herhangi bir kelime yanlışsa veya kelime sırası yanlışsa checksum başarısız olur ve cüzdan mnemoniği reddeder. Bu, yazım hatalarına karşı koruma sağlar ancak onları düzeltmez; sadece bir şeyin yanlış olduğunu tespit eder.
Checksum Etkileri
Mnemoniğin son kelimesi checksum bitlerini kodladığı için, belirli bir dizi için her kelime son kelime olarak geçerli değildir. 24 kelimelik bir mnemonikte son kelime 3 bit entropi ve 8 bit checksum kodlar; bu nedenle verilen ilk 23 kelime için olası 2.048 kelimenin yalnızca 8'i geçerlidir. Bu yüzden son kelimeyi özgürce seçemezsiniz.
Adım 3: Kelimelere Eşleme
Birleşik entropi + checksum bitleri 11 bitlik gruplara ayrılır. Her 11 bitlik grup 0'dan 2.047'ye bir indeks temsil eder ve BIP-39 kelime listesindeki bir kelimeye karşılık gelir.
264 bits / 11 bits per word = 24 words
132 bits / 11 bits per word = 12 words
İngilizce Kelime Listesi
BIP-39 İngilizce kelime listesi tam olarak 2.048 kelime içerir. Liste şu özelliklerle dikkatle hazırlanmıştır:
- Benzersiz dört harfli önekler — Hiçbir iki kelime aynı ilk dört karakteri paylaşmaz. Bu,
abandonkelimesininabanolarak belirsizliğe yer bırakmadan tanımlanmasını sağlar; kompakt metal yedekler için kullanışlıdır. - Yaygın kelime dağarcığı — Kelimeler basit, geniş ölçüde bilinen İngilizce kelimelerdir. Jargon, özel isim veya çok nadir terimler yoktur.
- Benzer kelimelerden kaçınma — Kolayca karıştırılabilecek kelimeler (ör. "woman" ve "women") mümkün olduğunda dışarıda bırakılır.
- Karakter uzunluğu — Tüm kelimeler 3 ile 8 karakter arasındadır.
Diğer Dillerde Kelime Listeleri
BIP-39 dokuz dilde kelime listesi tanımlar:
| Dil | Durum | Notlar |
|---|---|---|
| İngilizce | Referans standart | En yaygın desteklenen |
| Japonca | Standardize | Katakana kullanır; boşluklar ideografiktir (U+3000) |
| Korece | Standardize | |
| İspanyolca | Standardize | |
| Çince (Basitleştirilmiş) | Standardize | |
| Çince (Geleneksel) | Standardize | |
| Fransızca | Standardize | |
| İtalyanca | Standardize | |
| Çekçe | Standardize | |
| Portekizce | Standardize |
Önemli uyumluluk notu: Bir kelime listesiyle oluşturulan mnemonik, farklı bir dil kelime listesiyle geri yüklenemez. Diller arasında kelime indeksleri farklıdır. Yedeğinizi oluştururken hangi dilin kullanıldığını her zaman not edin.
Adım 4: Seed Türetimi (PBKDF2)
Mnemonik cümle doğrudan kriptografik anahtar olarak kullanılmaz. Bunun yerine PBKDF2-HMAC-SHA512 ile key stretching uygulanır:
PBKDF2(
password = mnemonic sentence (words joined by spaces, normalized to UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)
Bu işlem, BIP-32 hiyerarşik deterministik anahtar türetme için girdi olarak kullanılan 512 bitlik bir seed üretir.
BIP-39'da PBKDF2'nin Temel Özellikleri
Key stretching — PBKDF2'nin 2.048 iterasyonu brute-force saldırılarına hesaplama maliyeti ekler. Modern parola hash standartlarına göre 2.048 iterasyon mütevazıdır; asıl güvenlik key-stretching faktöründen değil, mnemoniğin kendi entropisinden (128 veya 256 bit) gelir.
Passphrase desteği — Salt, isteğe bağlı bir passphrase içerir ("25th word"). Passphrase verilmezse salt yalnızca "mnemonic" dizgesidir. Passphrase verilirse salt "mnemonic" + passphrase olur. Bu da aynı mnemonikten, her farklı passphrase için tamamen farklı bir seed ve dolayısıyla tamamen farklı anahtarlar ve adresler üretildiği anlamına gelir.
Passphrase doğrulaması yok — Mnemonik checksum'ının aksine passphrase üzerinde checksum yoktur. Her passphrase geçerlidir. Yanlış passphrase girmek hata üretmez; sessizce farklı (boş) bir cüzdan oluşturur. Bu, inkar edilebilirlik açısından bir özelliktir ancak passphrase'ini unutan kullanıcılar için bir risktir.
Unicode normalizasyonu — Mnemonik ve passphrase, PBKDF2'ye verilmeden önce UTF-8 NFKD (Normalization Form Compatibility Decomposition) ile normalize edilir. Bu, işletim sisteminin karakterleri içte nasıl temsil ettiğinden bağımsız olarak uygulamalar arasında tutarlı seed türetimi sağlar.
Adım 5: Seed'den Anahtarlara (BIP-32)
PBKDF2'den gelen 512 bit seed, BIP-32'ye (Hierarchical Deterministic Wallets) girdi olarak kullanılır:
- Seed, "Bitcoin seed" anahtarıyla HMAC-SHA512'den geçirilir.
- Sol 256 bit master private key olur.
- Sağ 256 bit master chain code olur.
- Birlikte master extended private key'i (xprv) oluştururlar.
Buradan sonra, BIP-44 türetim yolları, coin'e özel anahtarları ve adresleri türetmek için standart bir ağaç yapısı tanımlar.
Örnek Uygulama
BIP-39'u, 128 bit entropi (12 kelimelik mnemonik) kullanan basitleştirilmiş bir örnekle adım adım izleyelim:
1. 128 bit entropi üretin
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
(Bu tamamen sıfırlardan oluşan entropidir; yalnızca gösterim amaçlıdır. Pratikte asla kullanmayın.)
2. SHA-256 hash'ini hesaplayın
SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb
3. Hash'in ilk 4 bitini checksum olarak alın
İlk bayt: 0x37 = 00110111. İlk 4 bit: 0011.
4. Checksum'ı entropiye ekleyin
128 bit sıfır + 0011 = toplam 132 bit.
5. 11 bitlik gruplara bölün
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"
Sonuç: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
Bu, tamamen sıfır entropi için bilinen test vektörüdür. Checksum bitleri nedeniyle son kelime "about" olur ("abandon" değil).
6. PBKDF2 ile seed türetin
PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)
Bu işlem BIP-32 türetiminde kullanılan 512 bit seed üretir.
BIP-39'u çalışırken görmek için SafeSeed Seed Phrase Generator aracını kullanın. Bir seed phrase üretin ve entropi, checksum ve kelime eşlemesini gerçek zamanlı görüntüleyin. Maksimum güvenlik için aracı çevrimdışı çalıştırın.
BIP-39'un Güvenlik Analizi
Entropi Güvenliği
24 kelimelik bir mnemonik için (256 bit entropi):
- Arama uzayı 2^256'dır, yaklaşık 1.16 x 10^77 olasılık.
- Saniyede bir trilyon (10^12) deneme hızında bile kapsamlı arama yaklaşık 3.67 x 10^57 yıl sürer; bu, evrenin yaşından (1.38 x 10^10 yıl) çok daha uzundur.
12 kelimelik bir mnemonik için (128 bit entropi):
- Arama uzayı 2^128'dir, yaklaşık 3.4 x 10^38 olasılık.
- Saniyede bir trilyon denemede kapsamlı arama yaklaşık 10^19 yıl sürer.
Her ikisi de klasik hesaplama ile pratikte mümkün değildir.
PBKDF2 Değerlendirmeleri
2.048 iterasyonlu PBKDF2 brute-force saldırılarına sabit bir çarpan ekler, ancak birincil güvenlik bariyeri değildir. Bazı güvenlik araştırmacıları, 2.048 iterasyonun Argon2 veya bcrypt gibi modern anahtar türetme fonksiyonlarına göre düşük olduğunu belirtmiştir. Ancak baskın faktör mnemonik entropisi (128 veya 256 bit) olduğundan, bu pratikte ikincil bir endişedir.
Checksum Sınırlamaları
Checksum çoğu yazım hatasını yakalar, ancak:
- Hataları tespit eder, düzeltmez.
- 12 kelimelik mnemoniklerde yalnızca 4 checksum biti vardır; bu da rastgele değişikliklerin yaklaşık 16'da 1'inin checksum'ı geçeceği anlamına gelir.
- Geçerli checksum üreten kelime sırası değişikliklerine karşı koruma sağlamaz.
Passphrase Riskleri
Passphrase özelliği güçlüdür ancak riskler getirir:
- Passphrase'i unutursanız fonlar kurtarılamaz ("reset" mekanizması yoktur).
- Passphrase doğrulanmaz; her dizge geçerli bir cüzdan üretir.
- Bir saldırgan mnemoniği elde edip passphrase'i elde edemezse, passphrase'i brute-force etmesi gerekir; bu da passphrase entropisiyle orantılı ek güvenlik sağlar.
BIP-39 Eleştirileri
BIP-39, Bitcoin geliştirme topluluğunda eleştirisiz değildir.
Versiyonlama Yok
BIP-39 bir sürüm baytı içermez; bu nedenle türetim süreci sonsuza kadar sabittir. Gelecekte farklı bir anahtar türetme fonksiyonu veya farklı parametreler gerekirse, bu mnemonik format içinde sinyallenemez. Bu nedenle bazı cüzdanlar (özellikle Electrum) versiyonlama içeren kendi mnemonik şemasını kullanır.
Kelime Listesine Sıkı Bağımlılık
Mnemonik, tam kelime listesine bağımlıdır. Kelime listesi bir gün değiştirilseydi mevcut mnemonikler kurtarılamazdı. Kelime listeleri standardizasyondan beri dondurulmuştur, ancak bu esneksizlik bazıları tarafından tasarım sınırlaması olarak görülür.
Zayıf Key Stretching
Belirtildiği gibi PBKDF2'nin 2.048 iterasyonu modern standartlara göre zayıf kabul edilir. Bu durum yüksek entropili mnemoniklerde güvenliği anlamlı biçimde etkilemese de, daha kısa veya kullanıcı tarafından seçilmiş passphrase'ler için daha az koruma sağlar.
Electrum'un Alternatifi
Electrum cüzdanı, versiyonlama içeren ve sabit bir kelime listesine bağlı olmayan kendi mnemonik şemasını kullanır. Electrum mnemonikleri BIP-39 uyumlu değildir. Bu, bir Electrum seed phrase'inin BIP-39 cüzdanda geri yüklenemeyeceği ve tersi anlamına gelir. Cüzdanınızın hangi standardı kullandığını daima bilin.
BIP-39 Uygulamaları
BIP-39 neredeyse tüm büyük cüzdanlarda uygulanır:
| Wallet | BIP-39 | Word Count | Notes |
|---|---|---|---|
| Ledger | Yes | 24 | Hardware, secure element |
| Trezor | Yes | 12/24 | Also supports SLIP-39 (Shamir) |
| Coldcard | Yes | 24 | Bitcoin-only hardware |
| MetaMask | Yes | 12 | Browser extension |
| Trust Wallet | Yes | 12 | Mobile |
| Exodus | Yes | 12 | Desktop/mobile |
| Electrum | No | 12 | Uses own scheme |
| BlueWallet | Yes | 12/24 | Bitcoin-focused mobile |
Test ve Doğrulama
Resmi Test Vektörleri
BIP-39 spesifikasyonu test vektörleri içerir: bilinen entropi değerleri, bunlara karşılık gelen mnemonik kelimeler ve türetilmiş seed'ler. Bunlar uygulamaların doğru olduğunu doğrulamak için kullanılır.
Cüzdanınızın BIP-39 uygulamasını, aşağıda yayımlanan resmi test vektörleriyle karşılaştırarak doğrulayabilirsiniz:
Seed Phrase'inizi Doğrulama
Seed phrase'inizi doğru kaydettiğinizi doğrulamak için:
- Seed phrase'i donanım cüzdanınızda oluşturun.
- Dikkatlice yazın.
- Donanım cüzdanını fabrika ayarlarına sıfırlayın.
- Yazdığınız seed phrase'den geri yükleyin.
- Aynı adreslerin üretildiğini doğrulayın.
- Cüzdanın işlemleri imzalayabildiğini onaylayın.
Bu süreç hem yedeğinizin doğru olduğunu hem de cüzdanın BIP-39 uygulamasının beklendiği gibi çalıştığını doğrular.
SSS
BIP-39 ne anlama gelir?
BIP, Bitcoin Improvement Proposal anlamına gelir. BIP-39, kriptografik entropinin mnemonik (insan tarafından okunabilir) gösterimlerini oluşturma standardını tanımlayan 39 numaralı öneridir. 2013'te sunulmuş ve neredeyse tüm büyük kripto para cüzdanları tarafından benimsenmiştir.
Tüm 12 kelimelik seed phrase'ler BIP-39 mudur?
Hayır. Bazı cüzdanlar (özellikle Electrum), BIP-39'dan farklı kendi mnemonik şemasını kullanır. Her ikisi de kelime listelerinden 12 kelimelik ifadeler üretse de kodlama, kelime listeleri ve türetim süreçleri farklıdır. BIP-39 ifadesi Electrum şemasıyla kullanılamaz ve tersi de geçerlidir. Her zaman cüzdan dokümantasyonunuzu kontrol edin.
Kelime seçerek kendi BIP-39 seed phrase'imi oluşturabilir miyim?
Yapmamalısınız. Teknik olarak 23 kelime seçip geçerli bir 24. kelime hesaplamak (checksum'ı sağlamak için) mümkün olsa da insanın kelime seçimi yeterli entropi üretmez. BIP-39 güvenliği, kelimelerin insan seçiminden değil yüksek kaliteli rastgele veriden türetilmesine dayanır. Entropiyi bir CSPRNG oluştursun.
PBKDF2 salt olarak neden "mnemonic" kelimesi kullanılır?
"mnemonic" dizgesi BIP-39 tarafından belirtilen sabit bir salt'tır. Passphrase kullanıldığında bu salt'a eklenir (ör. "mnemonicMyPassphrase"). Sabit ve bilinen bir salt kullanımı, mnemonik ve isteğe bağlı passphrase dışında ek bilgi gerektirmeden tüm uygulamalarda tutarlı seed türetimi sağlar.
BIP-39 yalnızca Bitcoin için mi kullanılır?
Hayır. BIP-39, Ethereum, Litecoin, Cardano, Solana ve daha birçokları dahil olmak üzere neredeyse tüm büyük kripto paralarda kullanılır. Mnemonik üretimi ve seed türetimi süreci aynıdır; yalnızca sonraki anahtar türetim yolları (BIP-44 coin türleriyle tanımlanır) zincirler arasında farklılık gösterir.
BIP-39 ile SLIP-39 arasındaki fark nedir?
BIP-39, tüm sırrı temsil eden tek bir mnemonik üretir. SLIP-39 (Satoshi Labs Improvement Proposal 39), Shamir's Secret Sharing uygular ve sırrı birden çok paya böler (ör. 3-of-5). Eşik sayıda pay bir araya gelince sır yeniden oluşturulabilir, daha az pay ise bilgi vermez. SLIP-39, BIP-39'dan farklı bir kelime listesi ve kodlama kullanır.
Geçerli kaç BIP-39 mnemonik vardır?
24 kelimelik mnemonikler için: 2^256 (yaklaşık 1.16 x 10^77). 12 kelimelik mnemonikler için: 2^128 (yaklaşık 3.4 x 10^38). Bu sayılar entropi uzayını temsil eder. Checksum kelime kombinasyonlarını sınırlar ama entropiyi azaltmaz; sadece 24 rastgele BIP-39 kelimesinin her dizisinin geçerli bir mnemonik oluşturmadığı anlamına gelir.