Cointime

Uygulamayı indirmek için QR kodu tarayın
iOS & Android

Bitcoin'de yinelenen işlemler: Minimum riske sahip eğlenceli bir hata

Yazan: BitMEX Research

Bitcoin blok zincirinde iki adet aynı işlem kümesi vardır, bir işlem kümesi diğer işlem kümesini "sandviçler" ve her ikisi de Kasım 2010 ortasında gerçekleşmiştir. Tekrarlanan işlemler karışıklığa yol açabilir ve bitcoin geliştiricileri yıllardır bununla çeşitli şekillerde mücadele etmektedir. Bu sorun hala %100 çözülmüş değil ve bir sonraki potansiyel yinelenen işlem 2046'da gerçekleşebilir. Yinelenen işlemlerle ilişkili riskler şu anda asgari düzeyde olsa da, üzerinde düşünmeye değer ilginç bir tuhaflık.

Genel bakış

Normal bir Bitcoin işlemi, önceki işlemin işlem kimliğine (TXID) başvurarak önceki işlemden en az bir çıktı kullanır. Harcanmamış çıktılar yalnızca bir kez harcanabilir; eğer iki kez harcanabilseydi, Bitcoin'inizi iki kez harcamış ve onu değersiz hale getirmiş olurdunuz. Oysa Bitcoin'de aslında tam olarak aynı iki işlem kümesi bulunuyor. Bu, coinbase işleminin herhangi bir işlem girdisine sahip olmaması, bunun yerine yeni oluşturulmuş coin'lere sahip olması nedeniyle mümkündür. Dolayısıyla, iki farklı coinbase işleminin aynı adrese aynı tutarı göndermesi ve tamamen aynı şekilde yapılandırılması, yani birbirinin aynısı olması mümkündür. Bu işlemler aynı olduğundan TXID'ler de uyuşmaktadır, çünkü TXID işlem verilerinin bir özetidir. Bir TXID'nin kopyalanmasının tek yolu, kriptografik olarak güvenli karma işlevleri için olası olmayan ve elde edilemez kabul edilen bir karma çakışmasıdır. SHA256 benzeri hash çakışmaları Bitcoin'de veya başka hiçbir yerde yaşanmadı.

Her iki yinelenen işlem kümesi de benzer zamanlarda, 14 Kasım 2010 saat 08:37 UTC ile 15 Kasım 2010 saat 00:38 UTC arasında, yani yaklaşık 16 saatlik bir zaman aralığında gerçekleşti. İlk setteki yinelenen işlemler, ikinci setin arasında yer alır. d5d2….8599'u ilk yinelenen işlem olarak sınıflandırıyoruz çünkü yinelenen ilk işlemdi, ancak garip bir şekilde, blok zincirinde ilk kez başka bir yinelenen işlem olan e3bf….b468'den sonra ortaya çıktı.

Tekrarlanan işlem detayları

Aşağıdaki görsellerde, mempool.space blok gezgininden alınan iki ekran görüntüsünü görebilirsiniz; bu görüntülerde, ilk kopyalanmış işlemin iki farklı blokta tekrarlandığı görülmektedir.

İlginçtir ki, ilgili URL'leri bir web tarayıcısına yazdığınızda, mempool.space blok gezgini, d5d2….8599 durumunda önceki bloğu, e3bf….b468 durumunda ise sonraki bloğu gösterecek şekilde varsayılan olarak ayarlanıyor. Blockstream.info ve Btcscan.org, mempool.space ile aynı davranışa sahiptir. Öte yandan, temel testlerimize göre Blockchain.com ve Blockchair.com farklı davranıyor ve tarayıcıya URL girildiğinde her zaman kopyalanmış işlemin en son sürümünü gösteriyor.

Söz konusu dört bloktan yalnızca birinde (91.812 numaralı blok) ek işlem yer aldı. Bu işlem 1 BTC ve 19 BTC çıktılarını tek bir 20 BTC çıktısında birleştirir.

Bu çıktılar harcanabilir mi?

