Nedir Bu Blockchain ?

Semih Yilmaz
10 min readDec 1, 2021

--

Özellikle son yıllarda yediden yetmişe herkesin konuştuğu bir şey var. Bitcoin. Peki bu Bitcoin ya da daha geniş bir kavramla kripto paraların altında yatan Blockchain teknolojisi nedir ? Gelin bunu beraber öğrenelim.

Basit bir benzetmeyle blockchain teknolojisini bir kayıt defteri olarak tanımlayabiliriz. Bu tanımı şu şekilde hikayeleştirelim isterseniz. Siz bir bakkalsınız ve bir veresiye defteri tutuyorsunuz. Bu defterde her sayfada kimin size ne kadar borcu olduğu ve kimin ne kadar borcunu ödediğini kayıt altına alıyorsunuz. Bir gün bakkalınızda yangın çıktığını ve maalesef bu defterin beraberinde ki kayıtlarla birlikte kül olduğunu düşünün. Ne kadar şansız bir durum değil mi ? Keşke bu kayıtların başka bir yedeği olsaydı ve kayıtlarımızı kurtarsaydık. İşte tam burada blockchain teknolojisine ihtiyaç duyuyoruz.

Şimdi isterseniz yukarıda ki şansız hikayemizle birlikte blockchain teknolojisini biraz daha teknik anlamda inceleleyelim.

Öncelikle bir blockchain’in yapısını tanımlayalım. Blockchain aşağıda görüldüğü üzere birden fazla veri block’larının birbirine bağlanması sonucu oluşmuş bir zincirdir.

Her bir block ilk blocktan başlayarak -ki biz bu ilk block’a “Genesis Block” diyoruz- bir önce ki block’un hash değerini tutarak bir veri zinciri oluşturular. İşte bu zincir bir blockchaindir. Yukarıda ki hikayemizle bu yapıyı pekiştirmek istersek şu şekilde pekiştirebiliriz. Tuttuğumuz veresiye defteri aslında bizim blockchainimiz, blocklar ise bu veresiye defterinin her bir sayfasıdır. Yani blockchainimizde ki her bir block’ta kimin ne kadar borcu olduğunu veya kimin ne kadar borç ödediğini tutarız.

Şimdi yangın çıktığını varsaydığımız olaya geçelim. Peki bu blockchain bizi bu yangından nasıl kurtaracak ? Blockchain teknolojisinin en önemli faydalarından biri burada karşımıza çıkıyor.

MERKEZİYETSİZLİK.

Yangından sonra keşke bu defterin yedeği olsaydı demiştik hatırlıyorsanız. Peki ya bu defter bakkalın bütün müşterilerine dağıtılmış olsaydı ve bakkal ne yazarsa yazsın müşterilerin defterlerinde de aynı anda yazılmış olsaydı? Evet bu şekilde defterimizi yedeklemiş olurduk ve tek bir defter kaybolsa bile diğer defterler sayesinde verilerimizin güvenliğini sağlamış olurduk. Fakat burada şöyle bir problem ortaya çıkmış oluyor. Deftere sahip olan müşteriler neticede herhangi bir satırı değiştirebilirdi ve bu şekil bir problemde veri güvensizliği ortaya çıkmış olabilirdi. Böyle bir problemin çözümü ise Hash fonksiyonu dediğimiz kriptografik bir fonksiyon ile sağlanmaktadır. Gelin şimdi bu kriptografik fonksiyonu tanıyalım.

HASH (ÖZETLEME) FONKSİYONLARI

Hash fonksiyonları temel olarak birebir fonksiyonlardır diyebiliriz. Yani tanım kümesinde bulunan her bir elemanın görüntü kümesinde tek bir karşılığı vardır. Daha da açarsak bir veriyi Hash fonksiyonuna soktuğumuz zaman fonksiyonumuzun sonucu benzersiz bir sonuç çıkar. Aşağıda gördüğünüz Hash fonksiyonumuzun matematiksel tanımıdır.

Hash fonksiyonların temel amacı veri bütünlüğü sağlamaktır diyebiliriz. Burada ki amaç bir verinin orijinalliğinin bozulup bozulmadığını anlamaktır. Ayrıca bir diğer amacı ise veriyi tek bir boyuta indirerek veriyi sıkıştırmamızdır. Şimdi gelin ve bu iki amacı biraz daha açalım.

