Bitcoin: Eşler Arası Elektronik Para Transfer Sistemi

Özgün Çeviri: Umut ARICAN

Eşler arası elektronik para birimi, çevrimiçi bir finans kuruluşundan geçmeden doğrudan bir taraftan diğerine gönderilecek ödemeleri temsil eder. Dijital imzalar çözümün bir parçasını oluşturur; ancak izinsiz harcamaları önlemek için hala güvenilir bir üçüncü tarafa ihtiyaç duyuluyorsa, bu noktada tüm ana faydalar kaybolmaktadır. Biz ise, eşler arası bir ağ kullanarak izinsiz (çifte) harcama sorununa bir çözüm öneriyoruz. Ağ, işlemleri, devam eden bir hash tabanlı iş kanıtı zincirine ekleyerek işlemlerin zaman damgasını oluşturur ve yeniden oluşturulmadan değiştirilemeyecek bir kayıt (iş kanıtı) oluşturur. En uzun zincir, yalnızca tanık olunan olayların sırasını kanıtlamakla kalmaz, aynı zamanda en büyük CPU gücü havuzundan geldiğinin de kanıtıdır. CPU gücünün büyük çoğunluğu ağa saldırmak için işbirliği yapmayan düğümlerin kontrolündedir. Böyle olduğu sürece kullanıcılar en uzun zinciri üretecekler ve saldırganları her seferinde alt edeceklerdir. Temelde, ağ çok küçük bir altyapıya ihtiyaç duymaktadır. Mesajların yayınlanmasında ise “olabildiği kadar”” kuralı geçerli olmaktadır. Düğümler diledikleri vakit ağdan kopabilmektedirler ve dışarıda kaldıkları sürede gerçekleşen tüm işlemlerin kanıtı olan en uzun iş kanıtı zincirini onaylayarak ağa tekrar katılabilmektedirler.

Giriş

İnternet aracılığıyla alışveriş günümüzde neredeyse tamamen, güvenilir oldukları farz edilen üçüncü partilere, yani elektronik işlemleri gerçekleştiren finansal kurumlara bağımlı gelmiştir. Bu yapı birçok işlemde olağan bir şekilde çalışıyor gibi görünse de “güven temelli” zayıf bir iş modelidir. Finansal kuruluşlar yapıları gereği arabuluculuktan sıyrılamamaktadırlar, bu açıdan bankacılık sistemlerinde geri dönüşü olmayan işlemler pek mümkün değildir. Öte yandan, arabuluculuk işlemlerinin maliyetleri transfer maliyetini yükseltmekte ve bu durum da küçük ödeme işlemlerini engellemektedir. Bununla birlikte, geri alınamayan hizmetler için geri alınamayan ödemeler alınması imkanı yoktur, bu da ektra masraf demektir. Yapılan işlemleri geri döndürme ihtimali arttıkça güvenme ihtiyacı da paralel olarak artmaktadır. Bu noktada ise tüccarlar müşterilere daha da şüpheyle bakmalı ve olabildiğince fazla bilgi almak için onları zorlamalıdırlar. Bu anlamda ise, bir miktar dolandırıcılık kaçınılmaz hale gelmektedir. Tüm bu belirsizlikler ve masraflar yüzyüze, geleneksel alışverişte fiziki para kullanarak ortadan kaldırılmaktadır. Fakat online ödemelerde güven duyulacak bir üçüncü parti olmadan para aktarımı yapılması imkansızdır, uygun bir mekanizma gelişmemiştir. Bu anlamda, ortaya çıkan ihtiyaç ise, güven temeli yerine şifrelemeye dayalı ve üçüncü partiye gerek duymayan bir para transfer sistemidir. Geri alınması imkansız olan böyle bir yapıda ise taraflar dolandırıcılıktan korunmuş olunacaklardır. Bu makalede, eşten eşe gerçekleşen, bir zaman damgası sunucusuyla işlemlerin tarihsel sırasını kanıtlayan ve çift taraflı harcama problemine çözüm sunan bir yapıdan bahsedeceğiz. Bu sistemde güvenilir düğümler, saldırgan düğümlerden fazla CPU gücünü barındırdığı sürece tüm işlemler güvenlidir.

İşlemler

