Sözlük / İşlemler ve ücretler
İşlem değiştirilebilirliği
Diğer adları: Transaction malleability.
- İşlem değiştirilebilirliği nedir?
- İşlem değiştirilebilirliği, içerdiği imza verisinin yeniden kodlanması yoluyla üçüncü bir tarafın, paranın nereye gittiğini değiştirmeden bir işlemin kimliğini değiştirebilmesine olanak tanıyan kusurdur.
Tanımlandığı belge: BIP-66.
Ödeme yine de gerçekleşti; yalnızca adı değişti. Bitcoin bu açığı 2015 ile 2017 arasında aşamalar halinde kapattı ve SegWit, imzaları witness içinde tutan girdiler için işi tamamladı. Eski tip girdiler değiştirilebilir kalmaya devam ediyor; bu da bitcoinlerinizi bc1 ile başlayan bir adreste tutmanız için bir neden daha.
Nasıl çalışır
Bir işlem kimliği, işlemin baytlarının hash değeridir; dolayısıyla herhangi bir baytın değiştirilmesi farklı bir kimlik üretir ve eski tip bir girdide imza bu baytlardan biridir.
Hiçbir şeyi bozmadan değişiklik yapmayı mümkün kılan üç tür gevşeklik vardı.
Birincisi aritmetik. Bir ECDSA imzası, r ve s adlı bir sayı çiftidir ve her geçerli s için ikinci, aynı derecede geçerli bir değer vardır: eğri mertebesi eksi s. Ağı izleyen herkes bunu tersine çevirebilir ve doğrulama yine başarılı olur.
İkincisi kodlama. İmzalar DER içine sarılıyordu ve Bitcoin'in dayandığı kütüphane özensiz varyantları kabul ediyordu: gereksiz baştaki sıfır baytlar, kurallı olmayan uzunluk işaretleri, dikkatli hiçbir kodlayıcının üretmeyeceği dolgu. Her varyant farklı bir kimliğe hash ediliyordu.
Üçüncüsü imzayı çevreleyen kilidi açma betiği. Yığına zararsız fazladan bir öğe itmek betiğin sonucunu aynı, serileştirilmiş baytları farklı bırakıyordu.
Onarmalar katman katman geldi. BIP66, 4 Temmuz 2015 tarihinde 363.725 yüksekliğinde sıkı DER kodlamasını bir konsensüs kuralı yaptı; bu etkinleştirme çoğunlukla, birkaç büyük havuzun doğrulamadıkları başlıklar üzerine blok inşa etmesi ve o gün öğleden sonra altı blokluk bir çatallanma üretmesi nedeniyle hatırlanır. Ekim 2015'te yayımlanan Bitcoin Core 0.11.1, düşük s değerlerini bir aktarım politikası kuralı yaptı; bu daha sonra BIP146 olarak yazıya geçirildi. Kalan tüm kaynakları sıralayıp yasaklama girişimi olan BIP62, uygulanamaz bulunarak terk edildi ve bugün hâlâ Withdrawn durumunu taşıyor. Meseleyi çözen şey SegWit oldu; 24 Ağustos 2017 tarihinde 481.824 yüksekliğinde etkinleşti: imzalar witness içine taşındı, kimlik witness olmadan hesaplanıyor ve bir segwit girdisi için değiştirilecek hiçbir şey kalmıyor.
Nerede karşılaşırsınız
Değiştirilebilirlik hiçbir zaman hırsızlığa yol açmadı; muhasebe hatalarına yol açtı ve risk hâlâ bu biçimde.
Para çekme işlemlerini yayımladığı kimliğe göre izleyen bir saklayıcı kuruluşa, farklı bir kimlik taşıyan onaylanmış bir işlem gösterilebilir, kuruluş kendi ödemesinin başarısız olduğu sonucuna varabilir ve bitcoinleri yeniden gönderebilir. Bu örüntü 2014 yılında borsalarda gerçek kayıplara yol açtı ve ciddi operatörlerin hesapları yalnızca kimliğe göre değil, çıkış adresine ve tutara göre eşleştirmesinin nedeni de budur.
Zincirlenmiş işlemler diğer kayıptı. Onaylanmamış bir ana işlemi harcayan bir alt işlem, ana işlemi kimliğiyle adlandırır; dolayısıyla değiştirilmiş bir ana işlem, alt işlemi kalıcı olarak harcanamaz bırakır. Fonlama işlemi yayımlanmadan önce geri ödemeyi imzalayan her protokol, ki Lightning kanalı açmak tam olarak bunu yapar, kimlikler kararlı hale gelene kadar güvenle inşa edilemezdi.
Satın alan ve elinde tutan biri için tek bir alışkanlık bunların hepsini kapsar. Onaylanmamış bir kimlik bir olgu değildir. Eski tip girdilerde değiştirilebilirlik nedeniyle hâlâ değişebilir ve artık ilgisiz bir nedenle rutin olarak değişiyor, çünkü Bitcoin Core varsayılan olarak tam replace-by-fee aktarımı yapıyor ve ücreti artıran bir gönderen yeni bir kimlik yayımlıyor. Bir onay bekleyin, sonra kimliği soran herkese bildirin.
İşlem değiştirilebilirliği vs çifte harcama
Değiştirilebilirlik etiketi değiştirir; çifte harcama parayı yerinden oynatır. Değiştirilmiş bir işlemde aynı bitcoinler aynı tutarla aynı adrese ulaşır ve yalnızca eski kimliği belleğinde tutan yazılım bir şey olduğunu fark eder. Çifte harcamada rakip bir işlem bu bitcoinleri başka bir yere gönderir ve sürümlerden biri değersiz kalır. İkisini karıştırmak insanlara onaylanmış ödemelere güvenmemeyi öğretir, ki bu yanlış ders: onaylanmış bir kimlik hiçbir zaman değiştirilebilir olmadı, çünkü değiştirilebilirlik yalnızca bir işlem onaylanmamış haldeyken geçerliydi.