Yukarıda ki tanımda da açıkladığımız gibi Hash (Özetleme) fonksiyonlarına gönderdiğimiz her bir veri için tek ve değişmeyen bir çıktı alıyoruz. Yani

h: Bir Hash fonksiyonumuz olsun;

H(m1) != h(m2)

Yukarıda ki eşitlikten de anlayabileceğimiz üzere hash fonksiyonlarına giren her bir verinin çıktısı birbirinden farklı olmaktadır. Hadi gelin şimdi bunu gerçeğe çevirelim.

Yukarıda gördüğünüz örnekte SHA-256 Hash algoritmasına gönderdiğimiz gerçekte birbirine çok benzeyen iki adet cümle görüyorsunuz. Altta yazan “Hello World.” Yazısının üsttekinden tek farkı sonunda nokta olmasıdır. Fakat Hash çıktılarına baktığımızda ise kocaman bir fark olduğunu görebiliyoruz. İşte burada hash fonksiyonları sayesinde veri bütünlüğünün nasıl sağlandığını anlayabiliyoruz. Başka bir örnek vererek daha da pekiştirelim. Sizin biriyle bir sözleşme imzaladığını düşünelim. Sözleşmenin bir nüshasının sizde diğer nüshasının ise sözleşmeyi imzaladığınız kişide olduğunu varsayalım. Ayrıca bu sözleşmenin orijinalinin bir hash değerinin de olduğunu varsayalım. Bir zaman sonra sözleşme yaptığınız kişi sözleşmede ki bir noktayı sizden habersiz virgül yaparak sizden hak talep ettiğini ve mahkemeye verdiğini düşünelim.(Biliyorsunuz ki sözleşmelerde bir virgül bile çok şeyi değiştirebilir) Hakim sizden orijinal sözleşmenin, değiştirilmiş olan sözleşme olmadığını kanıtlamak isterse tek yapacağınız, değiştirilmiş sözleşmenin hash değeri ile orijinal sözleşmenin hash değerini karşılaştırmak olacaktır. Hash değerleri farklı çıktığı için sözleşmelerin değiştirilmiş olduğunu kanıtlamış olacaksınız. Aslında burada birde şu faydayı görmüş olacağız, sayfalar dolusu iki sözleşmeyi incelemek yerine kısa bir çıktıya, yani bir nevi özetine bakıp o verinin değişip değişmediğini öğrenmiş olacaksınız.

İşte burada bir nevi diğer amacı da örneklendirmiş oluyoruz.

Hash (Özetleme) fonksiyonları Türkçe karşılığından da anladığımız şekilde bir veriyi özetlemektir. Şunu şu şekilde açıklayabiliriz. Bir paragrafımız olsun ve bu paragrafımız 500 kelimeden meydana gelsin. Biz bu paragrafımıza Hash ( Özetleme) algoritması uyguladığımızda paragrafımız belli bir boyutta ki bir veriye dönüşmüş olur. Bu sayede bir nevi paragrafımızı özetlemiş oluruz ve bu sayede aslında verimizi sıkıştırmış oluruz. Burada ki tek sıkıntımız hash fonksiyonuna giren bir verimizi geri çevirememiz. Bundan dolayı da elimizde olan bir hash çıktısının hangi veriye ait olduğunu bilemeyiz.

Yukarıda “belli bir boyut” olarak belirttiğimiz boyutlar kullandığımız algoritmalara göre değişmektedir. Aşağıda bu algoritmalardan bazıları yazmaktadır.

Bu algoritmalardan MD5 ve SHA-1 algoritmaları yapılan testler ile güvensiz olarak kabul edilmiştir. Bunun nedeni herhangi farklı verinin aynı çıktıyı vermiş olmasıdır. Diğer algoritmalar ise SHA-2 ailesinde mensup algoritmalardır ve bu algoritmalar şu anlık güvenli algoritmalardır. Bitcoin blockchain’inde kullanılan algoritma ise SHA-256 algoritmasıdır.

İşte bu hash algoritması sayesinde ilk örneğimizde söylediğimiz verilerin güvenliği problemini çözmüş oluyoruz. Başka bir deyişle veresiye defterinin her satırında bulunan bir verinin değişip değişmediğini anlamış oluyoruz. Peki bu hash çıktılarının değişip değişmediğini neye göre anlıyoruz ? Yani değişen veriyi değişmemiş veriyle nasıl karşılaştırıyoruz ? Buna geçmeden önce başka bir terim olan Merkle ağaçlarını tanıyalım isterseniz.