Elektronik para, özünde dijital imzalardan oluşan bir zincir olarak tanımlanabilir. Para transfer sürecinde ise, her bir imza sahibi kendisine ulaşan parayı bir sonraki kullanıcıya gönderir ve bunu; kendi dijital imzasını, bir önceki işlemin özetini (hash) ve sonraki işlemin açık anahtarını imzalayarak gerçekleştirir ve bu imzaları paranın sonuna ekler. Ödeme alan tarafa da sahiplik zincirini doğrulamak için imzaları onaylar.

Buradaki sorun ise; ödeme alan taraf, zincirde yer alan taraflardan birinin ödemeyi kullanıp kullanmadığını bilememektedir. Bu soruna güçlü bir çözüm olarak ise; merkezi bir otoritenin (banka veya merkez olabilir) her bir işlemde izinsiz harcama olup olmadığını denetlemesidir.

Kriptoparalarda yapılan her işlemden sonra para merkeze geri döner ve yerine yeni bir para piyasaya sürülür. Merkez tarafından piyasaya sürülen paraların izinsiz olarak harcanmadığından emin olabiliriz. Eşler arası para aktarma sistemindeki sorun, her bir işlemin bir merkez üzerinden yürütülmesidir. Bu yüzden ödeme alan tarafın, paranın önceki sahiplerinin herhangi bir çekim yapmadıklarını onaylayabileceği bir sisteme ihtiyaç duymaktayız.

Sunduğumuz çözümdeki sorun ise; eşler arası para aktarım sisteminin tüm kaderinin her işlemin banka gibi bir merkezi kuruluşun üzerinden yürütülmesidir. Ödemeyi alan kişinin paranın önceki sahiplerinin daha önce başka bir işlem imzalamadığını doğrulayabilmemiz gerekiyor.

Güncel versiyonda ise sadece ilk işlem önemli, sonrasındaki işlemler dikkate alınmamakta. Bir işlemin gerçekleşmediğini tespit etmenin en iyi ve tek yolu ise şuan için tüm işlemlerden haberdar olmaktır. Merkez üzerinden yapılan aktarımlarda, merkez tüm işlemleri tespit edebildiği için hangi işlemin önce geldiğine karar verebilmektedir. Güvenilir bir merkez olmadan bu işlemi gerçekleştirmek için ise zincirdeki tüm işlemler açık bir şekilde ilan edilmeli ve katılımcılar, işlem gerçekleşme sırası konusunda hemfikir olmalıdır. Ödeme alan tarafın harcama sahibinin ödeme yaptığı taraf olduğu diğer düğümlerin çoğu tarafından onaylanmalı, ihtiyaç duyulan sistem budur.

Zaman Damgası Sunucusu

Önerdiğimiz çözüm ise bir zaman damgası sunucusu sayesinde işlemektedir. Bir zaman damgası sunucusu, damgalanmayı bekleyen bir işlem bloğunun özetini kaydeder ve bu özeti Usenet gibi mecralarda açık bir şekilde yayınlar. Bu mesaj yayınlandığı anda işlemin var olduğu kanıtlanmış olacaktır. Her bir zaman damgası özeti, içerisinde bir önceki zaman damgasını içerir ve böylelikle bir zincir oluşur. Eklenen her bir işlem öncekileri güçlendirir.

İş Kanıtı

Bir eşten diğerine ulaşan bir zaman damgası sunucusu işlemi uygulanması için Usenet gibi bir gazete kullanmak yerine Adam Back’ın Hashcash sistemi gibi çalışan bir iş kanıtı sistemine ihtiyaç duymaktayız. Bu sistemin temelinde, SHA-256 gibi bir özet fonksiyonunda özet çıktısının belli bir sayıda 0 biti ile başlamasını sağlayacak bir amaç değerin aranması yatar. Ortalama gerekli iş yükü özette amaçlanan ve tek bir özet hesaplamasıyla sınanabilen 0 bitlerinin sayısı ile üssel olarak orantılıdır.

