@BitcoinHaber: Bitcoin nedir? Nasıl çalışır?

31 Ağustos 2013 Cumartesi

Bitcoin nedir? Nasıl çalışır?

Bitcoin nedir? Nasıl çalışır?

Yazan / Orijinal Adı: Scott Driscoll /
How Bitcoin Works Under the Hood



Giriş

Bu yazı bitcoinin nasıl işlediğini anlatmaktadır. Okuyucuya bitcoine sahip olmanın, göndermenin ya da madenden çıkarmanın ne anlama geldiği konusunda ışık tutmaktadır.

bitcoin-nedir-nasil-calisir
Bitcoin Nedir? Nasıl çalışır?


Bitcoin nedir? Bitcoin'in yüzeysel tanımı

İlk önce Bitcoin'in ne olduğu hakkında genel bir tanım yapalım:

Temelinde Bitcoin sayısal bir dosyadan başka birşey değildir. Dosyada bir muhasebe defterine benzer şekilde hesaplar ve karşılarında para miktarı tutulur. Bu dosyanın bir kopyası Bitcoin ağındaki tüm bilgisayarlarda bulunur. Defterdeki miktarlar fiziki dünyadaki herhangi birşeye karşılık gelmez. Sadece insanların kendi hesap numaralarının karşısındaki miktarı artırmak istemesi ve buna karşılık gerçek dünyadaki mal ve hizmetleri takas etmeyi kabul etmesi, bu arada da diğer insanların aynısını yapacağına inanması nedeniyle bu miktarların bir değeri vardır. Sayıların maddi değeri biz onların değerine inandığımız için vardır. Tıpkı gerçek paraya değer vermemiz gibi.

Birine para yollamak için tüm ağda yayınlanmak üzere bir mesaj gönderirsiniz. Mesajda kendi hesabınızdaki paranın azalmasını alıcının hesabındaki paranın artmasını kabul ettiğinizi yazarsınız. Ağ üzerinden bağlandığınız bilgisayarlar mesajınızı alır, kendi muhasebe defterlerine bu işlemi kaydederler ve mesajınızı ağdaki diğer bilgisayarlara dağıtırlar. Buna bir parça da matematiksel güvenlik eklediğimizde bitcoin sisteminde olup biten herşey bundan ibarettir. Bir grup bilgisayarda duran bir hesap defteri.

Bu sistem bir banka hesabına benzese de temel farkı defterin bir merkez tarafından değil de bir grup tarafından tutulmasıdır. Bunun bir sonucu olarak banka hesabınızın bakiyesini sadece siz ve bankanız biliyor iken bitcoin dünyasında herkes diğer herkesin işlemlerini görür.

Ayrıca bankanıza güvenebilirsiniz, güvenmek zorundasınız. En azından bir hata olursa itiraz edebilirsiniz ya da yasalarda verilen hakkınızı arayabilirsiniz. Bitcoin'de ise sadece kim olduğunu bile bilmediğiniz yabancılarla muhatapsınız. Dahiyene tasarımı sayesinde sistem güven kavramına ihtiyaç duymaz. Matematik fonksiyonları sistemin her yönünü koruma altına alır.

Yazının devamında bir grup birbirini tanımayan insanın nasıl para transferlerini yönetebildiğini ayrıntılarıyla anlatacağız

Bitcoin ile para göndermek

En basit şekliyle, Ali, Veli'ye para göndermek için sadece hesap adlarını ve miktarı belirten bir mesaj yayınlar.

"Ali den Veli'ye 5,0 BTC gönder"

Mesajı alan herkes kendi hesap defterlerini günceller ve mesajın ağdaki diğer bilgisayarlara yayılmasına yardım eder.

Peki bu mesajdaki talimatı veren kişinin gerçekten de Ali olduğundan nasıl emin olabiliriz.

Bitcoin sisteminde paranızı harcayabilmek için bir çeşit şifreye ihtiyacınız vardır. Bu şifreye "Dijital İmza" denir. Dijital imza, gerçek bir elyazısı imzada olduğu gibi mesajın size ait olduğunu belgeler. Bunu matematiksel bir algoritmayı kullanarak yapar ve elektronik ortamda sahteciliği engeller.

Basit ve değişmeyen bir şifreden farklı olarak her transfer işleminde farklı bir dijital imza kullanılır. Unutmamak gerekir ki Bitcoin dünyasında tanımadığımız kişilerle muhatabız. Şifremizi tekrar kullanırsak birinin ele geçirmesini ve kopyalamasını kolaylaştırız.

Dijital imza iki adet farklı ama birbirine bağlı anahtar kullanır. İmzayı oluşturmak için bir "saklı anahtar" ve imzayı doğrulamak için bir "açık anahtar".

Saklı anahtarı şifre gibi düşünebilirsiniz. İmza ise şifrenizi başkasına göstermeden ona sahip olduğunuzu kanıtlayan bir araçtır.