MERKLE TREE (MERKLE AĞAÇLARI)

Yukarıda anlattığımız şekilde verilerimizi şifreledik. Bir nevi her bir alış-veriş verilerini hash algoritması sayesinde şifreledik ama şöyle bir sıkıntı var elimizde bir sürü satırın hash’lenmiş hali var, bu yüzden hem boyut olarak saklamak hem de veri güvenliği için verilerin orijinal değerleriyle karşılaştırmak çok zor görünüyor. Bunun çözümünü ise sevgili Satoshi Nakamoto Bitcoin zincirinde merkle ağaçları ile çözmüş. Peki nedir bu merkle ağaçları? Gelin beraber tanıyalım.

Merkle Ağaçları, hiyerarşik olarak dizilmiş hash bloklarının oluşturduğu bir ağaç veri yapısındır diyebiliriz.

Kaynak: http://www.turkcewiki.org/wiki/Merkle_a%C4%9Fac%C4%B1#/media/Dosya:Hash_Tree.svg

Yukarıda gördüğünüz yapı bir merkle ağacıdır ve bu ağacın en altında verilerimiz bulunur, bu veriler ilk başta hash’lenirler daha sonra bu hash’lenmiş veriler ikili gruplara ayrılarak birbirleriyle birleştirilip hash’lenirler, daha sonra hash’lenen bu değerler tekrar ikili gruplara ayrılıp birbirleriyle birleştirilip tekrar hash’lenirler. Bu olay tek bir hash değeri ortaya çıkana kadar devam ettirilir. Bu şekilde merkle ağacımız oluşmuş olur.

Merkle Ağaçları 3 Parçadan Oluşurlar;

Kaynak: https://medium.com/coinmonks/merkle-trees-concepts-and-use-cases-5da873702318
  1. Merkle Leaf

Bu kısım orijinal, hashlenmemiş verilerin ilk hashlendiği kısımdır. Burada ilk hash blokları bulunur.

2. Merkle Branches

Bu kısım leaf seviyesi ile son seviye olan merkle root seviyesi arasında kalan tüm hash bloklarıdır.

3. Merkle Root

Bu kısım merkle ağacımızın en tepesinde bulunan hash bloğumuzdur. Bir başka deyişle sonuç bloğumuzda diyebiliriz.

Peki merkle ağaçlarının faydaları nedir? Merkle ağaçları sayesinde birden fazla verilerimizi tek bir hash çıktısına indirgeyerek bir nevi sıkıştırma işlemi yapmış oluruz. Bu sayede zincirimiz ne kadar uzarsa uzasın kabul edebileceğimiz, makul bir boyutta olacaktır. Burada unutmamamız gereken şey bu sıkıştırmanın tek taraflı olmasıdır. Yani verilerimizin orijinallerine merkle ağacı oluştuktan sonra ulaşmamız mümkün değildir. Neticede merkle ağacınında çıktısı da bir hash çıktısıdır. Aslında bu bir eksik olarak görülebilir fakat bu veri güvenliğini sağlamada büyük bir artı katıyor diyebiliriz. Bir diğer faydası ise boyut indirgendiğinden dolayı verilerin karşılaştırılmasının, onaylanmasının daha hızlı olmasıdır.

Temel diyebileceğimiz tanımlamaları öğrendikten sonra artık yavaştan blockchain’in yapısına daha detaylı bir giriş yapabiliriz. Şimdi gelin ve blockchain’in yapıtaşı olan blocklarımızdan bahsedelim.

BLOCK’LAR

Block’lar, temel bir tanımlamayla blockchain’imizde verilerimizin tutuluduğu veri blocklarıdır. Bu verilere biz “Transactions” (İşlemler) demekteyiz.

TRANSACTIONS

Transaction’lar bir blockta tutulan verilerdir. Bu veriler ilk örneğimizde ki veresiye defterimizin borç kayıtları ya da satırlarıdır diyebiliriz. Örnek olarak şu şekilde bir transaction verebiliriz;

22.11.2021 — Muzaffer Yilmaz →150 TL

06.06.2019 — Muharrem Duran → 200 TL

18.10.2018 —Nurettin Fatih Akkın→ 50 TL

.

.

.