Zaman damgası ağı için iş kanıtı modelini ise, blok özeti istenen sayıda 0 biti ile başlayıncaya kadar bloğun içindeki bir amaç değerinin değiştirilmesi üzerine kurgulamaktayız. İş kanıtını elde edecek CPU tüketimi gerçekleştikten sonra ise, blok aynı işlemi tekrarlamadığı sürece değiştirilemez. Zincire sonradan eklenen tüm bloklar bir önceki bloklara bağlıdır. Bu yüzden değişim işlemi olacaksa sonraki tüm bloklar tekrar hesaplanmalıdır.

İş kanıtı sistemi, çoğunluğun kararının temsil edilmesi sorununu da çözmektedir. Çoğunluk kararı IP adresleri temel alınarak hesaplansaydı, çoklu IP adresine sahip olan dolandırıcılarca sustimal edilebilirdi. Söz konusu iş kanıtı yönteminde ise 1 CPU 1 oya eşit olmaktadır. Çoğunluk kararı, en fazla işlemin yapıldığı en uzun zincir tarafından temsil edilir. CPU işlemlerinin çoğunluğu güvenilir düğümlerin tarafındaysa, saldırgan olarak algılanan diğer düğümler sistem tarafından bertaraf edilecektir.

Önceki bloklardan birini değiştirmek isteyen bir korsan, sonraki bloklardaki tüm işlemleri tekrar gerçekleştimeli ve güvenilir düğümlerin zincir sayısını geçmelidir. Makalenin devamında, yeni bloklar eklendiği sürece, yavaş ilerleyen bir saldırganın yeni işlemlere yetişme olasılığının üssel olarak azaldığından bahsedeceğiz. Artan donanım hızına ve değişken aktif düğüm sayısına ayak uydurmak için, iş kanıtının zorluk seviyesi saatte ortalama blok işlem hedefini tutturmak üzere tekrar ayarlanmaktadır. Blok çok hızlı üretiliyorsa zorluk seviyesi yükselmektedir.

Ağın çalışma adımları aşağıdaki gibidir:
• Yeni her bir işlem tüm düğümlere dağıtılır.
• Her düğüm yeni işlemi bir blog içerisinde toplar.
• Her düğüm kendi bloğu içinde bir iş kanıtı bulmaya çalışır.
• İş kanıtını tespit eden düğüm bunu dizideki tüm diğer düğümlere aktarır.
• Diğer düğümler ise, blok içesirisinde tüm işlemler geçerliyse ve daha önceden harcama olmadıysa, bloğu onaylarlar.
• Düğümler bir sonraki bloğu çözmek için çalışmaya koyulduklarında önceki bloğun özetini de yeni bloğa dahil ederler, böylece bloğu kabul ettiklerini göstermiş olurlar.

Düğümler, her işlem sırasında, en uzun zincirin güvenilir olduğunu varsayarlar ve zinciri uzatmaya çalışırlar. Eğer iki düğüm aynı sıradaki bloğun farklı varyasyonlarını eş zamanlı olarak bulup yayınlarlarsa bazı düğümler birini diğerinden önce alabilecektir.

Böyle bir durumda ise, düğümler ilk bloğu güvenilir olarak kabul ederler ve üzerinde çalışmaya devam ederler. Ancak diğer dalı da, sonradan uzama ihtimaline karşı, üzerinde çalışmak üzere saklarlar. Bu beraberlik ise zincirlerden biri daha uzun hale geldiğinde bozulmuş olacak ve düğümler daha da uzayan diğer dalın üstünde çalışmaya devam edeceklerdir.

Zincire eklenen yeni işlemlerin tüm düğümlere ulaşması zorunlu değildir. Yeterli düğüme ulaştıklarında kısa bir süre içerisinde bir blokta yer alırlar. Blok yayınları mesaj kayıplarına karşı hazırlıklıdır. Eğer düğümlerden biri bir bloğu alamadıysa, bir sonraki aldığı sırada kayıp olanı farkeder ve talepte bulunur.

Teşvik

Temel kural gereği, bloktaki işlem bu bloğu yaratanın sahip olacağı yeni bir parayı dolaşıma süreceği özel bir işlemdir. Bu ise düğümlerin ağı desteklemelerini sağlar. Madalyonun diğer tarafında ise, para basacak bir merkezi banka olmadığından dolayı, paranın dolaşıma girmesi böylelikle sağlanmış olur. Sabit bir hacimdeki paranın sürekli olarak piyasaya sürülmesini, altın madencilerinin sürekli olarak piyasaya altın sürmesi olarak düşünebilirsiniz. Bu projede ise, tüketilen şey elektrik ve CPU gücüdür.

