Minarea Bitcoin cu Creion și Hârtie: 0,67 Hash-uri pe Zi

October 6, 2014 by in category Informatii with 0 and 0
Home > Blog > Informatii > Minarea Bitcoin cu Creion și Hârtie: 0,67 Hash-uri pe Zi

M-am decis să văd cât de practic ar fi să minez bitcoini folosind creionul și hârtia. Se pare că algoritmul SHA-256 folosit la minare este destul de simplu și se poate face manual. În mod nesurprinzător, procesul este foarte lent în comparație cu minarea hardware și este total nepractic. Dar realizarea algoritmului în mod manual este o bună modalitate de a înțelege exact cum funcționează.

minarea-bitcoin-cu-creion-si-hartie

O runda de minare bitcoin cu Sha 256

Procesul minării

Minarea bitcoin este o parte esențială a securității sistemului Bitcoin. Ideea e că minerii Bitcoin grupează o mulțime de tranzacții într-un bloc, apoi efectuează în mod repetat o operațiune criptografică numită hashing, de mii și milioane de ori, până când cineva găsește o valoare hash specială extrem de rară. În acest moment, blocul a fost minat și devine o parte a blockchain-ului Bitcoin. Activitatea de hash nu realizează în sine, nimic util, dar pentru că găsirea unui bloc reușit  este atât de dificilă, asigură faptul că nimeni nu are resurse pentru a prelua sistemul Bitocin. Pentru mai multe detalii legate de minare, vezi acest articol despre minarea Bitcoin.

O funcție criptografică hash ia un bloc de date de intrare și creează un output mai mic. Funcția hash esre concepută în așa fel încât nu există nici o “scurtătură” pentru a obține rezultatul dorit, trebuie să păstrezi blocurile hash până găsești unul prin forță brută, care funcționeză. Pentru Bitcoin, funcția hash este o funcție numită SHA-256. Pentru mai multă securitate, Bitcoin aplică funcția SHA-256 de două ori, un proces cunoscut sub numele de dublu-SHA-256.

În Bitcoin, un hash reușit este unul care începe cu suficiente zerouri.1 Așa cum rar găsești un număr de telefon sau un număr de înmatriculare cu multiple zerouri, rar găsești un hash care să înceapă cu mai multe zerouri. Dar Bitcoin este exponențial mai greu. În prezent, un hash reușit începe cu aproximativ 17 zerouri, deci numai unul din 1.4×1020 hash-uri va fi unul reușit. Cu alte cuvinte, găsirea unui hash de succes este mai dificilă decât găsirea unui fir de nisip din toate firele de nisip de pe Pământ.

Diagrama de mai jos prezintă un bloc în blockchain-ul Bitcoin alături de hash-ul său. Biții galbeni sunt hash-uiți pentru a genera block-ul hash. În acest caz, hash-ul rezultat începe cu suficiente zerouri, deci minatul a fost unul reușit. Cu toate acestea, hash-ul va fi aproape întotdeauna nereușit. În acest caz, minerul schimbă valoarea nonce sau conținutul celuilalt bloc și încearcă din nou.

structura-unui-bloc-bitcoin

Structura unui bloc Bitcoin

Algoritmul hash SHA-256 folosit de Bitcoin

Algoritmul hash SHA-256 are blocuri de intrare de 512 biți (de exemplu, 64 de bytes), combină datele în mod criptografic și generează un output de 256 de biți (32 byte). Algoritmul SHA-256 constă într-o rundă relativ simplă repetată de 64 de ori. Diagrama de mai jos arată o rundă, care are opt intrări de 4-byte, de la A la H, efectuează câteva operații, și generează noi valori de la A la H.

o-runda-de-minare-sha256

O runda din algoritmul SHA 256 care arata cele 8 blocuri A-H, pasii de procesare precum si blocurile noi

Căsuțele albastre  amestecă valorile în moduri non-lineare care sunt greu de analizat criptografic. Deoarece algoritmul folosește câteva funcții diferite, descoperirea unui atac este mai dificilă. (Dacă ai putea să descoperi o comandă rapidă matematică pentru a genera hash-uri de succes, ai putea prelua sistemul Bitcoin.)

Căsuța majoritară Ma privește biții de A, B, și C. Pentru fiecare poziție, dacă majoritatea biților sunt 0, va emite 0. În caz contrar, va ieși 1. Adică, pentru fiecare poziție în  A, B, și C, uită-te la numărul de biți 1. Dacă este zero sau unu, iese 0. Dacă e doi sau trei, iese 1.

