Yüksek performansli bitcoin madenciligi için SHA256 özet algoritmasinin eniyilenmesi

1. BITCOIN NEDIR

2008’in baslarindan beri, Bitcoin önemli ölçüde kullanicinin ilgisini çekmekte ve bu merkezi olmayan sanal para biriminin popülerligi her geçen gün artmaktadir. Bitcoin tamamen dagitilmis, esten ese bir sistemdir. Bu nedenle merkezi bir sunucu veya kontrol noktasi yoktur. Bitcoin, madencilik adi verilen ve zorlu bir sorunun çözümünü arayan bir süreçle olusturulur. Bitcoin aginda yer alan herhangi bir katilimci, bu soruna çözüm bulmaya çalismak için bilgisayarlarinin islemci gücünü kullanarak madenci olarak çalisabilir. Ortalama olarak her 10 dakikada bir, son 10 dakikalik islemlerin geçerliligini dogrulayan yeni bir çözüm, agda bulunan herhangi bir madenci tarafindan bulunmakta ve yeni bitcoinler ile ödüllendirilmektedir. Aslinda, Bitcoin madenciligi bir merkez bankasinin islevlerini merkezsizlestirmekte ve herhangi bir merkez bankasinin ihtiyacini ortadan kaldirmaktadir. Yillar boyunca madenciler, Bitcoin maden arenasinda ayakta kalabilmek için oldukça yüksek özet islemi yapma gücüne ihtiyaç duymuslardir. Madencilik aygitlarinin özet üretme hizi ve enerji tüketimi Bitcoin madenciliginde kazanç elde etmeyi belirleyen en önemli unsurlardir. Bitcoin madenciligi, tamamen belirli yapidaki girdinin iki kere SHA256 islemine tabi tutulmasina dayanmaktadir ve bu islem için birçok arastirmaci donanim tabanli optimizasyon yapmayi düsünmüstür. Bitcoin madenciligi için spesifik olan durumlar göz önüne alinarak SHA256 algoritmasinin optimizasyonu üzerine çok az arastirma yapilmistir. Bu çalismada literatür taramasi sonucu elde edilen bazi yöntemler uygulanarak SHA256 algoritmasinin hizlanmasi amaçlanmaktadir. Burada yapilacak olan islemler genel SHA256 algoritmasinda bir hizlandirma yapmamasina ragmen Bitcoin madenciligi için önemli gelismeler saglayacaktir. Önerilen iyilestirme metotlari Xilinx Virtex-7 FPGA kartinda gerçeklenmistir ve elde edilen kaynak ve güç tüketimi degerlerine göre bu iyilestirme metotlarinin uygulanabilir oldugu sonucuna ulasilmistir. Tasarlanan sistem sonucunda elde edilen degerlere bakildiginda performans olarak %7’lik bir artis meydana geldigi sonucuna ulasilmistir ve bu degere göre de Bitcoin madenciligi için kullanilan iki SHA256 özet fonksiyonunun islem süresi yaklasik olarak 1.8611 SHA256 islem süresine düsmektedir. Bitcoin madenciliginde en önemli kisitlayici adim olan elektrik tüketiminde de %7’lik bir düsüs olmasi beklenmektedir. 2016 yilinda Bitcoin madenciligi için 400 milyon $’lik elektrik tüketimi yapildigi kaynaklarda belirtilmektedir ve bu performans artisina göre de 28 milyon $’lik elektrik tasarrufu elde edilebilir. Böylelikle özet üretme hizinda bir artis ve enerji tüketiminde bir düsüs saglanabilmektedir.

As a decentralized virtual currrency, Bitcoin has attracted many users since 2008. Bitcoin is a fully distributed, peer to peer system. For this reason, there is no central server or point of control. Bitcoins are created through a process called mining, which involves looking for a solution to a difficult problem. Any participant in the Bitcoin network may operate as a miner, using their computer’s processing power to attempt to find solutions to this problem. Every 10 minutes on average, a new solution is found by someone who then is able to validate the transactions of the past 10 minutes and is rewarded with new bitcoins. Essentially, Bitcoin mining decentralizes functions of a central bank and replaces the need for any central bank. Miners need high computational power for hash processing. The hashing rate and energy consumption of mining devices are the most important things to earn profit in Bitcoin mining. Bitcoin mining fully relies on performing double SHA256 operation with structured input and many researchers thought about making hardware optimization for this process without considering specifies of Bitcoin mining. Only a few researches have been made on SHA256 hashing algorithm optimization focusing on Bitcoin mining application. In this research, to speed up of SHA256 hashing algorithm, implementing the methods proposed in the recent research is aimed. These chniques could provide important improvement on Bitcoin mining, but not for general SHA256 hashing algorithm. The proposed optimization methods have been implemented on the Xilinx Virtex-7 FPGA board, and we see that these improvement methods are applicable based on the obtained source and power consumption values. The values collected from the implemented system show us that 7% increase in performance is achieved (the processing time of two SHA256 hash functions used for Bitcoin mining falls to approximately 1.8611 SHA256 time operation). It is expected that around 7% decrease in electricity consumption, which is the most important restriction step in Bitcoin mining, is possible in 2016, $400 million was spent on electricity consumption for Bitcoin mining and according to this performance increase, $28 million electricity consumption can be saved.

Bitcoin, dijital para ekosisteminin temelini olusturan teknolojilerin ve kavramlarin toplami olarak tanimlanabilmektedir. Bitcoin para birimi, Bitcoin aginda bulunan katilimcilar arasinda iletilebilmekte veya biriktirilebilmektedir. Bitcoin kullanicilari birbiri ile temel olarak Internet yoluyla Bitcoin protokolü üzerinden iletisime geçebilmektedir. Bitcoin protokol yigini açik kaynak yazilimi olarak gelistirilmistir ve akilli telefonlar, bilgisayarlar gibi hesaplama yapabilen tüm cihazlarda dogrudan çalistirilabilmektedir.

Kullanicilar, Bitcoin’i mal alip satmak, insanlara veya kuruluslara para göndermek gibi geleneksel para birimleriyle yapilabilecek herseyi yapmak için ag üzerinden aktarabilirler. Bitcoin teknolojisi, Bitcoin aginin güvenligini saglamak için sifrelemeye ve dijital imzalara dayanan özellikleri içerir. Bitcoinler alinabilir, satilabilir ve ayni zamanda diger para birimlerine de çevrilebilir. Bitcoin’in, Internet için mükemmel bir para biçimi oldugu düsünülmüktedir.

Geleneksel para birimlerinin aksine, Bitcoin tamamen sanaldir. Para olarak, islemlerde göndericiden aliciya sadece deger olarak tanimlanmis bir sanal birim gönderilmektedir. Bitcoin kullanicilari kendilerine ait olan kriptografik anahtar ile Bitcoin aginda yapilan islemin kendilerine ait oldugunu kanitlamakta ve islemden kazandiklari Bitcoin’i harcayabilmekte veya yeni bir aliciya aktarabilmektedirler. Bu anahtarlar genellikle her kullanicinin bilgisayarinda bir dijital cüzdan içine kaydedilir. Bir islemin kilidini açan anahtara sahip olmak Bitcoin harcamanin tek sartidir ve böylelikle sistem tarafindan kontrol tamamen kullanicilarin eline birakilmaktadir.

Bitcoin protokolü, ag üzerindeki madencilik islevini düzenleyen dahili algoritmalari içerir. Madencilerin çözmesi gereken sorunun zorlugu dinamik olarak ayarlanir, böylece ne kadar çok madencinin (ve merkezi islemci birimlerinin) sorunun üzerinde çalistigindan bagimsiz olarak ortalama 10 dakikada bir dogru cevap bulunur. Protokol ayni zamanda her dört yilda olusturulan Bitcoin sayisini yariya düsürecek sekilde ve toplam miktar olarak 21 milyon Bitcoin’i asmayacak sekilde sinirlandirilmistir.

Su andaki pazar degerine bakildiginda 1 BTC (Bitcoin) yaklasik olarak 1095 $ degerindedir ve 6 yil öncesinde sadece 0.2 $ degerine sahipti. Bitcoin, insanlarin onu dijital altin olarak görmesinden dolayi her geçen gün hizli bir sekilde popülerligini artirmaktadir. Günde yaklasik olarak iki yüzbinden fazla Bitcoin islemi yapilmaktadir. Blok madenciligi için önceleri 50 BTC tesvik verilmekte iken bu deger her bir 210000 bloktan sonra yariya indirilerek su an 12.5 BTC = 13687.5 $’a düsmüstür. Bundan dolayi Bitcoin madenciligi insanlar için çok çekici bir potansiyel is olarak görülmektedir. Birçok madenci yeni blogu ilk üretmek ve ödülü kazanmak için ciddi yarislara girmektedir. Bitcoin aginin özet üretme hizi artmasina ragmen Bitcoin üretiminin belirli bir seviyede kalmasi için zorluk orani da artmaktadir.

Yukarida bahsedildigi gibi yeni Bitcoin elde etmek için kullanilan yöntemlerden en önemlisi Bitcoin madenciligi islemidir. Bitcoin madenciliginde temel olarak bir is kaniti probleminin çözülmesi gerekmektedir. Bu problemin çözümü sonucunda, belirli uzunluktaki blok basligi degerinin iki defa SHA256 özet algoritmasindan geçirilmesi ve elde edilen degerin sistem tarafindan saglanan hedef degerinden küçük olmasi ve basinda belirli miktarda 0 bulunmasi gereksinimi saglanmalidir. Agda bulunan madenciler arasinda oldukça ciddi bir rekabet yasanmaktadir ve bu çok sayida islemin yapilmasinda önemli miktarda elektrik tüketimi gerçeklesmektedir. Bundan dolayi, is kaniti probleminin çözümünü hizlandirmak ve elektrik tüketimini daha asagi seviyelere çekmek için bir takim donanimsal iyilestirmeler öneren çalismalar bulunmaktadir. Ancak Bitcoin blok basligi degerindeki bazi alanlarin is kaniti probleminin çözümünü bulana kadar sabit olmasi veya degerinin 0 olmasindan dolayi Bitcoin özelinde bir takim iyilestirmelerin mümkün oldugu literatürde sadece bir çalismada belirtilmistir ve bu çalismadaki iyilestirme metotlarinin herhangi bir donanimsal ya da yazilimsal uygulamasinin mevcut olmadigi saptanmistir.

2. BITCOIN’E GENEL BAKIS

Bitcoin, evrensel ve merkezsizlesmis yani herhangi bir devlet veya diger hukuki varliklara bagli olmayan sanal bir para birimidir. Satoshi Nakomoto, b-para ve HashCash gibi bazi önceki benzer uygulamalari biraraya getirerek tamamen merkezilesmemis bir elektronik para sistemi olusturmustur ve yaptigi çalismayi 2008 yilinda “Bitcoin: Esten ese Elektronik Nakit Ödeme Sistemi” baslikli bir makale ile yayinlamistir. Yayinlamis oldugu bu makalede Bitcoin’in herhangi bir kurulusa veya üçüncü tarafa ihtiyaç duymadan tamamen noktadan noktaya çalisan bir elektronik para birimi oldugunu ileri sürmektedir. Önerisine göre tasarlamis oldugu elektronik ödeme sistemi, eski metotlarda yer alan güven mekanizmasi yerine tam olarak kriptografik kanit üzerine kurulmustur. Bu yaklasim sonucunda iki taraf birbiri ile bir alisveris yaptiginda bu alisverisin dogrulanmasi için herhangi bir üçüncü tarafa ihtiyaç duyulmamaktadir. Önerilen sistem su sekilde gerçeklesmektedir. Paranin el degistirmesi sirasinda her kullanici parayi bir sonrakine gönderirken kendi dijital imzasiyla bir önceki islemin özetini ve bir sonraki sahibin açik anahtarini imzalar. Alici taraf ise bu imzayi gönderici tarafin açik anahtari ile dogrulayarak islemin kendisine ait olup olmadigina karar verebilmektedir.