Teşvik ise işlem ücretlerinden elde edilmektedir. Eğer bir işlemin çıktısı girdilerinden azsa, aradaki fark işlem ücreti olarak işlemi içeren bloğun teşvik miktarına katılır. Önceden belirlenmiş miktardaki para dolaşıma çıktıktan sonra teşvik tamamen işlem ücretinden elde edilir ve enflasyon sıfıra indirilir.

Teşvik ise, düğümlerin güvenilir olarak kalmalarını sağlamaktadır. Eğer kurnaz bir saldırgan bütün güvenilir düğümlerden daha fazla işlem gücünü üstünde toplamayı başarabilirse, elde ettiği bu gücü insanların ödemelerini çalmak için mi, yoksa yeni para üretmek için mi kullanacağına karar vermek zorundadır. Oyunu kuralına göre oynamak zorundadır. Sistemi aldatarak kendi zenginliğini riske sokmaktansa, kurallara uymalıdır. Böyle bir hareket biçimi dolandırıcıya herkesin toplamından daha fazla para kazandırabilir.

Disk alanından tasarruf

Bir paranının kullanıldığı en son işlem yeteri kadar bloğun altında kaldığında, öncesindeki harcama işlemleri, barındırma alanından tasarruf etmek için silinebilirler. Bloğun özetini bozmadan bunu sağlamak için, işlemler bir Merkle ağacında barındırılır ve sadece kökü bloğun özetine eklenir. Eski bloklar ise ağaç dalları budanarak sıkıştırılabilir. Ara özetlerin saklanmasına gerek olmayacaktır.

Bir blok başlığı, işlemler hariç, yaklaşık olarak 80 byte uzunluğundadır. Her 10 dakikada bir yeni blok üretildiği düşünülürse, 80 bayt x 6 x 24 x 365 = 4.2 MB/ YIL olarak hesaplanmaktadır. 2008 yılında tipik bilgisayar sistemlerinin 2GB RAM ile satıldığını biliyoruz. Moore yasası baz alınarak; senede 1.2 GB büyüme öngörüsüyle, blok başlıkları hafızada saklansa bile, saklama konusu bir engel teşkil etmeyecektir.

Basitleştirilmiş Ödeme Doğrulaması

Tamamlanmış bir düğüme ulaşmadan da ödemeleri doğrulamak mümkün olabilmektedir. İşlem sahibi sadece en uzun iş-kanıtı zincirine katılan blokların başlıklarının bir kopyasını saklamalıdır. En uzun zincire ulaştığına emin oluncaya kadar ağdaki düğümleri sorgular, blok başlıklarını toplar ve ardından işlemi damgalandığı bloğa ekleyen Merkle dalını elde etmiş olur. Kullanıcı işlemi kendi başına doğrulayamaz. Ancak, zincirdeki bir bölüm ile ilişkilendirerek bir ağ düğümünün kabul edildiğini görecektir. Sonrasında ise, sürece eklenen bloklar da ağın işlemi kabul ettiğine onay verirler.

Bu nedenden ötürü, doğrulama, güvenli düğümler ağın kontrolünü sağladıkları sürece güvenilirdir. Hesaplama yükünün çoğunluğu saldırganın kontrolündeyse ağ savunmasızdır. Ağ düğümleri işlemleri kendileri doğrulayabilir. Ancak, basitleştirilmiş yöntem, saldırganın ağı ele geçirdiği süre boyunca ürettiği yapay işlemler ile kandırılabilir. Bu probleme karşı ise, korunma stratejileri yer almaktadır. Bu strajeleden biri, ağ düğümlerinin geçersiz bir bloğu tespit ettiklerinde alarm vererek kullanıcıdan tüm bloğu ve şüpheli işlemleri yüklemesini istemektir. Daha sık aralıklarla ödeme alan işyerleri, güvenliklerini sağlama konusunda daha bağımsız olmak ve daha hızlı doğrulama yapabilmek için büyük ihtimalle kendi ağ düğümlerini işletmeyi talep edeceklerdir.

Değerleri Birleştirme ve Bölme

