Sözlük / Adresler ve anahtarlar
Sertleştirilmiş ve sertleştirilmemiş türetme
- Sertleştirilmiş ve sertleştirilmemiş türetme nedir?
- Sertleştirilmiş ve sertleştirilmemiş türetme, BIP-32 alt dizinlerini ikiye böler: sertleştirilmemiş alt anahtarlar bir genişletilmiş genel anahtardan hesaplanabilir, sertleştirilmiş alt anahtarlar hesaplanamaz.
Tanımlandığı belge: BIP-32.
Sertleştirme, açıp kapattığınız bir ayar değil, türetme yolunuzdaki bir sınırdır. BIP-32 11 Şubat 2012 tarihinde yalnızca sertleştirilmemiş türetmeyle atandı; 0x80000000 ve üzeri dizinler için özel türetme 16 Nisan 2013 tarihinde eklendi ve bu anahtarlar 15 Ocak 2014 tarihinde sertleştirilmiş olarak yeniden adlandırıldı. Bu sınırın nerede durduğu, paylaşılan bir genişletilmiş genel anahtarın cüzdanınızın ne kadarını teslim ettiğini belirler.
Nasıl çalışır
Sertleştirilmemiş türetmenin, sertleştirilmiş türetmenin bilerek yoksun olduğu bir özelliği vardır ve BIP-32 bu farkı cebirsel bir özdeşlik olarak kaydeder. N(), bir genişletilmiş anahtarın özel yarısını atıp 32 baytlık zincir kodunu koruyan adım olan nötralleştirmeyi göstersin. Sertleştirilmemiş seviyeler boyunca N(m/a/b/c), N(m)/a/b/c değerine eşittir; yani türetmeden önce nötralleştirmek ile türetmeden sonra nötralleştirmek aynı anahtara varır. Sertleştirilmiş bir seviyede bu yeniden yazım bozulur: N(m/a') ifadesi N(m)/a' biçimine dönüştürülemez, çünkü genel türetme yalnızca sertleştirilmemiş alt anahtarlar için tanımlıdır ve başka her şey için başarısızlık döndürür.
Mekanik olarak iki mod tek bir alanda ayrışır. Her ikisi de üst anahtarın zincir kodunu HMAC-SHA512 anahtarı olarak kullanır ve 4 baytlık dizini ekler. Sertleştirilmemiş mod üst anahtarın sıkıştırılmış genel anahtarını verir; sertleştirilmiş mod üst anahtarın sırrını, aynı 33 baytlık genişliğe ulaşmak için başına bir sıfır bayt ekleyerek verir. Yalnızca bir xpub tutan hiçbir şey o ikinci girdiye sahip değildir, bu yüzden türetme sınırda durur.
BIP-32, sertleştirilmemiş anahtarların koruyamadığı şeyler konusunda alışılmadık ölçüde açıktır. Güvenlik bölümü iki özelliği var olarak değil yok olarak listeler: bir üst genişletilmiş genel anahtar ile bir alt genel anahtar verildiğinde dizini bulmak zor değildir ve aynı üst genişletilmiş genel anahtar ile herhangi bir sertleştirilmemiş alt özel anahtar verildiğinde üst genişletilmiş özel anahtarı geri elde etmek de zor değildir. Birincisi size gizliliğinizi kaybettirir. İkincisi size dalı kaybettirir.
Nerede karşınıza çıkar
Bir genişletilmiş genel anahtarı dışa aktarmaya değer kılan şey sertleştirilmemiş seviyelerdir ve BIP-32 bunların üzerine kurulan paylaşım düzenlemelerine bir bölüm ayırır. Hesapların genişletilmiş genel anahtarları verilen bir denetçi, her hesaba giren ve her hesaptan çıkan her ödemeyi görür, tek bir gizli anahtarı değil. Sık işlem yapan iki firma, tek bir hesabın dış zincirini ödeme almak için kalıcı bir adres olarak paylaşabilir, böylece ikisi de her transfer için yeni bir adres istemek zorunda kalmaz. Bir web mağazası aynı tür anahtarı web sunucusuna verebilir; sunucu da harcama yetkisi olmayan alıcı adresleri üretir.
Sınırı hesap seviyesine oturtan düzen bir tavsiyedir, kural değil. BIP-32 ana, hesap, zincir ve alt zincir yapısını yalnızca yol gösterici sayar ve uygulamalara belirli ihtiyaçlar için bundan sapabileceklerini söyler; bu yüzden uyumlu bir cüzdan, yanındaki uyumlu cüzdandan daha fazla seviyeyi sertleştirebilir.
Bilinmeye değer bir birlikte çalışabilirlik tuzağı vardır, çünkü şartname bu yüzden iki kez yamalandı. Baştaki sıfırlarla sertleştirilmiş türetmeyi kapsayan test vektörleri 24 Şubat 2017 tarihinde ve yine 4 Kasım 2020 tarihinde eklendi. Sertleştirilmiş girdi 33 baytta sabittir, bir sıfır bayt ardından 32 baytlık sır; bu yüzden bu genişliği korumak yerine baştaki sıfırı kırpan bir yazılım farklı verinin hash'ini alır, farklı bir dal üretir ve biri o kurtarma ifadesini başka bir programda geri yüklediğinde boş bir cüzdanla karşılaşır. Sertleştirilmemiş türetme bu hataya hiç rastlamaz, çünkü sıkıştırılmış bir genel anahtar her zaman 0x02 veya 0x03 ile başlar ve dolayısıyla kaybedecek baştaki sıfırı yoktur.