Aynı TXID'nin iki kümesi olduğundan, bu durum sonraki işlemler için bir referans sorunu yarattı. Her tekrarlayan işlem 50 BTC değerindedir. Dolayısıyla bu tekrarlanan işlemler toplamda 4 x 50 BTC = 200 BTC'yi, ya da nasıl anladığınıza bağlı olarak 2 x 50 BTC = 100 BTC'yi içeriyor. Bir bakıma aslında var olmayan 100 BTC de var.

Bugün itibariyle 200 BTC'nin tamamı harcanmamış durumda. Bildiğimiz kadarıyla (ve burada yanılıyor olabiliriz), eğer birisi bu çıktılarla ilişkili özel anahtarlara sahipse, bu Bitcoin'leri harcayabilir. Ancak, harcandıktan sonra UTXO veritabanından silinecek ve bu nedenle kopyalanan 50 BTC harcanamaz ve kaybolacak, bu nedenle yalnızca 100 BTC kurtarılabilecektir. Bu coin'lerin harcanması durumunda hangi bloktan geleceği, daha önce mi yoksa daha sonra mı olacağı belirsiz olabilir veya belirlenmesi imkansız olabilir.

Bu kişi, kopyalanmış işlemi oluşturmadan önce tüm Bitcoin'leri harcamış olabilir ve bu da kopyalanmış çıktılar oluşturarak harcanmamış çıktıların veritabanında yeni girdiler oluşturabilir. Bu, yalnızca yinelenen işlemler anlamına gelmez, aynı zamanda yinelenen harcanmış çıktılara sahip olabilecek yinelenen işlemler anlamına da gelir. Eğer böyle olursa, bu çıktılar harcandığında, daha fazla sayıda yinelenen işlem oluşturulacak ve bir tür yinelenen zincir oluşacaktır. Olayların sırasına dikkat edilmeli ve her zaman bir kopyasını oluşturmadan önce harcama yapılmalıdır, aksi takdirde bitcoinler sonsuza dek kaybolabilir. Bu yeni kopyalanmış işlemler coinbase işlemleri olmayacak, "normal" işlemler olacak. Neyse ki böyle bir şey hiç yaşanmadı.

Çift işlem sorunu

Tekrarlanan işlemler açıkça kötüdür. Cüzdanlar ve blok araştırmacıları için karışıklığa yol açıyorlar ve ayrıca Bitcoin'in kökenini belirsizleştiriyorlar. Bu durum aynı zamanda birçok saldırıya ve zafiyete de yol açıyor. Örneğin, iki kez aynı işlemi yaparak birine iki kez ödeme yapabilirsiniz. Daha sonra, ticaret yapan taraflar fonlara erişmeye karar verdiklerinde, fonların yalnızca yarısının geri kazanım için kullanılabilir olduğunu görebilirler. Bu, örneğin bir ticaret platformuna iflas ettirmek amacıyla yapılan bir saldırı olabilir ve saldırganın hiçbir şey kaybetmesine gerek kalmaz, çünkü yatırdığı parayı hemen çekebilir.

Yinelenen TXID'lere sahip işlemlere izin vermeyin

Çift işlem sorununu hafifletmek amacıyla, Bitcoin geliştiricisi Pieter Wuille, Şubat 2012'de, önceki TXID harcanmadığı sürece işlemlerde çift TXID kullanımını yasaklayan BIP30 yumuşak çatallanma çözümünü önerdi. Bu yumuşak çatallanma 15 Mart 2012'den sonraki tüm bloklar için geçerli olacak.

Eylül 2012'de Bitcoin geliştiricisi Greg Maxwell bu kuralı değiştirerek BIP30 kontrolünün sadece 15 Mart 2012'den sonraki bloklara değil tüm bloklara uygulanmasını sağladı. İstisnalar, bu makalede daha önce bahsedilen iki yinelenen işlemdir. Bu, bazı DOS hatalarını düzeltir. Teknik olarak bu da bir başka yumuşak çatallanmadır, ancak kural değişikliği yalnızca 6 aydan eski bloklar için geçerlidir, dolayısıyla normal protokol kural değişiklikleriyle ilişkili risklerin hiçbirini taşımaz.