Bitcoin sistemindeki kilit yenilik, önceki dijital para birimlerinin en önemli zayifligi olarak göze çarpan çift harcama sorununun çözümündedir. Buradaki sözkonusu problem ödeme alanin zincirdeki önceki sahiplerden birinin parayi iki kez kullanmadigini dogrulayamamasidir. Yaygin bir çözüm, merkezi bir otoritenin (banka, merkez) her islemin mükerrer islem olup olmadigini kontrol etmesidir. Her islemden sonra para merkeze geri döner ve yerine yeni bir para piyasaya sürülür. Sadece merkez tarafindan dogrudan piyasaya sürülen paralarin iki kez harcanmadigindan emin olabiliriz. Bu çözümdeki sorun para sisteminin tüm kaderinin her islemin üzerinden geçtigi banka gibi bir merkezi kurulusun elinde olmasidir. Ödeme alan kisinin, paranin önceki sahiplerinin önceden islem imzalamadiklarini dogrulayabilecegi bir yönteme ihtiyaç duyulmaktadir. Bir islemin gerçeklesmedigini kanitlamanin tek yolu tüm islemlerden haberdar olmaktir. Güvenilen bir taraf olmadan bunu basarabilmek için islemler açikça ilan edilmelidir. Bunun içinde, Nakamoto’nun önerisi su sekildedir; Bitcoin sisteminde, bütün para transferleri hangi adresten, ne zaman, ne kadar para gittigini gösteren herkese açik bir muhasebe defteri (ledger) üzerinde toplanir ve bu sekilde hangi hesapta ne kadar para oldugunun bilgisi tutulur ve ayni paranin birden fazla harcanmasi engellenir.

Satoshi Nakamoto’nun icadi, Bizans Generalleri sorunu olarak bilinen, dagitilmis hesaplamada daha önce çözülmemis bir probleme yönelik pratik bir çözümdür. Kisacasi, güvenilir bir merkezi kurum olmaksizin fikir birligini saglamak için Is Kaniti kavramini kullanan Satoshi Nakamoto’nun çözümü, dagitilmis sistemler bilimlerinde bir atilim oldugu ve para biriminin ötesinde genis bir uygulanabilirlige sahip oldugu düsünülmektedir. Kanitlanabilir adil seçimler, piyangolar, varlik kayitlari, dijital noter tasdik ve daha fazlasi için merkezi olmayan aglar üzerinde uzlasmayi saglamak için kullanilabilmektedir.

Bitcoin agi, Nakamoto tarafindan yayinlanan ve birçok diger programci tarafindan revize edilen bir referans uygulamasina dayali olarak 2009’da baslatilmistir. Bitcoin için güvenlik ve esneklik saglayan dagitilmis hesaplama katlanarak artti ve artik dünyanin en büyük süper bilgisayarlarinin isleme kapasitesini astigi görülmektedir. Bitcoin’in toplam piyasa degerinin dolar/bitcoin kuruna bagli olarak 5 ila 10 milyar ABD dolari arasinda oldugu tahmin edilmektedir. Simdiye kadar sistem tarafindan islenen en büyük islem 150 milyon dolar olarak gerçeklestirilmistir ve herhangi bir ücret ödemeden isleme alinmistir.

Bitcoin tamamen dagitilmis, esler arasi bir sistemdir, fakat bütünlük ve isimsizligin saglanabilmesi için kriptografik teknikler de ustalikla uygulanmistir. Bu nedenle merkezi bir sunucu veya kontrol noktasi yoktur. Bitcoinler, madencilik adi verilen ve zor bir sorunun çözümünü arayan bir süreçle olusturulmaktadir. Bitcoin aginda yer alan herhangi bir katilimci (yani Bitcoin protokol yigini kullanan herhangi bir cihaz) bu soruna çözüm bulmaya çalismak için bilgisayarlarinin islem gücünü kullanarak madenci olarak çalisabilir. Ortalama olarak her 10 dakikada bir Bitcoin agindaki herhangi bir kullanici tarafindan son 10 dakikalik islemlerin geçerliligini dogrulayan yeni bir çözüm bulunmakta ve bu kullanici yeni bitcoinler ile ödüllendirilmektedir. Temel olarak, Bitcoin madenciligi bir merkez bankasinin para basma ve dagitma islemini merkezsizlestirir ve herhangi bir merkez bankasinin gereksinimini ortadan kaldirir.

Bitcoin agina yeni katilan bir kullanicinin hangi adimlari gerçeklestirmesi gerektigini su sekilde açiklayabiliriz. Öncelikle, Bitcoinlerini saklamasi için gerekli olan sanal cüzdanini bilgisayarina ya da mobil cihazina kurmalidir. Bu islemi gerçeklestirdikten sonra kendisine ait bir adres degerine, herkesin ulasabilecegi açik anahtara ve sadece kendisine ait olan özel anahtara sahip olmalidir. Bu islemi tamamladiktan sonra Bitcoin ile bir alim gerçeklestirmek için gerekli olan sanal para dört yolla temin edilebilir. Bunlardan en yaygini Bitcoin kullanan bir tanidik veya arkadastan temin edilmesidir, diger yöntemler ise Bitcoin ATM’lerinden döviz/bitcoin kuruna bagli olarak satin alinmasi, kendisine ait bir ürünün veya hizmetin Bitcoin karsiliginda satilmasi ve bazi internet siteleri üzerinden Bitcoin satan kisilere eriserek belli bir ücret karsiliginda alinmasi olarak siralayabiliriz.

***Sekil 2.1 : Bitcoin sisteminde gerçeklesen islemlerin genel görünümü.

Bitcoin aginda yeni bir kullanici, yukaridaki islemleri yaptiktan sonra sahip oldugu Bitcoin ile bir alis veris yapmak istediginde sistemde meydana gelen islemler zincirini Sekil 2.1’de görüldügü gibi su sekilde özetleyebiliriz. Öncelikle ürün veya hizmet alacak kisi bilgisayarinda veya mobil cihazinda bulunan sanal cüzdanini açar ve aldigi hizmet ve ürüne sahip olan kisinin adresini içeren kare kodu tarayarak ilgili kisinin bilgilerine kolayca ulasabilmektedir. Bilgilerine ulastigi kisiye ödemesi gereken miktari ve Bitcoin madenciligi yapan kisiye verilecek olan islem ücretini de ekleyerek sanal para gönderim islemini tamamlar. Artik kullanicinin yapacagi kisim bitmistir ve sonrasindaki islemler Bitcoin sisteminin çalistigi makinalar ve Bitcoin madencileri tarafindan yapilacaktir. Bu asamada gönderilen sanal para miktarinin yaninda cüzdan tarafindan ilgili kisinin özel anahtari yardimi ile dijital imza olusturulur ve bu bilgiler Bitcoin agindaki tüm kullanicilara yayinlanir ve onaylanir. Bitcoin aginda bulunan madencilere bu islem bilgisi geldiginde yeni Bitcoin ödülü kazanabilmek için birçok islemi blok adi verilen islem kümesine dahil ederler. Bundan sonra madenciler is kaniti problemini çözmek için sahip olduklari donanimlarda SHA256 özet algoritmalarini kosturmaktadirlar. Herhangi bir madenci is kaniti problemini çözdükten sonra islemlerin yer aldigi yeni blogu Bitcoin aginda yayinlar. Agda bulunan dügümler tarafindan blok dogrulanir, bu blogu üreten madenci günümüzde 12.5 BTC ile ödüllendirilmektedir ve yeni bir blok olusturulurken önceki blogun özet degeri kullanilir, böylelikle dügümlerin blogu kabul ettikleri anlasilmaktadir. Kabul edilen bloktan sonra yeni bir blok üretildiginde alis veris sonucunda Bitcoini alacak kisi artik islemin geçerli oldugunu anlamakta ve sanal paraya karsilik vermesi gereken ürün veya hizmeti aliciya göndermektedir. Elektronik nakit ödeme sistemi Bitcoinin çalisma prensipleri kisaca bu sekilde gerçeklesmektedir ve her bir islem için ayni hayat döngüsü tekrar etmektedir.

Bitcoin sisteminde önemli olan terimler asagida ele alinmistir.

Islem: Bitcoin islemi, temel olarak alici ve gönderici arasinda gerçeklesen bitcoin transferi olarak adlandirilabilir. Yapilan her bir islem, bloklarda toplanir ve noktadan noktaya Bitcoin aginda yayinlanmadan önce dijital olarak imzalanir. Bitcoin, islem esnasinda takas edilir ve bu islemin güvenligi ECDSA imzalama algoritmasina dayanmaktadir. Alici taraf Bitcoin’in birden fazla kullanilmadigina emin olmak ister, bu problemde yukarida belirtildigi gibi tüm islemlerin listesi tüm noktalara iletilerek saglanmistir.

Blok: Daha önceki bloklarda yer almayan veya bazi Bitcoin islemlerini içeren bir yapidir. Yeni bloklar Bitcoin madenciligi ile üretilmektedir ve önceden kabul edilmis bloklarin olusturdugu blok zincirine eklenmektedir. Islemlerin bulundugu blok bir kisi tarafindan dogrulandiginda blok zincirine dahil olmaktadir. Blok zinciri, Bitcoin’in birden fazla kullanilmasi problemini çözmektedir. Bu arada, blogun en önemli kismi Bitcoin madenciligi için çok önemli olan basliktir. Her bir blok kendinden önce üretilmis olan blogun baslik kisminin özetini içermektedir, böylelikle bir zincir yapisinin olusumu saglanmaktadir.

Is Ispati ve En Uzun Zincir: Bir is ispati, belli bir hedefi gerçeklestiren zaman ve maliyet açisindan zor elde edilen bir veri parçasidir. Elde edilen verinin hedefi tutturdugu çok basit yollarla kontrol edilebilir olmak zorundadir. Bir is ispati üretimi, çok düsük olasilikli bir rastsal süreç olabilir, böylece hedefe ulasmak için ortalama olarak çok sayida deneme ve yanilma yapilmasini gerektirir. Bitcoin’de is ispati, blok basligi özet degerinin baslangiç kisminda belli sayida sifir içermesine kadar blok basliginda yer alan nonce alaninin artirilmasi olarak gerçeklestirilmistir.

Is ispati, blok olusturmak için kullanilir. Her bir blogun verisine ilistirilmis is ispati, bu blogun ag tarafindan kabul edilmesi için zorunlu tutulur. Bu isin zorlugu, Bitcoin aginin ortalama 10 dakikada bir blok olusturmasini saglayacak sekilde ayarlanir. Basarili bir blok olusturmanin olasiligi oldukça düsük oldugundan, agda yer alan ve bir sonraki blok üzerinde çalisan hangi madencinin bu blogu olusturacagi önceden tahmin edilemez.

Bir blogun geçerli sayilabilmesi için, blok özetinin hedef degerinden küçük olmasi gerekmektedir. Eger bu tür blok özet degeri bulunmus ise is kaniti probleminin çözüldügü ve belli bir miktarda is yükünün yapildigi anlasilmaktadir. Her bir blok kendisinden önce gelen blogun özetini içerir, böylece her bir blok bir blok zincirini ve hepsi birlikte yüksek oranda bir is yükünü içerir. Bir blogu degistirmek (ancak bir önceki blogu içeren yeni bir blok olusturarak mümkündür) kendisinden sonra gelen bütün bloklari tekrar olusturmak ve içerdikleri bütün is yükünü tekrar yapmakla mümkün olabilir. Bu yöntemle blok zinciri, üzerinde oynama yapilamayacak sekilde koruma altina alinmistir.

Hedef: Bitcoin toplulugu tarafindan paylasilan ve yayimlanan 256 bitlik bir tam sayidir. Bu deger Bitcoin’de is ispati probleminin çözümünü bulma zorlugunu belirlemektedir. Bir blogun kabul edilebilmesi için Bitcoin protokolü tarafindan bir temel gereksinim; blok basliginin özet degeri mevcut hedef degerinden küçük olmasi olarak tanimlanmistir. Bundan dolayi, hedef degerinin küçülmesi demek Bitcoin madenciligi ile yeni bir blok olusturulmasinin daha da zorlasmasi anlamina gelmektedir. Hedef degerine, son 2016 blogun çikarilmasindan sonra yeni bir deger atamasi yapilmaktadir. Her bir blok yaklasik olarak 10 dakikada bir çikarilmaktadir ve böylelikle 2016 blogun çikarilmasi yaklasik olarak 2 hafta kadar sürmektedir. Bunun sonucunda, her iki haftadan sonra hedef degerinde degisiklik yapilarak isin ispati probleminin zorlasmasi saglanmaktadir.

