Her şeyi başlatan makale: Bitcoin.pdf

Blockchain, son zamanlarda FinTek çalışmalarının gündeminde yer alıyor. Pek çok banka ve firma blockchain temelli uygulamaları araştırmaya -ve hatta bu uygulamalara dahil olmaya- başladı. Blockchain’i araştırırken her şeyi başlatan şu makaleye rastladım.

Orijinal makale: https://bitcoin.org/bitcoin.pdf

Bu yazı, bitcoin.pdf dokümanının kişisel çevirisi niteliğindedir. İhtiyacı olana faydalı olmasını dilerim. Kaynak göstererek kullanabilirsiniz. [Yazım hataları varsa kusura bakmayın :) ]

Bitcoin: Eşler Arası Elektronik Nakit Sistemi

Satoshi Nakamoto / satoshin@gmx.com / www.bitcoin.org

1. Giriş — (Introduction)

İnternet üzerinde ticaret kavramı, tamamen elektronik ticaret üzerine yoğunlaşmış 3. parti ödeme sistemlerine bağlıdır ve bunlara güvenmektedir. Sistem çoğu işlem için temelinde yeterince güvenli çalışıyor olsa bile, güven temelli modelin doğasında bulunan zayıf yönlerini hala taşımaktadır. Finansal kurumlar aralarındaki anlaşmazlıkları çözene kadar, tamamen geri çevrilemez işlemler mümkün değildir. Aracılık maliyetleri işlem maliyetlerini arttırır, minimum işlem limitleri düşük tutarlı işlemleri engeller ve komisyonlar işlemlerin geri çevrimine engel teşkil eder. İşlemden geri dönülmesi tamamen karşılıklı güvene bağlıdır. Aracı kurumlar, müşterilerine karşı dikkatli olmalıdır çünkü gereğinden fazla alınan bilgi müşterileri rahatsız eder. Dolandırıcılık belirli ölçülerde makul kabul edilir. Bu maliyetler ve belirsizlikler fiziksel para kullanımı ile önlenebilir, ancak iletişim kanalları kullanarak ödeme işlemi yapılacaksa güvenilir bir üçüncü parti gerekmektedir.

İhtiyaç duyulan şey; güven yerine şifreleme kanıtı üzerine kurulu, iki tarafın birbiri ile doğrudan bağlantılı olduğu elektronik bir ödeme sistemidir. işlemi tersine çevirmek için hesaplaması zor olan işlemler tarafları dolandırıcılıktan koruyacaktır. Bu makalede, işlemlerin kronolojik sıralamasının hesaplama kanıtı oluşturmak için bir eşler arası dağıtılan zaman damgası sunucusu kullanarak çift harcamalı soruna bir çözüm önermekteyiz. Bu sistem, ağa dahil olan dürüst düğümlerin işlemci gücünün, ortak çalışan saldırgan düğümlerin işlemci gücünden fazlalığı oranında güvenlidir.

2. İşlemler — (Transactions)

Bir elektronik parayı bir dijital imza (hash) zinciri olarak tanımlıyoruz. Her işlem sahibi, bir önceki işlemin dijital imzasını kullanarak işlemini imzalar ve bir sonrakine aktarır. Ödemeyi alan imzaları doğrulayarak sahiplik zincirini tamamlar.

Buradaki sorun, ödemeyi alanın, önceki işlem sahiplerinden birinin parayı iki kere kullanmadığını doğrulayamamasıdır. Bu sorun için yaygın çözüm, mükerrer harcamaları kontrol eden bir merkezi otorite (merkez bankası, banka, vb.) olmasıdır. Her işlemden sonra para, merkezi otoriteye geri döner ve buradan bir yenisi ile işleme devam edilir. Ancak bu çözümdeki sorun; tüm para transferlerinin akıbetinin merkezi otoriteye (ya da bunu yöneten şirkete, ya da bir bankaya) bağlı olmasıdır.