Bu BIP30 kontrolü hesaplama açısından maliyetlidir. Düğümün yeni bloktaki tüm işlem çıktılarını kontrol etmesi ve bu çıktı uç noktalarının UTXO'da zaten mevcut olup olmadığını denetlemesi gerekir. Muhtemelen bu yüzden Wuille sadece kullanılmayan çıktıları kontrol ediyor; tüm çıktıları kontrol etmek hesaplama açısından daha maliyetli olur ve budama yapılmasına izin vermez.

BIP34

Temmuz 2012'de Bitcoin geliştiricisi Gavin Andresen, Mart 2013'te etkinleştirilen BIP34 soft fork çözümünü önerdi. Bu protokol değişikliği, coinbase işlemlerinin blok yüksekliğini içermesini gerektiriyor ve bu da blok sürümlemesini de mümkün kılıyor. Blok yüksekliği, coinbase işlem betiği Sig'in ilk öğesi olarak eklenir. Coinbase scriptSig'deki ilk bayt, blok yükseklik numarasının kullandığı bayt sayısını, sonraki baytlar ise blok yükseklik numarasının kendisini gösterir. İlk c160 yıl için (223 / (günde 144 blok * yılda 365 gün)), ilk bayt 0x03 olmalıdır. İşte bu yüzden günümüzün coinbase ScriptSig (HEX)'i her zaman 03 ile başlar. Bu yumuşak çatallanma, çift işlem sorununu tamamen çözmüş gibi görünüyor ve artık tüm işlemler benzersiz olmalı.

BIP34'ün zaten benimsenmiş olması nedeniyle, Kasım 2015'te Bitcoin geliştiricisi Alex Morcos, Bitcoin Core yazılım deposuna bir çekme isteği ekledi; bu değişiklik, düğümlerin BIP30 kontrolleri yapmayı bırakacağı anlamına geliyordu. Zira artık BIP34 bu sorunu çözdüğüne göre, bu pahalı kontrole gerek kalmıyor. O zamanlar bilinmese de teknik olarak bu, çok nadir bazı gelecekteki bloklar için yapılan bir sert çatallanmaydı. Şu anda, potansiyel hard fork önemli görünmüyor çünkü neredeyse hiç kimse Kasım 2015'ten önceki node yazılımını çalıştırmıyor. Forkmonitor.info'da, Ekim 2015'te yayınlanan Bitcoin Core 0.10.3'ü çalıştırıyoruz. Yani bu bir hardfork öncesi kural ve müşteriler hala pahalı BIP30 kontrolünü yapıyor.

Blok,983.702 Soru

BIP34 etkinleştirilmeden önce bloklarda coinbase işlemlerinin olduğu ve scriptSigs'in ilk baytının geçerli bir gelecekteki blok yüksekliğiyle eşleştiği ortaya çıktı. Yani BIP34 bu sorunu hemen hemen tüm durumlarda çözse de, %100 bir çözüm değildir. Bitcoin geliştiricisi John Newbery, 2018 yılında aşağıdaki tabloda gösterildiği gibi bu olası kopyaların tam listesini yayınladı.

* Not: Bu bloklar 2012 ve 2017 yıllarında Coinbase işlemleri oluşturmuştur ve birbirinin kopyası değildir. 209.921 blok (ilk yarılanmaya sadece 79 blok kala) bir kopya olamaz çünkü bu arada BIP30 uygulandı.

Kaynak: https://gist.github.com/jnewbery/df0a98f3d2fea52e487001bf2b9ef1fd

Yıl bazında potansiyel olarak yinelenen Coinbase işlemlerinin sayısı

Kaynak: https://gist.github.com/jnewbery/df0a98f3d2fea52e487001bf2b9ef1fd