3. KRIPTOGRAFIK ÖZET FONKSIYONLARI

Elektronik iletisimin, dünyada devrime yol açtigi konusunda kimsenin herhangi bir süphesi bulunmamaktadir. Dünyada var olan iletisim, kagitlara yazilan mektuplarin postaneden gönderilmesinden, anlik olarak haberlesmeyi saglayan mail, sohbet siteleri veya Facebook, Google+ gibi uygulamalara dogru gelisim göstermistir. Geleneksel olarak posta yoluyla yapilan pek çok iletisim faaliyeti artik elektronik yöntemlerle yapilmaktadir. Bu etkinlikler arasinda belge, resim, ses ve video aktarimi bulunmaktadir.

Taklit etme gibi dolandiricilik faaliyetlerinden kaçinmak için iletisimin güvenli olmasi gerekir. Güvenli bir iletisim saglamak için, bir kurum tarafindan transkript gibi olusturulan belgeler dijital olarak imzalanabilir. Dijital imza birtakim sifreleme ilkelerini kullanmaktadir. Kriptografik özet fonksiyonlari, bilgi güvenligini saglamak için temel yapi tasi islevi görmektedir. Kriptografik özet fonksiyonlari kendi basina tam bilgi güvenligi saglamaz, ancak bilgi güvenligini saglayan programlarda kritik role sahiptirler. Bu nedenle, bilgi güvenligi projelerinde kriptografik özet fonksiyonlari genel güvenligi ve hesaplama verimliligini önemli ölçüde etkilemektedir.

Kriptografik özet fonksiyonu, herhangi bir uzunluktaki bir girdi verisini sabit uzunluktaki bir çiktiya dönüstüren bir islem bütünüdür. Kriptografik özet fonksiyonlari, bilgisayar programlarinda kullanilan siradan özet fonksiyonlarindan biraz farklidir, ancak basit olmasi için tezin geri kalan kisminda özet fonksiyonlari olarak adlandirilacaktir. Bir özet fonksiyonunun çiktisi belirli özelliklere sahip olmalidir. Bu özellikler sirasi ile ön görüntü direnci (pre-image resistance), ikinci ön görüntü direnci (second pre-image resistance) ve çarpisma direnci (collision resistance) olarak adlandirilmaktadir. Ön görüntü direnci, özet fonksiyonunun tek yönlü bir fonksiyon olmasi gerektigini belirtir. Yani, bir saldirganin belirli bir özet degerinden orjinal verileri belirlemesi mümkün olmamalidir. Ikinci ön görüntü direnci, saldirgana verilen herhangi bir mesaj için, verilen mesajdan farkli ve ayni özete sahip baska bir mesaj bulunmasi zor olmalidir. Çarpisma direnci, her mesajin benzersiz bir özet degerine sahip olmasi ve bir saldirgan tarafindan ayni özet degerine sahip iki mesaj bulmasinin zor olmasi demektir.

Matematiksel olarak, bir özet fonksiyonu (H) asagidaki gibi tanimlanir:

H:{0,1}* -> {0,1}n

Bu gösterimde, {0,1}* herhangi bir uzunluktaki binary degerlere sahip elemanlarin kümesini belirtirken, {0,1}n uzunlugu n olan binary degerlere sahip olan elemanlarin kümesini göstermektedir. Böylece, özet fonksiyonu binary degerlere sahip olan herhangi bir uzunluktaki eleman kümesini sabit uzunluktaki eleman kümesine eslemektedir. Benzer sekilde, bir özet fonksiyonunun özellikleri asagidaki gibi tanimlanabilir:

x € {0,1}*; y € {0,1}n

1- Ön görüntü direnci: y = H(x) verildiginde, x degerini bulmak zor olmalidir.

2- Ikinci ön görüntü direnci: x degeri verildiginde H(x) = H(x’) olacak sekilde x’den farkli olarak bir x’ degeri bulunmamalidir.

3- Çarpisma direnci: birbirinden farkli olan x ve x’ degerleri için H(x) = H(x’) olacak sekilde bir x, x’ çiftinin bulunabilirligi oldukça zor olmalidir.

Ikinci ön görüntü direnci ve çarpisma direncinin özellikleri benzer görünebilir ancak fark, ikinci ön görüntü direnci durumunda saldirgana bir mesaj (x) verilir, ancak çarpisma direnci için herhangi bir mesaj verilmez, ayni özet degerini veren herhangi bir iki iletiyi bulmak saldirgana birakilmistir. “Zor” veya “bulmak zor” ifadesi ile bilgisayarin bu islemi gerçeklestirmesi için uzun zamana ihtiyacinin oldugu ve çok miktarda bellek gereksiniminin oldugu ima edilmektedir. Örnegin, bir mesajin özet degerinden hesaplanabilmesi için bugünün teknoloji standartlarina sahip bir bilgisayar için uzun yillar ve oldukça yüksek miktarda bellek gerekmektedir. Dolayisiyla, yapilan hesaplamanin uygulanamaz oldugu kabul edilmektedir. Bilgisayarlarin islem gücü, on yillar boyunca arttikça, önceden güvenli olarak kabul edilen (ön görüntü, ikinci ön görüntü ve çarpisma direncinin tüm özelliklerine sahip olan) bazi özet fonksiyonlarinin artik kirilmis oldugu kabul edilmektedir. Hesaplama gücü arttikça ve özet fonksiyonlarinin kripto analizi gerçeklestirildiginde, bazi özet fonksiyonu standartlari da zayif oldugu için revize edilmistir. Güvenli ve hizli bir sekilde çikti üreten özet fonksiyonlarina sahip olmak istenmektedir.

Uygulamada, herhangi bir uzunluktaki mesaj özet fonksiyonuna girmemektedir, maksimum degeri vardir. Bununla birlikte, elde edilen özet degerinin uzunluguyla karsilastirildiginda, girdi mesajinin uzunlugu rastgele sayilabilir. Bir özet fonksiyonunda, gelen mesaj sabit bir boyuttaki bloklara bölünür (tüm ileti blok boyutundan küçük veya esit olmadigi sürece). Bu parçalama sürecinde, ileti herhangi bir kalan veya artik bitler olmaksizin çok sayida bloga sigmasi için genellikle genisletilir. Blok boyutu (yani, bir blok içinde bulunan bit sayisi) özet fonksiyonuna baglidir. Bir iletiyi genisletmek, iletinin sonuna belirli sayida sifir ve biri ekleyerek olusmaktadir. Genisletme isleminde, ayni zamanda mesaj uzunlugunun degeri genisletme bitleri içerisine gömülmektedir. Özet fonksiyonuna bagli olarak genisletme bitlerine baska bilgiler de gömülebilmektedir. Genisletme islemi gerçeklestirilmis ve bloklara ayrilmis mesaj üzerinde özet fonksiyonu yinelemeli bir sekilde çalismaktadir. Ilk mesaj blogu özet fonksiyonuna girilir ve ilgili özet degeri elde edilir. Ikinci mesaj blogu daha sonra birinci blogun özet degeri ile birlikte girilir. Böylece, ilk mesaj blogundan gelen özet degere bir zincir veya ara deger adi verilmektedir ve ikinci mesaj blogunun sikistirilmasi için baslangiç degeri olarak özet fonksiyonun girisine geri beslenir. Ilk mesaj blogunun sikistirilmasi için kullanilan baslangiç degeri, belirli bir özet fonksiyonu için sabittir ve siklikla baslatma vektörü olarak adlandirilir. Son mesaj blogu sikistirildiginda elde edilen özet deger, daha sonra bloklara bölünmüs olan mesajin özeti olarak adlandirilir [9].

3.1 Özet Fonksiyonlarinin Uygulamalari

Daha önce belirtildigi gibi, özet fonksiyonlari bilgi güvenligi uygulamalarinda yaygin olarak kullanilmaktadir. Bunlar arasinda dijital imzalar, mesaj dogrulama kodlari (MAC) gibi uygulamalar yer almaktadir. Parola depolama gibi özet fonksiyonlarinin basit uygulamalari da bulunmaktadir. Parola depolama uygulamasinda, ilk giriste bir kullanici tarafindan girilen parola bilgisayar sisteminde depolanmaz, bunun yerine parolanin özeti depolanmaktadir. Daha sonraki zamanlarda sisteme giris yapmak için kullanicinin parolayi girmesi gerekir, sistem parolanin özetini elde eder ve onu depolanmis özet degeri ile karsilastirir. Bir eslesme varsa sisteme erisim için izin verilir aksi takdirde kullanicinin erisimi kesilir. Bu tür bir uygulamanin avantaji, eger bir saldirgan sistemin depolama aygitlarina erismeyi basarirsa sadece parolalarin özet degerlerine ulasabilir ve özet fonksiyonunun tek yönlü olmasindan dolayi esas parola degerlerini elde etmesi önlenmis olur.

Dijital imzalarda özet fonksiyonlari hiz bakimindan verimliligi artirmak ve uygulamanin bant genisligini azaltmak için kullanilmaktadir. Dijital imza, bir mesajin özgünlügünü göstermek için bir araç saglamaktadir ve sifreleme/sifre çözme gibi asimetrik anahtarlarin kullanilmasina dayanmaktadir. A tarafi bir mesaji özel anahtarla sifreliyorsa, o mesajin sifresini çözebilen tek anahtar A’nin açik anahtaridir. Tersine, bir mesaj A’nin genel anahtari ile basarili bir sekilde çözülürse, mesajin yalnizca A’nin gizli anahtariyla sifrelenmis olabilecegi veya baska bir deyisle A’dan gelen mesaj oldugu sonucuna ulasilabilmektedir. A’nin özel anahtari ile mesajin sifrelenmesi islemi mesajin imzalanmasi olarak adlandirilmaktadir. Bununla birlikte, pratikte mesajin kendisi imzalanmaz, mesajin özeti hesaplanir ve özet degeri imzalanir. Bunu yapmanin avantaji, özet degerinin sabit bir uzunluga sahip olmasindan dolayi asimetrik sifreleme ünitesine beslenen girdi, orijinal mesajin boyutundan bagimsiz olarak sabit bir uzunluga sahiptir. Dolayisiyla girdinin bant genisligi sabitlenmistir ve asimetrik bir anahtarla sifreleme süreci hesaplama açisindan yogun bir islemdir ve böylelikle girdi boyutu düsürülerek sifreleme islemi daha hizli bir sekilde gerçeklestirilmektedir.

Alinan bir mesajin gönderilen mesajla ayni oldugunu dogrulamak için bir mesaj dogrulama kodu (MAC) kullanilabilir. Baska bir deyisle, bir iletinin bozuldugunu veya aktarim sirasinda degistirilmedigini dogrulamak için kullanilabilir. Bununla birlikte, üçüncü taraf gönderenin kimligini dogrulamak için bu tür bir islemi kullanamaz, çünkü MAC gönderen ya da alici tarafindan hesaplanabilir. MAC, bir anahtarli özet islemi ile hesaplanir. Bir anahtarli özet islemi, girisinde mesaja ek olarak bir anahtar da içerir. Yapilan islemin basarili olmasi anahtarin gizliligine baglidir. Gönderen ve alici ayni anahtari kullanmali, ancak anahtari üçüncü taraflardan gizli tutmalidir. Bir MAC olusturmak için, gönderen mesaji ve anahtari, HMAC veya UMAC gibi bir algoritma tarafindan belirtilen sekilde özet fonksiyonuna beslemelidir. Olusturulan MAC ve mesaj daha sonra aliciya gönderilir. Mesajin degistirilmedigini dogrulamak için, alici mesaj girdisini ayni algoritmaya sahip olan özet fonksiyonuna besleyerek MAC degeri üretir ve alici tarafindan üretilen MAC, gönderenden alinan MAC ile ayni ise alici gelen mesajin herhangi bir nedenden dolayi degismedigi sonucuna ulasmaktadir. Bu tür bir uygulama bir mesajin bütünlügünü dogrulamak için kolay bir yol saglar [9].

3.2 SHA256 Özet Fonksiyonunun Genel Yapisi