Bir önceki işlem sahibinin, daha önceki işlemleri imzalamamış olduğundan emin olmamız gerekmektedir. Bizim amacımız, ilk işlemin bir kez sayılmasıdır. Sonraki aşamalardaki mükerrer işlem girişimleri ile ilgilenmeyiz. Bir işlemin yokluğunu tanımlamanın tek yolu tüm işlemlerin farkında olmaktır. Merkezi otorite tabanlı modelde, merkezi otorite tüm işlemlere hakimdir ve hangi işlemin ilk işlem olduğunun farkındadır. Bunu güvenilir bir otorite olmadan yapabilmek için ise, tüm işlemlerin halka açık olduğu [1] ve tüm katılımcıların işlemlerin sırasını onaylayacakları bir sisteme ihtiyaç vardır.

3. Zaman Damgası Sunucusu (ZDS) — (Timestamp Server)

Önerdiğimiz çözüm, bir zaman damgası sunucusu ile başlar. Bir ZDS, zaman damgalanacak bir dizi mesaj blokunun dijital imza (hash) değerinin alınması ve tüm ağa yayınlanması (örneğin bir gazete ya da UseNet [2–5]) ile başlar. Zaman damgası o datanın o zamanda var olduğunu ve dijital imzaya (hash) girmesi gerektiğini kanıtlar. Her bir zaman damgası zinciri oluşturan bir önceki zaman damgasını içerir ve her eklenen zaman damgası kendisinden öncekini güçlendirir.

4. İş Kanıtı — (Proof-of-Work)

Dağıtık bir zaman damgası sunucusunu eşler arası uygulamak için, gazeteden veya UseNet tarzı yayınlardan ziyade Adam Back’in Hashcash [6] ‘na benzer bir İş Kanıtı (PoW) sistemi kullanmamız gerekecektir. İş kanıtı, temelde, SHA-256 gibi şifreleme algoritması ile dijital olarak imzalandığında, bu dijital imzanın belirli sayıda 0 (sıfır) biti ile başlamasını arar. Gerek duyulan ortalama iş, gerek duyulan sıfır bit sayısı ile üstel olur ve tek bir hash çalıştırılarak doğrulanabilir.

Bizim zaman damgası ağımızda, iş kanıtını, blokun dijital imzasında istenen 0 (sıfır) değerine ulaşana kadar arttırdığımız bir “nonce” değeri ile sağlarız. İşlemci (CPU) iş kanıtını sağlayacak işlemleri bir kez yaptıktan sonra, aynı işlemler yapılmadan blok bir daha değiştirilemez. Sonraki bloklar zincire eklendikten sonra, önceki blok değiştirildiğinde, sonra gelen tüm blokların da aynı şekilde değiştirilmesi gerekir.

İş kanıtı, aynı zamanda çoğunluğun kararının benimsenmesi sorununu da ortadan kaldırmaktadır. Eğer, “her IP için bir oy” tabanlı bir sistem olsaydı, IP’lerin çoğunluğuna sahip birisi tarafından kırılabilirdi. İş kanıtı, esas olarak “bir bilgisayar bir oy” temeline dayanır. Çoğunluk kararı, en büyük kanıtlama çalışması eforuna sahip en uzun zincir tarafından temsil edilir. CPU gücünün büyük bir çoğunluğu dürüst düğümlerle kontrol edilirse, dürüst zincir en hızlı büyüyecek ve rakip zincirleri aşacaktır. Geçmişteki bir bloğu değiştirmeye çalışan bir saldırganın, o blokun ardından gelen tüm blokları da değiştirmesi gerekecek, ve akabinde mevcutta dürüst düğümlerden kurulu bir zincirden daha uzun bir zincir oluşturması gerekecektir. Daha sonra inceleyeceğimiz üzere, daha yavaş kalacak olan bir saldırganın bloklar eklendikçe başarılı olma ihtimali katlanarak azalacaktır. Zaman içinde artan donanım hızları ve ve artan düğüm sayısına uygun şekilde, her bir blok için iş kanıtı zorluk seviyesi hareketli ortalama metodu kullanılarak saatlik olarak yeniden hesaplanır. Çok hızlı oluşturulursa zorluk da artar.

