Sözlük / Adresler ve anahtarlar
Zincir kodu
- Zincir kodu nedir?
- Zincir kodu, HD cüzdanda her anahtarın yanında taşınan 32 baytlık ek entropidir; her alt anahtar türetmesine karışır, böylece anahtarlar kardeşlerinden tahmin edilemez.
Tanımlandığı belge: BIP-32.
Her genişletilmiş anahtarın yarısı aslında bir anahtar değildir. BIP-32, 512 bitlik bir hash'i 256 bitlik bir anahtara ve 256 bitlik bir zincir koduna böler ve bir xpub dizisi ikisini birden taşır, toplam 111 karakter. Bir xpub'ı birine verirseniz, zincir kodunu da veriyorsunuz demektir ve alıcının gelecekteki adreslerinizi türetmesini sağlayan da budur.
Nasıl çalışır
Bir zincir kodu işini tek bir HMAC çağrısı içinde yapar. Bir alt anahtar türetmek, anahtar olarak üst zincir koduyla, mesaj olarak üst genel anahtar ve dört baytlık bir indeksle HMAC-SHA512 çalıştırır. 64 baytlık sonuç ortadan ikiye ayrılır: soldaki 32 bayt, eğrinin mertebesine göre modüler aritmetikle üst özel anahtara eklenerek alt özel anahtarı verir, sağdaki 32 bayt ise alt anahtarın kendi zincir kodu olur ve alt anahtar bunu kendi çocukları için kullanır.
Tuzun amacı, ağacı kimin yürüyebileceğidir. Tek başına bir genel anahtar hiçbir şey türetmez, çünkü türetme fonksiyonu eşleşen zincir kodu olmadan çalışmaz. Bu yüzden genişletilmiş genel anahtar, yalnızca adı daha uzun bir genel anahtar değildir. Bir genel anahtar ile zincir kodunun toplamıdır ve bu ikiliyi birine vermek, eğri üzerindeki bir noktayı henüz kullanmadığınız adreslerden oluşan sınırsız ve numaralandırılabilir bir dala dönüştürür.
BIP-32 bundan doğan keskin kenarı belgeler. Bir saldırgan genişletilmiş genel anahtarınızı elinde tutuyorsa ve ayrıca sertleştirilmemiş bir alt özel anahtarı da ele geçirirse, türetilen ofseti çıkarmak üst özel anahtarı ve onunla birlikte her kardeşi ve her alt soyu geri verir. Sertleştirilmiş türetme bu yolu kesmek için vardır: sertleştirilmiş bir adımda hash'lenen mesaj genel anahtar yerine üst özel anahtarı içerir, böylece hiçbir miktarda genel malzeme kimsenin yukarı tırmanmasına izin vermez.
Nerede görürsünüz
Bir zincir kodunu asla kendiniz yazmazsınız ve hiçbir tüketici cüzdanı onu tek başına göstermez. Bir genişletilmiş anahtarın içinde taşınır. xpub veya xprv ile başlayan Base58Check dizileri şöyle düzenlenmiş 78 bayta çözülür: 4 bayt sürüm, 1 bayt derinlik, 4 baytlık üst parmak izi, 4 baytlık alt numara, 32 baytlık zincir kodu ve son olarak 33 baytlık anahtar; bir xpub'ın 111 karakter metne ulaşmasının nedeni budur.
Alanın bir alan olarak görünür hale geldiği yer geliştirici araçlarıdır. Bitcoin Core yazılımının deriveaddresses RPC çağrısı genişletilmiş anahtarları içeren tanımlayıcılarla çalışır, python-bip32 gibi kütüphaneler zincir kodunu ayrı bir özellik olarak döndürür ve yalnızca izleme kurulumu için bir hesabı dışa aktaran bir imzalama cihazı tam olarak bu ikiliyi dışa aktarır.
Doğru düzeydeki tedbir, bir parolaya uygulayacağınız değil, eksiksiz bir işlem geçmişine uygulayacağınız tedbirdir. Bir zincir kodu imzalayamaz, bu yüzden tek başına size hiçbir şey kaybettirmez. Bir analiz şirketinin elinde, bir bulut yedeğinde ya da bir xpub'ı bir destek talebine yapıştıran herhangi birinin elinde, o daldaki geçmiş ve gelecek her ödemeyi açığa çıkarır ve sonrasında erişimi geri alma yolu yoktur.
Zincir kodu vs özel anahtar
Bir zincir kodu da bir özel anahtar da rastgele görünen 32 bayttır ve yalnızca biri harcayabilir. Özel anahtar imza üretir. Zincir kodu ise daha fazla türetmeden başka hiçbir şey üretmez ve insanların onu tam da bu yüzden küçümsemesinin nedeni budur: para taşıyamadığı için, bir anahtarla asla yapmayacakları şeyi yapan kişiler genişletilmiş genel anahtarları paylaşılan tablolara, hata raporlarına ve telefon uygulamalarına yapıştırır. Sonuç, hırsızlık değil, mali durumlarına kalıcı bir penceredir ve iki başarısızlık farklı adları hak eder.