SHA256 özet algoritmasinin ayrintili bir açiklamasi resmi NIST standardinda bulunabilir. Sekil 3.1’de SHA256 özet algoritmasinin genel bir görünümü verilmistir. Bu bölüm, Bitcoin ekosisteminin omurgasini olusturan SHA256 algoritmasina genel bir bakis sunar. Bitcoin islemlerinin bütünlügü, çarpisma direncine ve SHA256 özet algoritmasinin ön görüntü direncine baglidir. Bitcoin protokolünde SHA256 özet algoritmasiniin iki defa hesaplandigini unutmamak önemlidir.

***Sekil 3.1 : SHA256 özet algoritmasinin genel görünümü.

16 adet 32 bit kelime dizisi olarak temsil edilen 512 bitlik bir blok boyutu vardir. Bu 512 bitlik blok, mesaj planlayicisi yardimiyla 32 bitlik kelimelere (Wt) dönüstürülerek sikistirma fonksiyonuna beslenmektedir. Bunlarin her ikisi de daha sonra ayrintili olarak açiklanacaktir. Mesaj planlayici, 512 bit mesaj blogunu altmis dört adet 32 bitlik kelime kümelerine genisletir. SHA256 özet algoritmasi içerisindeki islemler, 32 bit uzunluguna sahip A, B, C, D, E, F, G ve H sekiz çalisma degiskeni üzerinde gerçeklestirilir. Dolayisiyla, SHA256 özet algoritmasinin kelime uzunlugu 32 bittir. Bu çalisma degiskenlerinin degerleri her turda hesaplanir ve bu süreç 64 döngü tamamlanincaya kadar devam etmektedir. Önemli noktalardan birisi, SHA256 özet algoritmasindaki tüm eklemelerin 232 modunda gerçeklestirildigine dikkat edilmelidir.

SHA256, ilk mesaj blogu için sabitlenmis 256 bitlik baslatma vektörü (IV) kullanmaktadir. Ilk 64 döngü tamamlandiktan sonra elde edilen deger bir sonraki mesaj blogunun özet degeri hesaplanirken baslatma vektörü olarak isleme dahil edilir, bundan dolayi ilk özet degeri ara deger olarak adlandirilmaktadir. Davies-Meyer yapimi kullanilarak insa edilmistir ve 64 döngü sonunda elde edilen çikti degerine baslatma vektörü eklenmistir. Böylece, mesajin sikistirilmasi islevinin 64 döngüsü tamamlandiktan ve baslatma vektörünün eklenmesinden sonra algoritma tarafindan 256 bitlik bir ara mesaj özeti üretilmistir. Tüm mesaj bloklarinin özet degerleri alindiktan sonra, girilen mesajin son mesaj özetini olusturan 256 bitlik bir deger elde edilir. Bitcoin protokolünde, saldirganlarin öngörülen sifir sayisiyla baslayan yeni bir blok olusturmalarinda kisayol bulmalarini zorlastiran algoritma SHA256 özet fonksiyonudur, çünkü SHA256 fonksiyonu çig özelligine sahiptir, yani girdilerde meydana gelebilecek küçük bir degisiklik çiktida tahmin edilemez derecede bir degisime neden olmaktadir. Bir sonraki bölümde SHA256 özet algoritmasinda var olan fonksiyonlarin detaylarindan bahsedilecektir.

3.3 SHA256 Özet Fonksiyonunun Detaylari

SHA256 özet algoritmasi islemi, üç farkli isleme bölünebilir. Bunlar asagida sirasiyla su sekildedir.

Ön isleme: özet algoritmasi tarafindan beklenen 512 bitlik blogun eksik kisimlari 0 ile genisletilmektedir ve 512 bitten daha uzun olan mesajlar, 512 bitlik bloklara bölünerek fonksiyona beslenmektedir.

Mesaj planlayici: 16 kelimelik giris mesaj blogundan altmis dört adet kelime üreten fonksiyondur.

Sikistirma fonksiyonu: her döngüde mesaj planlayicidan gelen mesaj bagimli kelimenin gerçek özet islevinin yapildigi fonksiyondur.

SHA256 ön isleme

SHA256 ön isleme, mesaj planlayicisi ve sikistirma fonksiyonu uygulanmadan önce yapilmasi gereken ilk adimdir. Ön isleme safhasinda asagidaki üç görev sirasiyla yerine getirilir:

*Mesaj, 512 bitin kati olacak sekilde genisletme islevine tabi tutulur,

*512 bitten daha uzun olan mesajlar, 512 bitlik mesaj bloklarina bölünür,

*Baslangiç özet degeri ayarlanir.

Mesajlarin 0 ile genisletilmesi

Önce özeti alinacak mesajin genisletilmesi gerekmektedir. Özeti alinacak mesajin, SHA256’nin blok boyutu olan 512 degerinin tam kati haline getirilmesi için genisletme islemi yapilmaktadir. Simdi mesaj uzunlugunun 1 bit oldugunu düsünürsek, mesajin sonuna bir bit 1 eklenir ve öncesine de k adet 0 eklenerek mesajin 512 degerinin tam kati olmasi saglanir. Burada, Esitlik (3.1)’deki denklemin negatif olmayan en küçük çözümüdür:

l + 1 + k = 448 mod 512

Buradan genisletme için kaç bitin gerekli oldugu bulunabilir. Böylece özet fonksiyonunun girdisi elde edilir.

Genisletilmis mesajin bloklara bölünmesi

Mesaj yukarida açiklanan mantikla genisletildikten sonra, mesaj planlamasinin ve özet hesaplamalarinin baslatilabilmesi için mesaj, N adet 512 bitlik bloklara ayristirilir.

Baslangiç özet degerinin ayarlanmasi

Özet degerini hesaplamaya baslamadan önce, Sekil 3.2’de belirtilen 32 bitlik kelimeler baslangiç özet degeri olarak ayarlanir.

***Sekil 3.2 : Baslangiç özet degerlerinin görünümü.

Bu 8 kelime degerinin çikis noktasini bilmek ilginçtir. Ilk 8 asal sayinin kare köklerinin kesirli kisimlarinin ilk 32 biti alinarak elde edilmektedir. Bu ilk özet degeri, önceki bölümde açiklandigi gibi SHA256 algoritmasi için baslatma vektörü olarak görev yapmaktadir.

4. BITCOIN MADENCILIGI VE TEMEL ISLEMLERI

Bitcoin madenciligi, temel olarak blok basliginin çift SHA256 algoritmasi ile elde edilen özetinin baslangiç kisminda belli sayida sifir olmasini inceleyen süreçtir. Özet degerinin baslangiç kismindaki sifirlarin sayisi hedefin mevcut degerinin zorluk degerine bölünmesi ile elde edilir. Temel olarak yapilan islem blogun baslik kismina çift SHA256 algoritmasi uygulanarak hedeflenen degeri bulmaktir. Bu islemin detaylari asagida ele alinacaktir.

4.1 Bitcoin Blok Basligi Özet Algoritmasi

Madencilik aygitlari, yeni bir blok bulmak için Bitcoin Blok Basligi Özet Algoritmasini kullanir ve böylelikle yeni Bitcoinler çikarilir. Tam olarak teknik bir perspektiften bakildiginda, Bitcoin madencilik aygitlari sürekli bir sekilde blok basliginin çift SHA256 algoritmasini kullanarak özet degerini üretmekte ve Bitcoin agi tarafindan kabul edilmesini beklemektedir. Bu bölümde Bitcoin blok basliginin bilesenlerinin ne oldugu ve nasil olusturuldugu konulari üzerinde durulacaktir. Bitcoin blok basligi yapisi, SHA 256 algoritmasina giren verinin nasil özetlendigi konusunu açiga kavusturmaktadir. Esasinda tam olarak denilmek istenen özet fonksiyonuna giren verinin madencilik islemi boyunca ne kadarinin sabit kaldigi, çok az degistigi ve siklikla degistiginin belirlenmesidir.

Bitcoin blok basligi özet algoritmasi renk kodlamali yaklasim ile anlatilacaktir. Bitcoin madenciligi sürecinde yer alan degerlerin degisiminin belirlenmesinde üç farkli renk olan beyaz, gri ve siyah kullanilmistir. Beyaz renk süreç boyunca degerin ya hep veya önemli bir süre zarfi içerisinde sabit oldugunu belirtmektedir. Gri renk, degerin degistigini fakat çok nadir bir sekilde oldugunu belirtmektedir. Siyah renk ise degerin sürekli olarak degistigini (örnegin her özet hesaplamasinda) belirtmektedir. Bitcoin agi tarafindan kabul edilen özet degerini elde etmek için girdi verisi olan Bitcoin baslik degerinin yapisi ve SHA256 özet algoritmasina nasil beslendigi Sekil 4.1’de görülmektedir.

***Sekil 4.1 : Bitcoin blok basligi özet algoritmasi.

Sekil 4.1’de görüldügü üzere Bitcoin madenciliginde blok basligi üç adet SHA256 özet algoritmasi islemine tabi tutulmaktadir. Bu üç özet fonksiyonu sirasiyla SHA2560, SHA2561, SHA2562 olarak tanimlanmistir. Blok basliginin boyutu 512 bitten büyük oldugu için iki özet fonksiyonuna SHA2560 ve SHA2561 beslenmistir. SHA2560, ilk 512 bitlik blogu girdi olarak almistir ve 64 döngü sonucunda ara mesaj özeti H0 üretilmistir. SHA2560 256 bitlik ve önceden tanimlanmis baslatma vektörünü kullanmaktadir. Bu önceden tanimlanmis baslatma vektörü sabit oldugu için beyaz renk ile gösterilmistir. H0 ara mesaj özetinin hesaplanmasi tamamen girdilere bagli ve girdilerinde gri renkli olmasindan dolayi H0 degeri de gri renk ile gösterilmistir.

SHA2561, baslatma vektörü olarak H0 ara mesaj özetini girdi olarak ise diger kalan 512 bitlik blogu kullanmaktadir. Girdi blogunda yer alan nonce degeri siyah ile simgelendiginden SHA2561 özet fonksiyonunun çiktisi olan H1’de siyah ile gösterilmistir. Blok basliginin özetinin hesaplanmasi islemi burada bitmemektedir. SHA2561 fonksiyonunda üretilen mesaj özeti bir baska özet fonksiyonu olan SHA2562 fonksiyonuna beslenmektedir. SHA2562 özet fonksiyonu, mesaj girdisi olarak 256 bitlik H1 degerini almakta ve 512 bitlik blok haline getirmek için uygun bir genisletme islemi kullanilmaktadir. Baslatma vektörü olarak daha önce SHA2560 tarafindan kullanilmakta olan ve beyaz renk ile simgelenmis önceden tanimlanmis baslatma vektörü kullanilmaktadir. SHA2562 özet fonksiyonunun 64 döngüsü sonucunda son özet degeri olan H2 üretilir ve girdilere bagli olarak siyah renk ile simgelenir. Sonrasinda H2 degerinin Bitcoin protokolünün mevcut kisitlamalarini karsilayip karsilamadigina bakilir. Eger H2 degeri mevcut kisitlamalari sagliyorsa, dogru nonce degeri ile birlikte elde edilen blok kabul islemi için hemen Bitcoin aginda yayimlanir. Bunun sonucunda Bitcoin madenciliginin temel olarak asagida yer alan hesaplamayi degisken olan nonce degeri ile birlikte milyarlarca defa yapilmasi olarak tanimlayabiliriz.

H2 = SHA256(SHA256(blok basligi))

Burada akillara su soru gelebilir; sonda yapilan SHA256 islemi niçin ek olarak yapilmistir. Bir anlatima göre Satoshi Nakamoto’nun çift SHA256’yi tercih etmesinin nedeni uzunluk genisletme saldirisini önlemek oldugu ileri sürülmüstür. SHA256 özet algoritmasi, Merkle-Damgard yaklasimini kullanmaktadir ve bu saldiriya karsi açiktir. Bu saldiri su sekildedir; eger saldirgan tarafindan SHA256(x) biliniyorsa, x girdisi hakkinda bir bilgiye sahip olmadan SHA256(x||y)’yi hesaplayabilir. Bitcoin protokolünün bu saldirinin zararina karsi ne kadar duyarli oldugu tamamen bilinmemesine ragmen Satoshi Nakamoto’nun güvenligi saglamak için çift SHA256 kullandigi düsünülmektedir. Baska bir söyleme göre çift özet fonksiyonu ile 128 döngülük SHA256 elde edilmekte ve gelecekte SHA256’ya karsilik gelistirilebilecek saldirilara karsilik sistemin güvenilirliginin saglandigi ileri sürülmektedir.