5. Ağ — (Network)

Ağı çalıştırmak için gereken adımlar şunlardır;

  1. Her yeni işlem tüm düğümlere yayınlanır.
  2. Her düğüm yeni işlemleri bir blok içine toplar.
  3. Her düğüm kendi bloku içinde bir iş kanıtı bulmaya çalışır.
  4. İş kanıtını bulan düğüm, diğer tüm düğümlere bu kanıtı yollar.
  5. Düğümler blok işindeki tüm işlemler doğrulanmışsa ve daha önce harcanmamışsa bloku kabul eder.
  6. Düğümler, kabul edilen blokun dijital imzasını (hash değerini) kullanarak zincirdeki bir sonraki bloku oluşturmaya çalışarak bloku onayladığını ifade eder.

Düğümler her zaman en uzun zinciri doğru olarak kabul eder ve onu genişletmeye çalışmaya devam eder. Eğer iki farklı düğüm, bir sonraki blokun iki farklı versiyonunu yayınlarsa, diğer düğümler bunlardan herhangi birini alabilir. Bu durumda düğümler ilk aldıklarını doğru kabul edip zinciri uzatmaya devam ederler, ancak diğerini de daha fazla uzama ihtimaline karşılık saklarlar. Beraberlik, bir sonraki iş kanıtı bulunduğunda ve zincirlerden birisi daha uzun olduğunda bozulmuş olacaktır. Kısa kalan zincirde çalışan düğümler de uzun olana geçecektir.

Yeni işlem yayınlarının tüm düğümlere ulaşması gerekmez. Birçok düğüme eriştikleri sürece çok beklemeden bir bloka dahil olacaklardır. Blok yayınları mesaj kayıplarına karşı toleranslıdır. Eğer bir düğüm bir bloku alamazsa bir sonraki bloku aldığında kaçırdığı bloku fark eder ve talep eder.

6. Harekete Geçirme/Teşvik— (Incentive)

Kurallara göre, blokun ilk işlemi blokun kurucusunun sahip olduğu yeni para birimini (coin) dolaşıma sokmasını sağlayan özel bir işlemdir. Bu, ağı desteklemek için düğümleri harekete geçirir ve merkezi bir otoriteye bağlı olmayan ilk coin’in dağıtıma sokulmasını sağlar. Yeni coin’lerin dolaşıma dahil olması, altın madencilerinin dolaşıma altın ekleyebilmek için kaynaklar harcamasına benzer. Burada harcanan işlemci gücü ve elektriktir.

Teşvik, işlem ücretleri ile de karşılanabilir. Bir işlemin çıktı değeri girdi değerinden düşükse, aradaki fark, işlemi içeren bloğun teşvik değerine eklenen bir işlem ücretidir. Önceden belirlenmiş sayıda coin dolaşıma sokulduğunda, işlemler sadece işlem ücretleri ile gerçekleşebilir ve tamamen enflasyondan bağımsız hale gelebilir.

Teşvik, düğümlerin dürüst olmaya teşvik edilmesine yardımcı olabilir. Açgözlü bir saldırgan tüm dürüst düğümlerden daha fazla işlemci gücü toplayabilirse, ödemelerini geri çalarak insanları dolandırabilir veya yeni paralar üretmek için onu kullanabilir. Aslında oyunu kurallarına göre oynamayı daha kârlı bulmalıdır. Bu kadar işlemci gücü varsa, sistemi kandırıp kendi zenginliğinin geçerliliğini de zedelemektense, kuralları işletmek ona daha çok coin getirisi sağlayacaktır.

7. Disk Alanından Tasarruf — (Reclaiming Disk Space)