Căsuța Σ0 rotește biții A pentru a forma trei versiuni rotite, apoi îi însumează împreună în modulo 2. Cu alte cuvinte, dacă numărul de 1 biți este impar, suma este 1; în caz contrar, este 0. Cele trei valori din sumă sunt rotite A de 2 biți, 13 biți și 22 biți.

Căsuța Ch alege biții de ieșire pe baza valorii de intrare E. Dacă un bit E este 1, bitul de ieșire este bitul F corespunzător. Dacă un bit E este 0, bitul de iesire este bitul G corespunzător. În acest fel, biții F și G sunt amestecați împreună pe baza valorii E.

Următoarea căsuță Σ1 rotește și însumnează biții E, la fel ca Σ0, doar că schimburile sunt 6, 11, și 25 de biți.

Căsuțele roșii efectuează 32 de biți în plus, generând noi valori pentru A și E. Intrarea Wt se bazează pe datele de intrare, ușor prelucrate. (Acesta este cazul în care blocul de intrare este alimentat în algoritm). Intrarea Kt este o constantă definită pentru fiecare rundă.2

După cum se poate vedea în diagrama de mai sus, doar A și E unt modificate într-o rundă. Celelalte valori trec neschimbate, cu vechea valoare A devenind noua valoare B, vechea valoare B devenind noua valoare C și așa mai departe.

Deși fiecare rundă de SHA-256 nu schimbă prea mult datele, după 64 de runde, datele de intrare vor fi complet amestecate.3

Minarea manuală

Video-ul de mai jos arată cum pașii de hash SHA-256 descriși mai sus pot fi efectuați cu creion și hârtie. Efectuez prima rundă de hash pentru a mina un bloc. Completarea acestei runde mi-a luat 16 minute și 45 de secunde.

Să explic ce e pe hârtie: am scris fiecare bloc A prin H, în hexagonal, pe un rând separat și am pus valoarea binară mai jos. Principala operație apare sub C, iar schimburile și Σ0 apar deasupra rândului A. De asemenea, operația aleasă apare sub G, și schimburile și Σ1 mai sus de E. În dreapta jos, o mulțime de termeni se adaugă la un loc, corespunzând primelor trei căsuțe roșii de sume. În partea dreaptă sus, suma este folosită pentru a genera noua valoare A, iar în mijloc dreapta, această sumă este folosită pentru a genera noua valoare E. Acești pași corespund cu toții diagramei și discuției de mai sus.

Am realizat manual o altă rundă hash, ultima rundă pentru a termina hashingul blocului Bitcoin. În imaginea de mai jos, rezultatul hash este evidențiat cu galben. Zerourile din acest hash arată că este un hash reușit. Reține că zerourile sunt la sfârșitul hash-ului. Asta pentru că Bitcoin inversează într-un mod neconvenavil biții generați de SHA-256.4

ultima-runda-de-minare-sha256

Ultima runda de minat bitcoin, arata un bloc minat cu succes

Ce înseamnă asta pentru minarea hardware

Fiecare pas al SHA-256 este foarte simplu de aplicat în logica digitală – operațiuni Boolean simple și 32 de biți în plus. (Dacă ai studiat electronică, probabil poți vizualiza deja circuitele.) Din acest motiv, cipurile ASIC pot implementa  foarte bine algoritmul  SHA-256 în hardware, punând sute de runde pe un cip în paralel. Imaginea de mai jos arată un cip de minare care rulează la 2-3 miliarde de hash-uri pe secundă; Zeptobars are mai multe fotografii.

cipul-bitfury-de-minat-bitcoin

O bucata din chipul BitFury. Mineaza bitcoin cu viteza de 2-3 Ghas / secunda

În schimb, Litecoin, Dogecoin, și alți altcoini, folosesc algoritmul scrypt hash, care este anumit conceput pentru a fi dificil de pus în aplicare în hardware. Stochează 1024 valori hash diferite în memorie, iar apoi le combină în moduri imprevizibile pentru a obține rezultatul final. Ca urmare, este necesară mai multă memorie și circuite pentru scrypt decât pentru hash-urile SHA-256. Poți vedea impactul dacă te uiți la minarea hardware, care este de mii de ori mai lentă pentru scrypt (Litecoin, etc), decât pentru SHA-256 (Bitcoin).