Yukarıda ki örnek, ilk başta verdiğimiz veresiye defteri örneği için oluşturulmuş transaction’lardır. Fakat genel olarak bitcoin gibi blockchain’lerde bu yapı şu şekildedir.

22.11.2021 — Muzaffer Yilmaz, Semih Yilmaz →50 Tl

Bu örnekte şunu demek isteriz: “Muzaffer Yilmaz isimli kullanıcı Semih Yilmaz isimli bir kullanıcıya 50 TL verdi”. Bu örnek yaygın olarak kullanılan transaction yapısıdır. Fakat ben hiç kafa karıştırmadan ilk örneğimize göre örneklemek istedim. İki örnekte transaction yapısına uygun örneklerdir.

Bu transaction’lar birleşerek yukarıda anlattığımız merkle ağacını oluştururlar ve böylelikle verilerimizin veri güvenliği sağlanır boyutu indirgenir.

Tanımımızı özetlemek gerekirse Transations’lar bizim blocklara yazdığımız verilerimizdir diyebiliriz.

BLOCK YAPISI

Blockchain’de blocklarımız aşağıda gösterilen şekilde, her bir block bir önceki bloğun hash değerini tutarak bağlanır.

Yukarıda ki resimde de görüldüğü üzere ilk block’umuza genesis block denmektedir. Bu genesis block’u blockchain’in geliştiricisi ekler ve zincirimiz bu block ile devam eder. Aşağıda Bitcoin zincirinin ilk block’u yani genesis block’unu görmektesiniz.

Blockchain’de ki block’ların yapısı her bir zincir için (Bitcoin, Ethereum vs.) değişiklik göstermekteyse de temel olarak birbirine benzer yapılardadır. Bir block’da temel olarak; Transactions’ların oluşturduğu merkle ağacının root hash değeri, bir önceki bloğun hash değeri, timestamp yani zaman damgası, challenge string dediğimiz block hash değeri tutulur.

Block’ların yapılarını temel olarak yukarıda gösterdik. Şimdi gelelim asıl meseleye. Yazının başından beri güvenlik, güvenlik diye yazıp durduk. Peki bu güvenlik nasıl sağlanıyor? Verilerin bütünlüğü için karşılaştırma nasıl sağlanıyor?

CONSENSUS

Consensus kısaca blockchain’imizde güvenlik ve doğrulama anlamlarına gelmektedir diyebiliriz. Bunu şu şekilde sağlıyor. Blockchain yazımızın başında büyük harflerle yazdığımız şekilde merkeziyetsizdir. Blockchain’imiz P2P (Peer to Peer) ağda node denilen kullanıcılara dağılmış şekilde bulunmaktadır. İşte burada ki node’lar yazımızın başında verdiğimiz örnekte ki veresiye defteri dağıtılmış müşterilerdir. Yani blockchain’imiz aynı veresiye defteri gibi bütün müşterilerde bulunmaktadır.

Kaynak: https://medium.com/@venkat.kasthala/how-does-mining-work-in-blockchain-b4fc5f7f3209

Şimdi şöyle bir olay yaratalım. Kötü niyetli bir müşteri elinde bulunan veresiye defterinde kendi borcunu silmek istedi. Ya da başka bir kişiye borç yazmak istedi. Değişikliğini yaptığını varsayalım. Hatırlarsanız biz blockchain’de her block’un kendinden önce ki block’un hash değerini tuttuğunu ve bu sayede bir bağlı liste oluşturduğunu ve bu listeye aslında blockchain dediğimizi söylemiştik. Herhangi bir block’ta ki bir transaction değiştiğinde block’unda hash değerinin değişir. Hash değeri değişen bu block ile birlikte önünde ki block önce ki block’un hash değerini tuttuğundan zincir kopacak ve zincir bozulacaktır. Bu sebeple de node’da bulunan zincir kullanılmaz hale gelecektir.

Peki saldırgan diğer blockları da değişen hash değerlerine göre ayarlayıp yeni bir zincir yaratmak isterse? İşte bu problemin çözümü de Proof of Work ( İş kanıtı ) dediğimiz bir sistem ile önüne geçmiş oluyoruz. Adam Back’in tasarladığı bu sistem daha önceleri spam maillerin önüne geçmek için kullanılıyordu. Fakat Satoshi Nakamoto bunu blockchain’e ekleyerek bir güvenlik önlemi almış oldu.

