2017’de fiyatının ve de ilginin zirve yapmasıyla, bitcoine olan ilgi gün geçtikçe artıyor. Etrafımızda bitcoini duymayan neredeyse kalmadı. Bitcoinle biraz daha içli dışlı olanlar eminim Proof of Work (PoW)’ü de duymuşlardır. Peki nedir bu Proof of Work? Nasıl çalışır? Neden önemlidir?
Proof of Work, “İş Kanıtı”, aslında blockchain teknolojisinin güvenirliliğinin temel taşlarından biridir. Fakat, Proof of Work’u anlamamız önce “Hashcash” nedir onu bilmemiz gerekiyor. Hashcash’i bilmek için de Kriptografik Özet Fonksiyonları (Cryptographic Hash Function) kabaca anlamış olmamız gerekiyor. Bu yüzden, önce kriptografik özet fonksiyonu ve Hashcash’in ne oldukları ile başlayacagız ve arkasından Proof of Work’u öğreneceğiz.
Kriptografik Özet Fonksiyonu (Cryptographic Hash Function)
Bu fonksiyon herhangi bir uzunluktaki girdiyi alır ve sabit olan bir özet üretir. En önemli özelliği verilen bir girdinin özetini üretmek çok kolay yapılabilirken, verilen bir özetin girdisini bulmak imkansizdir ve girdileri teker teker denemekten baska yol yoktur. Bunun da sebebi özetin sonucunun tamamen rastgele olmasındandır. Girdideki en küçük değişiklik, tamamen farklı bir özet üretmeye sebep olacaktır. En önemli örneklerden biri SHA256’dir ve özetin uzunlugu, isminden de anlaşılacağı gibi, 256 bittir. İnternette bunu hesaplamasını online yapabilen bircok websitesi mevcuttur. Mesela bir örnek yapalım [1] :
merhaba –> SHA256 –> 4c6bcdd55f3153e1939669ab1ec039e4059174dc25abdfcb2f58868849b4d61b
merhabb –> SHA256 –> 8775b90bf257388326699cc40f608b3f49cf5d09288ea8f7b1f6acf2f30c0dfb
Yukarda gördügünüz örnekte, tek bir karakter değişikliği tamamen alakasız başka bir özet üretmektedir. Bu da özeti tamamen tahmin edilemez ve rastgele yapar.
Hashcash
1997’de Adam Back kriptografik özet fonksiyonlarını kullanarak email kullanicilari bir anti-spam mekanizmesi geliştirmiştir [2]. Bu mekanizme şu sekilde calışıyordu: Kullanıcı her email atmak istediğinde, mail sunucusu daha önceden hesapladığı ve özetini bildigi bir kriptografik özet fonksiyonunu kullanıcıya hesaplattırır. Meşru bir kullanıcı için bu özet fonksiyonun hesaplanması, örnegin, bir saniye civarında sürer ve her emailden önce bir saniye beklemek meşru kullanıcıyı çok rahatsız etmez. Fakat eğer kötü niyetli bir kullanıcı bir milyon tane spam emaili atmak isterse 1milyon defa 1 saniye bekleyecek ve bu çok uzun bir süre alacaktır. Hashcash, bu kullanımıyla, kriptografik özet fonksiyonlarının, belli bir işi yaptıgının kanıtı olarak kullanılmasına örnektir.
Aslında kriptografik özet fonksiyonu (özellikle SHA256) ve Hashcash, blockchain ya da bitcoin bulunmadan önce de varolan algoritmalardı. Bitcoinin mucidi, Satoshi Nakamoto, bu algoritmalari bitcoindeki Proof of Work (PoW), “İş Kanıtı”, protokolünü dizayn etmek için kullandı.
Proof of Work (PoW) nedir? Nasıl çalışır?
Bitcoin’de yukarıda anlattıgımız Hashcash temelli Proof of Work kullanılmaktadır. Bu işlem “mining” olarak da bilinir ve şu şekilde gerçekleşir. Daha önceden belirlenmiş özelliklere sahip bir özeti bulmak için minerlar olabilecek her türlü girdiyi deneme yanılma yöntemiyle (brute-force) denerler. İstenilen formatı saglayan özeti ilk bulan miner, blockchain’deki yeni bloğu üretmeye hak kazanır. Gelen işlemleri (transactions) uygunsa, onaylar ve yaptigi işin karşiliği olarak da ödüllendirilir. Özet fonksiyonunun sonucu tamamen rastgele olduğu için bütün minerlarin ödülü alabilme şansı var fakat kim daha çok girdiyi daha hızlı test edebilirse onun şansı o oranda daha yüksek olur. Şu anda bütün minerlarin bir saniyede hesaplayabildigi özet (Hash Rate) trilyonları bulabilmektedir [3].
Blogu üretebilme hakkını alabilmek için bulunan özet fonksiyonunun sonucu belli formatta olmalıdır. Bu format zorluk (difficulty) denilen bir değişkenle ayarlanır. Zorluk degeri her 10 dakikada bir blok üretilebilecek şekilde ayarlanır. Zorluk derecesi arttikca verilen formatta özeti bulmak daha da zorlasmaktadir. Şu anki zorluk derecesi suradan kolaylıkla öğrenilebilir [4].
Zorluk’u şu şekilde daha kolay anlayabiliriz. SHA256’ya herhangi bir girdi verdigimizi düşünelim, 256 bitlik bir özet üretecektir. Bu özetin ilk biti ya 1’dir ya da 0’dır. Bu yüzden ilk bitin 0 gelme ihtimali %50’dir ve ilk biti sıfır olan özeti veren girdiyi en fazla ikinci denemenizde bulabilirsiniz. Eger ilk iki bitin 0 gelmesini istersek ihtimal %25’e düşer. Bu şekilde, eger biri sizden ilk 10 biti sıfır gelen bir özet isterse, denemeniz gereken girdi sayısı hayli artar. En başta istenilen sıfır sayısıyla, zorluk degişkeni orantılıdır ve bu yapılması gereken işle üstel olarak ters orantılıdır.
Şu anki en son yayınlanmış bloğa, bloğa karşılık gelen özete, önceki bloğun özetine ve blokla alakalı daha fazla bilgiye blockchain.info‘dan bakabilirsiniz. Mesela şu anki bloğa [5] beraber bakalım.
Özet: 00000000000000000026a5939af2dd003626aaa559452a414b95eb3cb1144ad4
Görüleceği üzere istenilen özet yukarıdaki gibidir ve ViaBTC adlı miner tarafından bulunmuştur ve miner 12.5 BTC ödül kazanmıştır. Başarılı olan girdi 508263787’dir.
Neden önemlidir?
Blockchain sadece tek bir yönde ekleme yapılabilen zincir şeklinde arka arkaya sıralanmış bloklar şeklinde düşünülebilir. Sırayı korumak için her bir blok önceki bloğun özetini de içerir.
PoW’un önemini anlamak için önce şu örneği düşünelim. Yukarıdaki basit örneği düşünürsek, kötü niyetli birisi Block 1’i değiştirmek istedi diyelim. Block 1’de yapılacak en küçük değişiklik Block 1’in özetini tamamen değiştirecektir ve artık istenilen zorluk seviyesini sağlamayacaktir. Kötü niyetli kişi zorluk seviyesini sağlayan yeni bir özet bulmak zorunda, bunun için bütün PoW işlemini tekrar yapmak zorundadır. Block 1 için uygun özeti bulur bulmaz, Block 0 için de bulması gerekecek, bu sekilde son bloğa kadar bütün uygun özetleri tekrardan bulması gerekecek.
Özetle, yukarıda anlattiğimiz örnekte olduğu gibi, bloklar yayınlandıktan sonra degiştilemez. Degiştirmenin tek yolu vardır. O da son bloga kadar yapılan daha önceki bütün mining ya da özet bulma işlemlerini tekrar etmek. Bu da günümüz teknolojisiyle imkansızdır.
[1]- http://www.xorbin.com/tools/sha256-hash-calculator
[2]- http://www.hashcash.org/papers/announce.txt
[3]- https://blockexplorer.com/api/status?q=getDifficulty
[4]-https://blockchain.info/charts/hash-rate
[5]- https://blockchain.info/block/00000000000000000026a5939af2dd003626aaa559452a414b95eb3cb1144ad4
Yorumlar kapalı.