Her bir parayı tek tek takip etmek zor olsa da mümkün. Ancak, havale edilecek her kuruş için farklı bir işlem yürütmek pek de pratik değil. Değerin birleştirilebilmesi ve bölünebilmesi için tüm işlemler birden çok girdi ve çıktıdan oluşmaktadırlar. Genelde, ya önceki büyük bir işlemden tek bir girdi alınır ya da küçük miktarları bir araya getiren birden fazla girdi yer alır. En çok iki çıktı olur: Bunlardan birisi ödeme tutarı, varsa diğer ise parayı gönderen tarafa iade edilen para üstüdür.

Unutulmamalıdır ki; dallanma, yani her bir işlemin birçok farklı işleme bağlı olması ve o işlemlerin daha da fazla işleme bağlı bulunmaları aslında bir sorun değildir. Hiçbir zaman işlem geçmişinin tam bir kopyasını çıkartmaya gerek olmayacaktır.

Gizlilik

Standart bankacılıkta, sistem bilgiye erişim yetkisini ilgili partiler ve güvenilir bir üçüncü partiyle sınırlayarak bir seviyeye kadar gizliliği muhafaza eder. Tüm işlemlerin açık bir şekilde beyan edilmesi kuralı ise bu yöntemi kullanışsızlaştırır. Ancak, bilgi akışını başka bir noktadan keserek hala gizlilik sağlanması mümkündür. Açık anahtarları isimsizleştirerek bu sağlanabilir. Dışarıdan, bir tarafın bir başka tarafa belli bir miktarda ödeme gönderdiği izlenebilir. Ancak, işlemi kimin yaptığına dair bir bilgi yer almamaktadır. Bu durum, borsaların işlemlerle ilgili beyan ettikleri bilgi seviyesine benzemektedir. Teker teker, her alım-satım işleminin miktarı ve zamanı herkesin görebileceği şekilde beyan edilir; ancak işlemi gerçekleştiren tarafların kimlikleri gizli kalacaktır.

Ek bir engel olarak ise, açık anahtarın sahibi ile bağlantısını gizlemek için her bir işlemde yeni bir anahtar çifti kullanılması gerekmektedir. Çok girdi yapılan işlemlerde, bir miktar ilişkilendirme illaki ortaya çıkacaktır. Bu durum ise, işlemin girdilerinin aynı şahsa ait olduğunu ortaya çıkarır. Korkulan durum ise, anahtarın sahibinin açığa çıkması halinde, aynı kullanıcıya ait diğer işlemlerin de belli olmasıdır.

Hesaplamalar

Güvenilir zincirden farklı ve daha seri bir biçimde bir zincir oluşturmak isteyen bir saldırgan senaryosu düşünelim. Şahıs bunu başarsa bile, yoktan para üretmek ya da bir parayı ele geçirmeye çalışmak gibi süreçler karşısında sistem savunmasız değildir. Düğümler geçersiz işlemler serisini ödeme olarak onaylamaz. Güvenilir düğümler hiçbir şekilde bu sahte blokları onaylamazlar. Saldırgan sadece kendi işlemlerini değiştirip yolladığı parayı geri almak için çabalayabilir.

Dürüst zincir ile saldırgan arasındaki rekabeti Binomyal Rastgele Yürüyüş olarak tarif edebiliriz. Güvenilir zincirin bir blok uzaması başarılı olma durumunu gösterir ve zinciri 1 puan öne geçerir. Saldırganın zincirinin bir blok ileri uzaması ise başarısızık olarak sayılır ve farkı -1 puan kadar düşürür.

Korsanın bu farkı kapatma ihtimalini ise “Kumarbazın İflası” problemine benzetmek mümkündür. Sınırsız krediye sahip olan bir kumarbaz düşünün. Borçlanarak oyuna başlasın ve kafa kafaya durumuna gelebilmek için sonsuz kere deneme yapma yetkisine sahip olsun. Korsanın dürüst zincirle kafa kafaya gelme ihtimalinin hesaplanması şöyle yapılır:

p = güvenilir bir düğümün sıradaki bloğu bulma ihtimali
q = korsanın sıradaki bloğu bulma ihtimali
qz = korsanın z blok geriden başlayarak beraberliği yakalama ihtimali

