Bitcoin: Eşler Arası Elektronik Nakit Sistemi

Bitcoin: Eşler Arası Elektronik Nakit Sistemi

Son güncelleme: Ağustos 13, 2017

Bitcoin: Eşler Arası Elektronik Nakit Sistemi; Bitcoin tezinin ilk kez ortaya atıldığı makaledir. Satoshi Nakamoto‘nun orijinal makalesi, Bitcoin’in nasıl çalıştığını inceleyen herkesin okuması önerilir. İngilizce orijinal metni bu linkten indirebilirsiniz.

Makalenin Türkçe çevirisini ise aşağıda bulabilirsiniz. Bitcoin hakkında daha fazla bilgi için sık sorulan sorular kısmına bakabilirsiniz.

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

Özet. Elektronik nakitin tamamen eşler arası bir versiyonu çevrimiçi ödemelerin bir finansal kuruluşa gitmeden doğrudan bir taraftan diğerine gönderilmesini sağlar. Dijital imzalar çözümün bir parçasını oluşturuyor ancak güvenilir bir üçüncü tarafın hala çift-harcamayı önlemesi gerekirse ana faydalar kayboluyor. Eşler arası ağ kullanarak çift-harcama sorununa bir çözüm öneriyoruz. Ağ zaman damgaları işlemleri, devam eden bir hash-temelli çalışma kanıtı haline getirerek ve çalışma kanıtını yeniden düzenlemeden değiştirilemeyen bir kayıt oluşturarak kaydeder. En uzun zincir, yalnızca tanık oldukları olayların sırasının kanıtı olarak değil, aynı zamanda en büyük CPU güç havuzundan geldiğini kanıtlıyor. CPU gücünün büyük bir çoğunluğu ağa saldırmak için işbirliği yapmayan nodlar tarafından kontrol edildiği sürece, en uzun zinciri ve dışarıya saldıracak saldırganları üretirler. Ağın kendisi minimal yapı gerektirir. Mesajlar en iyi çaba temelinde yayınlanır ve nodlar ağı terkedebilir ve ağa yeniden katılabilirler, iş zincirinin en uzun ispatını, kendileri yok iken kanıt olarak kabul ederler.

Eşler Arası Elektronik Nakit Sistemi

1. Giriş

İnternette ticaret, neredeyse münhasıran elektronik ödemeleri işleme koymak için güvenilir üçüncü şahıslar olarak hizmet veren finansal kurumlara sırtını dayıyor. Sistem, çoğu işlem için yeterince iyi çalışıyor olsa da, güven temelli modelin özünde bulunan zayıf yönlerini hala yaşıyor. Finansal kuruluşlar anlaşmazlıklara aracılık etmeyi engelleyemediğinden, tamamen geri çevrilemez işlemler gerçekten mümkün değildir. Arabuluculuk maliyeti, işlem maliyetlerini arttırır, minimum pratik işlem boyutunu sınırlar ve küçük geçici işlemler için imkânı ortadan kaldırır ve geri döndürülemez hizmetler için geri dönüşümsüz ödemelerin yapılabilmesi için daha büyük bir maliyet oluşur. Tersine dönme imkânı ile güven duygusuna ihtiyaç duyulmaktadır. Tüccar, müşterilerine karşı dikkatli olmalı, aksi takdirde ihtiyaç duyacaklarından daha fazla bilgi için onları rahatsız edecektir. Dolandırıcılığın belirli bir yüzdesi kaçınılmaz olarak kabul edilir. Bu maliyetler ve ödeme belirsizlikleri şahsen fiziksel para birimini kullanarak önlenebilir, ancak güvenilir bir parti olmadan bir iletişim kanalı üzerinden ödeme yapmak için herhangi bir mekanizma mevcut değildir.

İhtiyaç duyulan şey, güven yerine kriptografik kanıt üzerine kurulu ve istekli herhangi iki tarafın, güvenilir bir üçüncü tarafa ihtiyaç duymadan birbirleriyle doğrudan işlem yapmasına izin veren bir elektronik ödeme sistemidir. Matematiksel olarak tersine çevirmesi zor olan işlemler, satıcıları dolandırıcılıktan koruyacak ve alıcıları korumak için rutin emanet mekanizmaları kolayca uygulanabilecektir. Bu makalede, işlemlerin kronolojik sıralamasına ait hesaplama kanıtı oluşturmak için eşler arası bir dağıtılmış zaman damgası sunucusu kullanarak çift harcamalı soruna bir çözüm önermekteyiz. Dürüst nodlar, işbirliği yapan herhangi bir saldırgan nodlar grubundan topluca daha fazla CPU gücü kontrol ettiği sürece sistem güvenlidir.

2. İşlemler

Elektronik parayı bir dijital imza zinciri olarak tanımlıyoruz. Her sahibi bir önceki işlemin sağlamasını ve bir sonraki sahibinin genel anahtarını dijital olarak imzalayıp bunları paranın sonuna ekleyerek parayı diğerine aktarır. Bir alacaklı, mülkiyet zincirini doğrulamak için imzaları doğrulayabilir.

Bitcoin

Elbette ki sorun, alacaklının, sahiplerinden birinin parayı çift-harcama yapıp yapmadığını doğrulayamamasıdır. Ortak bir çözüm, çift harcama için her hareketi kontrol eden güvenilir bir merkezi otoriteyi veya darphaneyi getirmektir. Her işlemden sonra yeni bir para basmak için işlenen para geri gönderilmeli ve doğrudan darphaneden verilen paraların iki defa harcanmadıklarına güvenilir. Bu çözümün problemi, tüm para sisteminin kaderinin darphaneyi işleten şirkete bağlı olması ve her işlemin bir banka gibi onlardan geçmesi gerektiğidir.

Alacaklının, önceki sahiplerin daha önceki işlemleri imzalamamış olduğunu bileceği bir yola ihtiyacımız var. Bizim amaçlarımız için, en erken işlem önemlidir, dolayısıyla daha sonra iki defa harcama girişiminde bulunmamızın önemi yoktur. Bir işlemin yokluğunu onaylamanın tek yolu, tüm işlemlerin farkında olmaktır. Darphane tabanlı modelde, darphane tüm işlemlerin farkındaydı ve hangisinin önce geldiğine karar verdi. Bunu güvenilir bir parti olmadan gerçekleştirmek için işlemler halka açıklanmalı ve katılımcıların, aldığı siparişin tek bir tarihini kabul etmeleri için bir sisteme ihtiyaç duyuyoruz. Alacaklı, her işlem anında nodların çoğunun ilk kez aldığı noktasında anlaştığı kanıtlara ihtiyaç duyuyor.

3. Zaman Damgası Sunucusu

Önerdiğimiz çözüm, bir zaman damgası sunucusu ile başlar. Bir zaman damgası sunucusu, bir blokluk bir sağlamanın zaman damgası haline getirilmesi ve yaygın bir şekilde bir gazete veya Usenet yayınında yayınlanması yoluyla çalışır. Zaman damgası, karma belleğe girmek için o esnada var olması gerektiğini kanıtlıyor. Her bir zaman damgası, zincir oluşturan önceki zaman damgasını içerir ve her ek zaman damgası kendisinden önce olanları güçlendirir.

4. İş İspatı

Dağıtık bir zaman damgası sunucusunu eşler arası temelde uygulamak için gazete veya Usenet yayınlarından ziyade Adam Back’in Hashcash’ine benzer bir çalışma sistemi kanıtını kullanmamız gerekecek. İşin kanıtı, SHA-256 gibi, hash’lendiğinde sağlamanın birkaç sıfır bitiyle başladığı bir değeri taramayı içerir. Gerekli ortalama iş gerekli olan sıfır bit sayısıyla üstel olur ve tek bir sağlama çalıştırılarak doğrulanabilir.

Zaman damgası ağımız için işin kanıtını, bloğun hash’ını gerekli sıfır bitlerini veren bir değer bulunana kadar bloğun içindeki bir olmayan değeri arttırarak uyguluyoruz. CPU eforu çalışma kanıtını tatmin edecek şekilde harcanırsa, blok, işi yeniden yapmaksızın değiştirilemez. Sonradan bloklar zincirlenirken, bloğu değiştirmek için yapılan işten sonra tüm blokları yeniden düzenlemeyi de içerir.

İş ispatı çoğunlukla karar verme sürecinde temsili belirleme sorununu da çözmektedir. Çoğunluk bir IP adresi-bir oy temelinde yapılmışsa, birçok IP tahsis edebilen herkes tarafından kırılabilir. İş ispatı aslında bir CPU-bir oydur. Çoğunluk kararı, en büyük kanıtlama çalışması çabasına sahip olan en uzun zincir tarafından temsil edilir. CPU gücünün büyük bir çoğunluğu dürüst nodlarla 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ştirmek için, bir saldırgan bloğun ve ardından gelen tüm blokların işlem kanıtını yeniden oluşturmalı ve daha sonra dürüst nodların işine yetişmeli ve aşmamalıdır. Sonradan göstereceğiz ki, daha yavaş bir saldırganın yetişme olasılığı, takip eden bloklar eklendikçe, katlanarak azalacaktır.

Artan donanım hızını ve çalışan nodlara olan ilgiyi zamanla telafi etmek için, çalışma zorluğunun kanıtı saat başına ortalama bir blok sayısını hedefleyen hareketli bir ortalamayla belirlenir. Çok hızlı üretilirlerse zorluk artar.

5. Ağ

Ağı çalıştırmak için gerekli adımlar şunlardır:

  1. Yeni işlemler tüm nodlara yayınlanır.
  2. Her nod bir blok içine yeni işlemler toplar.
  3. Her nod, blokları için zor bir iş ispatı bulmaya çalışır.
  4. Bir nod iş belgesi bulursa, bloğu tüm nodlara yayınlar.
  5. Nodlar, yalnızca tüm işlemler geçerli olduğu halde ve önceden harcanmadığı takdirde bloğu kabul eder.
  6. Nodlar, kabul edilen bloğun hash’ini önceki hash’i kullanarak, zincirdeki bir sonraki bloğu oluşturmaya çalışarak blok kabullerini ifade eder.

Nodlar her zaman en uzun zinciri doğru olan kabul eder ve onu genişletmeye çalışmaya devam edecektir. İki nod bir sonraki bloğun farklı sürümlerini aynı anda yayınlıyorsa, bazı nodlar bir veya öncekini alabilir. Bu durumda, ilk aldıkları üzerinde çalışıyorlar, ancak diğer dalı da daha uzun hale gelir diye saklıyorlar. Bağ, bir sonraki iş belgesi bulununca kırılacak ve bir dal daha uzun olacak; diğer dal üzerinde çalışan nodlar daha uzun olana geçecektir.

Yeni işlem yayınlarının mutlaka tüm nodlara erişmesi gerekmez. Birçok noda eriştikleri sürece, kısa bir süre sonra bir blok içine girecekler. Blok yayınlar da düşen mesajlara toleranslıdır. Bir nod bir blok almazsa, bir sonraki bloğu aldığında onu talep eder ve onu kaçırdığının farkına varır.

6. Teşvik

Kurallara göre, bir bloğun ilk işlemi, bloğun yaratıcısı tarafından sahip olunan yeni bir coin başlatan özel bir işlemdir. Bu, ağın desteklenmesi için nodlara bir teşvik getirir ve onları dağıtmak için merkezi bir yetkisi bulunmadığından, coin’leri dolaşıma sokmanın bir yolunu sağlar. Yeni coin’lerin sabit bir şekilde eklenmesi altın madencilerinin dolaşıma altın eklemek için kaynakları harcamasına benzer. Bizim durumumuzda, harcanan CPU zamanı ve elektriğidir.

Teşvik, işlem ücretleriyle de finanse edilebilir. Bir işlemin çıktı değeri girdi değerinden düşükse, fark, işlemi içeren bloğun teşvik değerine eklenen bir işlem ücretidir. Önceden belirlenmiş sayıda coin dolaşıma girdikten sonra, teşvik tamamen işlem ücretlerine geçebilir ve tamamen enflasyona dönüşebilir.

Teşvik, nodların dürüst olmaya teşvik edilmesine yardımcı olabilir. Açgözlü bir saldırgan tüm dürüst nodlardan daha fazla CPU gücü toplayabilirse, ödemelerini geri çalarak insanları aldatmak için kullanmak veya yeni paralar üretmek için onu kullanmak arasında seçim yapmalıdır. Kurallara göre oynamayı daha karlı bulmalıydı; sistemi ve kendi servetinin geçerliliğini baltalamaktan ziyade, herkesten daha fazla yeni coinlerle onu tercih eden kuralları.

7. Disk Alanını Geri Kazanma

Bir coin’deki en son işlem yeterli bloklar altına gömüldüğünde, harcanmış işlemler disk alanından tasarruf etmek için atılabilir. Blok hash’ini bozmadan bunu kolaylaştırmak için, işlemler, bloğun hash’ine yalnızca kök dahil edilmiş bir Merkle ağacında hash edilir. Daha sonra eski bloklar ağacın dallarını boşaltarak sıkıştırabilir. Dahili hash değerlerin depolanması gerekmez.

Hiçbir işlem yapılmayan bir blok başlığı yaklaşık 80 bayt olacaktır. Her 10 dakikada bir blok üretildiğini varsayarsak, 80 bayt * 6 * 24 * 365 = yılda 4.2MB. 2008 yılı itibariyle genellikle 2GB RAM ile satılan bilgisayar sistemleri ve yılda 1.2GB’lık mevcut büyümesini tahmin eden Moore Yasası ile, blok başlıkları hafızasında tutulsalar bile depolama bir sorun olmamalı.

8. Basitleştirilmiş Ödeme Doğrulaması

Ödemeleri, tam bir ağ nodu çalıştırmadan doğrulamak mümkündür. Bir kullanıcının, en uzun zincire sahip olduğuna ikna edinceye kadar ağ nodlarını sorgulayarak elde edebileceği en uzun çalışma zinciri kanıtı olan blok başlıklarının bir kopyasını tutması ve içinde işlemin zaman damgasına tabi bloğa bağlandığı Merkle şubesini elde etmesi yeterlidir. İşlemi kendisi kontrol edemez, ancak zincirdeki bir yere bağlayarak, bir ağ nodunun onu kabul ettiğini ve ağın onu kabul ettiğini doğruladıktan sonra blokları eklediğini görebilir.

Bu nedenle doğrulama, dürüst nodlar ağı kontrol ettiği sürece güvenilir ancak ağ bir saldırgan tarafından engellenirse daha savunmasız olur. Ağ nodları işlemleri kendi başına doğrulayabilirken, basitleştirilmiş yöntem saldırganın yapmış olduğu işlemler tarafından saldırganın ağa yenik düştüğü sürece kandırılabilir. Buna karşı bir strateji, geçersiz bir blok algıladıklarında ağ nodlarından gelen uyarıları kabul etmek ve kullanıcının yazılımının tam bloğunu indirmesini ve uyuşmayan hareketleri doğrulamak için uyarılan işlemleri belirtmek olacaktır. Sık yapılan ödemeleri alan işletmeler muhtemelen hala daha bağımsız güvenlik ve daha hızlı doğrulama için kendi nodlarını çalıştırmak isteyecektir.

9. Birleştiren ve Bölünen Değer

Coinleri tek tek ele almak mümkün olsa da, bir transfer sırasında her yüzde için ayrı bir işlem yapmak hantal olurdu. Değerin bölünmesine ve birleşmesine izin vermek için, işlemler çoklu giriş ve çıkışlar içerir. Normalde daha büyük bir önceki işlemden gelen tek bir girdi veya daha küçük miktarları birleştiren çoklu girişler ve en fazla iki çıkış olacaktır: biri ödeme için, diğeri de varsa göndericiye geri gönderilecek para üstüdür.

Bir işlemin çeşitli işlemlere bağlı olduğu ve bu işlemlerin çok daha fazla bağımlı olduğu çıkış yelpazesinin burada bir sorun olmadığını belirtmek gerekir. Bir işlem geçmişi için eksiksiz bir bağımsız kopyanın çıkartılması gerekmez.

10. Gizlilik

Geleneksel bankacılık modeli, taraflara ve güvenilir üçüncü partiye bilgi erişimini sınırlandırarak bir gizlilik seviyesine erişir. Tüm işlemlerin duyurularak açıklanması gerekliliği bu yöntemi kesinlikle engellemektedir, ancak gizlilik halen başka bir yerde bilgi akışı koparılarak muhafaza edilebilir: açık anahtarların isimsiz tutulması. Halk, birisinin bir başkasına bir miktar gönderdiğini, ancak işlemi herhangi birine bağlamayan bir bilgi olarak görebilir. Bu, borsalarda, bireysel ticaretlerin zaman ve boyutlarının kamuya açıklandığı, ancak tarafların kim olduğunu söylemeden açıklanan bilgilerin seviyesine benzer.

Ek bir güvenlik duvarı olarak, ortak bir müşteriye bağlanmalarını önlemek için her işlem için yeni bir anahtar çifti kullanılmalıdır. Bazı bağlar, girdilerinin aynı malikin mülkiyetinde olduğunu ortaya koyan çok girişli işlemlerle kaçınılmazdır. Risk, bir anahtarın sahibi ortaya çıkarsa, bağlantı kurulması aynı sahibine ait diğer işlemleri ortaya çıkarabilir.

11. Hesaplamalar

Bir saldırganın, dürüst zincirden daha hızlı bir alternatif zincir üretmeye çalıştıkları bir senaryoyu düşünelim. Bu yapılsa bile, sistemi ince havadan değer yaratmak veya saldırgana zaten hiç ait olmayan parayı almak gibi keyfi değişikliklere açık tutmaz. Nodlar geçersiz bir işlemi ödeme olarak kabul etmeyecek ve dürüst nodlar bunları içeren bir bloğu 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 saldırganın zinciri arasındaki yarış Binomalı Rasgele Yürüyüş olarak nitelendirilebilir. Başarı olayı, dürüst zincirin bir blok genişletilmesi ve öncülüğünün +1 artması ve başarısızlık olayı saldırganın zincirinin bir blok uzatılması ve bu boşluğu -1 azaltmasıdır.

Belirli bir açığı yakalayacak bir saldırganın olasılığı, bir Kumarbazın Harabe Sorunu’na benzer. Sınırsız kredisi olan bir kumarbazın bir açığa başladığını ve başabaş noktasına ulaşmaya çalışmak için potansiyel olarak sınırsız sayıda deneme oynadığını varsayalım. Şimdiye kadar ulaştıracağının olasılığını hesaplayabiliriz ya da bir saldırganın dürüst bir zincire aştığını şu şekilde hesaplarız:

p = dürüst bir nodun bir sonraki bloğu bulma ihtimali
q = saldırgan bir sonraki bloğu bulma ihtimali
qz = saldırganın arkasındaki z bloklarını yakalama ihtimali

p > q varsayımımıza göre, saldırganın yakalamak zorunda olduğu blokların sayısı arttıkça, olasılık katlanarak düşer. Karşı ihtimali varsa, eğer erkenden şanslı bir atlama yapmazsa, şansı daha da geriye düştüğünde 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ğini düşünüyoruz. Göndereni, alıcıyı bir süre kendisine ödediğine inandırmak isteyen, daha sonra bir süre sonra kendisine geri ödeme yapmaya karar veren bir saldırgan varsayıyoruz. Böyle bir durumda alıcıya uyarı verilecek, ancak gönderen çok geç olacağını ümit eder.

Alıcı, yeni bir anahtar çifti üretir ve imzalamadan kısa bir süre önce gönderene genel anahtar verir. Bu, göndericinin, ileride yeteri kadar ilerleyip o andaki işlemi gerçekleştirmesi için şanslı oluncaya kadar, üzerinde çalışarak önceden bir blok zinciri hazırlamasını engeller. İşlem gönderildikten sonra sahtekâr olmayan gönderen, işleminin alternatif bir sürümünü içeren bir paralel zincir üzerinde gizli çalışmaya başlar.

Alıcı, işlem bir bloğa eklenene kadar bekler ve ardından z blokları bağlanır. Saldırganın yaptığı ilerlemenin kesin miktarını bilmiyor, ancak dürüst blokların blok başına ortalama beklenen süreyi aldığını varsayarsak, saldırganın potansiyel ilerlemesi beklenen değere sahip bir Poisson dağılımı olacak:

Saldırganın hala yetişebileceği olasılığı elde etmek için o noktadan yetişebileceği ihtimalle yapabileceği her ilerleme miktarı için Poisson yoğunluğunu çarparız:

Dağıtımın sonsuz kuyruğunun toplamından kaçınmak için yeniden düzenliyoruz…

C koduna dönüştürüyoruz…

#include <math.h>
double AttackerSuccessProbability(double q, int z)
{
double p = 1.0 - q;
double lambda = z * (q / p);
double sum = 1.0;
int i, k;
for (k = 0; k <= z; k++)
{
double poisson = exp(-lambda);
for (i = 1; i <= k; i++)
poisson *= lambda / i;
sum -= poisson * (1 - pow(q / p, z - k));
}
return sum;
}

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

% 0.1’den az P için çözüm…

12. Sonuç

Güvene dayanmayan elektronik işlemler için bir sistem önermiştik. Mülkiyetin güçlü kontrolünü sağlayan, ancak çift harcamayı önlemenin bir yolu olmaksızın eksik olan dijital imza formatındaki coin’lerle başlamıştık. Bunu çözmek için dürüst nodların CPU gücünün çoğunluğu kontrol etmesi durumunda bir saldırganın değişime uğraması için hızlı bir şekilde hesaplamaya karşı pratik olmayan bir işlem geçmişi kaydetmek için kanıt istihdamı kullanan bir eşler arası ağ önerdik. Yapılandırılmamış basitliği ile ağ sağlamdır. Nodlar çok az koordinasyon ile aynı anda çalışır. İletilerin belirli bir yere yönlendirilmemesi ve yalnızca en iyi çaba temelinde sunulması gerektiğinden, tanımlanması gerekmez. Nodlar ağdan ayrılıp yeniden birleşebilir, çalışırken kanıtlanmış zinciri gittiklerinde onların kanıtı olarak kabul edebilir. CPU gücüyle oy kullanırlar, onları genişletmeye çalışarak ve geçersiz blokları reddetmek için çalışarak geçerli blokları kabul ettiklerini ifade ederler. Bu mutabakat mekanizması ile gerekli tüm kurallar ve teşvikler uygulanabilir.

Referanslar

[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.

Bir Cevap Yazın