Sözlük / İşlemler ve ücretler
İmza hash'i
Diğer adları: Sighash.
- İmza hash'i nedir?
- İmza hash'i, bir cüzdanın gerçekte imzaladığı özettir: işlemin yeniden kurulmuş bir kopyasının, o girdi için seçilen bayrağa göre kırpılması ve ardından SHA-256 ile iki kez özetlenmesiyle elde edilir.
Tanımlandığı belge: BIP-143.
Hiçbir imza, işlemin ağda göründüğü haliyle tamamını kapsamaz. Her girdi kendi özetini alır; bu özet iki kez yeniden yazılmış bir yordamla oluşturulur: 2009 yılındaki özgün yordam, segwit girdileri için BIP143 ve Taproot için BIP341. Özetin dışında bıraktığı şey, bir saldırganın serbestçe değiştirebileceği şeydir.
Nasıl çalışır
Bir imza hash'i oluşturmak, işlemin değiştirilmiş bir kopyasını kurup onu özetlemek demektir; yayınlamak üzere olduğunuz işlemi özetlemek değil.
Özgün yordam şöyle işler. İşlemi alın, her girdinin kilidini açan betiği boşaltın, harcanan betiği imzalamakta olduğunuz tek girdiye yerleştirin, sonra bayrağa göre çıktıları koruyun, boş bırakın veya atın. Bayrağı dört baytlık bir sayı olarak sona ekleyin, tüm yapı üzerinde SHA-256 işlemini iki kez çalıştırın ve ortaya çıkan 32 baytı imzalayın.
Bu tasarımın, işlemler büyüyene kadar kimsenin fark etmediği bir maliyeti vardı. Her girdi tüm işlemi yeniden kurup yeniden özetlediği için iş yükü, girdi sayısının karesiyle artar. BIP143 bunu rakamlarla ortaya koyar: sıradan bir 1 MB bloğun doğrulanması yaklaşık 2 saniye sürerken, 5.569 imza işlemi taşıyan, özel olarak hazırlanmış tek bir 1 MB işlem 25 saniye sürebilir. Tek bir işlemin ağdaki her düğümü bu kadar uzun süre durdurması, sanayileşmeyi bekleyen bir hizmet engelleme saldırısıdır.
BIP143, yordamı segwit sürüm 0 girdileri için yeniden yazdı ve iki sorunu birden çözdü. Outpoint'leri, sıra numaralarını ve çıktıları kapsayan üç alt özet bir kez hesaplanır ve her girdi için yeniden kullanılır; bu da maliyeti doğrusal hale getirir. Coin tutan herkes için daha da önemlisi, özet artık imzalanan girdinin değerini de bağlar. Bundan önce bir imzalama cihazına bir girdinin değerinin ne olduğu, kontrol edilecek hiçbir yol olmadan söylenmek zorundaydı; bu yüzden kötü niyetli bir program girdilerin değerini düşük gösterebilir ve bir donanım cüzdanını çok yüksek bir ücreti onaylamaya kandırabilirdi.
BIP341 bunu Taproot için üçüncü kez yeniden yazdı. Taproot özeti etiketli bir hashtir; başka bir protokolün özetiyle asla karıştırılamaması için bir alan dizesiyle ön eklenir ve yalnızca imzalanan girdinin değil, harcanan her girdinin tutarlarını ve kilitleme betiklerini bağlar. Ayrıca bayrak için varsayılan sıfır değerini getirir; bu değer standart kuralın kapsadığı her şeyi kapsar ama imzaya hiçbir zaman yazılmaz.
Nerede karşınıza çıkar
İmza hash'iyle dolaylı olarak, donanım cüzdanınızın davranışının nedeni olarak karşılaşırsınız.
Eski (legacy) bir girdiyi imzalamak, cihaza önceki işlemin tamamının verilmesini gerektirir; çünkü cihaz girdinin değerini ancak böyle kendi başına belirleyebilir. Sparrow ve Electrum, imzalamadan önce bu işlemleri bir Trezor veya Ledger cihazına akıtır ve eski coinlerle dolu bir cüzdanda bir harcamanın beklediğinizden belirgin biçimde uzun sürmesinin nedeni bu adımdır. Bir segwit girdisi yalnızca tutarı gerektirir; PSBT bunu zaten taşır.
Doğrudan, bir blok gezgininde eski veya segwit bir imzanın son baytı olarak görünür. 01 ile biten bir imza, her şeyi kapsayan kural altında yapılmıştır. Başka herhangi bir değeri, işleme güvenmeden önce anlamakta yarar var.
İmza hash'i vs SIGHASH_ALL
İmza hash'i özetin kendisidir; SIGHASH_ALL onu oluşturma kurallarından biridir. Bayrak baytı hiç taşımayan Taproot imzaları dahil her imzanın bir imza hash'i vardır. Değişen, işlemin hangi bölümlerinin özete girdiğidir ve bayrak yalnızca bu seçimin etiketidir. Bir işlemin “SIGHASH_ALL kullandığını” söylemek bir politikayı tanımlar; imza hash'i olduğunu söylemek ise tarihteki her Bitcoin imzasının sahip olduğu bir şeyi tanımlar.