4.2 Bitcoin Blok Basliginin Detaylari

Blok basligi, madencilik islemi sirasinda arada bir güncelleme ihtiyaci duymaktadir. Mevcut olan islemler blok basliginda degil, blogun ana yapisinda yer almaktadir. Blok basliginda ise dolayli olarak islemlerin bir özet degeri olan Merkle kökü yer almaktadir. Bu akilci metot ile islemlerin bütünlügünün saglanmasi yaninda blok basliginin blokta yer alan islemlerin sayisindan bagimsiz olmasi temin edilmektedir. Blok basliginin içerdigi alanlar su sekilde tanimlanabilir;

Versiyon: 32 bitlik bu deger, Bitcoin yaziliminin yeni bir blogu üretmek için takip ettigi kurallarin versiyonunu temsil etmektedir. Bu degerin sabit oldugu bilindigi için Çizelge 4.1’de beyaz renk ile kodlanmistir.

Önceki blogun özet degeri: Bitcoin agi tarafindan kabul edilmis blogun 256 bitlik özet degeridir. Yeni blok basliginda bu deger yer alarak madenci tarafindan en uzun blok zincirinin genisletilmesi amaçlanmaktadir. En son kabul edilen bloktan sonra madenci is kaniti problemini ilk olarak çözmek için denemelere baslar. Is kaniti probleminin çözümünde çesitli madenciler arasinda ciddi bir yaris mevcuttur ve her birisi problemi çözen ilk kisi olmayi ve Bitcoin agina çözümü yayimlamayi amaçlamaktadir. Eger yayimlamis oldugu çözüm Bitcoin agi tarafindan kabul edilirse buna karsilik 12.5 BTC ödül kazanmaktadir. Bitcoin sistemi temel olarak yaklasik her 10 dakikada bir ag tarafindan blok üretilmesi prensibine göre tasarlanmistir. Bundan dolayi yaklasik olarak bir önceki blogun özet degeri 10 dakikada bir güncellenmelidir ve bu nedenle bu alan gri olarak kodlanmistir.

***Çizelge 4.1 : Bitcoin blok basliginin görünümü.

Merkle agaci: Bitcoin blok zincirindeki her blok, bir Merkle agacini kullanarak blogun tüm islemlerinin bir özetini içermektedir. Ikili özet agaci olarak da bilinen bir Merkle agaci, büyük veri kümelerinin bütünlügünü verimli bir sekilde özetlemek ve dogrulamak için kullanilan bir veri yapisidir. Merkle agaçlari kriptografik özet fonksiyonlarini içeren ikili agaçlardir. Agaç terimi bilgisayar bilimlerinde dallanmis bir veri yapisini tanimlamak için kullanilmaktadir, ancak bu agaçlar genelde asagidaki örneklerde görülecegi gibi bas kisminda kök ve semanin alt kisminda yapraklardan olusmaktadir.

Merkle agaçlari, Bitcoin sisteminde yer alan herhangi bir blogun tüm islemlerini özetlemek için kullanilmaktadir ve tüm islem setinin genel bir parmak izi üretilmektedir ve bir islemin bir bloga dahil edilip edilmedigini dogrulamak için çok verimli bir süreç saglamaktadir. Bir merkle agaci, dügüm çiftlerinin yinelemeli olarak özetinin alinmasi ile olusmaktadir ve bu islem sonucunda en son tek bir özet degeri kalmaktadir ve bu degere de Merkle kökü adi verilmektedir. Bitcoin sisteminde Merkle agaçlari için kriptografik özet fonksiyonu olarak SHA256 kullanilmaktadir ve iki kez uygulanmasindan dolayi çift SHA256 olarak adlandirilmaktadir. N adet verinin özeti alinarak bir Merkle agaci içerisinde depolandiginda, agacin içerisine herhangi bir veri ögesinin eklenip eklenmediginin kontrolü en fazla 2*log2(N) adimda gerçeklestirilebilir, bundan dolayi Merkle agaci oldukça verimli bir veri yapisi olarak göze çarpmaktadir.

Merkle agaci, asagidan yukariya dogru insa edilmistir. Asagidaki örnekte, seklin alt kisminda gözüken ve Merkle agacinin yapraklarini olusturan dört islem A, B, C ve D ile basliyoruz. Islemler merkle agacinda depolanmaz, daha ziyade verinin özeti alinarak ortaya çikan özet degeri her bir yaprak dügümünde HA, HB, HC ve HD olarak depolanir.

HA = SHA256(SHA256(Transaction A))

Yaprak dügümlerin ardisik çiftlerinin sahip olduklari özet degerleri birlestirilerek tekrar yinelemeli olarak özet degeri alinir ve bu deger bir ana dügümde depolanir. Örnegin, üst dügüm HAB’yi olusturmak için, çocuklarinin iki 32 baytlik özeti, 64 baytlik bir veri olusturmak üzere birlestirilir. Bu veri üst dügümün özet degerini üretmek üzere çift SHA256 fonksiyonuna beslenmektedir.

HAB = SHA256(SHA256(HA + HB))

Islem, merkle agacinin en üstünde yalnizca bir dügüm bulunana kadar devam etmektedir ve bu dügüm merkle kökü olarak bilinmektedir. Bu tür bir veri yapisinin görünümü Sekil 4.2’de verilmistir. Bu 32 baytlik özet, blok basliginda saklanir ve dört islemin tüm verisini özetlemektedir.

***Sekil 4.2 : Bir Merkle agacindaki dügümlerin hesaplanmasi.

Merkle agaci ikili bir agaç oldugundan, çift sayida yaprak dügümü gerektirir. Eger özetlenecek islem sayisi tek sayida ise, son islemin özet degeri tekrarlanarak çift sayida yaprak dügümü olusturulmaktadir ve bu tür yapi dengeli agaç olarak adlandirilmaktadir. Bu tür bir durumun oldugu merkle agaci Sekil 4.3’de gösterilmistir ve çift sayida yaprak dügümü olmasi için C isleminin özet degeri tekrarlanmistir.

***Sekil 4.3 : Çift sayida yaprak dügümünün olmasi için bir veri elemaninin çogaltilmasi.

Dört islemden bir agacin olusturulmasi için kullanilan yöntem, herhangi bir boyuttaki agaçlari olusturmak için genellestirilebilir. Bitcoin’de yalniz bir blok içerisinde binden fazla islem bulunmaktadir ve bu islemlerin özet degeri alinarak benzer sekilde sadece 32 baytlik bir degere sahip olan merkle kökü elde edilmektedir. Sekil 4.4’de 16 islemden olusan bir agaç yapisi görülmektedir. Merkle kökü sekilde yaprak dügümlerinden daha büyük gözükse de veri boyutu olarak 32 bayttan olusmaktadirlar. Blokta bir islem veya binlerce islem olmasina bagli olmadan merkle kökü her zaman 32 baytlik bir degere sahiptir.

***Sekil 4.4 : Çok sayida veri elemaninin bulundugu Merkle agacinin görünümü.

Belirli bir islemin blokta var olup olmadigini anlamak için, sadece log2(N) adet 32 baytlik özet degerine ihtiyaç duyulmaktadir. Bu özet degerlerinin olusturdugu dügümler kimlik dogrulama ya da merkle yolu olarak adlandirilmaktadir ve bu dügümler ilgili islemin köke ulasmasini saglamaktadir. Esasinda islem sayisinin arttigi durumda oldukça önemlidir, çünkü 2 tabaninda logaritma degeri islem sayisinin artmasina göre oldukça yavas degisim göstermektedir. Bu da bitcoin dügümlerinin en fazla on veya on iki özet degerinden olusan kimlik dogrulama yoluna sahip olmasina neden olmaktadir ve böylelikle bir islemin blokta var olup olmadigina megabayt boyutundaki bloklarin incelenmesine gerek kalmadan ulasilabilmektedir. Sekil 4.5’de görüldügü gibi, K isleminin blokta olup olmadigini saptamak için 4 adet 32 bayt özet degerine ihtiyaç duyulmaktadir. Bu yol dört adet özet degeri içermektedir ve bu degerler HL, HIJ, HMNOP ve HABCDEFGH’dir. Kimlik dogrulama yolunda bu dört özet degeri, çiftleri ile birlestirilerek özet degerleri alinir ve eger merkle köküne ulasilirsa ilgili islemin blokta oldugu sonucuna ulasilir.

***Sekil 4.5 : Bir veri ögesinin dahil edildigini kanitlamak için kullanilan bir Merkle yolu.

Merkle agaçlarinin etkinligi, ölçek arttikça belirgin hale gelmektedir. Örnegin, bir islemin bir blogun parçasi oldugunu kanitlamak için olusan veri boyutu Çizelge 4.2’de özetlenmistir.

***Çizelge 4.2 : Merkle Agaçlarinin Verimliligi.

Çizelge 4.2’den görülebilecegi gibi, blok büyüklügü oldukça hizli bir artis göstermekte iken bir islemin dahil edildigini kanitlamak için gereken merkle yolu çok daha yavas artmaktadir. Blok zincirinin gigabayt seviyesindeki verilerini depolamadan veya iletmeden, Merkle agaçlari yardimi ile bir islemin blokta olup olmadigina küçük boyutlardaki verilerden ulasilabilmektedir.

Merkle kökünün özet degeri: Blok içerisinde yer alan islemlerin özet degerinin tutuldugu Merkle agacinin kökü olan 256 bitlik degerdir. Yeni bir blok bulundugunda veya 32 bitlik nonce degerinin hepsi için özet islemi yapilmasina ragmen hedef degeri saglanamamissa degismektedir ve bu nedenle gri renk ile kodlanmistir.

Hedef: Ilk kisimda anlatilan hedef degeri ile aynidir, sadece o degerin 256 bitten 32 bite sikistirilmis halidir. Hedef degeri her 2016 yeni bloktan sonra degismektedir ve bu da yaklasik iki haftaya tekabül etmektedir. Bundan dolayi bu alanda beyaz renk ile kodlanmistir.

Sistem tarafindan belirtilen 32 bitlik hedef degerinden karsilastirma için kullanilacak 256 bit su sekilde elde edilir. Örnegin, Bitcoin sistemi tarafindan 32 bitlik hedef degeri 0x1903a30c olarak verilsin. Bu degerin ilk iki onaltilik basamagi üs, diger kalan alti basamak ise katsayi olark adlandirilmaktadir. Yani, bu blogun dogrulanmasi için verilmis hedef degerinin üs kismi 0x19, katsayi kismi ise 0x03a30c olarak bulunmaktadir. Hedef degerinin 256 bitlik gösterimi asagidaki esitlige göre bulunmaktadir.

Hedef = Katsayi * 2^ ( 8 * ( Üs – 3 ) )

Bu esitlik kullanilarak 0x1903a30c degerinin 256 bitlik gösterimi asagidaki islemler sonucunda onaltilik tabanda elde edilmektedir.

Hedef = 0x03a30c * 2(0x08*(0x19-0x03))

Böylelikle, is kaniti problemlerinde karsilastirilacak olan hedef degeri bulunmustur ve blok basliginin iki SHA256 özet algoritmasindan elde edilen sonuç bu deger ile karsilastirilarak yeni bloklarin dogrulanmasi islemi gerçeklestirilecektir.

Nonce: Bu 32 bitlik deger, blok basliginin çift SHA256 özet fonksiyonu ile özeti alindiginda degismektedir. Çok sik bir degisim söz konusu oldugu için siyah renk ile kodlanmistir. Bu deger 0’dan baslar ve lineer olarak dogru nonce degeri bulununcaya kadar arttirilir.

Bitcoin madenciliginde is kaniti probleminin çözümü bulununcaya kadar nonce degeri degismektedir ve sistem tarafindan belirtilen hedef degerine ulasincaya kadar her bir denemede bir birimlik artis yapilmaktadir. Nonce degeri 0 ile 232 arasinda bir sayi oldugundan is kaniti problemi 232 denemede eger bulunmazsa nasil bir yol izlenildigini su sekilde açiklayabiliriz.