Açık anahtarlar Bitcoin gönderiminde alıcının adresleridir. Birine para gönderirken aslında onun açık anahtarına göndermiş olursunuz.

Bitcoin adresinize, yani açık anahtarınıza gönderilen paranızı harcayabilmek için bu adresin sahibi olduğunuzu kanıtlamalısınız. Bunu saklı anahtarınız ve size para gönderdikleri talimat mesajını kullanarak attığınız dijital imzanızla yaparsınız.

imza = f(talimat mesajı, saklı anahtar)

Sistemdeki diğer kullanıcılar bu imzayı diğer bir fonksiyon ile çözer ve sizin açık anahtarınızla eşleştiğini doğrular.

1 = ? doğrula(talimat mesajı,açık anahtar, imza)


Dijital imza ardındaki matematiği kullanarak göndericinin saklı anahtara sahip olduğunu bu anahtarı görmeden doğrulayabilirler.

İmzanın kendisi mesaja bağlı olduğundan her işlemde farklı bir imza üretilecektir. Bu da aynı imzanın farklı bir işlemi doğrulamak için kopyalanamayacağı anlamına gelir. Mesajın bir fonksiyonu olması aynı zamanda mesajın ağda bir uçtan diğer uca iletilirken değiştirilmesini de önler. Mesajda en ufak değişiklik bile imzayı geçersiz kılar.

