BIP-39 spesifikasyonu öncelikle, hatırlanması kolay kelimeler (mnemonic) kümesine dayanan deterministik cüzdanlar oluşturma algoritmasını ve sürecini açıklar.
Spesifikasyon iki ana bölümden oluşur:
Mnemonic'in nasıl oluşturulacağı.
Oluşturulan mnemonic'in ikili bir tohum (seed) haline nasıl dönüştürüleceği.
Aşağıda, bu iki bölümün her birini açıklayarak deterministik cüzdanların nasıl oluşturulduğuna bir göz atacağız.
Mnemonic Oluşturma
Mnemonic oluşturma algoritma süreci şu şekildedir:
Süreç şu şekildedir:
128 ila 256 bit arasında rastgele bir dizi (entropi) oluşturma (adım boyutu 32 bit)
Önceki adımda oluşturulan rastgele dizinin SHA256'sını alarak bir karma (Hash) değeri oluşturma ve karma değerinin ilk N bitini (entropi uzunluğu / 32, örneğin 128 bit ise N = 4) rastgele dizinin Sağlama Toplamı (Checksum) olarak alma.
İlk adımda oluşturulan rastgele dizinin sonuna Sağlama Toplamı'nı ekleme, böylece şekildeki örnek için Sağlama Toplamı ile birlikte rastgele dizi 128 + 4 = 132 bit olur.
Önceki adımdaki rastgele diziyi 11 bitlik segmentlere ayırma (bölme), böylece 128 bit entropi uzunluğuna sahip bir dizi için 12 bölüm oluşturulur (132 / 11 = 12).
Bu noktada, 11 bitlik bir segment içeren her değeri önceden tanımlanmış 2048 kelimelik bir sözlüğe eşleme.
Kesilen sıraya göre oluşturulan son kelime grubu mnemonic'tir.
Mnemonic'ten Tohum Üretimi
Mnemonic oluşturulduktan sonra, PBKDF2 algoritmasını kullanarak tohum oluşturabiliriz.
PBKDF2 iki parametre gerektirir: bir mnemonic ve bir tuz (salt). Tuzun amacı kırma işlemini zorlaştırmaktır ve BIP-39'da tohumları korumak için ek bir güvenlik faktörü olarak parola (passphrase) ekleyebiliriz.
"PBKDF2, RSA Laboratuvarları'nın Genel Anahtar Kriptografisi Standartları (PKCS) serisinin bir parçasıdır,
özellikle PKCS #5 v2.0, İnternet Mühendislik Görev Gücü'nün RFC 2898'i olarak da yayınlanmıştır."
Yukarıdaki mnemonic oluşturma işleminden sonra, aşağıdaki diyagram tohum oluşturma algoritmasını göstermektedir.
PBKDF2'nin ilk parametresi yukarıda oluşturulan mnemonic'tir.
PBKDF2'nin ikinci parametresi, genellikle bir dize ve isteğe bağlı olarak kullanıcının sağladığı şifre dizelerinin bir birleşimi olan tuzdur.
PBKDF2, 2048 karma kullanarak 512 bitlik bir tohum değeri üreten HMAC-SHA512 algoritmasını kullanır.
Tohumdan HD Cüzdan Üretimi
Yukarıda üretilen tohum, HD cüzdanın Kök Tohumu (Root Seed) olarak kullanılacaktır ve herhangi bir HD cüzdanın Kök Tohumu, tüm HD cüzdanı yeniden oluşturabilir.
Kök Tohumu HMAC-SHA512 algoritmasına girdiğimizde 512 bitlik bir karma elde ederiz, bunun sol 256 biti Ana Özel Anahtar (Master Private Key) ve sağ 256 biti Ana Zincir Kodu (Master Chain Code) olarak kullanılır. Ardından, Ana Özel Anahtar m'den Ana Genel Anahtar (264 bit) oluşturulabilir.
Yukarıdaki şekilden de görülebileceği gibi, HD anahtarı aşağıdaki parametreler kullanılarak oluşturulur:
Üst Anahtar Özel Anahtarı veya Üst Anahtar Genel Anahtarı; (her ikisi de sıkıştırılmamış 256 bit ECDSA anahtarlarıdır).
256 bitlik Üst Zincir Kodu.
32 bitlik bir tamsayı indeks numarası.
Ayrıca, yukarıdaki işlem özyinelemeli (recursive)dir ve diyagramdaki Çocuk Özel Anahtar bir sonraki seviyede Üst Özel Anahtar olarak kullanılabilir.
(Üst Genel Anahtar, Üst Zincir Kodu, İndeks Numarası) değerlerini HMAC-SHA512 algoritmasına girerek alt anahtarları oluşturabiliriz ve aynı seviyedeki birden fazla alt anahtar oluşturmak için İndeks Numarasını ayarlayabiliriz.
Uzantı Anahtarı Hakkında
Bu anahtar türetme işlevi tek yönlü olduğu için, tüm alt anahtarlar üst anahtarlarını veya aynı seviyedeki kardeş anahtarlarını türetmek için kullanılamaz. Yalnızca üst anahtar ve üst zincir kodu (Üst Anahtar'ın üst seviye anahtarından ve zincir kodundan oluşturulurlar) tüm alt anahtarları ve alt zincir kodlarını türetmek için kullanılabilir ve ardından işlem imzalamak için karşılık gelen alt genel anahtarları ve adresleri oluşturabilir.
Anahtar ve Zincir Kodunun birleşimi uzantı anahtarı olarak adlandırılır ve uzantı anahtarından itibaren tüm dallar oluşturulabilir.
Uzantı anahtarında sağlanan anahtar, özel anahtar veya genel anahtar olabilir, zincir kodu ile birleştiğinde sırasıyla Uzantı Özel Anahtarı ve Uzantı Genel Anahtarı olarak adlandırılır ve sırasıyla (k, c) ve (K, c) olarak gösterilir, burada genel anahtar K = nokta(k)'dır.
Uzantı özel anahtarından uzantı genel anahtarını türetebiliriz, tersi mümkün değildir. Bu nedenle, bazı işlem senaryolarında (örneğin, e-ticaret), ödeme almak için her işlem için yeni bir genel anahtar ve adres oluşturulabilirken, uzantı özel anahtarı, işlemlerin güvenli bir şekilde çevrimdışı imzalanması için bir kağıt cüzdanda veya bir donanım cüzdanda saklanabilir. Görüldüğü gibi, uzantı genel anahtarının güvenliği nispeten yüksektir ve aşağıdaki diyagram, alt özel anahtarı türetmek ve alt genel anahtarı oluşturmak için uzantı üst genel anahtarının iletim mekanizmasını göstermektedir:



