Professional Documents
Culture Documents
Bitcoin TR
Bitcoin TR
Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org
Özet. Elektronik paranın tamamen eşler arası bir versiyonu, çevrimiçi ödemelerin
bir finansal kurumdan geçmeden doğrudan bir taraftan diğerine gönderilmesine
olanak tanıyacaktır. Dijital imzalar çözümün bir kısmını sağlar, ancak çifte
harcamayı önlemek için hala güvenilir bir üçüncü tarafa ihtiyaç duyulursa asıl
faydalar kaybolur. Eşler arası bir ağ kullanarak çifte harcama sorununa bir çözüm
öneriyoruz. Ağ, işlemleri sürekli bir hash tabanlı iş ispatı zincirine hash ederek
zaman damgası vurur ve iş ispatı yeniden yapılmadan değiştirilemeyen bir kayıt
oluşturur. En uzun zincir yalnızca tanık olunan olaylar dizisinin kanıtı olarak değil,
aynı zamanda en büyük CPU gücü havuzundan geldiğinin kanıtı olarak da hizmet
eder. CPU gücünün çoğunluğu ağa saldırmak için işbirliği yapmayan düğümler
tarafından kontrol edildiği sürece, en uzun zinciri oluşturacak ve saldırganları
geride bırakacaklardır. Ağın kendisi minimum yapı gerektirir. Mesajlar en iyi çaba
temelinde yayınlanır ve düğümler istedikleri zaman ağdan ayrılabilir ve yeniden
katılabilir, en uzun iş kanıtı zincirini yokken neler olduğunun kanıtı olarak kabul
eder.
1. Giriş
İnternet üzerinden ticaret, elektronik ödemelerin işlenmesi için neredeyse yalnızca güvenilir
üçüncü taraflar olarak hizmet veren finans kurumlarına dayanmaktadır. Sistem çoğu işlem için
yeterince iyi çalışıyor olsa da, güvene dayalı modelin doğasında var olan zayıflıklardan
muzdariptir. Finans kurumları anlaşmazlıklara aracılık etmekten kaçınamayacağı için tamamen
geri döndürülemez işlemler gerçekten mümkün değildir. Arabuluculuk maliyeti, işlem
maliyetlerini artırmakta, minimum pratik işlem boyutunu sınırlamakta ve küçük sıradan işlem
olasılığını ortadan kaldırmaktadır v e t e r s i n e ç e v r i l e m e y e n hizmetler için
tersine çevrilemeyen ödemeler yapma yeteneğinin kaybında daha geniş bir maliyet vardır. Geri
dönüş olasılığı ile birlikte güven ihtiyacı da artmaktadır. Tüccarlar müşterilerine karşı dikkatli
olmalı, aksi takdirde ihtiyaç duyacaklarından daha fazla bilgi için onları zorlamalıdır.
Dolandırıcılığın belirli bir yüzdesi kaçınılmaz olarak kabul edilir. Bu maliyetler ve ödeme
belirsizlikleri fiziksel para birimi kullanılarak bizzat önlenebilir, ancak güvenilir bir taraf olmadan
bir iletişim kanalı üzerinden ödeme yapmak için hiçbir mekanizma mevcut değildir.
İhtiyaç duyulan şey, güven yerine kriptografik kanıta dayalı, istekli iki tarafın güvenilir bir
üçüncü tarafa ihtiyaç duymadan doğrudan birbirleriyle işlem yapmasına olanak tanıyan bir
elektronik ödeme sistemidir. Tersine çevrilmesi hesaplama açısından pratik olmayan 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ırasının hesaplamalı kanıtını oluşturmak
için eşler arası dağıtılmış bir zaman damgası sunucusu kullanarak çift harcama sorununa bir
çözüm öneriyoruz. Dürüst düğümler, işbirliği yapan herhangi bir saldırgan düğüm grubundan daha
fazla CPU gücünü toplu olarak kontrol ettiği sürece sistem güvenlidir.
1
2. İşlemler
Bir elektronik parayı dijital imzalar zinciri olarak tanımlıyoruz. Her sahip, bir önceki işlemin
karmasını ve bir sonraki sahibin açık anahtarını dijital olarak imzalayarak ve bunları paranın
sonuna ekleyerek parayı bir sonrakine aktarır. Bir alacaklı, sahiplik zincirini doğrulamak için
imzaları doğrulayabilir.
r re
İşat İşa
e t
Sahip 1'in Sahip Sahip 3'ün
Özel Anahtarı 2'nin Özel Özel Anahtarı
Anahtarı
Hash Hash
Blok Blok
2
4. İş Kanıtı
Eşler arası dağıtılmış bir zaman damgası sunucusu uygulamak için, gazete veya Usenet gönderileri
yerine Adam Back'in Hashcash'i n e [6] benzer bir iş kanıtı sistemi kullanmamız gerekecektir. İş
kanıtı, SHA-256'da olduğu gibi hash edildiğinde hash'in bir dizi sıfır bit ile başladığı bir değerin
taranmasını içerir. Gereken ortalama iş, gereken sıfır bit sayısında üsteldir ve tek bir hash
çalıştırılarak doğrulanabilir.
Zaman damgası ağımız için, bloğun hash'i n e gerekli sıfır biti veren bir değer bulunana kadar
bloktaki bir nonce'yi artırarak iş k a n ı t ı n ı uyguluyoruz. İş kanıtını karşılamak için CPU çabası
harcandıktan sonra, blok işi yeniden yapm a d a n değiştirilemez. Sonraki bloklar ondan s o n r a
zincirlendiği için, bloğu değiştirmek için yapılacak çalışma, ondan sonraki tüm blokların yeniden
yapılmasını içerecektir.
Blok Blok
Tx Tx ... Tx Tx ...
İş ispatı aynı zamanda çoğunluk karar alma sürecinde temsiliyetin belirlenmesi sorununu da
çözmektedir. Eğer çoğunluk bir IP adresi bir oya dayansaydı, çok sayıda IP tahsis edebilen
herhangi biri tarafından altüst edilebilirdi. İş ispatı esasen bir CPU-bir oydur. Çoğunluğun kararı,
kendisine en fazla iş ispatı çabası yatırılmış olan en uzun zincir tarafından temsil edilir. CPU
gücünün çoğunluğu dürüst düğümler tarafından kontrol ediliyorsa, dürüst zincir en hızlı
büyüyecek ve rakip zincirleri geride bırakacaktır. Geçmiş bir bloğu değiştirmek i ç i n saldırganın
bloğun ve ondan sonraki tüm blokların iş kanıtını yeniden yapması ve ardından dürüst düğümlerin
işini yakalayıp geçmesi gerekir. Daha sonra, daha yavaş bir saldırganın yetişme olasılığının,
sonraki bloklar eklendikçe üstel olarak azaldığını göstereceğiz.
Artan donanım hızını ve zaman içinde çalışan düğümlere yönelik değişen ilgiyi telafi etmek
için, iş kanıtı zorluğu, saat başına ortalama blok sayısını hedefleyen hareketli bir ortalama ile
belirlenir. Eğer bloklar çok hızlı üretilirse, zorluk derecesi artar.
5. Şebeke
Ağı çalıştırmak için gereken adımlar aşağıdaki gibidir:
Düğümler her zaman en uzun zincirin doğru zincir olduğunu düşünür ve zinciri uzatmak için
çalışmaya devam eder. İki düğüm bir sonraki bloğun farklı versiyonlarını aynı anda yayınlarsa,
bazı düğümler önce birini veya diğerini alabilir. Bu durumda, ilk aldıkları üzerinde çalışırlar,
ancak diğer dalı daha uzun olması ihtimaline karşı saklarlar. Bir sonraki iş kanıtı bulunduğunda ve
bir dal daha uzun olduğunda eşitlik bozulacaktır; diğer d a l üzerinde çalışan düğümler daha
uzun olana geçecektir.
3
Yeni işlem yayınlarının tüm düğümlere ulaşması gerekmez. Birçok düğüme ulaştıkları sürece,
çok geçmeden bir bloğa gireceklerdir. Blok yayınları da düşen mesajlara karşı toleranslıdır. Bir
düğüm bir blok almazsa, bir sonraki bloğu aldığında ve bir bloğu kaçırdığını fark ettiğinde talep
edecektir.
6. Teşvik
Geleneksel olarak, bir bloktaki ilk işlem, bloğun yaratıcısına ait yeni bir coin başlatan özel bir
işlemdir. Bu, düğümlerin ağı desteklemesi için bir teşvik ekler ve madeni paraları çıkaracak
merkezi bir otorite olmadığı için başlangıçta dolaşıma dağıtmanın bir yolunu sağlar. Sabit
miktarda yeni madeni paranın sürekli olarak eklenmesi, altın madencilerinin dolaşıma altın
eklemek için kaynak harcamasına benzer. Bizim durumumuzda, harcanan CPU zamanı ve
elektriktir.
Teşvik, işlem ücretleri ile de finanse edilebilir. Bir işlemin çıktı değeri girdi değerinden azsa,
aradaki fark, işlemi içeren bloğun teşvik değerine eklenen bir işlem ücretidir. Önceden belirlenmiş
sayıda coin dolaşıma girdiğinde, teşvik tamamen işlem ücretlerine geçebilir ve tamamen
enflasyondan arındırılabilir.
Teşvik, düğümleri dürüst kalmaya teşvik etmeye yardımcı olabilir. Açgözlü bir saldırgan tüm
dürüst düğümlerden daha fazla CPU gücü toplayabilirse, bunu ödemelerini geri çalarak insanları
dolandırmak için kullanmak ya da yeni madeni paralar üretmek için kullanmak arasında seçim
yapmak zorunda kalacaktır. Kurallara göre oynamayı, yani kendisine herkesten daha fazla yeni
coin kazandıran kurallara göre oynamayı, sistemi ve kendi servetinin geçerliliğini baltalamaktan
daha karlı bulmalıdır.
Blok Blok
Blok Üstbilgisi (Blok Hash) Blok Üstbilgisi (Blok Hash)
İşlem içermeyen bir blok başlığı yaklaşık 80 bayt olacaktır. Blokların her 10 dakikada bir
oluşturulduğunu varsayarsak, 80 bayt * 6 * 24 * 365 = yılda 4,2 MB. Bilgisayar sistemlerinin
2008 itibariyle tipik olarak 2GB RAM ile satıldığı ve Moore Yasası'nın şu anki büyümeyi
öngördüğü düşünülürse
Yılda 1,2 GB, blok başlıklarının bellekte tutulması gerekse bile depolama bir sorun olmamalıdır.
4
8. Basitleştirilmiş Ödeme Doğrulaması
Tam bir ağ düğümü çalıştırmadan ödemeleri doğrulamak mümkündür. Bir kullanıcının yalnızca en
uzun iş kanıtı zincirinin blok başlıklarının bir kopyasını tutması gerekir; bunu en uzun zincire
sahip olduğuna ikna olana kadar ağ düğümlerini sorgulayarak elde edebilir ve işlemi zaman
damgalı bloğa bağlayan Merkle dalını elde edebilir. İşlemi kendisi kontrol edemez, ancak
zincirdeki bir yere bağlayarak, bir ağ düğümünün bunu kabul ettiğini ve bundan sonra eklenen
blokların ağın bunu kabul ettiğini d o ğ r u l a d ı ğ ı n ı görebilir.
Hash01 Hash23
Hash2 Hash3
Tx3
Bu nedenle, dürüst düğümler ağı kontrol ettiği sürece doğrulama güvenilirdir, ancak ağ bir
saldırgan tarafından aşırı güçlendirilirse daha savunmasızdır. Ağ düğümleri işlemleri kendileri için
doğrulayabilirken, basitleştirilmiş yöntem, saldırgan ağı ele geçirmeye devam edebildiği sürece bir
saldırganın uydurma işlemleri tarafından kandırılabilir. Buna karşı korunmak için bir strateji,
geçersiz bir blok tespit ettiklerinde ağ düğümlerinden gelen uyarıları kabul etmek ve kullanıcının
yazılımının tüm bloğu ve tutarsızlığı d o ğ r u l a m a k i çi n uyarılan işlemleri
indirmesini istemek olacaktır. Sık ödeme alan işletmeler muhtemelen daha bağımsız güvenlik ve
daha hızlı doğrulama için kendi düğümlerini çalıştırmak isteyeceklerdir.
İşlem
İçin Dışa
de rı
İçin ...
de
...
Bir işlemin birkaç işleme bağlı olduğu ve bu işlemlerin de daha birçok işleme bağlı olduğu
yayılma durumunun burada bir sorun teşkil etmediği unutulmamalıdır. Bir işlemin geçmişinin tam
ve bağımsız bir kopyasının çıkarılmasına asla gerek yoktur.
5
10. Gizlilik
Geleneksel bankacılık modeli, bilgiye erişimi ilgili taraflar ve güvenilir üçüncü tarafla
sınırlandırarak belli bir gizlilik seviyesine ulaşır. Tüm işlemlerin kamuya duyurulması gerekliliği
bu yöntemi engellemektedir, ancak gizlilik yine de bilgi akışını başka bir yerden keserek
korunabilir: açık anahtarları anonim tutarak. Kamuoyu birisinin bir başkasına bir miktar
gönderdiğini görebilir, ancak işlemi herhangi biriyle ilişkilendiren bilgi olmadan. Bu, bireysel
işlemlerin zamanının ve büyüklüğünün, yani "bandın" kamuya açıklandığı, ancak tarafların kim
olduğunu söylemeyen borsalar tarafından yayınlanan bilgi düzeyine benzer.
Ek bir güvenlik duvarı olarak, her bir işlemin ortak bir sahibine bağlanm a s ı n ı önlemek için
yeni bir anahtar çifti kullanılmalıdır. Girdilerinin aynı sahibine ait olduğunu ortaya çıkaran çok
girdili işlemlerde bir miktar bağlantı kaçınılmazdır. Risk, bir anahtarın sahibinin ortaya çıkması
halinde, bağlantının aynı sahibi n e ait diğer işlemleri d e o r t ay a
ç ı k a rma s ı d ır .
11. Hesaplamalar
Bir saldırganın dürüst zincirden daha hızlı alternatif bir zincir oluşturmaya çalıştığı senaryosunu
ele alıyoruz. Bu başarılsa bile, sistemi yoktan değer yaratmak ya da saldırgana ait olmayan parayı
almak gibi keyfi değişikliklere açık hale getirmez. Düğümler geçersiz bir işlemi ödeme olarak
kabul etmeyecektir ve dürüst düğümler de bunları içeren bir bloğu asla kabul etmeyecektir. Bir
saldırgan yalnızca yakın zamanda harcadığı parayı geri almak için kendi işlemlerinden birini
değiştirmeye çalışabilir.
Dürüst zincir ile saldırgan zinciri arasındaki yarış Binom Rastgele Yürüyüşü olarak
nitelendirilebilir. Başarı olayı, dürüst zincirin bir blok uzatılarak liderliğini +1 artırması,
başarısızlık olayı ise saldırganın zincirinin bir blok uzatılarak aradaki farkın -1 azalmasıdır.
Bir saldırganın belirli bir açığı kapatma olasılığı Kumarbazın Mahvolması problemine benzer.
Sınırsız kredisi olan bir kumarbazın bir açıkla başladığını ve başabaş noktasına ulaşmaya çalışmak
için potansiyel olarak sonsuz sayıda deneme oynadığını varsayalım. Başabaş noktasına ulaşma ya
da bir saldırganın dürüst zinciri yakalama olasılığını aşağıdaki gibi hesaplayabiliriz [8]:
qz
={ 1 eğer
(q / p)z eğer p≤q} ise
p�q
6
Varsayımımız p > q olduğuna göre, saldırganın yetişmesi gereken blok sayısı arttıkça olasılık
katlanarak düşer. İhtimaller aleyhindeyken, erkenden şanslı bir hamle yapmazsa, daha da geride
kaldıkça şansı yok denecek kadar azalır.
Şimdi yeni bir işlemin alıcısının, göndericinin işlemi değiştiremeyeceğinden yeterince emin
olmadan önce ne kadar beklemesi gerektiğini ele alıyoruz. Göndericinin, alıcıyı bir süreliğine
kendisine ödeme yaptığına inandırmak isteyen bir saldırgan olduğunu ve bir süre geçtikten sonra
kendisine geri ödeme yapmak için işlemi değiştirdiğini varsayıyoruz. Bu gerçekleştiğinde alıcı
uyarılacaktır, ancak g ö n d e r i c i b u n u n çok geç olacağını ummaktadır.
Alıcı yeni bir anahtar çifti oluşturur ve imzalamadan kısa bir süre önce açık anahtarı gönderene
verir. Bu, göndericinin bir blok zincirini önceden hazırlamasını, yeterince ileriye gidecek kadar
şanslı olana kadar üzerinde sürekli çalışmasını ve o anda işlemi gerçekleştirmesini önler. İşlem
gönderildikten sonra, sahtekar gönderici işleminin alternatif bir versiyonunu içeren paralel bir
zincir üzerinde gizlice çalışmaya başlar.
Alıcı, işlem bir bloğa eklenene ve ondan sonra z blok bağlanana kadar bekler. Saldırganın tam
olarak ne kadar ilerleme kaydettiğini bilmez, ancak dürüst blokların blok başına beklenen ortalama
süreyi aldığını varsayarsak, saldırganın potansiyel ilerlemesi beklenen değere sahip bir Poisson
dağılımı olacaktır:
q
λ=z
p
Saldırganın şu anda hala yetişebilme olasılığını elde etmek için, yapabileceği her ilerleme miktarı
için Poisson yoğunluğunu o noktadan yetişebilme olasılığı ile çarpıyoruz:
{ }
∞ k e−λ ⋅ (q / p) (z − k ) if k ≤ z
∑λ k! 1 eğer
k =0
k �z
Dağılımın sonsuz kuyruğunu toplamaktan kaçınmak için yeniden düzenleme...
z λk e-λ ( z- k )
1- k!
(1-(q / p) )
∑
k =0
C koduna dönüştürülüyor...
#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;
toplam -= poisson * (1 - pow(q / p, z - k));
}
toplamı döndür;
}
7
Bazı sonuçları çalıştırdığımızda, olasılığın z ile üstel olarak düştüğünü görebiliriz.
q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
P < 0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
12. Sonuç
Elektronik işlemler için güvene dayanmayan bir sistem önerdik. Mülkiyetin güçlü bir şekilde
kontrol edilmesini sağlayan, ancak çifte harcamayı önlemenin bir yolu olmadan eksik kalan dijital
imzalardan yapılmış madeni paraların olağan çerçevesiyle başladık. Bunu çözmek için, dürüst
düğümler CPU gücünün çoğunluğunu kontrol ediyorsa, bir saldırganın değiştirmesi için hızlı bir
şekilde hesaplama açısından pratik olmayan halka açık bir işlem geçmişini kaydetmek için iş
kanıtı kullanan eşler arası bir ağ önerdik. Ağ, yapılandırılmamış basitliği ile sağlamdır. Düğümler
çok az koordinasyonla tek seferde çalışır. Mesajların belirli bir yere yönlendirilmemesi ve
yalnızca en iyi çaba temelinde iletilmesi gerektiğinden, tanımlanmaları gerekmez. Düğümler
istedikleri zaman ağdan ayrılabilir ve yeniden katılabilir, iş kanıtı zincirini yokken neler
olduğunun kanıtı olarak kabul ederler. CPU güçleriyle oy kullanırlar, geçerli blokları genişletmek
için çalışarak kabul ettiklerini ve geçersiz bloklar üzerinde çalışmayı reddederek reddettiklerini
ifade ederler. İhtiyaç duyulan tüm kurallar ve teşvikler bu mutabakat mekanizması ile
uygulanabilir.
8
Referanslar
[1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
[2] H. Massias, X.S. Avila, ve J.-J. Quisquater, "Design of a secure timestamping service with minimal
trust requirements," 20. Benelüks Bilgi Teorisi Sempozyumu, Mayıs 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, sayfa 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, sayfa 28-35, Nisan 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," Proc. 1980 Symposium on Security and
Privacy içinde, IEEE Computer Society, sayfa 122-133, Nisan 1980.
[8] W. Feller, "An introduction to probability theory and its applications," 1957.