Bitcoin sisteminin basladigi ilk zamanlarda maden islemi yapan cihazlarin özet üretme hizi oldukça düsük miktardadir. Bundan dolayi zaman damgasinda olusabilecek bir degisim olmadan bütün nonce degerlerinin denenmesi ile is kaniti problemi için çözüm bulunamaz. Bu nedenden ötürü sistemin basladigi ilk zamanlarda nonce degerinin hepsi denenmesine ragmen problemin çözümü bulunamadiginda zaman damgasi degistirilerek yeni blok basligi degeri elde edilir ve bu deger ile problem çözümü gerçeklestirilir.

Günümüzde ise maden islemi yapan cihazlar oldukça yüksek özet üretme hizina sahiptirler. Bundan dolayi zaman damgasinda bir degisim meydana gelmeden nonce degerinin sahip oldugu tüm aralik problem çözümü için denenmis olmaktadir. Bu sorunun çözümü ise su sekildedir: Her bir madenci seçmis oldugu islemlerden bir blok olustururken ilk islem olarak kendi adres bilgisini içeren ve bazi sabit alanlar bulunan degeri bloga ekleyerek is kaniti problemini çözdügünde bu degerde yer alan adres bilgisine göre sistem tarafindan kendisine ödeme yapilmaktadir. Bu ilk islem Bitcoin sisteminde üretim islemi olarak adlandirilmaktadir. Üretim isleminde yer alan bilesenler Çizelge 4.3’de verilmistir.

***Çizelge 4.3 : Üretim isleminde yer alan bilesenler.

Çizelge 4.3’de görüldügü üzere 2 ile 100 bayt arasinda herhangi bir deger içeren bir kisim bulunmaktadir ve bu kisim içerisinde ekstra nonce adi verilen bir bilesen olusturulmustur. Eger madenci yeni bir blogu 232 denemede dogrulayamamissa, bu kisimda yer alan ekstra nonce degeri bir birim artirilarak merkle kökünün yeni bir deger almasini böylelikle de yeni bir blok basligini elde etmektedir. Yeni blok basligi degeri kullanilarak is kaniti probleminin çözümüne devam edilmektedir.

Genisletme + Uzunluk: SHA2561 için, genisletme + uzunluk toplam 384 bit iken SHA2562 için 256 bittir. SHA2561 ve SHA2562 fonksiyonlarinin girdi mesaj uzunluklarinin 640 ve 256 bit oldugu bilindigi için genisletme + uzunluk degerleri de sabittir. Bundan dolayi bu alan beyaz renk ile kodlanmistir.

Tüm bu anlatilanlardan sonra akla her bir madencinin ayni özet degerini üretecegi düsüncesi gelebilir. Ancak bu tam olarak dogru degildir. Çünkü her bir madencinin seçmis oldugu isleme göre farkli bir Merkle kökü elde edilmektedir ve böylelikle her bir madencinin bulmus oldugu özet degeri farklidir. Bundan dolayi çözüm essiz oldugu için agda yer alan her bir madencinin çözümü bulma sansi esittir. Ancak madenciler, daha yüksek verimlilikte özet bulma islemi yapan aygitlara sahip olurlarsa problemi çözme sanslarini arttirabilirler. Fakat bu oldukça yüksek maliyetler gerektirdigi için günümüzde kisiler madencilik havuzlarindan hisse alarak Bitcoin sisteminden para kazanmayi tercih etmislerdir.

5. ÖZET FONKSIYONU IÇIN LITERATÜRDE ÖNERILMIS OPTIMIZASYONLAR

Literatür arastirmasi sonucu incelenen çalismalardan özet fonksiyonu için optimizasyon yöntemleri önerilmis ve bu yöntemlerin hepsi özet fonksiyonun girdisi olan Bitcoin blok basliginin bazi alanlarinin sabit olmasi veya sifir olmasina bagli olarak ortaya çikarildigi görülmüstür. Ileri sürülen bu optimizasyonlar detayli bir sekilde açiklanmistir.

5.1 SHA2560 için H0 Hesaplanmasi

Sekil 4.1’e bakildiginda SHA2560 fonksiyonuna giren degerler; versiyon, önceki blogun özet degeri ve Merkle kökünün özet degeri alanlari oldugu görülmektedir. Bu alanlardan 32 bitlik versiyon degeri sabit oldugu için beyaz renklidir, benzer sekilde 256 bitlik önceki blogun özet degeri ve 224 bitlik Merkle kökü de yeni bir blok bulunmadigi sürece sabittir ve gri renkle gösterilmistir. Bundan dolayi SHA2560 isleminin yeni bir blok bulunmadigi sürece tekrar yapilmasina gerek yoktur. Bu tür bir optimizasyon günümüzdeki madencilik aygitlarinda kullanilmaktadir. Bu yüzden sonuç degeri bulunurken bu optimizasyon hesaba katilmayacaktir.

5.2 SHA2562’de önceden özet degerinin kontrolünün yapilmasi

SHA2562 islemi sonucunda elde edilen özet degerinin hedef degerinden küçük olup olmadigi kontrol edilir. Özet degerinin hedef degerinden küçük olmasini belirleyen degisken g ve belirli sayida 0 içermesini gösteren degisken de h’dir. Algoritmaya göre bu islem tüm döngüler sona erdiginde yapilmaktadir. Ancak elde edilen özet degerinin beklenen sayida 0 içermesi ve hedef degerinden küçük olmasinin kontrolü 61. ve 62. döngüdeki e degiskeninin degerine bakilarak bulunabilir. Bu sonuca SHA256 algoritmasindaki Esitlik (3.7-3.8) yardimi ile ulasilmistir. Islemlere bakildiginda özet degerinin son degerleri olan f, g ve h degiskenlerinin e’ye bagli oldugu görülmektedir ve e degiskeni her dört döngüde bir sirasiyla f, g ve h degiskenlerine atanmaktadir. Bundan dolayi 64. döngüdeki h degiskenine 61. döngüde, g degiskenine de 62. döngüde ulasilmaktadir. Bu sonucu destekleyen Sekil 5.1’de asagida görülmektedir, Ulusal Standartlar ve Teknoloji Enstitüsü tarafindan paylasilmis olan SHA256 örneginde elde edilen sonuç görülmektedir.

***Sekil 5.1 : SHA256 algoritmasinda degiskenlerin görünümü.

Bu kontrol mekanizmasi ile hesaplanan özet degerinin geçerli olup olmadigina genellikle 61. döngüde karar verilir, böylelikle 3 döngü için islem yapilmasina gerek kalmamistir. Çok az durumda ise 62. döngü de yapilmaktadir. Genel olarak 3 döngülük bir is yükü iyilestirilmesi incelenen yöntemle saglanmistir.

5.3 SHA2561’in Ilk Üç Döngüsü

Sekil 4.1’e bakildiginda SHA2561 isleminin genisletilmis mesaj blogunun ilk 3 degerine sirasi ile Merkle kökü degerinin son 32 biti, zaman damgasi ve hedef degeri beslenmektedir. Bu degerlerden ikisi Merkle kökü ve zaman damgasi nadiren degistiginden gri renkte ve çogu zaman degismedigi görülen hedef degeri de beyaz olarak kodlanmistir. Merkle kökü yeni bir blok eklendiginde veya tüm nonce degerleri için özet islemi yapilmasina ragmen hedef degerine ulasilamadiginda degismektedir, zaman damgasi da Merkle kökü degistiginde güncellenmektedir. Bundan dolayi yeni bir blok gelmedigi sürece bu iki deger ayni kalmaktadir. Hedef degeri de her 2016 yeni blok üretildikten sonra degismektedir. Bundan dolayi SHA2561’in ilk üç döngüsü bir defa hesaplandiktan sonra her bir nonce degeri için tekrar hesaplanmasina gerek olmadigi ortaya konmustur.

5.4 SHA2561’in 4. döngüsünün Artan Olarak Hesaplanmasi

Sekil 4.1’e bakildiginda SHA2561 isleminin genisletilmis mesaj blogunun 4. degiskenine nonce degeri beslenmektedir. 4. döngüde, Esitlik (3.6-3.11) arasinda yapilan islemlerde yukarida yapilmis olan optimizasyon sonucu tüm degerler sabittir ancak W3 degeri degiskendir. W3 degiskeninde nonce degeri bulunmaktadir ve her zaman 1 artarak degisir. Bundan dolayi baslangiç nonce degerinde 4. döngü bir defa hesaplandiktan sonra nonce degerinin her bir artisinda 4. döngüde a-h arasindaki tüm degiskenlerin degeri 1 arttirilir. Asagida bu durumun görüntüsü yer almaktadir.

***Sekil 5.2 : SHA2561’in 4. döngüsünde yapilan optimizasyon.

5.5 SHA2561 ve SHA2562’nin genisletilmis mesaj bloklarindan bazilarinin 0 olmasi ve böylelikle toplama islemlerinin azaltilmasi

Sekil 4.1’e bakildiginda SHA2561 ve SHA2562 fonksiyonlarina giren mesaj uzunlugunun hep sabit oldugu görülmektedir. Bundan dolayi genisletme + uzunluk kisminda uzunluk degerinin SHA2561 için 640, SHA2562 için 256 oldugu bilinmektedir ve genisletme için gerekli olan toplam 0 sayisi da L(mesaj uzunlugu) + k(0 sayisi) + 1(1bit)’in mod 512’de 448’e esit olmasi gerektiginden sirasiyla 319 ve 191 bit olarak elde edilmektedir. Esitlik (3.6)’da Wj toplami yapilirken SHA2561’de W5-W14 arasindaki degiskenler, SHA2562’de W9-W14 arasindaki degiskenler 0’dir ve SHA2561 fonksiyonunda 10 adet toplama islemi, SHA2562 fonksiyonunda 6 adet toplama islemi yapilmayabilir.

5.6 SHA2561 ve SHA2562 islemlerinde mesaj uzunlugun sabit olmasi

Yukaridaki kisimda da belirtildigi gibi özet fonksiyonlarina giren mesaj uzunlugu sabittir. Bundan dolayi 64 bit ile simgelenen uzunluk degerinin ilk 32 biti sifirdir ve bu 32 bitin yukarida bahsedilen optimizasyon islemi ile yükü ortadan kaldirilmistir. Geriye kalan 32 bit degeri ise her iki özet islemi içinde genisletilmis mesaj blogunun W15 degiskeninde yer almaktadir. Bu degisken sabit oldugu için önceden K15 + W15 hesaplanarak fonksiyonlara beslenebilir. Böylelikle iki toplama isleminden kurtulmus olunur. Benzer sekilde 1 bitlik 1 degeri mesajlarin sonuna eklenmektedir ve genisletme isleminden dolayi 32 bitlik deger 0x80000000 olarak ortaya çikmaktadir. Bu deger SHA2561’de genisletilmis mesaj blogunun W4 degiskeninde yer alirken, SHA2562’de W8’de yer almaktadir. Yukaridakine benzer sekilde bu degerlerin toplami da baslangiçta yapilabilir ve fonksiyonlara toplamlari beslenebilir. Bu optimizasyon metodu ile toplamda 4 toplama isleminin ortadan kaldirilmasi saglanmistir.

Yukarida literatür taramasi sonucu elde edilen yöntemlerin donanimda ne kadar bir performans artisi saglayabilecegini göstermek için FPGA’de Verilog programlama dili yardimi ile Bitcoin madenciliginde kullanilan algoritma uygulanmistir. Bir sonraki bölümde FPGA’in detaylarindan ve uygulamasi gerçeklestirilen Bitcoin madenciliginin simülasyon ve FPGA sonuçlarinin detaylari incelenecektir. Simülasyonlar ve FPGA sonuçlarina göre her bir metodun yaptigi katki detayli bir sekilde ele alinacaktir. Önerilen bu yöntemlerin FPGA’de gerçeklestirilmesi sonucunda Bitcoin madenciliginde ciddi bir performans artisi saglamayi amaçlamaktayiz. Su an için Bitcoin madenciliginin ASIC aygitlarinda yapildigi düsünülebilir, ancak FPGA kodunda gerekli optimizasyonlar yapildiktan sonra bu uygulamanin ASIC’de üretimi gerçeklestirilebilir. Bundan dolayi Bitcoin aginin özet üretimi hizinda belli bir seviyede artis meydana gelmesi beklenmekte ve ayni enerji tüketiminde daha çok özet üretilmesi hedeflenmektedir. Yukarida bahsedilen her bir iyilestirmenin, su anda mevcut olan uygulamada ne kadar islem yükünü azalttigi ve performans artisinin hangi oranda degistigi bir sonraki baslik altinda incelenecektir.

