Bitcoin nedir Ⅲ
- Fātih Teoman
- Sep 6, 2022
- 5 min read
Updated: Oct 15, 2023

Herhangi bir boyuttaki veriyi belirli bir boyutta veriye dönüştüren fonksiyona heş fonksiyonu (hash function), heş fonksiyonunun döndürdüğü değerlere de heş veya heş değerleri denir. (Fonksiyon, tanım kümesinin her bir elemanını değer kümesindeki tek bir elemanla eşleyen bağıntıdır. Örneğin, insanlardan doğum günlerine fonksiyondur. Herkesin doğum günü vardır ve herkesin tek bir doğum günü vardır. Doğum günlerinden insanlara fonksiyon değildir çünkü bir günde birden çok doğan olabilir.)
Basit bir heş fonksiyonu yazalım. hf1, tanım kümesi kişilerin isimleri olan ve kişinin ismi a harfi ile başlıyorsa 0, başlamıyorsa 1 değerini döndüren bir heş fonksiyonu olsun. Burada 0 ve 1 heş değerleridir. Bu fonksiyona kaç harfli bir isim girerseniz girin, heş değeri bir basamaklı bir sayıdır: 0 veya 1.
hf1(Ali) = 0, hf1(Alis) = 0
hf1(Mark) = 1, hf1(Linda) = 1
Kriptografik heş fonksiyonu ise şu dört özelliğe sahip bir heş fonksiyonudur:
Bir verinin heş değeri kolayca hesaplanabilir.
Heş değerinden orijinal veriye gitmek imkansızdır.
İki farklı verinin heş değerinin aynı olması ihtimali neredeyse sıfırdır.
Orijinal veride küçücük bir değişiklik, heş değerinde çok büyük bi değişime neden olur.
Biraz daha kompleks bir heş fonksiyonu yazalım. hf2, bir kişinin adını argüman olarak alan ve her harfin alfabedeki sıralarını toplayıp üç basamaklı bir sayı döndüren bir fonksiyon olsun. hf2, bir kriptografik heş fonksiyonu mudur?
hf2 birinci özelliğe sahip. Ali ismini verirseniz kolayca heş değerini hesaplayabiliriz. 𝒜 1'inci harf, 𝓁 14'üncü harf, 𝒾 11'inci harf. Dolayısıyla, hf2(Ali) = 1 + 14 + 11 = 026.
hf2 ikinci özelliğe de sahip. Bir ismin heş değeri 99 derseniz ismin ne olduğunu anlamak imkansızdır. (Aslında bu fonksiyonda imkansız değil çünkü sınırlı sayıda Türkçe isim var ama örnek kolay olsun diye imkansız kabul edelim.)
hf2 üçüncü özelliğe sahip değil. Ayberk ile Berkay aynı heş değerine sahip.
hf2 dördüncü özelliğe de sahip değil. Ali ile Alis isimlerinin heş değerleri çok farklı değil. Zaten heş değeri, hepi topu üç basamaklı bir sayı olduğu için Ali ile Alis ne kadar farklı olabilir ki? Ali'nin heşi 026, Alis'in 047; üç basamağın biri ortak, %33.33 benzerlik var.
Secure Hash Algorithm 256 (SHA-256), Amerika Birleşik Devletleri'nin Ulusal Güvenlik Ajansı [National Security Agency (NSA)] tarafından geliştirilen bir kriptografik heş fonksiyonudur. SHA-256, 256 bitlik bir heş değeri üretiyor ve bu heş değerini 16'lık sayı sistemini kullanarak 64 basamaklı bir sayı olarak ifade ediyor. (16'lık sayı sisteminde 16 sembol var: 0, 1, ..., 9, a, b, c, d, e, f. 16 sayıyı en az 4 bit ile ifade edebiliriz. Yani 2⁴ = 16 olduğundan 4 bit kullanarak 16 farklı kombinasyon yazabiliriz. Mesela, 0000 kombinasyonu 0'ı ifade ederken 1100 kombinasyonu c'yi -10'luk sistemdeki 12'yi- ifade eder: 0000 = 0∙2³ + 0∙2² + 0∙2¹ + 0∙2⁰ = 0, 1100 = 1∙2³ + 1∙2² + 0∙2¹ + 0∙2⁰ = 12.) SHA-256'yı biraz daha iyi anlamak için burayı kullanabilirsiniz: xorbin.com/tools/sha256-hash-calculator. Bir kitabın sadece bir harfini değiştirirseniz heş değeri tamamen değişebilir. Denemenizi öneririm.
Şimdi blok kavramına yakından bakalım. Diyelim ki Alis, Bob'a 1 bitcoin göndermek istiyor. Bu gönderal isteği gönderal havuzuna (memory pool) düşüyor. O sıradaki diğer tüm bitcoin transferleri de bu havuza düşüyor. Bitcoin madencileri önce bu gönderal isteklerini doğruluyor, yani Alis, Bob'a 1 bitcoin göndermek istiyor ama kendisinin 1 bitcoin'i var mı ve Bob'un adresi geçer bir Bitcoin adresi mi diye kontrol ediyorlar. Alis'in, adresini aldığı andan beri tüm transferleri defterde kayıtlı olduğu için madenciler bunu kolayca anlıyor. Sonra doğrulanmış bu gönderal taleplerinden seçtiklerini birleştiriyor ama neye göre ve kaç tane seçtiklerini şimdilik düşünmeyelim. Örneğin, şimdilik başka bir doğrulanmış gönderal isteği Mark'tan Linda'ya 1 bitcoin olsun. Bitcoin madencileri havuzdaki bu iki gönderalı birleştiriyor ve buna blok deniyor, aslında şimdilik sadece blok adayı. İşte adını defalarca duyduğunuz blok bu. Madenci, SHA-256 ile Alis'in Bob'a 1 bitcoin ve Mark'ın Linda'ya 1 bitcoin gönderme isteğini ve bir önceki bloğun heş değerini ve nans (nonce, 'number used once' ifadesinin kısaltması) denen 32 bitlik bir sayıyı argüman olarak alıp yeni bloğun heş değerini hesaplıyor. Yani şöyle: yeni bloğun heşi = SHA-256(Alis'ten Bob'a 1 + Mark'tan Linda'ya 1 + önceki bloğun heşi + nans).
Evet, bir bloğun heş değeri önceki bloğun heş değeri olmadan hesaplanamaz. Her blok kendinden önceki bloğa heş değeri ile bağlı olduğu için bu blok serisine blok zinciri deniyor. Blok zincirine yeni bir blok eklemenin ödülüne blok ödülü deniyor ve şu anda 6.25 bitcoin. Yeni bir bloğu oluşturup blok zincirine ekleyerek blok ödülünü kazanmak isteyen madencilerden hangisi yapacak bu işi? Bitcoin protokolüne göre hedef (target) adı verilen bir sayıdan küçük bir blok heş değerini ilk bulan madenci, bloğu yapar ve blok ödülünü alır. Böylece, bitcoin'lerin nasıl üretildiğini de anlamış olduk. Hedeften küçük bir blok heş değerini ilk bulan madenci bloğu yapar ve diğer madencilere duyurur. Diğer madenciler bloğun geçerliğini kontrol eder, yani gerçekten yukardaki iki gönderal isteği, önceki bloğun heş değeri ve iddia edilen nans ile gerçekten uygun bir blok heş değeri bulunuyor mu? Ezcümle, örneğin 2¹⁶⁷den küçük heş değerine sahip blok kabul edilecekse bunu ilk sağlayan madenci bloğu yapıyor, ağdaki tüm madencilere duyuruyor ve bloğu kabul edilirse o blok, blok zincirine ekleniyor ve kendisi de 6.25 bitcoin'lik blok ödülünü alıyor. (İlk hedef, 3 Ocak 2009'daki hedef, 16'lık sayı sisteminde ffff × 10³⁴, 10'luk sayı sisteminde yaklaşık 2²²⁴ − 1, idi. Bu bilgiyi sonra kullanacağız.)
SHA-256 bir fonksiyon demiştik, yani bir argümana birden fazla değer üretmez. Örneğin, f(x) = 2x² fonksiyonunda her bir x değerinin yalnızca bir fonksiyon değeri olabilir. x = 1 ise f(1), 2'den başka bir değer alamaz. Fonksiyon değeri aynı olan argümanlar olabilir ama birden fazla fonksiyon değeri üreten argümanlar olamaz. Misal, f(1) = f(-1) = 2 olabilir ama f(1) = 2 ve f(1) = 4 olamaz. O halde, yeni bloğun heşi = SHA-256(Alis'ten Bob'a 1 + Mark'tan Linda'ya 1 + önceki bloğun heşi + nans) 2¹⁶⁷den küçükse küçüktür, tamam; küçük değilse ne yapılıyor? Argümana eklenen nans değiştiriliyor! SHA-256 fonksiyonunun herhangi bir argümanla nasıl bir heş değeri üreteceği asla tahmin edilemeyeceği için madenciler çok sayıda nans deneyerek (denemekten başka bir çareleri yok) 2¹⁶⁷den küçük bir heş değeri buluyor ve bloğu yapıyor.
Belirli bir sayıdan küçük bir blok heş değeri bulma durumunu anlamak için Blockchain Demo (andersbrownworth.com) adresindeki Data kısmına "Alis'ten Bob'a 1 + Mark'tan Linda'ya 1 + önceki bloğun heşi" ve Nonce kısmına 100 yazın. 38ec... şeklinde bir heş değeri görmeniz lazım. Bu örnekte amacımız 2²⁴⁰ − 1'den küçük bir heş değeri, yani en az ilk 4 basamağı (en az ilk 16 biti) 0 olan bir heş değeri yakalamak. Şimdi elinizle yeni nanslar girin. Büyük ihtimalle, kaç kez denerseniz deneyin istenen bir heş bulamayacaksınız. Şimdi en alttaki Mine tuşuna basın. Birkaç saniye içinde size en az ilk 4 basamağı 0 olan bir heş döndüğünü göreceksiniz. Bu güne kadar hep yeni bitcoin'lerin üretilmesi için çok zor bir kriptografik problemin çözüldüğünü duydunuz. SHA-256 fonksiyonunun herhangi bir argümanla nasıl bir heş değeri üreteceği asla tahmin edilemeyeceği için madencinin yapması gereken tek şey farklı farklı sayılar denemek; bu kadar. Yani problem yok, deneme var.
Daha teknik bilgi isteyenler Bitcoin'in beyaz kitabına (white paper) bakabilir: https://bitcoin.org/bitcoin.pdf Anlaşılması zor bir kağıt olduğunu, belli düzeyde yazılım, kriptoloji, finansal sistem bilgisi gerektirdiğini söyleyeyim.
Her blok bir önceki bloğa ihtiyaç duyuyorsa ilk blok nasıl oluşturuldu?
コメント