Merhaba arkadaşlar, umarım keyifler yerindedir. Bitcoin ve Decentralized Yapıya Giriş (Biraz da Blockchain) adlı makalemde Blockchain’den de bahsedeceğimi söylemiştim. Araya biraz zaman girdi fakat vakit geldi. Az önce bahsettiğim makalemde, zaten blockchain konusunda var olan bir kaç konuyu burada detaylı incelememeyi düşünüyorum fakat eksikliğini hissetmeyeceksiniz. (Bitcoin mi Blockchain mi tartışmalarından bağımsız davranıyorum.)
Eminim bu zamana kadar blockchain’in ne olduğunu, nereye evrilebileceğini veya “zaten bu yok muydu nesine bu kadar heyecanlandınız?” konulu videoları izlemişsinizdir. Gelin vaktiniz varsa bir de benden dinleyin.
Konuyu zaten biliyorum, sen ne düşünüyorsun? diyorsanız makalenin sonuna alayım sizi.
Güven Mekanizması
Blockchain’in…
kısa tanımı : Dağıtık Defter Teknolojisi (Distributed Ledger Technology)
uzun tanımı : Blokların (veri kümesi) birbirleriyle bağlı ve şifreli olduğu, doğrulanabilir, dijital dağıtık defter (kayıt) teknolojisi
Piyasada bu işin kitabını yazmış insanlardan tutun sokaktaki vatandaşa kadar herkesin kendince bir tanımı var fakat genel tanımlarda kullanılan 2 yanlış ifade var ki
1. Herkese açık olduğu (private blockchain olabilir -bana göre felsefesine aykırı-)
2. Kripto para için var olduğu (herhangi bir değer olabilir)
Blockchain konusuna girişte güvenden bahsediyor olmamın sebebi şu: dağıtık yapı ilk değil. Keza merkeziyetçi olmayan yapı da. O zaman blockchain’i özel kılan ne? Özel kılan şu: sınırsız olması, kontrol edilemiyor olması, açık ve sansür dirençli olması. Geri kalan her şey bildiğiniz veri tabanı. Tabi, en önemli özelliği kesin olmamakla beraber güvenilir ve onaylanabilir olması. Peki bu sistemde güven nasıl oluşuyor? Blockchain’in temelinde yatan bu felsefeyi biraz irdeleyelim ki blockchain’in nasıl işlediğini anlayalım.
Şu an işler nasıl yürüyor?
Şu an elinizde bir miktar para (değer/value) olsun. Bunu güvende tutmanın en güvenilir yolu? Maalesef banka. Yani bankalarla aramızda güvene dayalı bir ilişki var. Biz bütün paramızı güvenimizle beraber bankaya, merkezi bir sisteme yatırırız. Paramızın (ve verilerimizin) güvenliğinden de bu banka sorumlu olur. Peki, bu bankanın batmayacağının veya verilerle oynamayacağının garantisi nerede? Yok. Kriz anında paramızın tümünü hatta bırakın kriz anını yüklü miktarda paramızın tümünü şimdi çekmek istesek? “Neden?” diye sorarlar. Ayrıca bankada yaşanabilecek IT sorunlarından ötürü (single points of failure) herkes etkilenecek. Demek istediğim sistem monolit olunca bizim olduğunu sandığımız para aslında pek de bizim olmuyor. Çünkü kontrolü bizde değil. Kontrolü sizde olmayan bir şey için sahiplik iddia etmeye çalışamazsınız. Bunu sadece banka ile sınırlandırmayıp, ABD Doları, Euro gibi para birimleriyle de örneklendirebiliriz. Bu para birimleri devlet tarafından regüle edilen, basılan, kontrol edilen, merkez bankasına bağlı değerlerdir. Bunda sorun ne mi? Bkz. Yunanistan.
Bitcoin
Bitcoin, cryptocurrency (kripto para) alanında bir ilk. Basılı olmayan yani dijital, kimsenin kontrol etmediği bir para/değer. Merkeziyetçi değildir, arkasında bir şirket veya devlet yok. Merkez bankası yok. Peki kim(ler) yaptı bu Bitcoin’i? Kağıt üzerindeki isim Satoshi Nakamato. Satoshi Nakamato kim? Bilmiyoruz (şimdilik), işin güzel tarafı da önemli değil. Çünkü güvenimizi Satoshi’ye değil, topluluk tarafından yazılan ve altında yatan blockchain’e bağlayacağız. Bitcoin hakkında daha fazla bilgi almak isterseniz önceki makaleme bakabilirsiniz.
Blockchain Nedir?
NOT : Blockchain’i kripto para dünyası ile bağdaştıracağım. Sonuçta Bitcoin’in ortaya çıkış noktası gibi Blockchain’inki de Satoshi Nakamato.
Blockchain’in birden fazla bloğun (block) birbiriyle ilişkilendirilmesinden bahsetmiştik. Yani blockchain’in özünde blocklar, blockların içerisinde de transaction’lar (ödemeler) yer alıyor. Bu ödemeler kişiler veya şirketler arasında yapılmış olabilir. Blockchain’de yer alan bir ödemeyi sonradan değiştirmek mümkün değildir. Burada mevcut bankacılık sisteminden ayrılıyoruz. Ayrıca bankacılık sisteminde yapılan tüm ödemeler merkez bankası ya da diğer otoriteler tarafından onaylanır. Blockchain’de ise merkeziyetçi bir yapı olmadığı için bu onay süreci blockchain’e dahil olan diğer kullanıcıların (node, miner değil) katılımıyla gerçekleştirilir.
Burada bir duralım…
SORU : Ödemeyi onaylamak için bir onay süreci olmalı mı?
CEVAP : Evet.
SORU : Peki ödemeyi yapanlar veya onaylayanlar birbirlerini tanımalı mı?
CEVAP : Hayır. Ödemenin gerçekleşip gerçekleşemeyeceğini öğrenmek için katılımcıların birbirlerini tanımalarına gerek yok.
SORU : O halde bu onay süreci nasıl gerçekleşiyor? En azından bir yetkiliye/merciye ihtiyaç yok mu?
CEVAP : Var. Blockchain’e dahil olan diğer insanlar, onaylayan kişiler oluyor.
SORU : O halde onayı neye dayanarak veriyor bu insanlar(node)?
CEVAP : Veriler kripto şekilde tutulduğu ve bu veriler de bloklar üzerinden birbirlerine bağlandığı için onaylanabilir bir süreç mevcut.
Blockchain’in 2 görevi var. Birincisi verileri toplamak, ikincisi ise bu verileri kriptografi (hash) veya dijital parmak izi (digital fingerprint) aracılığıyla transactionları birbirleriyle bağlamak. Bunun anlamı veri değişirse tüm bloğun onay süreci başarısız olur ve bu bilgi diğer kullanıcılar ile paylaşılır.
BİLGİ : Kriptografi (.NET) ile ilgili daha fazla bilgi almak isterseniz önceden yazdığım .NET Dünyasında Kriptografi makaleme göz atabilirsiniz.
Bloğun en tepesinde bloğun içerisinde bulunan tüm işlemlerin hash’i bulunur. Buna Block Address (blok adresi) denir. Bloklar, blok adresleri ile birbirine bağlıdır. Her blok, kendisinden önce gelen bloğa blok adresi üzerinden bağlı için ortaya zincir çıkıyor. İşte size Blockchain (block zinciri). Daha sonra bunun bir kopyası ağda bulunan diğer kullanıcılara/node’lara iletilir. Kimse kimsenin adını bile bilmeden ticaret yapmış hatta onaylamış oldur. Kullanıcılar da aslında sıradan insanlardan farksız. İsteyen herkes node olup bu onay sürecinde yer alabilir.
NOT
1. Blockchain’e bir blok dahil olmadan önce blok adresi hesaplanması gerekiyor. Bu da komplex matematiksel bir bulmacanın çözülmesiyle oluşur. Buna mining yani madencilik denir. Her blok için aynı süreç tekrar tekrar yaşanır.
2. Daha baskın kriterler olmasına rağmen; Blockchain üzerinde ne kadar blok varsa, yani zincir ne kadar uzunsa, o kadar güvenlidir. Çünkü blok sayısı arttıkça manipüle edilmesi istenen blok sayısı artacak. Buna her X dakikada blok hesaplamayı da eklerseniz süre uzayacaktır.
Public vs. Private Blockchain (Açık vs. Kapalı)
Public blockchain ile Private blockchain arasındaki temel farkları ele aldığımızda konuyu daha iyi anlamış olacağız.
Public Blockchain
- Herkes blockchain’e kayıt yazabilir,
- Tüm node’larda zincirin kopyası olur,
- En güvenli ve node’lar arası güvene dayalı.
Bugün Bitcoin ağında üretilen ilk Bitcoin’den bugüne kadar yapılan tüm işlemleri görebilirsiniz. Baştan sona, sondan başa gitmek mümkün. Tekrar doğrulanabilir. Bu da insanlar için güven verici bir özellik fakat şirketler bundan memnun değil. Çünkü şirketler bu kadar fazla verinin halka açık olmasından endişe duyuyorlar. O yüzden private blockchain ihtiyacı doğuyor.
Private Blockchain
- Blockchain’e kayıt atma, okuma, onaylama, varsa mine etme süreçlerini ya şirket ya da şirketin belirlediği kişi(ler) yapabilir,
- Publick blockchain’de mevcut merkezi olmayan güvenlik kriterlerine sahip olamaz.
Private Blockchain’e baktığımız zaman kontrolün kişinin/şirketin elinde olduğunu görüyoruz. Bu da tartışmaları beraberinde getiriyor. Çoğu Bitcoin dev/maximalist private blockchain’lerin olmaması gerektiğini savunuyor. Bu, işin felsefesine ters olduğunu söylüyorlar.
Blockchain’de Kriptografi
Kriptografi konusuna derinlemesine zaten girdiğim için yüzeysel bir anlatım yapacağım. Aşağıda anlatacağım konuların daha detaylısı için buraya tıklayabilirsiniz.
Hash
Hashing, verinin kriptografik algoritma aracılığıyla belli uzunlukta değere (özet) dönüşmesidir. Blok içerisinde bulunan tüm verinin hashlenmesi ile ortaya sabit uzunlukta özet çıkar. Input (veri) değişirse output (mesaj) da değişir. Blockchain’de blok doğrulaması buradan yola çıkarak yapılabilir. Tek bir nokta bile değişirse, onay süreci başarısız olur. Bu da diğer node’lara bildirilir.
Hashed Message Authentication Code (HMAC)
SHA Hash işleminin bir tık ötesi varsa o da HMAC. HMAC, SHA veya MS5 hash işlemine kriptografik anahtarın dahil olmasıdır. Var olma amacı ise key aracılığıyla verinin doğruluğunu onaylamak. Key’in uzunluğu da gücünü belirler. Blok hash hesaplanırken HMAC de eklenerek güvenliği artırılır.
Dijital İmza (Digital Signature)
Dijital imzalar, gerçek hayatta kullandığımız imzalara benzerler fakat daha güvenilirdir. Dijital imza kullanan kişi imzanın atıldığını inkar edemez. Dijital imza, kimlik demektir. Dijital imzanın varlığı imzayı atan kişinin kim olduğu değil imzayı atmasını beklediğimiz kişinin o kişi olup olmadığına cevap verir.
Dijital imzayı oluşturan etkenler
- Public ve Private anahtarlar
Public anahtar herkeste olabilir, private anahtar ise veriyi imzalayanda olur - İmza algoritması
Private anahtar ile olur, - İmza doğrulama algoritması
Public anahtar ile olur
Blok Yapısı ve Veri Depolama
Blockchain’in en küçük birimi olan blokları inceleme vakti geldi. Blok, içerisindeki yapıya göre ikiye ayrılır. İlki header (başlık) ve ikincisi de bloğun içerisindeki verinin olduğu kısım. Şimdi örneklendirerek ilerleyelim.
Örnekte kullanacağımız bloğun
HEADER YAPISI
- Blok Hash,
- Blok Numarası,
- Yaratılma Tarihi,
- Önceki bloğun hash’i.
İÇERİK
- Dijital parayı yollayan adres,
- Dijital parayı alan adres,
- Yollanan dijital para miktarı.
Bu blok yapısı tamamen hayali. Örneğimiz ekonomi modeli tabanlı bir blockchain değil de sigorta modeli tabanlı blockchain olsaydı o zaman “poliçe numarası”, “sigorta tipi” gibi veya buna benzer alanlar da olabilirdi.
Her blockchain’in blok yapısı birbirinden farklı. Blokta “şunlar şunlar” var diyemeyiz fakat belli başlı bazı değişmezler var. Mesela Bitcoin blok yapısı şu şekilde:
- Versiyon (bitcoin versiyon numarası) – 4 byte
- Önceki Block Hash (bir önceki bloğun hesaplanan hash’i) – 32 byte
- Merkle Root (mevcut bloğun transactionlarının hash’i) – 32 byte
- Timestamp (bloğun zamanı – UNIX) – 4 byte
- Zorluk (bloğun zorluğu) – 4 byte
- Nonce (doğru hash’i üretmek için kullanılan counter) – 4 byte
Blok header toplamda 80 byte.
Bizim örneğimiz var olan bir blockchain veya block yapısını baz almadığı için yine hayali alanlarla devam edeceğiz.
BİLGİ : Blockchain’deki ilk bloğa Genesis Block (kök, yaratılış) denir. Bu blokta bulunan “Previous Block Hash” alanı boştur çünkü kendisi ilk blok. Bunu algoritmadaki “double linked list”e benzetebiliriz. Birbirlerine bağlı olan node’ların ilkinde previous alanı ile son node’daki next alanı boş fakat linked list’te akış yönü çift taraflı olmasına rağmen blockchain’de akış tek taraflıdır (previous var, next yok).
Bizim örnek bloğumuzun yapısı aşağıdaki gibi:
Blockchain üzerinde birbirine bağlı bloklar ise aşağıdaki gibi görünecek. İlk blok genesis blok kabul edilsin.
Bloğun içerisindeki veri hashlenip, bloklar arası bağlantı kuruldukça güvenlik işte böyle artmış oluyor. En ufak bir veri manipülasyonu bile zinciri onaysız kılar çünkü bloğun hash’i değişirse bağlı olduğu bloktaki “önceki blok hash’i” alanı da değişmeli. Kısacası bu yeni bloğun da hash’i değişmeli. Bu böyle gidiyor…
Yukarıdaki örnekte blok içerisinde bir ödeme (transaction) olduğunu varsaydık. Peki bir blok içerisinde n(>1) tane transaction olsa ne olurdu? Hash foksiyonu nasıl etkilenirdi? Bunlara da bakalım.
Birden fazla transaction’ı bulunan bloğun, blockchain içerisindeki davranışları değişmez. Yani mining, diğer blok ile bağlantı gibi konularda hiçbir değişiklik olmuyor. Değişiklik bloğun içinde.
Blok içerisinde üretilecek olan hash tüm transactionlar baz alınıp üretilmeli. Burada devreye Merkle Tree (Merkle Ağacı, Merkle Kökü veya Hash Ağacı) giriyor. Merkle Tree en basit tanımıyla bir parça verinin hash’inin üretilmesi ve bunun bir ağaç yapısında üretilip veriler arası bağlanmasıdır. Tek bir hash, verinin tüm parçalarını temsil eder.
Merkle Ağacı’nda blok #1 üzerinde değişiklik olsaydı Merkle Ağacı’nın en üst noktasında bulunan ana hash’i hesaplamak için tüm ağaç hesaplanmaz. Blok #1’in bağlı olduğu noktaların hashlerini hesaplamamız yeterli. Yani Hash(1), Hash(1,2) ve Hash(1,2,3,4).
BİLGİ : Kouyla ilgili güzel bir demo var. Hash, block, digital signature vb. tüm demolar mevcut. Buradan inceleyebilirsiniz. https://anders.com/blockchain/
Proof of Work
Bizans Generalleri Problemi (The Byzantine Generals Problem)
Bizans Generalleri Problemi (BGP) ilk olarak 1982 yılında 3 kişinin ortak çalışması ile kağıda döküldü.
BGP özetle, bir şehre saldırmak isteyen iki (veya n > 1 sayıda) Bizans Generali’nin iletişimine dayalı bir hikaye. İki generalin birer ordusu vardır. Şehri ele geçirmenin tek yolu iki generalin de aynı anda şehre saldırmasına bağlıdır fakat generaller yanyana değil, şehrin farklı uçlarındadır. Çözüm; bir generalin diğer generale bir elçi aracılığıyla saldıracakları zamanı bildirmesi. Peki elçi yolda yakalanırsa ve generale gitmesi gereken mesaj değil de bir casus aracılığıyla yanlış mesaj götürülürse ne olur?
SORU
- Blockchain’de güvene ihtiyaç yoktu? Neden şimdi problem oldu?
- General filan, ne oluyor?
Blockchain’de node’lar arası güvene ihtiyaç yok fakat sisteme yani blockchain’e güven ihtiyacı var. Blockchain zaten güvenli değil miydi? Öyle fakat bu hale evrilmesi çok zaman aldı ve büyük bir problem aşılmış oldu.
Dijital para fikri ilk Bitcoin ile ortaya çıkmadı. Nick Szabo‘nun “bit gold” adlı çalışmasında çifte harcama(double spending) sorunu aşılamadığı için şu an adını duyan insan sayısı daha az. Bu sorun (BGP’nin dijital ortamdaki karşılığı), dijital paranın birden fazla kez kullanımı sorunuydu. Öte yandan, Satoshi Nakamato bu sorunu çözerek adını bugünlere kazımış oldu. Sorunu ve çözümü örneklendirirken yine Bitcoin’i kullandım fakat kullanmak zorunda kalmasaydım sorunu şöyle anlatırdım; blockchain’e katılım public olduğu için ve veri de kolayca kopyalanabileceği için sorun ortaya çıkıyor. (node = general)
Peki çözüm ne? Çözüm hash. Bir general, diğer generale mesajı gönderirken mesajın sonuna fazladan ifadeler ilave eder. Buna “nonce” denir. Örnek “Saat 1’de saldıralım” yerine “Saat 1’de saldıralım QpUy7”. Neden ekstra ifade ilave ettik de direkt olarak hash’ini almadık göreceğiz. Generallerin aralarında anlaştıkları bir kural var ki bu da hashli mesajın 5 tane sıfır (0) ile başlaması şartı. Yani, bu nonce QpUy7 değil de QpUy8 olsaydı, o mesajın hashli halini 5 tane sıfırla başlatacak bir ifade olmayabilirdi. Başlamazsa mesaj sahtedir. Dolayısıyla ortada sürekli deneme, bulmaca çözme hali var. Bu epey bir vakit alır. Mesajı gönderen kişi, güvenilirliğini kanıtlamak için hash bulmacasını çözerken nonce’u bulmak adına efor harcar. Bu tekniğe Proof of Work. Kripto dünyada mining (madencilik) denir. Bir kişinin bulmacayı çözmesi yeterlidir çünkü bunu diğer nodelarla paylaşırlar. Fakat bulmacayı ortak çözme yerine birbirlerine rakip olsalardı ve blockchain ağındaki tüm hash gücünün (çok ama çok büyük bir güç) %51’ine sahip olsalardı, blokları oluşturanlar %51 çoğunlukta olacak ve ağı manipüle edecebilecekler. Buna da %51 Attack (%51 saldırısı) denir. Bitcoin ağına saldırmak bugün çok maliyetli olur fakat imkansız değil. Bitcoin Gold dün %51 saldırısı ile milyonlarca dolar değerinde para kaybetti. %51 saldırısına da çözüm var fakat konunun dışına çıkmak istemiyorum. Her X dakikada bir blok üretilmesi de zorluğun artması ve hash sürecinin X sürede olması blockchain’i güvenli kılıyor. Bir diğer nokta ise ne kadar node olursa o kadar çok güvenlik sağlanmış olur.
Consensus
Blockchain ağında alınması gereken bazı kararlar mevcut. Ağa yeni bir blok ekleneceği zaman bunu oluşturacak ve onaylayacak bir sistem mevcut fakat hangi bloğun hangi zincire ekleneceğine kim karar verecek? Zincire eklenen blok bilgisi diğer node’lara gitmeden zincire başka bir blok eklenirse ne olur? Transaction history mükerrer kayıtlarla dolar mı? Merkeziyetçi yaklaşım olmadan bu sorun nasıl çözülür?
Bu soruların cevabı oy/fikir birliğinde yatıyor (Consensus). Proof-of-work, harcanan işe dayalı olduğu için bu işe en çok güç (bilgisayar gücü) harcayanın sözü geçiyor. Buna, iki farklı blok zinciri dallanmasında en uzun zincirin alınması da dahil.
4 ve 5 numaralı bloklara orphan yani yetim blok denir. Blockchain üzerinde yerleri olmadığı için tekrar sürece dahil olmak için yeni blok adı altında blockchain’e eklenirler.
Sonuç
Şahsi fikrimi sorarsanız; bugün blockchain ile yapılan projelerin en az %99’u bildiğimiz veritabanlarıyla yapılabilir. Özel bir yanı yok. Blockchain’den tüm sorunlarımızı çözecek bir sihirli değnekmiş gibi bahsediliyor olması beni hem üzüyor hem de kızdırıyor. Ayrıca, merkeziyetçi bir yapıya uymadığı için blockchain’in tanımına dair bugün hala tartışmalar dönüyor. Bu konu ile ilgili iki kişinin fikirlerini gösteren video paylaşmak istiyorum ve son sözleri sizlere bırakmak istiyorum.
Mastering Bitcoin adlı kitabın yazarı, her soruya bir cevabı olan Andreas Antonopoulos.
Diğer kişi ise sert mizacı ile tanınan Bitcoin developer Jimmy Song.
Ek olarak, Reuters tarafından Blockchain’i anlatan bir sayfa hazırlanmış. Görselleri güzel, bilgiler önemli fakat özet şekilde çok daha sade anlatılmış. Blockchain explained