Bir coin’in kullanıldığı son işlem yeteri kadar blokun altında kaldığında, bitmiş işlemler diskte yer açmak için silinebilir. Blokun dijital imzasını (hash) bozmamak için işlemler sadece kök seviyede Merkle Ağacı [7][2][5] içinde imzalanabilir. Daha sonra eski bloklar ağacın dallarını boşaltarak sıkıştırabilir. Dahili hash değerlerinin depolanması gerekmez.

Hiçbir işlem yapılmayan bir blok başlığı (header) yaklaşık 80 bayt olacaktır. Her 10 dakikada bir blok üretildiğini varsayarsak, 80 bayt * 6 * 24 * 365 = yılda 4.2MB. Bilgisayar sistemleri genellikle 2008 yılı itibariyle 2GB RAM ile satılmaktadır ve Moore Yasasına göre yılda 1.2GB artması tahmin edilmektedir. Blok başlıkları bellekte saklansalar bile depolama sorunu olması beklenmemektedir.

8. Basitleştirilmiş Ödeme Doğrulaması — (Simplified Payment Verification)

Ödemeleri, ağdaki tüm düğümleri çalıştırmadan da doğrulamak mümkündür. Kullanıcı sadece ağdaki en uzun iş kanıtı doğrulama zincirinin (en uzun zincir olduğundan emin oluncaya kadar ağ düğümlerini sorgulayarak bulacağı zincir) bloklarının başlıklarının bir kopyasını saklamalıdır. Ve işlemin zaman-damgalanmış bloka bağlandığı Merkle dalını (Merkle Branch) elde eder. İşlemi kendisi kontrol edemez, ancak zincirdeki bir yere bağlayarak ağdaki düğümlerin bunu onayladığını ve ağın onu kabul ettiğini doğruladıktan sonra blokları eklediğini görebilir.

Bu nedenle, doğrulama ağ dürüst düğümlerle çalıştığı sürece güvenlidir. Ama saldırgan düğümler ağdaki işlemci gücünün fazlasını ele geçirirse savunmasız kalacaktır. Ağ düğümleri işlemleri kendi başlarına doğrulayabiliyorken, basitleştirilmiş metod saldırgan ağa hakim olduğu sürece saptırılabilir. Buna karşı bir strateji, ağ düğümleri hatalı bir blok ile karşılaştığında gelen alarmları dinlemek, kullanıcılardan alarm verilen işlemleri ve tüm bloku yüklemesini istemek ve tutarsızlığı doğrulamak olabilirdi. Sıkça ödeme alan işletmeler, muhtemelen, daha hızlı onay ve güvenlik için kendi düğümlerini kullanmayı isteyeceklerdir.

9. Değerleri Birleştirme ve Bölme — (Combining and Splitting Value)

Coinleri tek tek ele almak mümkün olsa da, bir transferde her kuruş için ayrı bir işlem yapmak hantal olurdu. Değerin bölünmesine ve birleşmesi, işlemleri çoklu giriş ve çıkışlar halinde yapılmasıdır. Normalde, bir önceki daha büyük bir işlemden gelen tek bir giriş veya daha küçük miktarları birleştiren çoklu girişler ve en çok iki çıkış olur; bunlardan biri ödeme, diğeri (varsa) gönderene iadedir.

Bu dallanmada unutulmamalıdır ki, bir işlem çeşitli işlemlere bağlıdır ve bu işlemler de daha bir çoğuna bağlıdır, bu bir sorun değildir. Bu işlem geçmişinin eksiksiz bir kopyasını çıkarmaya ihtiyaç yoktur.

10. Gizlilik — (Privacy)

Geleneksel bankacılık modeli, taraflara ve güvenilir üçüncü partiye bilgi erişimi sınırlandırarak bir gizlilik seviyesine ulaşır. Tüm işlemlerin alenen ilan edilmesi gerekliliği bu metodu kullanılmaz kılar. Ancak gizlilik şu şekilde muhafaza edilebilir; Public Key’i anonim tutarak. Herkes, birisinin başka birisine ne kadar gönderim yaptığını görebilir ama bu bilgi kimse ile bağlantılı değildir. Bu, borsalarda ilan edilen işlem bilgilerine benzer.

