Yazinin ikinci bolumune baslamadan once ilk bolume gosterilen inanilmaz ilgi icin herkese tesekkur ederim. Bitcoin hakkinda Turkce olarak ciddi bir kaynak sikintisi, bilgi kirliligi ve spekulasyon oldugunu biliyordum ama yazinin goruntulenme sayisinin bu kadar yuksek olmasi gercekten beni bile sasirtti. Saniyorum bu basarida yazinin eksisozluk yazarlari arasinda konusulmasi ve paylasilmasinin da buyuk bir etkisi oldu. Umarim Bitcoin´i merak edip ogrenmeye calisanlar ilk once bu yazi ile karsilasirlar. Simdi isterseniz A'dan Z'ye Bitcoin yazisinin ikinci bolumune baslayalim.
Birinci bolumde, Bitcoin´in "sanal para" olarak bahsedilen yonune giris yaptik. Transferlerin nasil yapildigindan, adres sisteminin(public key) ve bunun sifreleme karsiligi olan(private key) yonlerine degindik. Ayrica sistemin en onemli ve belkide en zor anlasilan yonu olan Blockchain teknolojisinden kisaca bahsettik. Ikinci bolumde buradan devam ederek Blockchain teknolojisini ve buna bagli olarak "Consensus Algorithms", yani mutabakat algoritmasi ile "Bitcoin mining" denilen kazarak Bitcoin cikartma sistemini anlatacagim.
SHA-256
Tam olarak buradan baslamamiz gerekiyor. Bu teknik terimden korkmaniza gerek yok. Bilgisayar programcilari arasinda cok bilinen bu islemi basit bir yontem ile aciklayacagim oncelikle.
SHA-256 bir algoritma. Bu algoritmanin ozelligi verilen bir veriyi standart bir hale ve buyukluge cevirmesi, ve bu islemi yaparken veriyi karistirmasi. SHA-256 ile cevirmek/degistirmek istediginiz veri istediginiz boyutta veya yapida olabilir. Sonuc her zaman ayni buyuklukte ve uzunlukta olur. Bu yapi her zaman 256 bit boyundadir ve 256 hash olarak da tabir edilir. Burada dikkatiniz cekmek istedigim nokta su; SHA-256 uygulamak istediginiz veri asla onceden tahmin edilemez. Islemi uygulamak ve sonucu gormekten baska hicbir yol bulunmamaktadir. Sonuc "random", yani rastgele gorunse bile aslinda temelde matematiksel bir islem sonucu uretilmektedir. Buna bagli olarak, en basta sunulan verideki en kucuk bir degisiklik, cikan 256 hash sonucunun tamamiyle bambaska gorunmesine yol acabilir. Fakat SHA-256 "deterministik" dir. Yani ayni veriyi verdiginizde aldiginiz sonuc asla degismeyecektir. Isterseniz birkac deneme ile bunu daha iyi anlayalim. SHA-256 uygulayacagimiz veri olarak basit bir kelime secelim . Ornegin elma. Simdi bu kelimenin 256 hash sekline bakalim(Bu islem icin web siteleri mevcut. Kendiniz denemek isterseniz google aramasi ile buldugum http://www.movable-type.co.uk/scripts/sha256.html sitesini ziyaret edebilirsiniz).
Gordugunuz gibi hash dedigimiz sonuc 64 karakterden olusan bir sifre gibi gorunuyor. Sectigimiz elma kelimesinin hash sonucu olan bu 64 karakter uzunlugundaki veri deterministik`dir, yani ne zaman elma yazarsaniz alacaginiz sonuc ayni sifre olacaktir. Konunun en ilginc tarafi simdi geliyor. Kelimeyi degistirmeyi birakin, sadece bir harfini, hatta sadece bir harfin buyuk kucuklugunu bile degistirseniz sonuc bambaska bir sifre olarak karsiniza cikacaktir. Kelimeyi elme olarak deneyelim oncelikle:
Simdi de bas harfini buyuk yaparak Elma olarak degistirelim:
Gordugunuz gibi, en kucuk bir degisiklik SHA-256 hash sonucunu bambaska bir hale getirebiliyor. Burada anlatmak istedigim nokta, verinin uzerinde yapilan kucuk degisiklikler ile sonuc arasinda bir baglanti kurmanin imkansiz olmasidir. Bunu bilinmeyenli denklemler gibi dusunebilirsiniz. Daha once yaptiginiz islemler, sonucu henuz bilinmeyen islemler hakkinda size bir ipucu vermez.
Umarim bu basit SHA-256 algoritma aciklamasi anlamaniza yardimci olmustur. Bu basit anlatimin altinda tabiki karmasik matematiksel islemler bulunuyor. Bu mukemmel kritptolama sistemi 1997 yilinda Adam Back adinda Ingiliz bir kripto (sifreleme) uzmani tarafindan bulunmus. Yani daha once de bahsettigim gibi, Bitcoin´in yaraticisi Satoshi Nakamoto basli basina yeni bir sistem yaratmadi, buyuk resmi gorup var olan birkac teknolojiyi mukemmel sekilde birlestirip kusursuz bir sistem yaratmayi basardi.
Simdi bu SHA-256 algoritmasinin Bitcoin´de nasil kullanildigina gelelim.
Sizden bir istekte bulunup sundugum verinin SHA-256 hash karsiliginin ilk hanesinin 0 olmasini talep edeyim. Ornegin elma kelimesinin karsiligi d38a9c3ea00e94dc6ce4bd7d8476ca43fc624ae74abbc4d1f45a71ec7ab18e51 , yani istedigim sonucu karsilamiyor. Sizde elma1, elma2, elma3... seklinde denemeye devam edin. Sonunda basinda 0 olan bir veriye ulasmaniz cok uzun surmeyecektir. Ulasmak istediginiz bu veriye (yani basinda 0 olan SHA-256 hash sonucuna) "target", yani hedef deniyor. Bitcoin´deki adi ise "difficulty level" yani zorluk derecesi.
Peki birisi sonucu buldugunu iddia etse, bunun dogru olup olmadigini kontrol edebilirmiyiz? Tabi ki edebiliriz. Elma543 verisi basi 0 ile baslayan bir sonuc veriyor. Simdi bir deneyip kontrol edin(http://www.movable-type.co.uk/scripts/sha256.html). Simdi size sabit veriye ekledigim numarayi gosterip sonucu sundum. Peki bunu nasil yaptim? Tabi ki deneme-yanilma yontemi ile. Bu sonuca ulasmanin baska hicbiryolu yoktur. Bilgisayarimdaki basit bir program ile defalarca hash uygulayarak bu sonuca saniyeler icinde ulastim.
Peki soruyu ilk iki hanesi 0 olarak diye degistirirsem ne olur? Bu sefer de dogru cevabi bulmak zorlasacaktir. Ayni sekilde ilk uc,dort, bes ve hatta ilk dokuz hanesi olarak degistirirsem milyonlarca kez devam eden hash hesaplamalari yapmak gerekecektir.
Bitcoin´deki kullanimi ayni mantiktir. Blockchain'in bir hesap defteri oldugundan bahsetmistim. Bu deftere girilecek yeni transfer islemleri yazili olarak bir dosya halinde Blockchain agina atilir. Biz buna blok diyoruz, ve bloklar 1MB maksimum buyukluge ulasabilir, ki bu yaklasik 2000 transfer isleminin sigdigi anlamina gelir. Sistemdeki her blok bir basliktan olusur. Bu baslik transfer islemleri, tarih ve saat gibi bazi standart bilgiler icerir. Iste bu, Bitcoin´de SHA-256 uygulanan veridir yani bizim kullandigimiz elma gibi. Ben bu satirlari yazarken agda dolasan son bloga bir goz atalim.
000000000000000000d64aa03ef85d488607fd44cd871e2ae7c611418b89c271
Bu veri su anda Bitcoin aginda aranan sonuc icin kullanilan veri(yani elmamiz). Bunun yanina "Nonce" denilen rastgele bir sayi kullaniliyor. Yani elma kelimesinin yaninda kullandigimiz gibi sayilar. Simdi ilk 16 hanesi 0 olan bu hash sonucu gibi bir sonuca ulasmaniz gerekiyor. Eger simdiye kadar anlattiklarimi anladiysaniz, yukaridaki gibi ilk 16 hanesi 0 olan bir sayi uretmenin ne kadar devasa buyuklukte bir islem gerektirdigini goruyorsunuzdur. Agdaki kullanicilarin saniyede yaptiklari toplam hash islemini yazmaya malesef benim matematigim yetmiyor. Fakat asagidaki grafik bize bir fikir veriyor.
Yukarida ilk 16 hanesi 0 olan gibi bir hash bize sunu soyluyor: Bu sonucu veren Nonce'u bulabilmek icin korkunc buyuklukte islem yapmam gerekiyor. Bu islem oylesine buyuk ki evinizdeki bilgisayarlar ile bunu basarmaniz imkansiz! Bu islem bugun "Bitcoin Miner" denilen makineler tarafindan yapilmaktadir. Bu devasa islem gucune sahip makineler tek bir is icin uretilmis: SHA-256 hesaplamasi yapmak. Buyuk bir akilli hesap makinesi demek yanlis olmaz. Saniyede korkunc buyuklukte hash hesaplamasi yapan bu makinelerin bir tanesi ile bile dogru islemi bulmak gunler hatta aylar surebilir. Asagida bu makinelerin en son cikanlarindan birini gorebilirsiniz.
Ikinci bolumu bu noktada bitiriyorum. Bitcoin Mining(Bitcoin kazma) ve SHA-256 gercekten karmasik ve uzun bir konu. Eminim aklinizda okurken bircok soru olustu. Fakat ucuncu bolume tam bu noktadan devam edip o sorularinizin cogunun cevaplanacagina emin olabilirsiniz.
Kaynaklar:
https://pixabay.com
http://www.movable-type.co.uk/scripts/sha256.html
NOT: YAZININ TAMAMININ VEYA BIR KISMININ IZIN ALINMADAN KULLANILMASI VEYA BASKA BIR PLATFORMDA PAYLASILMASI YASAKTIR.