Arkadaki matematik oldukça karmaşıktır. Burada bunlardan bahsetmeyeceğiz ancak aşağıdaki kelimeler ile arama yaptığınızda detaylı bilgiye erişebilirsiniz. Eliptik Eğri Kriptografisi (http://www.belgeler.com/blg/ko6/eliptik-egri-kriptografisi-elliptic-curve-cryptography), Matematikte Kapak Fonksiyonu (http://www.bilgisayarkavramlari.com/2009/03/17/kapak-fonksiyonu-trapdoor-function/)

Yazının sonunda daha fazla referans adresi bulabilirsiniz.

Bitcoin transferi ve Muhasebe defteri

Buraya kadar Dijital imzanın transfer talimatını verek kişiye ait olduğunu kanıtladığını gördük. Hesabınızda kaç para olduğunu da ağa bağlı bilgisayarların hesap defterinde tuttuğunu öğrendik. Hesap defteri kısmını en başta basitleştirerek anlatmıştık. Aslında hesap bakiyelerinin yazılı olduğu bir defter bulunmuyor. Şunu sorabilirsiniz: Birinin ne kadar parası olduğunu bilmeden yaptığı harcamanın elindeki paradan fazla olmadığını nasıl garanti edebilirsiniz?

Servetiniz bir hesap bakiyesi ile gösterilmek yerine sahibi olduğunuz para hesabınıza gelen transfer talimatlarını referans gösterilerek bulunur. Şöyle ki:

Ali, Veli'ye 5 BTC göndermek için kendisine daha önceden gönderilmiş olan toplamı 5 BTC ya da daha büyük tutardaki transfer mesajlarını referans gösterir. Bu referanslara "Girdi" adını veriyoruz. İşlemi kontrol eden diğer kişiler bu girdileri kontrol eder ve Ali'nin bu girdilerin sahibi olduğunu teyid edebilirler. Aynı zamanda bu girdilerin toplamının 5 BTC ya da büyük olduğunu hesaplayabilirler.

Şimdi gerçek bir işlemi ele alalım ve nasıl çalıştığına bakalım.

Bu işlemde 6 adet girdi var ve toplamda 139.6 Bitcoin ediyor. Çıktı bölümünde ise iki satır bulunduğu dikkatinizi çekmiştir. İlk satırdaki tutar gönderen kişiye para üstü olarak geri gönderilen miktar. Kural olarak bir işleme girdi olarak katılan referans işlemlerin tutarlarının tamamı kullanılır. Eğer girdilerinizin toplam tutarı gönderdiğiniz miktarı aşıyorsa bu tutarı aynı işlemde kendinize geri gönderirsiniz.

Her işlemin bir sonraki işlemde girdi olarak kullanıldığını ve bunun zincirleme devam ettiğini gördük. Her işlemin geçerliği önceki işlemin geçerliğine bağlı. Peki önceki işlemin geçerli olduğundan emin miyiz? Hayır! Çünkü onun geçerliği de girdi olarak gösterdiği kendinden bir öncekine bağlı ve bu böyle sürüp gidiyor. Aslında bitcoin cüzdanınızı (bitcoin-qt) ilk kez kurduğunuzda gerçekleşen tüm işlemlerin kayıtlarını kendi bilgisayarınıza indiriyorsunuz ve taa ilk kayıda kadar tüm işlemleri kendiniz kontrol ediyorsunuz. Unutmayın, bir yabancıdan aldığınız bilgiye güvenemezsiniz. Bu işlem 24 saati bulabilir ancak sadece bir kez yapılır.

Bir işlem bir diğerine girdi oldu mu harcanmış sayılır ve tekrar kullanılamaz. Aksi halde birisi aynı parayı farklı işlemlerde tekrar tekrar harcamış olurdu. Bir işlemi teyid ederken diğer kontrollerin yanında girdilerin daha önce kullanılmadığı da kontrol edilir. Başka bir deyişle her girdi satırının daha önceden başka bir işlemin girdisinde var olup olmadığı sınanır. Bu sınamanın 20 milyon işlemin bulunduğu bir dosyada çok fazla zaman alacağını düşünebilirsiniz ama harcanmamış işlemlerin indeksinin tutulması işleri oldukça hızlandırır.

Hesap bakiyelerinin yerine upuzun bir işlem listesi tutulduğunu öğrendik. Bitcoin sahibi olmak demek bu listede adresinize yapılmış ve henüz başka bir işlemde girdi olarak kullanılmamış, yani harcanmamış transfer işleminin bulunması demektir.

Bu durumun bir sonucu olarak hesabınızda ne kadar bulunduğunu öğrenmek için aslında bütün harcanmamış işlemlerinizi tarayarak tutarlarını toplamanız gerekir. Neyse ki cüzdan programınız sizin haberiniz olmadan bu toplama işlemini yapar ve gösterir.

Bir başka ilginç not: Sistem farklı türde işlemlerin de yapılabilmesine olanak tanır. işlemler sadece birine para yollama işleminden daha karışık olabilir. Önceki örnekte çıktı alanına baktığımızda şifreli gibi görünen şu satır dikkatiniz çekmiştir.

OP_DUP OP_HASH160 9abd2e0c0a63dea36b75c3128fe15d82f274e394 OP_EQUALVERIFY OP_CHECKSIG

http://blockexplorer.com/rawtx/a117c441aa5bd3fcb442e3c47a180c584420bcd9f93c68dab9feddd1d26b767e

Çıktı olarak gösterilen şey basit bir adresten çok çözülmesi gereken bir bilmeceye benziyor. Bitcoin göndermek email göndermeye benzetilebilir ancak daha çok bir kasaya parayı kilitleyip şifresini de çözülmesini beklediğiniz bir matematik bilmecesine bağlamak gibidir. Bilmece özel bir script diliyle yazılır. Bu bilmece tipik olarak sadece gizli anahtarın sahibi tarafından çözülebilir fakat daha karmaşık durumlar da mümkündür. Mesela 3 imzadan ikisinin yeterli olduğu durumlar yaratılabilir. Bu durum çift anahtarlı bir kasaya benzetilebilir. Başka bir örnek de herkesin kolaylıkla çözebileceği bir bilmece yaratmaktır ki zincirin ilk halkası olan ilk işlem bu şekilde şifrelenmiştir.

Çoğu cüzdan yazılımı bu katmanı sıradan kullanıcıdan gizler. Kendiniz yazılımcıysanız bu scriptleri programınıza ekleyebilir ve tahsilat koşullarını değiştirebilirsiniz. Ancak bunun riskli olduğunu ve şimdiye değin 2600 BTC den fazla miktarın adres oluşturmadaki hatadan dolayı zayi olduğunu da unutmayın.

Şunun altını çizmekte fayda var. Kullanıcı hatasında başvurabileceğiniz bir banka, kredi kartı merkezi, vb. bulunmadığından yanlışlıkla kaybettiğiniz Bitcoinleriniz sonsuza kadar kayıp demektir. Sadece sizin kaybınız değil bütün Bitcoin ekonomisi de bundan etkilenir. Saklı anahtarınızı kaybettiniz diyelim, buna bağlı bütün bitcoin'lerde uçup gider. İnsanlar doğal olarak zaman zaman sabit disk arızaları ya da farklı nedenlerle bu tür kayıplar yaşarlar. Bunun anlamı bitcoin ekonomisinde paranın sürekli azalacağı ve deflasyona uğrayacağıdır.

Anonim (isimsiz) İşlemler

Bitcoin madenciliğinin inceliklerine geçmeden bitcoin işlemlerinde kimliğinizi gizli tutma hakkında birkaç önemli konuya değinelim.

Bitcoin ağına IP adresinizi gizli tutarak TOR üzerinden bağlandıysanız açık anahtarınızdan başka birşeyi göstermedan bitcoin harcayabilirsiniz. Açık anahtarlarınızın birbirleriyle olan ilişkilerini gizlemek için de birinden her kabul ettiğiniz işlem için farklı adres üretmeyi deneyebilirsiniz.

Ancak siz farketmeden açık anahtarlarınızın birbirleri ile ilişkili olduğu da açığa çıkabilir. Önceki örnekte gördüğümüz gibi 6 Girdi işlemi tek bir işlemde toplanabilir. Bu da göndericinin 6 adresin de sahibi olduğunu kanıtlamaya yeter. Bitcoin kullanıcısını davranışlarını analiz
eden araştırmalar bulunmaktadır. Örneğin "Quantitative Analysis of the Full Bitcoin Transaction Graph by Dorit Ron and Adi Shamir"

Açık anahtar, yani bitcoin adresi üretirken gerçek kimliğinizin ortaya çıktığını düşünüyor olabilirsiniz. Ancak bu adım tamamen ağın dışındadır. Çevrimiçi olmanız bile gerekmez. Sadece bir tuşa basarak elektronik cüzdan uygulamanızda yeni ve rastgele üretilmiş saklı ve açık anahtarı yaratabilirsiniz. Mümkün olan adreslerin sayısı çok fazla olduğu için daha önceden kullanımda olduğunun kontrolüne gerek yoktur. Bu çok fazla kullanıcısı olan bir servis sağlayıcıdan email adresi almaya benzer. Aslında birinin anahtarının aynısını üretebilseniz hesabındaki parasına da erişmeniz mümkündür.

Mümkün olan tüm Bitcoin adreslerinin toplam sayısı :

1461501637330902918203684832716283019655932542976 (1.46 x 10^48 or 2^160)

Bu büyük sayılar Bitcoin sisteminin güvenliğini birçok yönden korur. Ne kadar büyük olduğunu hayal edebilmek için bütün dünyadaki kum tanelerinin sayısını düşünün. Tahminen 7.5 x 10^18th, or 7,500,000,000,000,000,000. Şimdi de her kum tanesinin kumla kaplı bir dünya olduğunu düşünün. Kum tanelerini sayın. Hala toplam bitcoin adresi sayısına yaklaşamadınız.

Yeryüzündeki tüm kum tanelerinden daha fazla bitcoin adresi vardır
Yeryüzündeki tüm kum tanelerinden daha fazla bitcoin adresi vardır


Aslında kullanıcı sayısı arttıkça iki adresin çakışma olasılığı da artmaktadır. (Çakışan Doğum Günleri problemini düşünün) Gene de 1 milyar adresle hala 2.9 x 10^39 aralığındayız. (http://www.hawaii.edu/suremath/jsand.html)

Mükerrer harcama

Şimdiye değin gördüğümüzü kısaca özetleyelim. Dijital İmzayı sınayarak transfer talimatını gerçekten harcanan bitcoin'e sahip kişinin verdiğini teyid edebiliyoruz. Göndericinin bu kadar parasının olup olmadığını da referans gösterdiği Girdi işlemlerinin başka bir işlemde harcanmadığını kontrol ederek bulabiliyoruz. Ancak buraya kadar sistemde hala bir güvenlik açığımız var ve harcanmadı kontrolüne hala güvenemeyiz. Bu açık ise transfer işlemlerinin hangi sırayla yapıldığı.

Transfer işlemlerinin ağ üzerinden bir bilgisayardan diğerine iletildiğini gördük. İşlemler oluştuğu anda ağdaki bütün diğer noktalara aktarılamaz. Belli bir süre alır. Bir noktaya farklı yollardan ulaşan işlemlerin gerçekleşme sıralarını bilemeyiz. İşlemde yaratılma saati yazsaydı bile buna güvenemezdik çünkü bu kaydı oluşturan kişinin kontrolünde olacaktı. Merkezi bir yönetimi bulunan sistemlerde - örneğin bankalar, paypal - böyle bir sorunumuz olmayacaktı. İşlemlerin oluş sırası bir merkez tarafından belirlenecekti.

Elimizde hangi işlemin diğerinden önce ya da sonra gerçekleştiğini gösterecek bir göstergemiz yok. Bu durum da sahteciliğe açık kapı bırakıyor. Farzedelim kötü niyetli bir kullanıcı var. Adına da Ali diyelim. Ali, Veli'den mal satın alıyor ve bedelini Bitcoin ile ödüyor. Veli malı gönderiyor. Bu sırada Ali çabucak Veliye ödeme yaptığı işlemle aynı Girdi'yi kullanan bir işlem daha yapıyor ve bu sefer aynı girdiyi kendi adresine gönderiyor. Mesajın ağda yayılma zamanını düşündüğümüzde bazı bilgisayarlara ikinci mesajın birincisinden önce ulaştığını görebiliriz. Bu bilgisayarlar ikinci mesajı geçerli kabul edecekler, Veli'ye gönderilen tranferi ise aynı girdi ikinci kez kullanıldığı için geçerli saymayacaklar. Veli parasını almadığı malını gönderdiği ile kalacak. Bu sırada da ağdaki bilgisayarların kayıtlarında tutarsızlık olacak, bir bölümü paranın Ali'de kaldığını düşünürken diğerleri Veli'de olduğunu düşünecek çünkü hangi işlemin önce yapıldığını hiçkimse kanıtlayamayacak.

Ağdaki her birimin işlemlerin gerçekleşme sırası üzerinde mutabık kalacağı bir sistem olması gerekiyor. Merkezi olmayan bir sistemde gerçekten büyük bir problem. Bitcoin bu probleme zekice bir çözüm buluyor ve işlemlerin sırasını ve güvenliğini bir çeşit matematiksel yarış ile sağlıyor.

Blok Zinciri: İşlemlerin Sıralanması

Bitcoin işlemleri Blok adı verilen gruplarda toplayarak sıralar. Bloklar birbirine Blok Zinciri denilen bir yapıda bağlıdır. Bu zincir önceki bölümde anlatılan Transfer İşlemi zincirinden farklıdır. Blok zinciri işlemleri sıralar. Transfer işlemi ise bitcoin sahipliğini bir adresten diğerine aktarır.

Her blok kendinden önceki bir bloğu referans alır. Bu şekilde bir bloğun zaman sıralamasında diğerinden önce ya da sonra yaratıldığını kanıtlayabiliriz. Bütün bağlantıları geriye doğru taradığımızda ilk yaratılan işlemlere kadar ulaşabiliriz. Aynı blok içinde yer alan işlemler teorik olarak aynı anda gerçekleşmiş kabul edilir. Henüz bir bloğa girmemiş işlemler için de "onaylanmamış" ya da sıralanmamış ifadesi kullanılır.

Ağdaki tüm bilgisayarlar isterlerse bir grup onaylanmamış işlemi alıp bir blok oluşturabilir ve bunu ağdaki diğer uçlara yayabilir. Ancak henüz bu bloğun zincirdeki yeni halka olmaya hak kazandığı anlamına gelmez. Birden fazla kişi aynı anda blok yaratabildikleri için sayısız farklı blok bulunacaktır. Ağın zincire eklenecek yeni halkayı seçmesi gerekir ama bu kararı nasıl verecekler? Blokların yaratıldığı zamanı baz alarak önce geleni kabul edemezler çünkü aynı transfer işleminde olduğu gibi bloğun da ağın farklı noktalarına yayılması farklı sürelerde gerçekleşir.

Çözümün bir parçası olarak her geçerli blok içinde çok özel bir matematik probleminin çözümünü de barındırmalıdır. Bilgisayar blok içindeki tüm işlemleri ve buna ilave olarak rastgele olarak ürettiği bir sayıyı kriptografik bir fonksiyona sokar. Fonksiyonun çıktısı belli bir değere ulaşana kadar rastgele sayıları üretmeye devam eder.

Hash (Özet) fonksiyonları uzun bir metni kısa bir metne çeviren matematiksel fonksiyonlardır. Bizim konumuzda sonuç 32 Byte uzunluğunda bir sayıdır. Bitcoin SHA256 adı verilen bir özet fonksiyonunu kullanır.

SHA256(“kısa cümle”)
0x 3bebb37750ffd45d0c5cd87bd5a207e6775c2619083849d88343ab54f7b53963
SHA256(“Kırk kürkü yırtık kel kör kirpi”)
0x 7bff7fef8496d6e38da4d66dee1a4f78adc0a1c7e1528cd2d8451c94e7f206bf
SHA256(“Kırk kürkü yırtık kel kör kirpi.”) (sonuna nokta ekledik)
0x 2160451817b943e3e8433224ef1e1afe33dea801401d975684b99f09eb5f0c03

Tek bir nokta eklemenin bile sonucu nasıl eklediğine dikkat edin. Fonksiyonun çıktısını tahmin etmek tamamen imkansızsır. Belli bir özelliği taşıyan çıktı elde etmenin tek yolu rastgele girdi üretip fonksiyondan çıkan sonucu test etmektir. Bu şifreli bir kasanın şifresini tahmin etmeye benzer. Şansınız yaver gittiyse ilk denemenizde de kasayı açabilirsiniz. Ancak ortalamada çok fazla sayıda deneme yapmalısınız. Aslında sıradan bir kişisel bilgisayarın bir bloğu çözebilmesi için yıllarca deneme yapması gereklidir.

Bütün bitcoin ağındaki bilgisayarların deneme yapması sayesinde ortalamada 10 dk da bir problem çözülür.

Matematik problemini ilk çözen bulduğu sayıyı ve bloğu ağdaki diğer bilgisayarlar ile paylaşır. Blokta bulunan işlemler bu şekilde ilk onaylarını almış olurlar. Matematik problemindeki rastgelelik iki kişinin aynı anda probleme çözüm bulma olasılığını birhayli düşürür. Arada sırada da olsa birbirine yakın zamanlarda birden fazla kişinin bloğu çözülür ve zincir çatallaşır.

Bu durumda bir sonraki turda yarışmacılar yeni zincir halkasını ilk önce kendilerine ulaşan bloğa eklemeye çalışır. Farklı noktalardaki bilgisayarlara bloklar da farklı sırada geldiğinden zincirde gördükleri son halka da farklı olabilir.

Beraberliğin bozulması için birinin yeni bir bloğu çözmesi yeter. Genel kural her zaman en uzun zinciri takip etmektir. Matematiğin zorluğu blokların aynı anda çözülmesi ihtimalini küçültür. Hele hele bunun ardarda olma olasılığı imkansıza yaklaşır. Sonuç olarak blok zinciri kendini onarır ve herkesin en sondaki birkaçı haricinde blok sıralaması konusunda kesin mutabakata varmasını sağlar.

Blok zincirinde mükerrer harcamalar

Zincirin son halkalarındaki belirsizlik durumları transfer işlemlerinin tutarlılığında da bazı istenmeyen etkiler doğurur. Örneğin, işleminiz kısa kalan dallardan birindeki blok halkasına bağlıysa bir süre sonra bu blok iptal olduğunda onay kuyruğuna geri dönecek ve işin kötüsü kuyruktaki ilk yerini de kaybedip sonradan gelen işlemlerin arkalarında kalacaktır. Onay kuyruğundan çıkıp tekrar işleme sokulması için yeni bir bloğun yaratılması gerekir. Ne yazık ki bu olasılık mükerrer harcama saldırısı ihtimalini de beraberinde getirir.

Bu tür bir saldırının nasıl gerçekleştiğini inceleyelim. Sistemi kandırmak isteyen dolandırıcı Ali, Veli'ye bitcoin yollar. Veli işlemin blok zincirinde onaylanmasını bekler ve ilk onayı aldıktan sonra ürünü Ali'ye yollar.

Blok zincirinde halkanın her zaman en uzun zincire eklenmesi kural olduğu için, eğer Ali ilk zincirden daha uzun bir zincir üretmeyi başarabilirse Veli'ye para gönderdiği transfer işlemi iptal olacak ve tekrar onaylanmayan işlemler kuyruğuna düşecek. Ali bu arada Veliye gönderdiği işlemdeki girdiyi başka bir işlemde kullanırsa Veli'nin önceden onaylanmış olarak gördüğü işlem sistemdeki diğer kullanıcılar tarafından reddedilecek.

Mükerrer harcamanın önlenmesi

Peki sistem Ali'nin Veli'yi bu şekilde dolandırmasını nasıl engeller? Ali'nin daha önceden birkaç bloktan oluşan bir zinciri hazır tutup tam zamanı geldiğinde ağa göndereceğini düşünenler çıkabilir. Her blokta çözülmesi gereken matematik bilmecesi zincir parçasının önceden hazırlanmasına izin vermez. Neden olduğunu anlamak için başta gördüğümüz kriptografik özet fonksiyonuna bir daha bakalım.

Başta da değindiğimiz gibi bir bloğu çözebilmek için blok ile birleştirildiğinde kriptografik özeti belli bir koşulu sağlayan rastgele sayıyı her defasında farklı sayı deneyerek bulmak zorundayız.

Blok bir kere çözüldüğünde bulduğumuz kriptografik özeti (hash) tıpkı parmak izi gibi bloğu tanımlayan uzun bir sayıdır. Blok içindeki tek bir rakamın bile değişmesi özetini de tamamen farklılaştırır. Yukarıdaki örnekte cümlenin sonuna noktayı eklediğimizde olduğu gibi.

Her bloğun başında zincirde bağlandığı bir önceki bloğun özet çıktısı, ya da parmak izi bulunur. Bunun sonucu olarak zincirin ortasındaki bir bloğu dışarı atmak ya da içeriğini değiştirmek imkansızdır çünkü kendinden sonra gelen nesillerde her blok atasının parmak izinden bir parça taşıyacaktır. Daha önemlisi hiçbir blok kendinden bir önceki blok çözülmeden çözülemez. Özet fonksiyonuna giren metin transfer işlemlerine ilave olarak önceki bloğun özetini de içerir. Önceki blok değişirse özeti de değişecek bu yüzden sonraki bloğun çözümü de artık geçersiz olacaktır.

Ali'ye geri dönelim. Neden bir zinciri önceden oluşturamayacağını gördük. Bloğu çözmeye ancak ardına eklemeye çalıştığı halka çözüldükten sonra ve özeti bilinir hale geldiğinde başlayabilir. Yani çözümü bulmak için Veli ürünü gönderene kadar ağdaki diğer bilgisayarlarla yarışa girmek zorundadır. Bu sırada da kendine geri gönderdiği işlemden Veli'nin haberdar olmaması gerekir yoksa veli ürünü yollamaktan vazgeçer.

Son bir soru: Ali'nin ağdaki herkesi yarışta geçebileceği süper hızlı bilgisayarları var diyelim. En hızlı bilgisayar kendinde olsa bile yarışta tek bir bilgisayarı değil tüm ağı geçmek zorunda. Bir şans oyunu gibi de düşünülebilir. Binlerce bilgisayarın sahibi olabilir, yani çekilişe katılacak binlerce bileti olabilir. Bu durumda bile başka birinin oyunu kazanması mümkün. Bir bloğu %50 olasıkla başkasından önce çözmesi için tüm ağdaki işlem gücünün yarısına sahip olmalı. Bunu arka arkaya birkaç bloğun çözülme olasılığı için hesapladığımızda çok daha fazla işlem gücü gerekiyor.

Özetle, blok zincirindeki transfer işlemleri matematiksel bir yarışla korunuyor ve sistemi aldatmak isteyen kişinin karşısına ağdaki diğer bilgisayarların toplam işlem gücü çıkıyor. Blokların birbiri ardına zincir gibi eklenerek tutulması da zincirin eski halkalarındaki işlemlerin daha fazla geri alınamaz işlemlere dönüşmesini sağlıyor. Bir aldatma girişimi sadece zincirin en ucundaki birkaç halkaya yapılabilir. Bu yüzden kullanıcılara işlemi kabul etmeden önce üzerinden birkaç (genellikle en fazla 6) onay geçmesini beklemeleri öneriliyor.

Son olarak blok zinciri hakkında şuna değinmeden geçmeyelim. Şimdiye kadar sistemde tanımladığımız hiçbir yerde güven kelimesini kullanmadık. Bitcoin ağında yabancı birinden gelen bilgi her zaman güvenilmezdir. Blok çözümlerinin doğru olduğunu kendiniz kontrol edebilirsiniz. Problemlerin çözümü zor olduğundan bir dolandırıcının sahtesini tek başına üretmesi mümkün değildir. Çözümler tüm ağdaki işlem gücünün birlikte kullanıldığının bir kanıtıdır.

Madencilik ve havuz sistemi

Buraya kadar parayı nasıl Dijital İmzamızı ve bir zincir gibi birbirlerine atıfta bulunan transfer işlemlerini kullanarak başka bir adrese gönderdiğimizi gördük. İşlemlerin sırasının nasıl blok zinciri ile sabitlendiğini öğrendik. Şimdi de en son bölüme gelelim: Bitcoin'lerin nereden geldiklerine. Para yollamak için önceki bir transfer işlemine atıfta bulunmamız gerekiyor. Peki bitcoinler bu zincire ilk olarak nereden ve nasıl dahil oluyor?

Bitcoinleri yavaş bir şekilde ve dengeli olarak dolaşıma çıkarmanın bir yolu onları blok çözen kişilere ödül olarak dağıtmaktır. Bu yüzden blok çözme işine "Madencilik" adı verilir. Aslında blok çözmenin asıl amacı işlemleri doğrulamak ve blok zincirini işler halde tutmaktır.

Her 4 yılda bir blok ödülü yarıya düşer. Sonunda piyasadaki Bitcoin miktarı 21 milyona ulaştığında dağıtılacak ödül kalmayacaktır. Bu miktar az görünse de 100 milyonda bir bitcoin ile işlem yapılabildiğini düşündüğünüzde dolaşımdaki miktar ihtiyacı karşılayacaktır.

Blok ödülleri sona erdiğinde madencileri işlemleri doğrulamaları için neyle ikna edeceksiniz? Blok ödülüne ilave olarak madenciler işlemlere şu anda isteğe bağlı olarak eklenen işlem harcını (ücretini) da alırlar. Şu anda bloklarına ücretsiz işlemleri de alıyorlar çünkü asıl kazançları nisbeten yüksek olan blok ödülü (25 BTC). İleride ödül miktarı azaldığında işlemler harç miktarlarına göre sıralanacak ve harçsız işlemler büyük ihtimalle hiç dikkate alınmayacak. Bitcoin ile para göndermek gelecekte ücretsiz olmayacak ancak gene de şu anki banka havalesi, EFT ve kredi kartlarından ucuz olacağını tahmin ederiz.

Maden Havuz Sistemi

Bahsettiğimiz gibi, sıradan bir PC nin bir bloğu çözebilmesi ortalama birkaç sene alır. Yani bir kişinin ağdaki tüm bilgisayarlardan önce - ortalama süre 10 dk - blok çözebilme ihtimali çok düşüktür. Sabit bir getiri elde edebilmek için birçok kişi işlem güçlerini bir havuzda birleştirir ve blokları çözmek için diğerleri ile işbölümü yapar. Elde edilen gelir de katılım payına göre havuza katılanlara dağıtılır. Bu havuzlardan bazıları oldukça büyüktür ve neredeyse tüm ağın işlem gücünün %20 sini elinden bulundururlar.

Bazı havuzların bu kadar büyük olması güvenlik konusunda şüphe duymamıza neden olur. Bahsetmiş olduğumuz gibi bir saldırının başarılı olması için saldırganın elindeki işlem gücünün ağdaki diğer toplam işlem gücüne yaklaşması gerekir. Havuzlardan birisi, BTC Guild, bir defasında arka arkaya 6 bloğu kendisi çözmeyi başarmıştır. Ardından bitcoin ağına olan güveni sarsmamak adına gönüllü olarak üye sayısını dondurmuştur.

Çok yüksek işlem gücüne sahip olsa bile bir işlem blok zincirinde ne kadar geride kaldıysa saldırgan için onu değiştirmek o kadar zorlaşır.

Şu anda tavsiye edilen tahsil ettiğimiz işlemlerimizin en az 1 blokta yer almasını, yani 1 onay almasını beklemektir. Büyük miktarlar en az 6 bloğu ya da daha fazlasını da bekleyebilir.

Onay süresi

Kural olarak her bloğun çözülmesi yaklaşık 10 dakika sürer. 6 bloğun çözülmesi için de bir saat beklememiz gerekir. Bir kredi kartı işleminin birkaç saniye sürdüğünü düşünürsek bu süre çok fazla gelebilir. Şunu unutmamalıyız ki kredi kartı müşterileri işlem gerçekleştikten 6 ay sonra bile çalıntı kart bildirimleri ya da başka sebeplerle iade isteyebilir. Satıcı açısından baktığımızda Bitcoin işlemin kesinleşmesinde kesinlikle daha hızlıdır.

Neden her blok yaklaşık 10 dakika içinde çözülür? Bu süre aslında biraz gelişigüzel seçilmiştir ancak sürenin dar olması tutarsızlığı artırır uzun olması ise onay sürelerini geciktirir. Her gün ağa yeni bilgisayarlar dahil oldukça ve madencilik için özelleştirilmiş donanımlar piyasaya çıktıkça blok çözme zamanı çok kısalacaktı. Bunu dengelemek içim her iki haftada bir bitcoin sistemi matematik probleminin zorluk derecesini 10 dakikada çözülebilecek şekilde kalibre eder. Bitcoin'e benzer bir elektronik para olan Litecoin'de bu süre 2.5 dakika olarak ayarlanmıştır.

M. Rosenfeld, "Analysis of hashrate-based double-spending" başlıklı makalesinde güvenlik seviyesinin
blokların aralarında geçen süre ile değil toplam blok sayısı ile bağıntılı olduğunu ortaya
koyuyor fakat varsaydığı bir saldırganın işlem gücünün zamana bağlı kalmadığı yani birkaç
dakikalığına ağdaki toplam işlem gücünü yenebilirse bunu birkaç gün boyunca da sürdürebileceği.

Ayrıca Satoshi'nin aşağıdaki iletisinde blok çözme zamanı ve sistem kullanılabilirliği konusundaki
yorumları da var.

https://bitcointalk.org/index.php?topic=130222.60

Sonuç ve özet

Özet olarak Bitcoin matematik tarafından güvence altına alınan ve bir ağ dahilindeki bir grup insanın (ve tabii bilgisayarın) yönettiğ dijital bir para birimidir. Dijital imza ile münferit transfer işlemleri onaylanır. Bitcoin'in sahipliği bir hesaptan diğerine işlem zincirleri vasıtasıyla geçer. Bu işlemlerin sırası Blok Zinciri tarafından belirlenir. Her blokta zor matematik problemini çözmeyi gerektirdiği için sistemi dolandıracak bireylerin karşısına ağın geri kalanındaki toplam bilgisayar işlem gücüyle yarışmak gibi bir zorluk çıkar.

Bitcoin birçok ilginç yenilik vaadetmektedir. Bunlardan bazıları hükümet müdahalesinden bağımsız bir para olması, anonim olması ve düşük komisyonlu para transferleridir. Bunun yanında aşılması gereken bazı engeller de vardır. Diğer para birimleri ile satın alınması hala zordur. İsmi haberlerde yasadışı faaliyetlerle ve vergi kaçırma olaylarıyla birlikte çok geçtiği için silmesi gereken kötü bir şöhreti vardır. Bu sebepler yüzünden devletlerle arası çok iyi değildir. Ayrıca blok zincirini koruyan matematik yarışının elektrik enerjisi israf ettiği yönünde eleştirilere de hedef olmaktadır.

-------


Bu yazı yazarının izni ile bitkoyun.com tarafından Türkçe'ye çevrilmiştir. Metnin orjinali
http://www.imponderablethings.com/2013/07/how-bitcoin-works-under-hood.html
adresindedir.




İlgili diğer yazılar: Satoshi Nakamoto'nun bitcoin makalesi: "Bitcoin: Eşten Eşe Nakit Ödeme Sistemi"