Ek bir güvenlik duvarı olarak, ortak bir sahibe bağlanmalarını önlemek için her işlem için yeni bir anahtar çifti kullanılmalıdır. Bazı bağlantılarda (girdilerinin aynı sahip olduğunu açıklayan çok girişli işlemlerde) bu kaçınılmazdır. Buradaki risk, bir anahtarın sahibi ortaya çıkarsa, aynı sahibe ait diğer işlemlerin de ortaya çıkabilmesidir.

11. Hesaplamalar — (Calculations)

Bu senaryoda, saldırgan düğümlerin, dürüst düğümlerden daha hızlı iş çıkardığını (alternatif bir en uzun zincir oluşturmaya çalıştığını) düşünelim. Eğer bu yapılsa bile, bu durum sistemi keyfi değişikliklere (saldırganların kendine ait olmayan bir parayı üretmeleri gibi) maruz bırakmayacaktır. Düğümler geçersiz bir işlemi ödeme olarak kabul etmeyecek ve dürüst düğümler bunları içeren bir bloku asla kabul etmeyecektir. Bir saldırgan, yalnızca son harcadığı parayı geri alabilmek için kendi işlemlerinden birini değiştirmeye çalışabilir.

Dürüst zincir ve bir saldırganın zinciri arasındaki yarış “Binomial Random Walk” (Binomiyal Rastsal Yürüyüş) ile karakterize edilebilir. Başarı durumu, dürüst zincirin bir blok genişlemesi ve öncülüğünün +1 olması, başarısızlık durumu ise, saldırgan zincirin bir blok genişlemesi ve aradaki farkın -1 azalmasıdır.

Belirli bir açığı yakalayacak bir saldırganın olasılığı, bir “Gambler’s Ruin” (Kumarbazın İflası) problemine benzer. Sınırsız kredisi olan bir kumarbazın bir açıkla (borçla) oyuna başladığını ve başabaş (ne kâr ne zarar) noktasına ulaşmaya çalışmak için sınırsız sayıda deneme hakkı olduğunu varsayalım. Aşağıda görüldüğü gibi, kumarbazın başabaş noktasına ulaşabilme ihtimalini hesaplayabiliriz, ya da saldırganın dürüst zinciri yakala ihtimalini hesaplayabiliriz.

p= dürüst bir düğümün bir sonraki bloğu bulma ihtimali

q = saldırgan bir sonraki bloğu bulma ihtimali

qz = saldırganın z blok geriden gelip yakalama ihtimali

p > q varsayımına göre, saldırganın yakalamak zorunda olduğu blok sayısı arttıkça yakalama olasılığı katlanarak düşer. Bu dezavantajı ile birlikte, eğer zincirin ilk halkalarında şanslı bir hamle yapmazsa, dürüst zincir uzadıkça şansı daha da azalır ve kaybolur.

Şimdi, yeni bir işlemin alıcısının, gönderenin işlemi değiştiremeyeceğinden yeterince emin olmadan önce ne kadar beklemesi gerektiği konusunu ele alalım. Göndereni, bir süreliğine kendisine ödeme yaptığımızda inandırmak isteyen ve bir süre sonra ödemeyi kendisine döndürmeyi amaçlayan bir saldırgan olduğumuzu varsayalım. Böyle bir durumda alıcıya uyarı verilecektir, ancak saldırgan da bu uyarının çok geç olacağını ummaktadır.

Alıcı yeni bir anahtar çifti üretir ve “public key”i (public key’i imzalamadan kısa bir süre önce) gönderene yollar. Bu, gönderenin daha önceden uzun bir blok zinciri oluşturmasını ve en uzun zinciri oluşturduğu bir anda işlemi gerçekleştirmesinin önüne geçmiş olur. İşlem bir kere gönderildikten sonra, dürüst gönderici işleminin alternatif sürümünü içeren paralel bir zincir üzerinde gizli bir şekilde çalışmaya başlar.