p > q olarak varsayarsak, korsanın yetişmek zorunda olduğu blok sayısı arttıkça ihtimal üssel olarak azalacaktır. Eğer korsan, kendi aleyhine işleyen ihtimaller karşısında ilk başlarda şanslı bir seri atak yapamazsa, daha da geride kalacak ve geri kaldıkça da kazanma olasılığı yok denecek kadar azalacaktır.

Pekala, bu sefer de, alacaklı taraftaki kişinin, gönderenin işlemi değiştiremeyeceğinden emin olana kadar geçen sürenin ne olduğunu ve alacaklını ne kadar bekleyeceğini hesaplayalım. Gönderen tarafın bir saldırgan olduğunu düşünelim. Bu kişi, alıcıyı para ödediğine bir süreliğine inandırmak istiyor. Bir süre sonra ise, yaptığı transfer işlemini paranın kendisine geri dönmesi için değiştirmeyi amaçlıyor.

Alıcı taraf, bir çift anahtar üretir ve açık anahtarı imzalamadan önce gönderen tarafa verir. Bu sayede, gönderen kişinin önceden bir blok zinciri hazırlaması ve ardından, üzerinde uğraşarak öne geçtiği şanslı bir anda işlemi gerçekleştirmesi engellenir. İşlem gönderildiğinde ise, saldırgan gönderici gizli bir biçimde işlemin farklı bir versiyonunu içeren paralel bir sahte zincir üretmek için çalışmaya başlar.

Alıcı taraf, işlemin bir bloğa dahil edilmesini ve ardından, bloğa z blok daha eklenmesini beklemektedir. Saldırganın tam olarak ne kadar ilerleme kaydedebildiğini bilmiyordur. Ancak, güvenli blokların genelde ortalama olarak beklenen zamanda üretildiklerini kabul edersek, saldırganın potansiyel ilerleme miktarı, beklenen sonuca göre bir Poisson dağılımı olacaktır:

Saldırganın bir ihtimal yetişebilme olasılığını hesaplamak için, her ilerleme miktarının Poisson yoğunluğunu, bu noktadan itibaren yetişebilme olasılığı ile çarpmalıyız:

Sonsuz dağılım kuyruğunun toplamını almaktan kaçınmak için tekrar düzenleyelim:

C koduna dönüştürelim:

Birkaç denemenin ardından gözlendiği üzere, ihtimal z ye bağlı olarak katlanarak azalmaktadır:

P’yi %0.1 den küçük değerler için hesapladığımızda:

Sonuç

Bu makalede size güven bazlı olmayan bir dijital transfer sistemini açıkladık. Makalemize, dijital imzalardan ortaya çıkan sıradan bir para sistemi modeliyle başladık. Bu sistem işlem sahipliğini mantıklı bir şekilde yönetebilmekteydi. Ancak iki yönlü harcama sorununu engelleyemediği için yetersizdi. Bu sorunu çözmek için ise, işlem geçmişini kaydetmek amacıyla iş kanıtı modelini kullanan eşler arası bir ağ önerisinde bulunduk.

Bu geçmişin değiştirilmesi, işlem gücünün büyük çoğunluğu dürüst düğümlerde yer aldığı sürece imkansıza yakındır. Bu işlem ağı, kendi tekdüzeliği içinde hayli dayanıklıdır. Düğümler tek seferde çok az eşgüdüm ile çalışmaktadır. Kimlik doğrulamasına gerek olmayacaktır; çünkü iletiler belirlenen bir yöne doğru yönlendirilmezler ve diğer düğümler izin verdiği ölçüde dağıtılırlar. Düğümler istedikleri an ağdan kopabilirler veya tekrar dahil olabilirler. Düğümler, iş kanıtı zincirini kendileri ağda yokken yapılan işlemlerin bir kanıtı olarak kabul eder. Düğümler işlem güçleriyle doğru orantılı olarak oy kullanırlar. Düğümler geçerli bloklar üstünde çalışırlar ve zincirlerin uzamalarını sağlarlar. Bunu yaparak işlemleri onayladıklarını gösterirler, zincirde çalışmadıklarında ise işlemi reddetmiş olurlar. Sistemin ihtiyaç duyduğu tüm kurallar bu mekanizme içerisindeki temel mantıkla çözümlenir.