Elektrotehniški vestnik 82(1-2): 1-7, 2015 Izvirni znanstveni članek Računanje kriptografskih valut z GPE Luka Sedmak, TomaŽ Dobravec Univerza v Ljubljani, Fakulteta za računalništvo in informatiko, Tržaška 25, 1000 Ljubljana, Slovenija E-pošta: sedmak@gmail.com, tomaz.dobraveč@fri.uni-lj.si Povzetek. Na področju sodobnih financ in bančništva se je razvila mocna koncentracija kapitala v peščici finančnih središc. Kot alternativa takšni centralizaciji so se zacele uporabljati umetne deregulirane ter popolnoma distribuirane kriptografske valute. Njihova zasnova deluje na principu peer-to-peer omreZja, v katerem se s kriptografskimi funkcijami skupinsko nadzorujejo transakcije in ustvarjanje same valute, kar omogoca transparentnost ter hkrati anonimnost ter varnost. za pridobivanje kriptografskih valut smo sestavili napravo, ki z izkorisšcšanjem velike kolicšine ter hitrosti pomnilnika na graficšnih karticah s posebno programsko opremo potrjuje transakcije v omrezju in nam s tem ustvarja majhen delez valute za nagrado. Opisali bomo lastnosti razlicnih kriptovalut, razlozili metode maksimizacije dobicka ter opisali uporabljeno strojno opremo. Predstavili bomo tudi algoritem za potrjevanje transakcij in prikazali vpliv konfiguracijskih parametrov na koncno hitrost preracšunavanja. Ključne besede: kriptografske valute, kriptografske funkcije, anonimnost, transparentnost, distribuirana valuta, dereguliranost, bitcoin, scrypt Calculating the cryptographic currencies using GPUs in the field of modern finance, a concentration has developed in a handful of financial institutions. As an alternative to such centralization, deregulated and fully distributed synthetic currencies have been introduced. They are designed as a peer-to-peer network, where by using cryptographic functions, transactions and creation of the currency are controlled, which allows for full transparency along with an anonymity and security. To obtain some cryptographic currencies, we assembled a device that uses a large amount of the fast memory on video cards by running a special software which confirms transactions in the network. Using this device, we collected a small amount of the currency as a reward. In the paper we describe characteristics of various cryptocurrencies, explain the methods for maximizing the profit, describe the hardware used, present characteristics of various cryptocurrencies, introduce methods for maximizing the profit and describe the hardware used. We also explain the algorithm used to validate the transactions and show the impact of the configuration parameters on the resulting hashing speed. 1 Uvod Skozi zgodovino smo ljudje iz prvotne blagovne menjave fizicnih dobrin najprej prešli na monetarni sistem z denarno menjavo v obliki srebrnih in zlatih kovancev, nato pa so zacele nastajati prve osnovne banke. Z njimi so se prvic v zgodovini pojavile tudi razne denarne mahinacije, ki so ze takrat aktivno vplivale na oblikovanje takratnega sveta. Pozneje se je z uvedbo tiskanja denarja in nato borz ter delniških trgov dokoncno ustvaril ekosistem moci kapitala, katerega niti drzijo v rokah financšne elite. Taksšna ureditev je postopoma Prejet 16. december, 2014 Odobren 12. januar, 2015 privedla do situacije, ko je moc nad koordiniranjem tako rekoc celotnega svetovnega kapitala v realnem casu skoncentrirana v rokah nekaj finančnih institucij in ko sta denar in ravnanje z njim postala popolnoma abstrakten pojem. V Želji po neodvisnosti financnega prometa od bank in drugih financnih institucij so se kot eden od mehanizmov za dosego cilja razvile kriptografske valute [1], [2]. Idejna zasnova kriptografskih valut temelji na principu peer-to-peer elektronskega denarja, ki omogoca placevanje neposredno med uporabniki mimo sistema financnih institucij. Glavna knjiga vseh transakcij se sproti osvezuje pri vseh uporabnikih hkrati in se kodira tako, da onemogoca reverzibilnost transakcij. Kriptogra-fija z uporabo kombinacije zasebnih in javnih kljucev pa omogoca varnost in identifikacijo uporabnikov. Tak sistem zagotavlja decentralizacijo, saj je distribuiran med vsemi uporabniki omrezja, hkrati s popolno anonimnostjo pa tudi transparentnost transakcij, ki niso reverzibilne in so vse zapisane v skupni glavni knjigi. Potrjevanje transakcij in hkrati nastajanje same valute v sistemu se izvaja s t. i. 'rudarjenjem', ki bo tudi podrobneje opisano v poznejših poglavjih tega clanka. Ena kljucnih prednosti kriptografskih valut in hkrati velik trn v peti svetovnim oblastem je odsotonost regulacije z ukrepi kakršnihkoli financnih ali vladnih avtoritet, ki je onemogocšena zaradi anonimne in distribuirane narave sistema, katerega ideologija je razvidna iz slike 1. 2 Kriptografske valute Prve ideje o digitalni valuti so nastale ze leta 1998 na Cypherpunks mailing listi v obliki umetnih valut, 2 SEDMAK, DOBRAVEC Slika 1: Ideološki pristop k zasebnosti ki bi s kriptografijo nadzirale svoj nastanek in vse transakcije. Po številnih razpravah in dopolnitvah je deset let pozneje nekdo pod psevdonimom Satoshi Na-kamoto izdal tehnično specifikacijo ter dokaz teoretične pravilnosti delovanja koncepta prve prave kriptografske valute imenovane Bitcoin. Bitcoin je trenutno glavna in svetovno najbolj znana kriptografska valuta in njeni osnovni principi delovanja so bili temelj za izpeljavo vseh drugih novih kriptovalut. Kot prva formalna valuta svoje vrste je od leta 2009 do danes prebrodila nemalo tezšav, vendar se je zaradi pametnih potez razvijalcev in hitrih popravkov obdrzšala in pridobila na razpoznavnosti. Tehnicno ozadje Bitcoina v osnovi temelji na verigi blokov, glavni knjigi v kateri se verizšno nalagajo bloki potrjenih transakcij, in na digitalnem podpisovanju transakcij. Elektronska valuta je definirana v obliki verige digitalnih podpisov [3] oziroma drevesa vseh transakcij med lastniki v cšasu od nastanka do zadnje transakcije, sama po sebi pa kot entiteta ne obstaja. Vsaka transakcija vsebuje sštevilko posšiljatelja, prejemnika, znesek poslane valute in nekaj kontrolnih parametrov. Posšiljatelj prenese valuto prejemniku tako, da zgošceno vrednost (angl. hash) ene prejšnjih transakcij, poslanih njemu, skupaj z javnim kljucem prejemnika digitalno podpiše s svojim zasebnim kljucem in jo pošlje naprej. Potek podpisovanja transakcij je prikazan na sliki 2. Slika 2: Podpisovanje transakcij Ko posšiljatelj izvede transakcijo, je ta poslana vsem uporabnikom v omrezju ter caka na potrditev. Potrjevanje transakcij se izvede s t. i. 'rudarjenjem' (kar je tudi glavna funkcija naprave, opisane v poznejšem poglavju). Rudarji so uporabniki omrezja, ki belezijo vse v omrezje prihajajoce transakcije in jih zbirajo v tekocši blok v obravnavi, tega pa poskusšajo potrditi pred drugimi uporabniki. Pri tem nenehno izvajajo ope- racije algoritma, ki deluje takole: vzamemo vse podatke se nepotrjenih transakcij t, zgosceno vrednost podatkov zadnjega bloka v verigi blokov b ter naključno vrednost n in nato s pomocjo kriptografske funkcije sha-256(t,b,n)=zgoščena vrednost išcemo takšno vrednost n, da funkcija vrne zgoščeno vrednost, ki se zacne z dolocenim številom nicel v vodilnih bitih. Stevilo zahtevanih nicel tako pomeni zahtevnost rudarjenja. Treba je povedati, da je uspeh tu v popolnosti odvisen od nakljucnosti. Uporabnik, ki mu prvemu uspe najti pravo vrednost, zbere vse nepotrjene transakcije v blok. Bloku nato doda zgošceno vrednost prejšnjega bloka ter izracunano zgoššeno vrednost z zacetnimi niclami (kot dokaz opravljenega dela, angl. proof-of-work) in ga pošlje v verigo blokov. Tako je potrdil oziroma 'zapecšatil' blok in je nagrajen z delezšem na novo nastale valute. Potrjeni blok se nemudoma doda na konec verige blokov in nove prihajajoce transakcije se ze obravnavajo kot del novega bloka v obdelavi. Omrezje vedno obravnava kot veljavno tisto verigo blokov, kije najdaljša. Torej, ce vec kot en uporabnik v natanko istem casu potrdi blok, se veriga blokov razveji, toda pozneje eden od repov prehiti preostale in ti nato odmrejo. Zahtevnost rudarjenja se v protokolu dinamicšno prilagaja glede na sštevilo uporabnikov v omrezju in njihovo izmerjeno racunsko moc, upoštevajoc pravilo, da se en blok transakcij v omrezju potrdi v priblizšno desetih minutah. Z namenom, da bi zmanjšali nakljucno komponento rudarjenja ter zagotovili redne in pravicšno razdeljene nagrade pri rudarjenju, so se uporabniki zacšeli povezovati v t. i. bazene (angl. poole). V bazenih vecš uporabnikov prispeva svojo racšunsko mocš za potrjevanje trenutnega bloka. Ob uspehu je nagrada razdeljena mednje glede na njihov prispevani delez, upravljavec bazena pa obicajno pobere majhno provizijo. Namesto da bi en uporabnik poizkušal sreco vec let in upal na veliko povracilo, lahko redno in z gotovostjo dobiva manjsše delcške nagrade. Princip se je izkazal za zelo uspesšnega in tako dandanes rudarjenje bolj znanih valut v celoti poteka v razlicšnih manjših ali vecjih bazenih. Kmalu zatem, ko je Bitcoinu v svetu zrasla prepoznavnost ter seveda vrednost, so druga za drugo zacšele prihajati nove kriptografske valute. Vse temeljijo na enaki ideolosški in tehnolosški zasnovi, vsaka pa tako ali drugace poizkuša dopolniti funkcionalnost ali odpraviti hibe zacetnika. Glavna 'hiba' Bitcoina se skriva v dejstvu, da je izvajanje funkcije SHA-256 mogoce zelo ucinkovito realizirati s pomocjo aplikacijsko spe-cificšnih integriranih vezij oziroma racšunalnikov ASIC [4], kar je pripeljalo do masovne izdelave le-teh in s tem dviga zahtevnosti za potrjevanje blokov na smrtnikom popolnoma nedosegljivo raven. Da bi se temu izognili, so nacšrtovalci novih valut za potrjevanje blokov zacšeli uporabljati algoritme, ki jih je tezje ali manj smotrno implementirati z racšunalniki ASIC. Vecšina na novo nastalih kriptovalut zdaj uporablja RAČUNANJE KRIPTOGRAFSKIH VALUT Z GPE 3 algoritem Scrypt za potrjevanje svojih transakcij. Scrypt je v letu 2009 zasnoval Colin Percival, da bi ustvaril Časovno in strojno cim zahtevnejši šifrirni mehanizem, ki bi napadalcem popolnoma iznicil rentabilnost napada s financnega vidika [5]. Algoritem uporablja kombinacijo sekvencšno spominsko izjemno zahtevnih funkcij in tako za hitro izvajanje potrebuje velike kolicine zelo hitrega pomnilnika, ki pa je drag in tezko dobavljiv. Tako so z uporabo Scrypta namesto SHA-256 za svoj algoritem proof-of-work nove valute omejile eksponentne rasti zahtevnosti ter ohranile bolj distribuirano in raznoliko mrezo uporabnikov, ki rudarijo. Prva takšna alternativna valuta je bila Litecoin. Projekt je bil vnaprej objavljen in nato splavljen oktobra 2011 [6]. Po zasnovi je neposredna kopija Bitcoina in se od njega razlikuje le po krajšem casu potrjevanja bloka, večjem koncnem številu kovancev in seveda uporabi algoritma Scrypt za potrjevanje transakcij. Litecoin je kot prva kriptovaluta Scrypt hitro pridobil na popularnosti in vecšina uporabnikov, ki je rudarila na domacših racšunalnikih, se je pridruzšila njim bolj prijaznemu omrezju. Skladno s tem je rasla tudi vrednost in tako je v letu 2013 Litecoin presegel kapitalizacijo trga v vrednosti milijarde ameriških dolarjev. Se ena izmed zanimivih kriptovalut Scrypt je Dogecoin, ki se je sprva zacšel kot sšala na spletnih forumih z idejo lahko pridobljive valute, ki bi bila zelo razširjena, imela nakljucne nagrade za potrditve blokov ter delovala kot mehanizem za 'dajanje napitnine' avtorjem internetnih vsebin, ki se uporabnikom zdijo uporabne. Sprva valute nihce ni jemal resno, toda njena popularost se je razširila kot virus in je presegla sštevilo transakcij vseh kriptovalut skupaj. Dogecoin razvijalci so znani tudi po nenavadnih nacšinih promocije valute, kot so recimo sponzorstvo ja-majškega moštva za bob, poslikavo celotnega dirkalnega avtomobila NASCAR z maskoto valute in dobrodelno gradnjo vodnjaka s pitno vodo v Keniji. Na trgu obstaja še veliko drugih kriptovalut Scrypt, vsaka s svojimi posebnostmi, prednostmi in slabostmi. V iskanju optimalne zasnove kriptovalute, ki bi kljubovala vsem v praksi odkritim pomanjkljivostim danasšnjih, so se razvile tudi razlicšne kombinacije in variacije uporabe kriptografskih funkcij in algoritmov: • X11 (cryptcoin, darkcoin) - 11 kriptografskih funkcij, prepletenih med seboj, • Keccak (maxcoin) - NIST je izbral Keccak kot zmagovalca na tekmovanju za implementacijo SHA-3 [7], • Scrypt-N (execoin, vertcoin) - Scrypt z dodanim parametrom N, ki progresivno skozi cas povecuje samo spominsko zahtevnost algoritma, • Gr0stl (diamondcoin) - Gr0stl, kandidat za SHA-3 s strani študentov danske DTU in TU Graz [8]. Razprava o tem, katera zasnova je najboljsša, ostaja odprta, saj razvijalci tako algoritmov kot novih valut poudarjajo negativne lastnosti svojih tekmecev, definitivno pa se razvoj celostno odvija v pravo smer in zato lahko v prihodnosti pričakujemo Čedalje bolj izpopolnjene rešitve. 3 Implementacija rudarja Za potrjevanje blokov transakcij in s tem pridobivanje določene kriptografske valute smo sestavili napravo oz. rudarja, ki za delovanje uporablja hitrost in količino grafičnega pomnilnika na več grafičnih karticah visokega cenovnega razreda in v ta namen uporablja specializirano programsko opremo. Pri sestavi rudarja moramo premišljeno izbrati, kateri del sistema bomo uporabljali za potrjevanje transakcij (ČPE, GPE, drugo), kako bo strojna oprema nameščena in hlajena in kateri tip algoritma proof-of-work najbolj ustreza naši konfiguraciji. Nato izberemo optimalen operacijski sistem in ustrezno programsko opremo, ki bo operacije izvajala, in se odlocšimo, katero valuto bomo rudarili ter kateremu poolu se bomo pridruzšili. V nasšem primeru smo se odločili za poganjanje algoritma Scrypt na GPE in uporabili naslednje komponente: • Matična plošča je bila poleg zahteve po visoki kakovosti materiala skrbno izbrana tako, da se na njej nahajajo osnovne kontrole kot so gumb za vklop/izklop, reset gumb, gumb za ponastavitev ČMOSa in LED indikator statusa sistema za preprostejše upravljanje. Prav tako smo zavoljo ele-gantnosti potrebovali podporo diskom mSATA. • Procesorska moč je za rudarjenje z GPE irelevantna lastnost, zato je bil izbran najcenejši procesor, ki ustreza podnozju LGA 1155 na naši matični plošči. • Za disk smo izbrali disk mSATA SSD, ki se vstavi v matično ploščo, za priklop ne potrebuje nikakršnih kablov ali vodil in je tako rekoč neviden. Hkrati s svojimi 120 GB prostora zadostuje za namestitev dveh sodobnih operacijskih sistemov. • Velikost pomnilnika je odmerjena tako, da pri rudarjenju visoka konkurenčnost niti v kombinaciji s porabo operacijskega sistema ne doseze omejitve sistema. • Napajalnik je poleg grafičnih kartic v tem primeru najpomembnejša komponenta sistema. Zagotavljati mora izjemno stabilno napajanje pri konstantni visoki porabi energijsko pozrešnih grafičnih kartic. Po izčrpni raziskavi smo skrbno izbrali napajalnik višjega kakovostnega razreda, s praktično neobstoječim nihanjem napetosti na 12V tračnici ter več kot 92-odstotno učinkovitostjo pri polni obremenjenosti. • Grafične kartice vse izhajajo iz vrha ponudbe druzine Radeon izdelovalca AMD, ki se od svojih NVIDIinih tekmic razlikujejo po arhitekturni zasnovi senčilnikov in so pri karticah primerljivega ranga tudi do trikrat hitrejši pri rudarjenju. V osnovi so si sorodne, vse so zgrajene okoli AMDjevega 28nm Hawaii-Pro procesorja in imajo na vezju 4GB 4 SEDMAK, DOBRAVEC GDDR5 pomnilnika. Prvotni namen je bil uporabiti štiri identične grafične kartice, a to ni bilo mogoce zaradi tedanjih razmer na trgu. Uporabili smo dve kartici ASUS DirectCU IIR9 290 in eno referenčno kartico Gigabyte R9 290. • Poleg skrbnega izbora strojne opreme je bilo treba za doseganje optimalnih rezultatov zasnovati in izdelati posebno ohišje, ki omogoca postavitev uporabljenih komponent tako, da se zagotovi najvecja mogoca pretocnost zraka in odvajanje toplote. Za doseganje zadovoljivih temperatur je bilo nujno graficne kartice lociti od maticne plošce in jih locirati cim bolj razpršeno v zracnem prostoru. Za ta namen smo uporabili posebne podaljške PCI-e vodil maticne plošce, imenovane USB PCI-e 'riserji'. USB riserji so sodobna razlicica starih riser kartic, ki so se vcasih uporabljale v starih strezniških ohišjih za priklop dodatnih kartic kadar je primanjkovalo prostora, le da tu za pretok podatkov med dvignjenim vezjem in PCI-e vodilom na maticni plošci skrbi podatkovni kabel USB 3.0. S pomocjo riserjev in natancnega nacrtovanja smo zasnovali in sestavili optimalno ogrodje za namestitev naše strojne opreme. Koncni rezultat si lahko ogledamo na sliki 3. Slika 3: Naprava za rudarjenje Za operacijski sistem smo si prvotno izbrali posebej za rudarjenje prilagojeno distribucijo Linuxa Cryptoslax, ki temelji na ogrodju distribucije Slackware, vsebuje pa zgolj module, potrebne za rudarjenje ter se ob nalaganju v celoti zapise v sistemski pomnilnik. Konfiguracija kljub prizadevnemu prilagajanju in preizkušanju različnih opcij ni dajala pričakovanih rezultatov, zato smo se iz nezaupanja v neuradno in relativno nepreverjeno distribucijo odlocili za drugacen pristop. Na rudarja smo vzporedno namestili operacijski sistem Microsoft Windows 7 in Linux distribucijo Slackware 14.1 in na obeh nalozili enake gonilnike ter programsko opremo za rudarjenje. Izmed obstojecih programov, ki implementirajo rudarjenje kriptografskih valut s pomocjo algoritma Scrypt proof-of-work smo izbrali CGMiner [9], katerega avtor je Con Kolivas in je eden od dveh najbolje poznanih in pogosto uporabljanih programov za rudarjenje s pomocjo graficnih kartic. Zavoljo boljše konfigurabil-nosti smo uporabili razlicico iz posebne veje razvoja CGMinerja. CGMiner s pomocjo knjiznice ADL in okolja OpenCL v gonilnikih za graficne kartice omogoca podrobno upravljanje le-teh in opazovanje le-teh med rudarjenjem. Z uporabo programskih vmesnikov kriptografskih valut komunicira v njihovih omrezjih po zapovedanih protokolih, omogoca pa tudi prikljucevanje k bazenom in preklapljanje med njimi. Na vse kartice smo namestili posebej spremenjen neuraden BIOS, ki s kalibracijo krmilnika graficnega pomnilnika zmanjša cas med cikli in s tem latenco pri komunikaciji jedra s pomnilnikom. Optimizirana je tudi ucinkovitost regulatorja napetosti, kar omogoca stabilnejše delovanje ter doseganje višjih frekvenc delovanja pri nizjih privzetih napetostih. Pri obeh operacijskih sistemih smo uporabili uradne graficne gonilnike AMD Catalyst 13.12, ki dajejo optimalne rezultate. Novejša razlicica gonilnikov Catalyst 14.1 in njihovi nasledniki imajo hrošcato implementacijo okolja OpenCL in knjiznice ADL, kar se kaze v slabših zmogljivostih pri rudarjenju. Pri testiranju smo ugotovili, da so zmogljivosti na operacijskem sistemu Windows 7 pri rudarjenju ob enakih nastavitvah vedno za okoli 5% boljše od tistih na Linuxu. Krivdo za to verjetno lahko pripišemo slabše optimiziranim graficnim gonilnikom za operacijski sistem Linux. CGMiner prek konfiguracijskih datotek .conf omogoca zelo širok nabor nastavitev graficnih kartic in upravljanje vsake kartice posebej. Tako je med drugim mogoce nastavljati hitrosti delovanja ventilatorjev, frekvence delovanja jedra in pomnilnika, privzeto voltazo na vezju in podobno. Spodaj je prikazana vsebina naše koncne konfiguracije, ki daje dobre in stabilne rezultate skupaj z razlago pomembnejših parametrov in argumentacija uporabljenih vrednosti: • "gpu-threads":"1" Stevilo glavnih niti rudarskega procesa na kartico. Po naših ugotovitvah sta edini realno uporabni vrednosti 1 ali 2, meritve pa pokazejo, da je bolje imeti eno nit z višjo intenziteto rudarjenja kot dve vzporedni manj intenzivni niti. • "lookup-gap":"2" Velikost presledka pri shranjevanju podatkov v belezniški pomnilnik med izvajanjem funkcije Salsa20/8 [10]. Vrednost 1 bi pomenila vseh 1024 vrednosti hkrati shranjenih v pomnilniku, pri vrednosti 2 shranimo vsako drugo, pri 3 vsako tretjo in tako naprej. Pri bolj gosto shranjenih podatkih je potrebnega manj preracunavanja manjkajocih delov in s tem manj ciklov procesne enote. Tako je v primeru zelo velikega belezšnisškega RAČUNANJE KRIPTOGRAFSKIH VALUT Z GPE 5 pomnilnika optimalno izbrati nic presledka in nasprotno, pri visoki frekvenci procesorja in manjšega beleZniskega pomnilnika bolje izbrati vecji presledek. Za naše grafične kartice je optimalen izbor hramba vsake druge vrednosti. • "gpu-engine": "1025:947,1025:947,1065:947" Nastavitev višine frekvenc delovanja grafičnega jedra po karticah, locenih z vejico. Delovna frekvenca med rudarjenjem je z dvopicjem locena od ponastavitvene frekvence, na katero se vrnemo po koncanem rudarjenju. Tukaj se referencna kartica izkaze veliko bolj dovzetna za navijanje, saj kartici ASUS ne zmoreta dolgotrajnega stabilnega delovanja pod obremenitvijo na frekvencah, višjih od 1025 MHz, medtem ko kartica Gigabyte v dobrih razmerah stabilno prenese tudi frekvence, višje od 1075 MHz. Ta 5-odstotna razlika v hitrosti procesorskega takta se prevede tudi v 5-odstotno razliko v hitrosti racunanja zgošcenih vrednosti. Teoreticni optimum, ki bi ga dosegli pri frekvenci 1100 MHz in s tem popolni zasicenosti pomnilnika bi znašal 2560 * 1100 * 0.352 (nominalna ucinkovitost Hawaii jeder) = 991232 zgošcenih vrednosti oziroma priblizno 991000 zgošcenih vrednosti na sekundo. • "gpu-memclock": "1400:1250,1400:1250,1400:1250" Nastavitev višine frekvenc delovanja graficnega pomnilnika po karticah, locšenih z vejico. Delovna frekvenca med rudarjenjem je z dvopicjem locena od ponastavitvene frekvence, na katero se vrnemo po koncu rudarjenja. Za pomnilnik izdelovalca Elpida so priporocene optimalne frekvence delovanja med 1375 MHz in 1450 MHz. Tako latenca kot pasovna sširina, ki sta potrebni za optimalno zasicenost, sta na voljo ze pri 1400 MHz in nadaljnje višanje frekvence le še slabša rezultate. • "thread-concurrency":"20481" Mogoce število konkurencnih operacij za vsako nit. V teoriji je optimalno izbrati cim višji veckratnik števila pretocnih procesorjev na kartici, s katerim še lahko izvajamo operacije in mu prištejemo ali odštejemo 1. Po izcšrpnem testiranju smo si izbrali vrednost 20481, kar je 2560 * 8 + 1. Pri racunanju zgošcenih vrednosti z dvema ali vecš glavnimi nitmi je ta vrednost obcutno nizja. • "xintensity":"400" Kolicina dela, ki ga graficšna kartica mora opraviti, preden lahko vrne svoje rezultate. Optimalna vrednost je tik pod mejo preobremenjenosti kartice. Podana vrednost se zmnozši s sštevilom pretocšnih procesorjev na kartici, da dobimo sštevilo graficšnih niti. Ugotovili smo, da se ob vrednostih nad 400 hitrost racunanja zgošcenih vrednosti spreminja minimalno in dokaj naključno, čeprav je končna zmogljivost kartic pred preobremenitvijo presegla 1500 * 2560 = 4194304 grafičnih niti. • "cl-filename":"kalroth" Prilagojeno jedro grafičnega gonilnika. Prilagojena jedra vsebujejo različne optimizacijske prijeme pri implementaciji algoritma Sčrypt proof-of-work, kot je re-čimo razvijanje zank, drugačna definičija podatkovnih struktur, alternativen način preverjanja pogojev, spremenjen ritem oddajanja deležev in podobno. Izkaze se, da so izboljšave rezultatov nekonsistentne in se razlikujejo od ene fizične kartiče do druge. Tako na primer isto jedro, ki nam na eni kartiči ASUS izboljša hitrost računanja zgoščenih vrednosti za 2%, na drugi rezultat poslabša za 3%. O enakih ugotovitvah poročajo tudi drugi, ki si prizadevajo za tak načšin optimizačije. 4 Meritve V spečifikačijah kartič je navedena poraba energije pri polni obremenitvi za kartiči ASUS 300 W, za Giga-bytovo pa kar 600 W. Zadnje se izkaze za pretirano, saj v praksi med rudarjenjem kartiča porabi priblizšno 356 W elektrike in v kombinačiji s porabo vseh drugih komponent v sistemu skupna poraba ne preseze 1050 W, kar je razvidno iz slike 4. Takšen rezultat potrjuje optimalno izbiro uporabljenega napajalnika. MK1M BASEn-cH (a) Ena kartica (b) Dve kartici (c) Vse kartice Slika 4: Poraba elektrike med rudarjenjem Se ena zanimiva lastnost je kakovost ASIČ GPE jedra, ki nakazuje, v kolikšni meri napetost 'pušca' skozi jedro. Višja vrednost kakovosti jedra ASIČ v tem primeru (ne vedno) pomeni višjo stopnjo uhajanja in s tem slabše predispozicije za doseganje nizkih temperatur ob obremenitvi v normalnih okolisšcšinah. Pri karticah R9 290 praviloma variira med 60 in 100 %. Glede na naše meritve je referencšna kartica Gigabyte v rangu nizko 'pušcajocih' primerkov z 71.4 %, medtem ko sta obe kartici ASUS na tem podrocšju manj ucšinkoviti pri 84.8 Vecina konfiguracijskih parametrov, ki zagotavljajo optimalne rezultate pri racunanju zgošcenih vrednosti, je pridobljena z dolgotrajno metodo poizkusov in napak, ker so rezultati nakljucšni ali pa so ti rezultati linearno vezani na frekvenco delovanja jedra graficnih kartic. Zato sta od poprej ze podrobno opisanih parametrov, ki so se izkazali za optimalne, za graficšni prikaz za- 6 SEDMAK, DOBRAVEC nimiva le xintensity ter thread-concurrency. Pri meritvah spodaj prikazanih rezultatov so vsi drugi parametri nastavljeni na poprej Ze opisane vrednosti, ki zagotavljajo optimalno delovanje. Ko postopoma povečujemo xintensity opazimo, da se hitrost računanja zgoščenih vrednosti hitro poveča do neke sprejemljive vrednosti, optimum pa je dosezen pri xintensity = 400. Pri tej vrednosti je hitrost tudi stabilna. Ce xintensity še naprej povečujemo, povprečna hitrost računanja sičer ostane enaka, a med rudarjenjem čedalje bolj niha, nato pa začne po xintensity = 800 počasi padati. Graf vidimo na sliki 5. Slika 6: Graf hitrosti računanja zgoščenih vrednosti v odvisnosti od thread-concurrency rezultatov pri hitrosti računanju zgoščenih vrednosti. Slika 5: Graf hitrosti računanja zgoščenih vrednosti v odvisnosti od xintensity Na sliki 6 vidimo, da se tudi pri višanju parametra thread-concurrency hitrost račšunanja zgosščšenih vrednosti hitro dvigne, pride do optimuma in nato začne počasi padati. Treba je povedati, da so sičer same številke hitrosti računanja zgoščenih vrednosti ze pri thread-concurrency = 5120 blizu 930 Kh/s, toda z odstotkom sprejetih delezev blizu 0 %. Podobno je pri naslednjih vrednostih, ki smo jih tukaj za namen bolj realnega prikaza obtezili z njihovimi odstotki sprejetih delezev. Tabela 1 prikazuje povprečne rezultate rudarjenja v bazenu v enakem časovnem obdobju pri uporabi različšnih prilagojenih jeder gonilnikov. Pri tem spremljamo povprečšno hitrost preverjanja zgosščšenih vrednosti na sekundo, delovni obseg WU oziroma število poslanih preverjenih delezšev bloka, ki ga potrjujemo, delovno uporabnost WUE oziroma odstotek poslanih delezev ki so bili sprejeti kot pravilni, odstotek napak po kartičah R in temperaturo posameznih kartič med delovanjem. Pri interpretačiji tabele je treba biti pozoren na to, da večje število poslanih delezev ali pa najvišja povprečna hitrost računanja zgoščenih vrednosti ni nujno najboljši rezultat, saj sta pri potegovanju za nagrado pomembna odstotek sprejetih delezšev WUE in odstotek napak R. Iz tabele je razvidno, da različne optimizačije jedra ne prinašajo ponovljivih in uniformnih izboljšanj GPU0 GPU1 GPU2 Poročilo CGMiner Kalroth 931 Kh/s 935Kh/s 966 Kh/s WU 830 WU824 WU 874 R 3.8% R 2.5% R 3.0% 66°C 69°C 79°C 88°C VRM 89°C VRM 61°C VRM 2832 Kh/s WU 2528 WUE 88.6% 5.7/min Zuikkis 915 Kh/s 956 Kh/s WU 807 WU 835 63°C 78°C 79°C VRM 60°C VRM CRASH WUE 85.3 SternStunde 928 Kh/s 920 Kh/s 965 Kh/s WU 833 WU 833 WU 879 R 2.5% R 4.4 % R 0.7% 65°C 67°C 78°C 86°C VRM 87°C VRM 60°C VRM 2813 Kh/s WU 2545 WUE 88.5% 9.48/min Lantis 934 Kh/s 931 Kh/s 965 Kh/s WU 685 WU615 WU 1000 R 0% R 0% R 3.5% 65°C 68°C 78°C 86°C VRM 87°C VRM 60°C VRM 2830 Kh/s WU 2363 WUE 81.7% 9.13/min Kombinačija 925 Kh/s 940 Kh/s 966 Kh/s WU 831 WU 860 WU 843 R 1.7% R 1.5% R 2% 64°C 67°C 78°C 85°C VRM 86°C VRM 60°C VRM 2831 Kh/s WU 2531 WUE 88.6% 5.68/min Tabela 1:: Primerjava zmogljivosti rudarjenja med prilagojenimi jedri 5 Sklep Opisali smo ideološko in tehnično ozadje zasnove ter delovanja kriptografskih valut, predstavili njihove prednosti, slabosti in ranljivosti. Uspešno smo sestavili in skonfigurirali napravo za potrjevanje blokov transakcij kriptografskih valut, ki to pocne s pomocjo algoritma Scrypt proof-of-work. Podrobno smo predstavili uporabljeno strojno opremo, nacšrt nasše naprave in konfiguracijo strojne opreme. Predstavili smo tudi uporabljeno programsko opremo, konfiguracijo le-te ter razlozšili in argumentirali izbrane nastavitve ter pokazali izsledke meritev ucšinkovitosti sestavljene naprave. Ugotovili smo, da smo se s pomocšjo nasše konfiguracije RAČUNANJE KRIPTOGRAFSKIH VALUT Z GPE 7 pri eni od grafičnih kartic zelo približali teoretičnemu maksimumu zmogljivosti, medtem ko nas je pri preostalih dveh ovirala napaka izdelovalca v zasnovi kartic, zaradi katere se je na njih pregreval regulator napetosti. Ugotovili smo tudi, da poseganje v jedrno implementacijo algoritma Scrypt proof-of-work z namenom optimizacije ne daje konsistentnih in sledljivih rezultatov. Podrobnejša razlaga tehnologij in algoritmov opisanih v tem clanku, ter nekaj zanimivih informacij o področju kriptovalut najdemo v diplomskem delu avtorja [11]. Treba je povedati, da je bila naša naprava aktualna in dobicškonosna v cšasu sestavljanja ter testiranja, zdaj pa je zastarela in se namesto graficšnih sistemov za potrjevanje transakcij vecinoma uporabljajo sistemi ASIC s strojno realizacijo algoritmov. Vsekakor so kriptovalute zanimivo in razvijajoce se področje. Rudarjenje se je v dveh letih razvilo v svetovno manijo. Od zacetkov rudarjenja na centralnih procesnih enotah domacih racunalnikov smo prišli najprej do specializiranih domacših rudarskih naprav, kot je opisana v tem clanku, in koncno do specializirane strojne implementacije potrjevalnih algoritmov na racunalnikih FPGA in ASIC. Masovna proizvodnja zadnjih je dvignila zahtevnosti tako visoko, da je rudarjenje postalo dobickonosno le še za lastnike celih hangarjev takšnih racšunalnikov, ki za napajanje potrebujejo mocš prave male elektrarne. K temu sta delno pripomogli tudi konsolidacija in stabilizacija cene Bitcoina, ki trenutno znasša tretjino vrednosti tiste pred enim letom. Tako je recimo decembra 2013 dnevni donos naše naprave, katere najvecja moc racunanja zgošcenih vrednosti je okoli 2,8Mh/s, znašal priblizno $60/dan, v casu pisanja tega clanka pa le še $0,30/dan. Za doseganje istih donosov bi trenutno potreboval sistem ASIC z mocšjo okoli 800Mh/s, ki pa ni dobavljiv in katerega cena bi znašala okoli 9000 ameriških dolarjev. Pri tem je seveda treba uposštevati tudi razpolovne dobe nagrad za potrjene bloke in volatilnost vrednosti valut. Polozšaj se v svetu kriptografskih valut izjemno hitro spreminja in tako rekocš nemogocše je predvideti prihodnost. Tako so zdaj glavni igralci v tem segmentu prav prvotni snovalci in izdelovalci vezij ASIC, ki posameznih naprav ne prodajajo vecš koncšnim uporabnikom, temvecš sami postavljajo svoje centre za rudarjenje in nato po nacšelu oblacšnih storitev oddajajo moc racunanja zgošcenih vrednosti koncnim uporabnikom. Zaradi ekolosške in ekonomske smotrnosti ti centri temeljijo na podrocjih s cim cenejšo elektricno energijo, kar posledicšno ustvarja centralizacijo sistema, proti kateri se je Satoshi Nakamoto tako vneto boril. Kljub vsemu so moznosti za razvoj kriptografskih valut in uporabo le-teh v vsakdanjem zivljenju tako rekoc neskoncšne. Rast sštevila uporabnikov, trgovcev in trzšne kapitalizacije so indikatorji, ki kazejo na dolgorocno stabilizacijo in sprejetje kriptografskih valut. Manjša je tudi volatilnost vrednosti, kar posledicno vodi v vecje zaupanje pri uradnih institucijah ter drzavah. Z malo sreče in pravilnim ravnanjem odgovornih bi v daljni prihodnosti lahko prišlo do fuzije kriptografskih valut in uradnih denarnih valut ali celo popolne nadomestitve zadnjih. Literatura [1] Financial Action Task Force (FATF), Virtual currencies: key definitions and potential AML/CFT risks, FATF Report June, 2014 [2] R. Ali, J. Barrdear, R. Clews, J. Southgate, Innovations in payment technologies and the emergence of digital currencies, Bank of England Quarterly Bulletin Q3, 2014 [3] S. Nakamoto, Bitcoin: A peer-to-peer electronic cash system, https://bitcoin.org/bitcoin.pdf, 2008 [4] L. Dadda, M. Macchetti, J. Owen, An ASIC design for a high speed implementation of the hash function sha-256 (384, 512), In Proceedings of the 14th ACM Great Lakes symposium on VLSI, pages 421-425 ACM Press April, 2004 [5] Č. Percival, Stronger key derivation via sequential memory-hard functions, http://www.tarsnap.com/scrypt/scrypt.pdf, 2009 [6] Č. Lee, Litecoin, https://litecoin.info/litecoin.pdf, 2011 [7] The National Institute of Standards and Technology (NIST), Third-round report of the sha-3 cryptographic hash algorithm competition, http://nvlpubs.nist.gov/nistpubs/ir/2012/NIST.IR.7896.pdf, 2012 [8] P. Gauravaram, L. R. Knudsen, K. Matusiewicz, C. Rechberger, M. Schlaeffer, S. S. Thomsen, F. Mendel Gr0stl - a SHA-3 candidate, http://www.groestl.info/groestl.pdf, 2011 [9] Č. Kolivas, CGMiner - The combined CPU, GPU, FPGA, and ASIC miner for bitcoin, litecoin, and altcoins written in C, https://github.com/ckolivas/cgminer, 2011 [10] D. J. Bernstein, The salsa20 family of stream ciphers, http://cr.yp.to/snuffle/salsafamily-20071225.pdf, 2011 [11] L. Sedmak, Računanje kriptografskih valut z GPE, Fakulteta za racunalništvo in informatiko, 2014 Luka Sedmak je diplomiral s podrocja informatike na Fakulteti za racunalništvo in informatiko Univerze v Ljubljani. Njegovi interesi so predvsem na podrocjih informacijske varnosti, kriptografije in racunalniških omrezij. Tomaž Dobravec je docent na Fakulteti za racunalništvo in informatiko Univerze v Ljubljani, kjer sodeluje v pedagosškem procesu na podrocšjih programiranja, algoritmov in operacijskih sistemov. Raziskovalno se ukvarja z razvojem in analizo algoritmov, s teorijo programskih jezikov in z vzporednim racšunanjem.