Vom începe să vorbim despre construirea blocurilor criptografice folosite în protocolul Bitcoin. Toate acestea, produc caracteristici definitorii ale Bitcoin ca monedă digitală și sistem de plăți.
- Criptografia cheii publicii
În 1976, Diffie și Hellman introduc conceptul criptografiei cheii publice, în care un utilizator are atât o cheie publică, cât și privată. Primitorul mesajului își face publică cheia publică care poate fi folosită de oricine dorește să trimită un mesaj primitorului. Cel care trimite mesajul utilizează pur și simplu cheia publică pentru a codifica un mesaj într-un text cu cifru, iar primitorul folosește cheia privată pentru a decodifica textul respectiv cu cifru în originalul mesaj. Sub această schemă, cel care trimite și care primește nu trebuie să aibă un canal secret de comunicare. Secretul mesajului codificat este conservat chiar dacă atacatorul cunoaște cheia codificării, atât timp cât cel care trebuie să primească mesajul își ține secretă cheia privată.
Această schemă asimetrică a criptografiei introdusă de Diffie și Hellman a fost în mod special pliabilă pe aplicațiile de securitate ale sistemelor deschise precum internetul, unde cel care trimite și cel care primește probabil că nu se cunosc sau nu au avut ocazia de a seta un canal privat de comunicare. Această schemă se bazează pe faptul că codificarea este ușoară, însă reversibilitatea acesteia prin decodificare este irealizabilă din punct de vedere computerizat pentru oricine altcineva decât primitorul.
Prima implementare a lui Diffie și Hellman a fost criptosistemul cu cheie publică RSA, divizată de Ronald Rivest în 1977. Pentru întregul algoritm RSA, vă rugăm să faceți o mică căutare pe net după întreg articolul publicat de Rivest.
- Semnăturile digitale
Codificarea și decodificarea asigură securitatea prin prevenirea adversităţilor în a accesa mesajul trimis de la cel care trimite către cel care primește. Cu toate acestea, autentificarea mesajului trebuie utilizată în aceeași conjunctură cu cheia publică a codificării. Semnătura digitală este un mecanism popular pentru autentificarea mesajului și au trei proprietăți dorite: îi oferă posibilitatea celui care primește mesajul să valideze faptul că trimițătorul corect a trimis de fapt acel mesaj ( autentificare ), că trimițătorul nu are cum să nege faptul că a trimis mesajul respectiv ( non-renegare ), și că mesajul nu a fost modificat în niciun fel de altcineva ( integritate ). Pentru a se ajunge la aceste lucruri, trimițătorul crează o semnătură digitală folosindu-și cheia privată și trimite mesajul „semnat” către cel care îl va primi. Atât timp cât cel care primește mesajul cunoaște cheia publică a celui care l-a trimis, acesta poate folosi un algoritm de verificare pentru a vedea dacă mesajul a fost semnat de proprietarul original și nu a fost modificat în vreun fel.
Semnăturile digitale sunt folosite la nivel global în tranzacțiile electronice datorită autenticităţii mesajului care poate fi verificat de oricine care are cheia publică a celui care îl trimite. Un alt avantaj este faptul că semnătura digitală este verificabilă în mod public – dacă cel care primește verifică semnătura unui mesaj primit ca fiind legitim, atunci toate celelalte părți ( precum intermediari sau părți terțe ) care pot primi același mesaj ar trebui să îi valideze autenticitatea. În special, protocolul Bitcoin folosește ECDSA ( Elliptic Curve Digital Signature Algorithm ).
- Funcțiile hash
Pentru a suplimenta tot ceea ce am spus până acum, protocolul Bitcoin are de asemenea o funcție hash criptografică SHA-1. Criptografia cheii publice și schema semnăturii digitale folosesc în mod tipic funcții hash în algoritmii lor, care schimbă șirul de caractere de dimensiune arbitrară în unele mai scurte de dimensiune fixă. De exemplu, funcția hash folosită la nivel global SHA-1 produce o valoare de 160 de biți. Mai bine decât semnarea întregului mesaj, este mult mai sensibilă la codificarea unei versiune hash a mesajului. Ideal, această funcție hash ar trebui să aibă o singură direcție: având o lungime fixă a șirului de caractere, ar trebui să fie foarte dificil să se găsească un șir de caractere cu aceeași ieșire. În mod adițional, funcția hash ar trebui să fie rezistentă la „coliziuni”, lucru care ar fi foarte greu de realizat din punct de vedere computerizat pentru a găsi două mesaje care împărtășesc aceeași valoare hash.
Cu alte cuvinte, ar fi imposibil ca algoritmul să găsească x , y, x ≠ y cu H(x) = H(x’).