Sözlük / Adresler ve anahtarlar
Ana zincir kodu
Diğer adları: Ana özel anahtar, Master chain code.
- Ana zincir kodu nedir?
- Ana zincir kodu, tohumunuzun 64 baytlık hash değerinin sağ yarısıdır; bir HD cüzdan ağacının sıfır derinliğinde yer alan ana özel anahtarın eş bileşenidir.
Tanımlandığı belge: BIP-32.
Kullanacağınız her anahtar o tek çiftten türer. Tohum üzerinde ASCII dizesi Bitcoin seed ile anahtarlanmış tek bir HMAC-SHA512 geçişi 64 bayt döndürür: ilk 32 bayt ana özel anahtar, son 32 bayt ise ana zincir kodu olur. Kurtarma ifadesini kopyaladığınızda altındaki her şeyi kopyalamış olursunuz; yedeğin bir dosya dolabı değil bir cümle olmasının bütün nedeni budur.
Nasıl çalışır
Ana anahtar üretimi yalnızca bir kez, cüzdan oluşturulurken çalışır. BIP-32, 128 ile 512 bit arasında bir tohum kabul eder, 256 biti önerir ve bunu yukarıdaki anahtarlı hash işlevinden geçirir. Ortaya çıkan çift, her türetme yolunun başında m olarak yazılan düğümdür ve onun üstünde hiçbir şey yoktur.
Bu adımın içinde bir geçerlilik testi saklıdır. Soldaki 32 bayt sıfır olarak çıkarsa ya da secp256k1 eğrisinin mertebesine eşit veya ondan büyük bir sayı olarak çıkarsa, BIP-32 tohumu geçersiz ilan eder ve uygulama onu reddetmek zorundadır. Bu iki durumdan birine denk gelme olasılığı 2 üzeri 127 kuvvetinde 1 değerinden daha düşüktür, bu yüzden hiçbir cüzdan bunu bildirmedi, ancak kabul edilen her tohumu kesin biçimde kullanılabilir kılan kural budur.
Serileştirildiğinde kök kendini belli eder. Mainnet özel genişletilmiş anahtarları 0x0488ADE4 sürüm baytlarını taşır ve xprv olarak yazılır; genel olanlar 0x0488B21E taşır ve xpub olarak yazılır. Kökte derinlik baytı 0x00'dır ve hem üst parmak izi hem de alt numara dört sıfır bayttır, çünkü işaret edilecek bir üst yoktur.
Aslında elinizde tuttuğunuz sayı ham baytlar değil parmak izidir. Ana genel anahtarın SHA-256 ile, ardından RIPEMD-160 ile hashlenmesi ve ilk dört baytın tutulması, bir cüzdanı ondan türetilebilecek hiçbir şeyi açığa çıkarmadan tanımlayan sekiz karakterlik onaltılık bir dize üretir.
Nerede karşınıza çıkar
Tüketici yazılımı ana çifti tamamen gizler ve yerine parmak izini gösterir. Sparrow bunu her keystore'un yanında yazdırır, Bitcoin Core listdescriptors çıktısının her satırını köşeli parantez içinde bununla açar ve bir Coldcard, cihazın o anda hangi kurtarma ifadesini tuttuğunu doğrulayabilmeniz için bunu ana ekranda gösterir. Bir PSBT geldiğinde, imzalama cihazı isteğin kendisine yöneltilip yöneltilmediğine karar vermeden önce anahtar kökeni alanındaki parmak izini kendi parmak iziyle karşılaştırır.
Kök kimliğinin önemsiz olmaktan çıktığı yer çoklu imzalı (multisig) cüzdanlardır. 2-of-3 bir cüzdan yalnızca üç kurtarma ifadesiyle geri yüklenemez, çünkü yeniden oluşturmak her ortak imzalayanın parmak izini ve yolunu da bilmeyi gerektirir. Bu yüzden her ciddi multisig aracı cüzdan tanımlayıcısını (descriptor) kelimelerin yanında saklamanızı söyler ve bu yüzden tanımlayıcının kaybolması, hiçbir tek ifadenin ulaşamayacağı bitcoinleri sahipsiz bırakabilir.
Ana özel anahtara doğrudan dokunduğunuz tek an bir içe aktarmadır. Bir xprv'yi yazılıma yapıştırmak tüm ağacı teslim eder: her amaç, her hesap, her gelecekteki adres, verilen yetkiyi tek bir dala daraltmanın hiçbir yolu olmadan. Kökün kısmi bir sürümü yoktur, bu yüzden donanım cüzdanları onu hiç dışa aktarmayı reddeder.
Ana zincir kodu vs kurtarma ifadesi
Önce ifade gelir, sonra ana çift gelir ve bunlar farklı standartlara aittir. BIP-39, PBKDF2 işlevini 2.048 tur çalıştırarak 12 veya 24 kelimeyi 512 bitlik bir tohuma dönüştürür; BIP-32 ise bu tohumu ana özel anahtara ve ana zincir koduna dönüştürür. Katmanlar birbirinden yeterince bağımsızdır: bir parola (passphrase) eklemek tohumu, dolayısıyla ana çifti ve onun altındaki her adresi değiştirir, oysa kartınızdaki kelimeler tamamen aynı kalır. Electrum bunu diğer taraftan ortaya koyar: kurtarma ifadeleri hiç BIP-39 değildir ve yine de sıradan bir BIP-32 kökü üretir.