6. BITCOIN MADENCILIGININ FPGA’DE GERÇEKLENMESI

Bitcoin madenciligi için baslangiçta CPU’lar kullanilirken sonrasinda ise daha hizli olan ancak çok fazla elektrik tüketen GPU’lar kullanilmistir. Daha sonrasinda ise madenciler FPGA’leri tercih etmisler ancak 2013 yilinin ortalarina dogru yalniz bu islemler için gelistirilmis olan ve çok yüksek hizlara ulasabilen ASIC’ler pazardaki yerini almistir. 5. bölümde literatürde yer alan optimizasyon tekniklerinden bahsedilmistir ve bu yöntemlerin ASIC’de uygulanabilmesi için öncelikle FPGA (Field Programmable Gate Array)’de gerçeklenmesi ve burada gerçeklenen uygulamada birtakim degisiklikler yapilarak ASIC üretimi yapilabilmektedir. Bu gereksinim dogrultusunda, öncelikle SHA256 özet algoritmasi, devaminda temel fonksiyonu SHA256 olan Bitcoin madencilik sistemi ve literatürde önerilmis olan optimizasyon teknikleri Verilog programlama dili yardimi ile FPGA’de gerçeklestirilmistir. Gerçeklestirilen sistem sonucunda yapilan iyilestirmenin performansda nasil bir degisime neden oldugu incelenecektir. Ayrica, performans da meydana gelebilecek olumlu bir degisim Bitcoin madenciliginde olusan çok büyük miktardaki elektrik tüketimi sorununa önemli ölçüde katkida bulunacagi düsünülmektedir.

6.1 FPGA Hakkinda Genel Bilgiler

FPGA’in yapisinda yapilandirilabilir mantiksal bloklar ve bu bloklari birbirine baglayan programlanabilir baglanti elemanlari yer almaktadir. FPGA’ler üretici firma tarafindan piyasaya sürüldükten sonra programci veya kullanici tarafindan herhangi bir uygulama kolayca yapilabilir ve ayni zamanda FPGA’i baska yapmak istedigi projelerde de tekrar programlayabilir. Sekil 6.1’de FPGA’in iç mimarisi ve bu mimaride bulunan bilesenler açik bir sekilde görülmektedir.

FPGA iç mimarisindeki programlanabilir bilesenlerinden dolayi birçok alanda kullanimi cazip hale gelmistir. Bundan dolayi, kullanim alani oldukça fazla ve gereksinim duyan kullanici sayisi her geçen gün artmaktadir.

***Sekil 6.1 : FPGA iç mimarisi ve içerdigi bilesenlerin görünümü.

Kullanim alanlarindan bazilari su sekilde siralanabilir: otomotiv sektöründe, veri merkezlerinde, görüntü isleme projelerinde, tüketici elektronigi sektöründe, kablolu ve kablosuz haberlesme projelerinde ve yüksek performansla hesaplama ve veri depolama islemlerinde oldukça fazla tercih edilmektedir.

FPGA üretici firmalarindan en önemli ikisi Xilinx ve Altera firmalaridir. Bu iki firmada degisik uygulamalara yönelik özel devreler üretmektedir. Tez çalismamda Xilinx tarafindan üretilmis bir FPGA kullandigim için bu firmaya ait olan bazi modellerin sahip oldugu özellikler Çizelge 6.1’de listelenmistir.

***Çizelge 6.1 : Xilinx firmasina ait olan FPGA modellerinin kaynak durumlari.

Mantiksal kaynaklar, FPGA üzerinde bulunur ve mantiksal islevleri gerçeklestirmek üzere kullanilmaktadirlar. Mantiksal kaynaklar, yapilandirilabilir mantik bloklari olusturmak için dilimler halinde gruplandirilmistir. Bir dilim, belirli sayida taramali tablo (look up table), iki durumlu devre (flip-flop) ve çoklayici içerir. Bir LUT, FPGA’de kablolanmis mantik kapilarinin bir koleksiyonudur. LUT’lar, her giris kombinasyonu için önceden tanimlanmis bir çikti listesini depolar ve bir mantik isleminin çiktisini almak için hizli bir yol saglar. Iki durumlu devre, iki istikrarli durumu olan ve tek bir biti temsil eden bir devredir. Bir çoklayici da, iki veya daha fazla girdi arasindan seçim yapan ve seçilen girisi çiktilayan bir devredir. Farkli FPGA aileleri, dilimleri ve LUT’lari farkli sekilde uygulamaktadir. Örnegin, bir Virtex-2 FPGA üzerindeki bir dilimde iki LUT ve iki flip-flop bulunur; ancak Virtex-5 FPGA’deki bir dilim dört LUT’a ve dört flip-flopa sahiptir. Buna ek olarak, FPGA ailesine bagli olarak bir LUT’ye girislerin sayisi iki ila 6 arasinda degismektedir.

Tez çalismasi kapsaminda Xilinx firmasina ait ve Virtex-7 ailesinden XC7VX690T FPGA’i kullanilmistir. Bu FPGA modelinin sahip oldugu kaynaklar Çizelge 6.1’de verilmistir. Çalismamizin temel konusu olan Bitcoin madenciliginin ihtiyaç duydugu algoritmalar Verilog programlama dilinde yazilmis olup yukaridaki donanimda gerçeklenmistir.

6.2 SHA256 Özet Algoritmasinin FPGA’de gerçeklenmesi

SHA256 özet algoritmasinin detaylari 3. bölümde ele alinmistir. Bu algoritmada yer alan islemlerin Verilog programlama dili yardimi ile gerçeklenmesinin ayrintilarini inceleyelim. Öncelikle SHA256 özet algoritmasinin baslangicinda mesaj blogunun 512 bitin kati olacak sekilde 0 ile genisletilmesi islemi yapilmaktadir. Bitcoin madenciligindeki blok basligi degerine bakildiginda 640 bitten olustugu görülmektedir. Bundan dolayi, Esitlik (3.1)’e göre 0 eklenecek bit sayisi 319 olarak bulunur. Blok basligi degeri hep ayni veri uzunluguna sahip oldugu için bu ekleme islemi blok baslik degerinin bulundugu modülde dogrudan yapilmistir. Sonrasinda ise mesajin, SHA256 özet algoritmasinin girdi uzunlugu olan 512’lik bloklar haline getirilmesi gerekmektedir. Bitcoin baslik degerinin boyutu genisletme isleminden sonra 1024 degerine ulasmaktadir ve her zaman iki mesaj blogu olusacagindan verinin bulundugu modülde adres degerinin kontrolü ile bu islem gerçeklestirilmektedir. Mesaj planlayicisi islemi ise, su an için test amaçli olarak bir arayüz modülünde ROM içerisinde (normal sartlarda gelen mesaj degeri UART veya USB gibi seri haberlesme standartlari kullanilarak okunacaktir) yer alan mesaj degerlerinin ilgili kisimlari SHA256 özet algoritmasinin gerçeklendigi modüle beslenmekte ve burada Esitlik (3.2-3.3) islemleri yapilarak 512 bitten olusan mesaj blogundan 2048 bitlik bir mesaj degeri elde edilmektedir. Bu deger elde edilirken 17 adet 32 bitlik yazmaç kullanilmistir ve her bir yazmaçtaki deger solundaki diger yazmaca her saat darbesinde aktarilarak önceki degerlerin kullanilmasi gerekli oldugu durumlarda kolaylikla erisim saglanmistir. Önceki degerine ihtiyaç duyulmayan degiskenler tel (wire) olarak tanimlanmistir ve anlik degerleri kullanilarak islemler gerçeklestirilmistir. Sekil 6.2’de Verilog programlama dili yardimi ile gerçeklestirilmis SHA256 özet algoritmasinin blok diyagrami görülmektedir.

***Sekil 6.2 : SHA256 özet algoritmasinin detayli mimarisi.

Sekil 6.2’de mesaj verisinin disaridan geldigi görülmektedir, fakat simdi test amaçli olarak mesaj verisi arayüz modülü içerisinde gömülü olarak bulunmaktadir ve bir adres degerine göre islemde kullanilmasi gereken mesaj degeri okunmaktadir. Sekil 6.3’de arayüz modülünde yer alan mesaj verileri görülmektedir.

***Sekil 6.3 : Arayüz modülünde yer alan mesaj verilerinin görünümü.

Ayrica, arayüz modülünde SHA256 islemlerinin gerçeklesme anini belirleyen izin sinyali (EN) üretilmektedir ve izin sinyalinin durumu özet algoritmasinin temel islemlerinin gerçeklendigi modülde tanimlanmis mesgul (busy) sinyaline ve arayüz modülünde yer alan sonlu durum makinesinin degerine göre degismektedir. Arayüz modülünde yer alan sonlu durum makinesinin durumlari 0, 1 ve 2 olarak degismektedir. Eger okuma yapilmasi gerekiyorsa durum makinesi 1 degerini almakta, özet algoritmasinda bulunan islemlerin yapilmasi gerektiginde ise 2 degerini almaktadir. Mesaj verisinin okunmasi durumunda 32 bitlik deger alindiktan sonra deger ile ilgili yapilmasi gereken islemlerden dolayi durum makinesi 2 degerini alir ve böylelikle izin sinyaline 1 degeri atanmis olur. Mesaj verisinin okuma islemi tamamlandiktan sonra izin sinyalinin durumu mesgul sinyaline göre degismektedir. Mesaj verisinin okunmasi durumunda mesgul sinyali 0 olarak tanimlanmis, okuma bittiginde ise özet sonucu alinana kadar 1 degeri atanmistir. Böylelikle izin sinyali mesaj verisinin okumasi tamamlandiginda 1 degerini almaktadir ve islemler sona erene kadar bu durumda kalmaktadir. Sekil 6.4’de izin sinyalinin üretildigi sonlu durum makinesinin Verilog modeli görülmektedir.

***Sekil 6.4 : Izin sinyalinin üretildigi sonlu durum makinesinin Verilog modeli.

SHA256 modülünün içerisinde tanimlanmis ROM modülünde her bir döngü için kullanilan K adi verilen anahtar degerleri bulunmaktadir ve bu degerler ilk 64 asal sayinin küp kökü alindiginda elde edilen kesirli kismin ilk 32 bitinden olusmaktadir. Bu degerler, döngü sayisinin durumuna göre ilgili adres degeri ve izin sinyalinden üretilen bir okuma sinyali yardimi ile elde edilmektedir. Ayrica, özet algoritmasinda yer alan bazi toplama islemleri elde kaydetmeli toplayici ile gerçeklestirilmistir. Bunun nedeni, Esitlik (3.6) gibi bazi islemlerin yapilabilmesi için 3 ve daha fazla 32 bitlik girdinin toplanmasi gerekmektedir ve bu islem 3 girdiyi ayni anda alan elde kaydetmeli toplayici ile gerçeklestirilmistir, böylelikle daha verimli sekilde sonuca ulasilmaktadir. Sekil 6.5’de elde kaydetmeli toplayicinin Verilog modeli görülmektedir.

***Sekil 6.5 : Elde kaydetmeli toplayicinin Verilog modeli.

Yapilan gerçeklemenin dogrulugunu test etmek için Ulusal Standartlar ve Teknoloji Enstitüsü (NIST) tarafindan yayinlanmis olan SHA256 özet algoritmasi için örnek girdi ve çikti degerleri referans alinmistir. Verilog modeli ile gerçeklestirdigimiz algoritmanin simülasyonlari ve FPGA gerçeklemesi sonucu NIST tarafindan verilmis referans degeri ile karsilastirilarak sistemin dogrulugu test edilmistir. Sekil 6.6’da NIST tarafindan paylasilmis SHA256 özet algoritmasinin sonucu, Sekil 6.7’de ise Verilog modelinin FPGA gerçeklemesi sonuçlari yer almaktadir.

***Sekil 6.6 : NIST tarafindan yayinlanmis referans degerleri.