Concluzii

Algoritmul SHA-256 este extrem de simplu, destul de ușor de realizat manual. (Curba eliptică a algoritmului pentru semnarea tranzacțiilor Bitcoin ar fi foarte greu de realizat manual, deoarece conține o mulțime de numere întregi multiplicate de 32 bytes.) O Rundă de SHA-256 făcută manual, mi-a luat 16 minute și 45 de secunde. În acest caz, hashingul unui bloc complet Bitcoin (128 de runde)3 ar dura 1,49 de zile, pentru o rată de distribuire de 0,67 de hash-uri pe zi (deși, proabil m-aș mișca mai repede practicând). Prin comparație, actualul hardware de minare Bitcoin realizează mai multe terahash-uri pe secundă, aproape de un trilion de ori mai rapid decât hahsingul meu manual. E inutil să mai precizez că minarea manuală Bitcoin nu este deloc practică.5

Un utilizator Reddit m-a întrebat despre consumul de energie. Nu implică mult efort fizic, deci presupunând că rata metabolică de repaus este de 1500kcal/zi, hashingul manual lucrează la aproape 10 megajouli/hash. Un consum normal de energie pentru hardware-ul de minare este de 1000 megahash-uri/joul. Deci, am mai puțină energie cu un factor de 10^16 sau 10 cvadrilioane. Următoarea înterbare e legată de costul energiei. O sursă ieftină de energie sunt gogoșile la 0,23 dolari pentru 200 de kcalorii. Energia electrică este aici de 0,15 dolari/kilowatt-oră, care este mai ieftină cu un factor de 6,7 – mai aproape decât mă așteptam. Astfel, costul meu de energie pe hash este de aproape 67 cvadrilioane de ori față de minarea hardware. E clar că nu am să fac avere din minatul manual și nici nu am inclus cheltuielile cu hârtia și creioanele de care aș avea nevoie.

Note

  1. Nu e chiar numărul de zerouri de la începutul hash-ului cel care contează. Mai precis, hash-ul trebuie să fie mai mic decât o anumită valoare care depinde de nivelul actual de dificultate Bitcoin.
  2. Sursa constantelor folosite în SHA-256 este interesantă. NSA a conceput algortimul SHA-256 și a ales valorile pentru aceste constante, deci de unde știi că nu au ales valori speciale care le permite să rupă hash-ul? Pentru a evita suspiciuinile, valorile hash inițiale vin din rădăcinile pătrate ale primelor 8 numere prime, iar valorile Kt provin de la rădăcinile cubice ale primelor 64 de numere prime. Din moment ce aceste constante provin de la o singură formulă, poți avea încerede că NSA nu a întreprins nimic dubios (cel puțin cu constantele).
  3. Din păcate, hash-ul SHA-256 funcționează pe un bloc de 512 biți, dar header-ul blocului Bitcoin este mai mare de 512 biți. Astfel, un al doilea set de 64 runde hash SHA-256 este necesar în a doua jumătate a blocului Bitcoin. Apoi, Bitcoin folosește dublu-SHA-256, astfel încât o a doua aplicare a SHA-256 (64 de runde) se face la rezultat. Adăugând asta, hashingul unui bloc Bitcoin oarecare implică 192 de runde în total. Există totuși o scurtătură. Minarea presupune hashingul aceluiași bloc de mai multe ori, schimbând doar nonce-ul care apare în a doua jumătate a blocului. Astfel, minatul poate refolosi rezultatul din hashingul primilor 512 biți, iar hashingul unui bloc Bitcoin, necesită de obicei, 128 de runde.
  4. Evident, nu am avut doar un noroc incredibil să închei cu un hash reușit, Am început procesul de hash cu un bloc care a fost deja minat cu succes. În special, l-am folosit pe cel afișat mai devreme în acest articol, #286819.
  5. O altă problemă cu minatul manual este că noile blocuri sunt minate cam din 10 în 10 minute, deci chiar dacă aș fi reușit să minez un bloc, ar fi fost total depășit (lăsat singur) până aș fi terminat eu.

Articolul original a fost publicat aici.

Minarea Bitcoin cu Creion și Hârtie: 0,67 Hash-uri pe Zi
Voteaza acest articol

Add comment

Powered by Bitcoin X Romania © 2014. Contact | Despre noi.