Alıcı işlemin bir bloka bağlanmasını bekler ve ardından “z” sayısı kadar blok da bu bloka bağlanır. Alıcı, saldırganın ne kadar ilerlediğini bilmemektedir, ama dürüst blokların her blok başına ortalama beklenen bir süreyi aldığını varsayarsak, saldırganın potansiyel ilerlemesiPoisson Dağılımına” göre beklenen bir değer alacaktır:

Saldırganın yetişebilme olasılığını elde etmek için, o noktadan yetişebileceği ihtimali ile yapabileceği her ilerleme miktarının Poisson yoğunluğunu çarpmak gerekir:

Dağılımın sonsuz kuyruğunun toplamından sakınmak için tekrar düzenliyoruz:

C koduna dönüştürelim:

Bazı sonuçlar için çalıştırdığımızda, olasılığın “z” ile katlanarak düştüğünü görebiliriz.

P’yi %0.1'den daha küçük alarak çalıştırdığımızda;

12. Sonuç — (Conclusion)

Burada, güven esasına dayalı olmayan elektronik işlemler için bir sistem önermekteyiz. Güçlü bir sahiplik kontrolü sağlayan, dijital imzalı coin’lerden oluşan sıradan bir yapı ile başladık, ancak çift harcama (double-spending) önlemek için bir yok eksikti. Bunu çözmek için, dürüst düğümlerin işlemci gücünün çoğunluğa sahip olduğu durumlarda saldırganlar tarafından hızlıca hesaplanması mümkün olmayan, iş kanıtı (proof-of-work) temeline dayalı eşler arası bir ağ önerdik. Ağ dağıtık basitliği içinde sağlam bir yapıdadır. Düğümler tek seferde çok az koordinasyon ile çalışırlar. Mesajların belirli özel bir yere bir yere yönlendirilmemesi ve yalnızca en iyi çaba temelinde sunulması gerektiğinden, tanımlanması gerekmez. Düğümler ağdan ayrılabilir ya da istedikleri zaman tekrar bağlanabilirler. Çalışırlarken kanıtlanmış olan zincirleri, gittiklerinde onların kanıtı olarak kabul edilir. Düğümler, blokları onaylamak, hatalı blokları reddetmek ve zincirlerini genişletmek için işlemci (CPU) güçleri ile oy kullanırlar. Bu oy birliği mekanizması ile gerek duyulan tüm kurallar ve teşvikler (işlem ücretleri vb.) uygulanabilir.

[1] W. Dai, “b-money,” http://www.weidai.com/bmoney.txt, 1998.
[2] H. Massias, X.S. Avila, and J.-J. Quisquater, “Design of a secure timestamping service with minimal trust requirements,” In 20th Symposium on Information Theory in the Benelux, May 1999.
[3] S. Haber, W.S. Stornetta, “How to time-stamp a digital document,” In Journal of Cryptology, vol 3, no 2, pages 99–111, 1991.
[4] D. Bayer, S. Haber, W.S. Stornetta, “Improving the efficiency and reliability of digital time-stamping,” In Sequences II: Methods in Communication, Security and Computer Science, pages 329–334, 1993.
[5] S. Haber, W.S. Stornetta, “Secure names for bit-strings,” In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28–35, April 1997.
[6] A. Back, “Hashcash — a denial of service counter-measure,” http://www.hashcash.org/papers/hashcash.pdf, 2002.
[7] R.C. Merkle, “Protocols for public key cryptosystems,” In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122–133, April 1980. [8] W. Feller, “An introduction to probability theory and its applications,” 1957.
Dürüst Düğüm: Ağa dahil olmuş ve saldırı hedefi olmayan her bir bilgisayar.
Saldırgan Düğüm: Ağa dahil olmuş ve saldırı hedefi olan her bir bilgisayar.