***Sekil 6.7 : Verilog modelinin FPGA gerçeklemesi sonuçlari.

6.3 Bitcoin Madenciligi Sisteminin FPGA’de gerçeklenmesi

Bir önceki bölümde SHA256 özet algoritmasinin detaylarindan bahsedilmistir. Bitcoin madenciligi sisteminin de temel islemi SHA256 özet fonksiyonudur. Bitcoin madencileri sistem tarafindan verilen ödülü kazanmak içn yeni bloklari dogrulamaya çalismaktadirlar. Bunun için de üç SHA256 algoritmasi kullanilmaktadir. Sekil 6.2’de verilen SHA256 özet algoritmasinin detayli mimarisinden farkli olarak SHA256_top modülünde bu üç özet isleminin ardarda yapilabilmesi için gerekli kontrol sinyalleri üretilmistir ve sistemin seri bir sekilde çalismasi saglanmistir. Ayrica, 1. SHA256 isleminden sonra elde edilen deger 2. SHA256 isleminin baslatilmasi için kullanilmaktadir. Bundan dolayi SHA256_top modülünde iv degiskenleri tanimlanmis ve 1. ve 3. SHA256 özet fonksiyonu için baslatma vektörü degerlerinin atamasi yapilmistir, ancak 2. SHA256 özet fonksiyonu için 1. SHA256 özet fonksiyonunun çiktilari beslenmistir. Sekil 6.8’de iv degiskenine yapilan atamalar görülmektedir.

***Sekil 6.8 : IV degiskenine yapilan atamalar.

Ayrica 2. SHA256 özet fonksiyonundan elde edilen deger 3. SHA256 özet fonksiyonuna girdi olarak beslenmelidir. Bundan dolayi 2. özet fonksiyonunun sonucu arayüz modülüne gönderilerek ilgili verilerin beslenmesi gerçeklestirilir. Bunlara ek olarak, 3. SHA256 özet fonksiyonunun çiktisinin hedef degerinden küçük olup olmadigina bakilmaktadir. Bundan dolayi, sistem tarafindan verilen 32 bitlik hedef degerinden 256 bitlik hedef degerinin elde edilmesi için bir modelleme yapilmistir. Sekil 6.9’da hedef modülünün görünümü yer almaktadir.

***Sekil 6.9 : Hedef modülünün görünümü.

Yapilan uygulamanin dogrulugu, internetteki bir kaynakta yer alan blok basligi degerine karsilik elde edilmesi gereken özet degerine göre test edilmistir. Sekil 6.10’da kaynakta yer alan degerler ve Sekil 6.11’de de gerçeklestirilen Bitcoin madencilik sisteminin FPGA sonuçlari yer almaktadir.

***Sekil 6.10 : Gerçeklestirilen sistemin dogrulanmasi için kullanilan verilerin görünümü.

***Sekil 6.11 : Gerçeklestirilen Bitcoin madencilik sisteminin FPGA sonuçlari.

6.4 Literatürde önerilmis olan iyilestirme tekniklerinin FPGA’de gerçeklenmesi

5. bölümde detaylari açiklanan iyilestirme tekniklerinin FPGA’de gerçeklenmesinin performans da meydana getirdigi katki ve bu iyilestirme yöntemleri uygulandiginda kaynak tüketiminde nasil bir degisime neden oldugu incelenecektir.

SHA2560 için H0 hesaplanmasi

Bu tür bir optimizasyon günümüzdeki madencilik aygitlarinda kullanilmaktadir. Bu yüzden performans degeri bulunurken bu optimizasyon hesaba katilmayacaktir. Ancak, iyilestirme yönteminin uygulanmasinda bazi kontrol sinyalleri kullanilmaktadir. 2 bitlik bir kontrol sinyali baslangiçta 0 olarak tanimlanmistir ve bu deger 0’dan farkli oldugunda SHA2560 isleminin çalismasi engellenmektedir. Ayrica arayüz modülünde yer alan blok basligi degerinin ilk 32 adresi baslangiçta okunduktan sonra bir daha okunmasi engellenerek SHA2560’a ait olan verilerin sisteme tekrar beslenmesi engellenmektedir.

SHA2562’de önceden özet degerinin kontrolünün yapilmasi

5. bölümde belirtildigi gibi 64. döngü sonucunda elde edilen G ve H çalisma degiskenlerine 61. ve 62. döngüdeki E çalisma degiskeninden ulasilmaktadir. Ayrica hedef degeri, 2016 blogun bulunmasindan sonra is kaniti problemini zorlastirmak için küçültülmektedir. Bundan dolayi, günümüzde hedef degerinin ilk 64 biti 0’dan olusmaktadir. Böylelikle 61. ve 62. döngüdeki E çalisma degiskeninin baslatma vektöründeki ilgili deger ile toplanmasi sonucu 64 bit 0 elde edilmesi gerekmektedir. Aksi takdirde is kaniti probleminin çözülemedigi ve nonce degerinin artirilarak denemelerin devam edilmesi gerektigi anlasilmaktadir. Gerçekledigimiz sistemde 64 döngüden olusan SHA256 özet algoritmasi, mesaj verilerinin hazirlanabilmesi için 67 döngüden olusturulmustur. Bundan dolayi önceden kontrol etme islemi 64 ve 65. döngüde gerçeklestirilmistir. SHA256 modülünde bu kontrol isleminin yapildigi kismin görünümü Sekil 6.12’de yer almaktadir.

***Sekil 6.12 : SHA2562 özet degerinin önceden kontrolünün yapilmasi.

Sekil 6.12’de görüldügü gibi özet degeri önceden kontrol edilmistir ve eger 64 bitlik ilk kismi 0’a esit degilse SHA256 modülünde islemin bittigini gösteren out sinyaline 1 atamasi yapilmaktadir ve bu deger SHA256_top modülünde tekrar özet fonksiyonunun çalismaya baslamasi için SHA256 modülüne init sinyali olarak beslenmektedir. Gerçeklestirlen iyilestirme tekniginin FPGA sonuçlari Sekil 6.13’da yer almaktadir.

***Sekil 6.13 : SHA2562’de önceden özet degerinin kontrolünün yapilmasi ile elde edilen FPGA sonuçlarinin görünümü.

SHA2561’in ilk üç döngüsü

SHA2561’in mesaj verisinin ilk üç 32 bit degeri sirasi ile Merkle kökü degerinin son 32 biti, zaman damgasi ve hedef degeridir. Bu degerler, is kaniti problemini çözmek için kullanilan nonce degerinin 232 denemesi sona erene kadar degismemektedir. Bundan dolayi, bu ilk üç döngü bir kez yapildiktan sonra ilgili degerler yazmaçlarda tutulmustur ve bu degerler SHA2561 tekrar çalistirildiginda baslangiç degerleri olarak beslenmistir. Böylelikle, baslangiçta 4. döngüden baslanmaktadir ve 3 döngülük bir kazanç saglanmistir. Gerçeklestirilen iyilestirme tekniginin FPGA sonuçlari Sekil 6.14’de yer almaktadir.

***Sekil 6.14 : SHA2561’in ilk üç döngüsü için yapilmis olan iyilestirme yöntemi sonucunda elde edilen FPGA sonuçlarinin görünümü.

SHA2561’in 4. döngüsünün artan olarak hesaplanmasi

SHA2561 özet fonksiyonuna beslenen dördüncü 32 bitlik mesaj nonce degeridir ve bu deger is kaniti problemi çözülene kadar 1 artirilir. Bundan dolayi 8 adet çalisma degiskeninde E ve A degerleri her zaman 1 artmaktadir, diger degerler ise ilk kez 4. döngü yapildiginda hangi degere sahipseler yine ayni degere sahip olmaya devam etmektedirler. Bundan dolayi, bu degerlerde iv_opt adi verilen yazmaçlarda saklanmaktadir ve SHA2561 özet fonksiyonu bu degerlerin beslenmesi ile baslamaktadir. Böylelikle özet fonksiyonundaki 1 döngülük islemin yapilmasi ortadan kaldirilmistir. Sekil 6.15’de ilgili degerlerin yazmaçlara kaydedilmesi görülmektedir ve Sekil 6.14’de uygulanan iyilestirme tekniginin FPGA sonuçlari görülmektedir.

***Sekil 6.15 : SHA2561 baslatilirken kullanilacak degerlerin artan olarak hesaplanmasi.

SHA2561 ve SHA2562’nin genisletilmis mesaj bloklarindan bazilarinin 0 olmasi ve mesaj uzunlugun sabit olmasi

5. bölümde yer alan son iki iyilestirme yöntemi birarada gerçeklestirilmistir. SHA256 özet algoritmasinda öncelikle mesaj degerlerinin gelmesi beklenmekte ve sonrasinda ilgili islemler yapilmaktadir. Ancak mesaj bloklarindan bazilarinin 0 olmasi ve SHA2561’de mesaj uzunlugunun 640, SHA2562’de mesaj uzunlugunun 256 oldugu bilindiginden mesaj verisi için herhangi bir bekleme yapilmadan islemlere baslanmaktadir. Böylelikle özet fonksiyonunda bir döngülük iyilestirme saglanmistir. Sekil 6.16’da elde edilen iyilestirme sonucu görülmektedir.

***Sekil 6.16 : Mesaj bloklarindan bazilarinin 0 olmasi ve mesaj uzunlugunun sabit olmasi sonucunda elde edilen FPGA sonuçlarinin görünümü.

Iyilestirme yöntemlerinin FPGA’de uygulanmasindan sonra performansda meydana gelen degisim ve kaynak tüketimi ile güç tüketimi degerleri su sekildedir. Yapilan iyilestirmeler sonucunda 30 saat darbelik bir performans artisi saglanmistir. Iyilestirme yapilmamis sistemde is kaniti probleminin çözümü için kullanilan iki SHA256 fonksiyonu 298 saat darbesi, iyilestirme yapilmis sistem ise 268 saat darbesi sürmektedir. Buradan performans artisi su sekilde bulunur:

Performans Artisi = Elde edilen saat darbe kazanci / Normal gerçeklemenin saat darbe sayisi = 30 / 298 = %10.1

Bu performans artisinin neden oldugu maliyete ise kaynak tüketimi ve güç tüketimi degerlerinden ulasilabilir. Güç tüketimi degerlerini inceledigimizde; iyilestirme tekniklerinin uygulanmadigi sistemde güç tüketiminin 0.337 W oldugu sonucuna ulasilmistir. Iyilestirme tekniklerinin uygulandigi sistemde ise güç tüketimi 0.335 W olarak ortaya çikmistir. Çizelge 6.2’de iyilestirilmis ve herhangi bir optimizasyon uygulanmamis sistemlerin kaynak tüketimi degerleri bulunmaktadir.

***Çizelge 6.2 : Iyilestirilmis ve herhangi bir optimizasyon uygulanmamis sistemlerin kaynak tüketimi degerlerinin karsilastirilmasi.

Kaynak tüketimi degerlerine bakildiginda iki durumlu devre (Flip Flop) bileseninde en çok artis meydana geldigi görülmektedir. Ancak, FPGA daha az sayida taramali tablo (Look up table) içermektedir. Bundan dolayi sinirlayici bilesen taramali tablo kaynagidir. Çizelge 6.2’deki degerlere bakildiginda taramali tablo kaynak tüketiminde %3’lük bir artis oldugu görülmektedir. Kaynak tüketiminin performansa negatif bir etkisi oldugu için %3’lük bir düsüs meydana gelmektedir. Böylelikle yapilan iyilestirme sonucunda yaklasik olarak %7’lik bir performans artisi saglanmistir. Uygulanan iyilestirme yöntemlerinin performans artisinin yaninda çok büyük maliyetlere neden olmadigi görülmektedir. Bu nedenle yapilan iyilestirmenin Bitcoin madenciligi için uygulanabilir oldugu ve özet üretme hizinda ciddi artislar meydana gelecegi görülmektedir. Ayrica, Bitcoin madenciliginde olusan çok büyük elektrik tüketimi degeri de önemli ölçüde azaltilacaktir. 2016 yilinda Bitcoin madenciligi için harcanan elektrik tüketimi 400 milyon $ olarak kaynaklarda geçmektedir. Böylelikle yapacagimiz iyilestirme teknikleri ile yaklasik olarak 28 milyon $ tasarruf edilebilir.