Dolayısıyla, yinelenen işlemlerin görünebileceği bir sonraki blok, Ocak 2046 civarında oluşturulacak olan 1.983.702 numaralı bloktur. Ocak 2012'de 164.384 numaralı bloktaki Coinbase işlemi, yedi farklı çıktı adresine 170 BTC gönderdi. Dolayısıyla, 2046 yılında madenciler bu saldırıyı gerçekleştirmek isteselerdi, sadece bu bloğu bulabilecek kadar şanslı olmaları yetmeyecek, aynı zamanda 0,09765625 BTC blok sübvansiyonunun fırsat maliyeti de dahil olmak üzere toplam 170 BTC'nin biraz üzerinde bir maliyetle 170 BTC'den daha az ücret yakmaları gerekecekti.

Bitcoin'in şu anki 88.500 dolarlık fiyatı göz önüne alındığında, bu değer 15 milyon dolardan fazla olacaktır. 2012 yılındaki coin kütüphanesi işlemlerinin yer aldığı yedi adresin kime ait olduğu ise henüz bilinmiyor ve anahtarların kaybolmuş olma ihtimali yüksek. Şu anda bu Coinbase işleminin yedi çıktı adresinin tamamı kullanılmış olup, bunlardan üçü aynı işlemde kullanılmıştır. Bu fonların Pirate40 Ponzi şemasıyla ilişkili olabileceğine inanıyoruz, ancak bu sadece bizim spekülasyonumuz. Sonuç olarak saldırının saldırgan için hem maliyetli olduğu hem de neredeyse işe yaramadığı ortaya çıkıyor. Kasım 2015 düğümünü 31 yıl önce sert bir çatallanmayla ağdan kaldırmak önemli bir masraf olurdu.

Kopyalanabilecek bir sonraki savunmasız blok Mart 2012'deki 169985'tir. Bu Coinbase'in fiyatı sadece 50 BTC'nin biraz üzerindeydi, 170 BTC'den çok daha azdı. Tabi o dönem sübvansiyon 50 BTC idi ve bu Coinbase işlemi 2078 yılında rahatlıkla tekrarlanabilir hale geldiğinde sübvansiyon çok daha düşük olacak. Bu durumdan faydalanmak için madencilerin yaklaşık 50 BTC'lik ücreti yakmaları gerekir; bu ücreti geri alamazlar çünkü 2012'den kalma eski çıktılara gönderilmeleri gerekir. Bitcoin'in 2078'deki fiyatının ne olacağını kimse bilmiyor, ancak böyle bir saldırının maliyeti de muhtemelen aşırı yüksek olacaktır. Dolayısıyla bu konu Bitcoin için büyük bir risk oluşturmasa da yine de endişe verici.

2017'deki SegWit güncellemesinden bu yana Coinbase işlemleri, bir bloktaki tüm işlemlere ilişkin taahhütleri de içerebiliyor. BIP34 öncesi bu bloklar tanıklık taahhütlerini içermiyordu. Bu nedenle, bir coinbase işleminin kopyasını üretmek için, bir madencinin bloktan herhangi bir SegWit çıktı kurtarma işlemini hariç tutması gerekir; bu da blokta ücreti ödeyen pek çok başka işlem bulunmaması nedeniyle saldırının fırsat maliyetini daha da artırır.

Sonuç olarak

Kopyalama ticaretinin zorluğu ve maliyeti ile bundan faydalanma fırsatının nadirliği göz önüne alındığında, bu kopyalama ticareti açığının Bitcoin için büyük bir güvenlik sorunu oluşturmadığı görülmektedir. Yine de, söz konusu zaman ölçekleri ve tekrarlanan işlemlerin yeniliği göz önüne alındığında, bunun hakkında düşünmek ilginç. Yine de geliştiriciler yıllardır bu konu üzerinde çok fazla zaman harcadılar ve bazı geliştiricilerin zihninde sorunun çözülmesi için son tarih 2046 olabilir. Bu hatayı düzeltmenin birçok yolu vardır ve yumuşak bir çatallama gerekebilir. Olası bir çözüm SegWit taahhüdünü zorunlu kılmaktır.

Yorumlar

Tüm Yorumlar

Önerilen okuma