Proof of Work sistemi şu şekilde çalışır. Her bir block’un üretilmesi için bir oyun ürettiğimizi varsayalım. Bu oyuna göre node’lar yeni bir block oluşturmak için verilen görevi yerine getirmelidir ve oyunu kazanan node ödül olarak block üretir. Bu oyunun kuralları şu şekildedir. En son üretilen bloğumuzun aşağıda ki gibi bir hash değeri olsun.

Birde ödül hash değerimiz olsun fakat bu ödül biraz değişik. Bu hash değerimiz belli bir sayıda 0 biti ile başlamış olsun. Biz aşağıda ki örnekte daha açıklayıcı olması için bitlerle değil de direkt hash çıktısı üzerinden gidelim.

Yukarıda gördüğünüz üzere hash değerimizin ilk 12 karakteri 0 ile başlamış durumda. Oyuncular ilk verdiğimiz yeşil hash değerine nonce adı verilen bir değer ekleyerek kırmızı ödül hash değerinin aynısını ya da daha az sayıda 0 ile başlayan bir hash değeri bulmaya çalışırlar. Bulan node diğer node’lara haber ederek bulduğunu söyler ve bu sayede her bir node’da yeni bir block oluşmuş olur (Bitcoin zincirinde her bir block oluşturmanın ödülü bir miktar bitcoin’dir). Bu işlem yüksek cpu gücü ve fazla zaman gerektirir. Bu sayede bir saldırgan bir block’u değiştirdikten sonra diğer block’ları da değiştirdiği block’a göre yeniden oluşturması çok uzun süreceğinden neredeyse imkansızdır.

Peki aynı anda block oluşturan iki adet node olduğunu düşünelim. Bu oluşan blocklar ile zincir iki parçaya ayrılarak devam eder.

Daha sonra normal olarak bazı node’lar 1. parçanın doğru olduğuna inanırken diğerleri 2. parçanın doğru olduğuna inanacaklar. Ve bu node’lar block üretmeye devam edecekler. Varsayalım ki 1. Parçaya inanan node’lardan biri yarışmayı kazandı ve yeni bir block oluşturdu.

Böyle bir senaryoda tüm node’lar uzun zincire göre hareket edecektir ve kısa zincir iptal olacaktır. Bu şekilde zincir devam edecektir. Ayrıca blockchain’de proof of work sistemi sayesinde zincirlere de doğrulama yapılmış olur. Bu doğrulama da temel prensip oy vermedir. Her bir CPU bir oy olarak sayılır. Ve sistemde ki toplam CPU miktarının %51’inin onaylaması ile zincir doğrulanır. Yani yukarıda ki örnekte sistemin %51’inin doğrulaması ile 1. Zincirden devam edilir. Aslında burada blockchain’in en büyük açığını da görmüş oluyoruz. Eğer bütün kullanıcıların en az %51’i ikna edilirse zincir ile ilgili her türlü işlem yapılabiliyor. Fakat bu da dağılmış bir sistem ve bir sürü kullanıcıyı ikna etmek açısından zor. Yukarıda ki ilk örneğe tekrar dönersek bir müşteri elinde bulunan veresiye defterinde bir sayfa eklediğinde diğer müşterilere teker teker gitmeli ve onları ikna etmelidir. 100 müşteriden 51’ini ikna ederse ancak eklediği sayfa kabul olur. Bu da çok riskli olduğundan diğer müşterilerin kabul etmesi düşük bir olasılıktır. Bir başka deyişle blockchain sistemi kullanıcıların dürüst olmasına zorlar ve sistemi güvenilir kılar.

Blockchain sistemini elimden geldiğince anlatmaya çalıştım. İlk yazım olduğundan bazı tecrübesizlikler ve bazı hatalar yapmış olabilirim bunlar için özür dilerim 😊. İyi okumalar esenlikle kalın…

Kaynaklar:

Satoshi Nakamoto “Bitcoin: A Peer-to-Peer Electronic Cash System” 2008

Sourav Sen Gupta Indian Statistical Institute, Kolkata “BLOCKCHAIN The foundation behind Bitcoin”

Adam Back “Hashcash — A Denial of Service Counter-Measure” 2002

https://tr.wikipedia.org/wiki/Blok_zinciri

George Becker “Merkle Signature Schemes, Merkle Trees and Their Cryptanalysis”

Teemu Kanstrén Medium.com “Merkle Trees: Concepts and Use Cases”

--

--