Algoritmul semnăturii digitale a curbei eliptice

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În criptografie , algoritmul de semnătură digitală Elliptic Curve ( ECDSA ) oferă o variantă a algoritmului de semnătură digitală (DSA) utilizând criptarea eliptică . A fost propus pentru prima dată în 1992 de Scott Vanstone. In 1998 a devenit un ISO standard (ISO 14888), în 1999 a fost acceptată ca ANSI standard (ANSI X9.62) , iar în 2000 a devenit un IEEE standardul (IEEE P1363 2) [1] .

Dimensiunea cheii și a semnăturii în comparație cu DSA

La fel ca în general în criptografia cu curbă eliptică, dimensiunea de biți a cheii publice necesară ECDSA este de aproximativ două ori mai mare decât nivelul de securitate în biți. De exemplu, cu un nivel de securitate de 80 de biți (maximum de operațiunile necesare pentru ca un atacator cibernetic să găsească cheia privată) dimensiunea unei chei publice ECDSA ar fi de 160 biți, în timp ce dimensiunea cheii publice DSA este de cel puțin 1024 biți. Dimensiunea semnăturii este aceeași pentru ECDSA și DSA: pic, unde este nivelul de securitate măsurat în biți; în exemplul anterior (cu = 80 biți), dimensiunea semnăturii este de 320 biți.

Algoritm de generare a semnăturilor

Să presupunem că Alice dorește să îi trimită lui Bob un mesaj semnat digital. Inițial trebuie să fie de acord cu parametrii curbei . Pe lângă câmp și ecuația curbei, este necesar , un punct de bază de ordinul întâi pe curbă; este ordinea multiplicativă a punctului .

Parametru
CURBE câmpul și ecuația curbei eliptice utilizate
G. punctul de bază al curbei, un generator al curbei eliptice având mare ordinul întâi n
n ordinul întreg al lui G , astfel încât

Alice generează o pereche de chei constând dintr-o cheie privată , ales aleatoriu în interval și o cheie publică . Este folosit pentru a indica multiplicarea unui scalar cu un punct de pe curba eliptică.

Pentru a genera o semnătură pentru mesaj , Alice urmează acești pași:

  1. calculati , unde HASH este o funcție hash criptografică , cum ar fi SHA-2.
  2. Este sirul format din bucata cea mai stanga a , unde este este lungimea în biți a grupului de ordine .
  3. Selectați aleator criptografic-sigur un număr întreg din interval .
  4. Calculați punctul curbei .
  5. calculati . De sine , reveniți la pasul 3.
  6. calculati . De sine , reveniți la pasul 3.
  7. Semnătura este cuplul .

Tehnica de calcul , șirul rezultând din trebuie convertit în număr întreg. Rețineți că poate fi mai mare decât dar nu mai mult . [2]

Ca standarde stabilite, este crucial ca acestea să fie selectate diferit pentru semnături diferite, altfel ecuația din pasul 6 poate fi rezolvată , cheia privată: dați două semnături Și , angajează același lucru pentru două mesaje diferite Și se deschide către o vulnerabilitate la atac. Un atacator poate calcula Și , și de atunci (toate operațiunile din acest paragraf sunt efectuate în modul ) atacatorul poate găsi . De cand , atacatorul poate calcula acum cheia privată . Această implementare incorectă a fost utilizată, de exemplu, pentru a extrage semnătura digitală utilizată în consola PlayStation 3 . [3]

O altă situație în care semnarea ECDSA poate scurge chei private este când este generat de un generator de numere aleatorii defect. Un defect similar a dus la pierderea de fonduri din unele portofele bitcoin pe platforma Android în august 2013. [4] Pentru a se asigura că este unic pentru fiecare mesaj, puteți ocoli complet generația aleatorie și puteți obține o semnătură într-un mod determinist prin calcul din mesaj și din cheia privată. [5]

Algoritm de verificare a semnăturii

Pentru a autentifica semnătura lui Alice, Bob trebuie să aibă o copie a cheii publice . Bob poate verifica asta este un punct valid pe curbă după cum urmează:

  1. Verifică asta nu este același cu elementul neutru , și că coordonatele sale sunt la fel de valabile.
  2. Verifică asta aparțin curbei.
  3. Verifică asta .

După aceea, Bob va face următoarele:

  1. Verifică asta Și sunt numere întregi aparținând . În caz contrar, semnătura nu este validă.
  2. Calcula , unde HASH este aceeași funcție utilizată în procesul de generare a semnăturilor.
  3. Este sirul format din bucata cea mai stanga a .
  4. calculati .
  5. calculati .
  6. Calculați punctul curbei .
  7. Semnătura este valabilă dacă , altfel nu este acceptat.

Rețineți că atunci când utilizați trucul lui Shamir , o sumă de două multiplicări scalare poate fi calculat în mai puțin timp decât cel necesar dezvoltării independente a celor două multiplicări scalare. [6]

Corectitudinea algoritmului

Funcționarea corectă a algoritmului de verificare nu este banală. Indicați cu punctul curbei calculat la pasul 6 al verificării,

Înlocuind definiția cheii publice ,

Înmulțirea unui punct al curbei eliptice cu un scalar se bucură de proprietatea distributivă,

Prin extinderea definiției Și de la pasul 5 al algoritmului de verificare,

Adunare ,

Prin extinderea definiției de la pasul 6 al algoritmului de generare a semnăturilor,

Deoarece inversul inversului este egal cu elementul original, iar produsul inversului unui element și elementul în sine este identitatea, expresia poate fi astfel simplificată

Din definiția lui , acesta este pasul 6 al algoritmului de verificare.

Cu toate acestea, acest lucru arată doar că un mesaj semnat corect va trece de verificare; sunt necesare multe alte proprietăți pentru un algoritm de semnătură sigur.

Siguranță

În decembrie 2010, un grup care se numea fail0verflow a anunțat că a descoperit cheia privată ECDSA utilizată de Sony pentru a semna software-ul consolei Playstation 3 . Cu toate acestea, acest atac a funcționat deoarece Sony nu a implementat corect algoritmul, era static în loc de aleatoriu. După cum sa menționat în secțiunea Algoritm de generare a semnăturii de mai sus, acest lucru îl face soluționabil iar întregul algoritm este inutil. [7]

La 29 martie 2011, doi cercetători au publicat un document IACR [8] care demonstrează că este posibil să se recupereze o cheie privată TLS a unui server folosind OpenSSL care efectuează autentificarea ECDSA pe un câmp binar printr-un atac de sincronizare . [9] Vulnerabilitatea a primit o remediere în versiunea OpenSSL 1.0.0e. [10]

În august 2013, s-a făcut public faptul că unele implementări ale clasei Java SecureRandom au generat uneori coliziuni de valoare . După cum sa discutat mai sus, acest lucru a permis rezolvarea cheilor private, deschizând astfel posibilitatea de a fura bitcoini din aplicațiile Android Wallet, care se bazau pe ECDSA pentru autentificarea tranzacțiilor. [11]

Această problemă poate fi rezolvată printr-o generație deterministă de , așa cum este descris de RFC 6979.

Notă

  1. ^ Criptosisteme bazate pe curbe eliptice , pe www.di.unisa.it . Adus la 17 ianuarie 2017 .
  2. ^ NIST FIPS 186-4, iulie 2013, pp. 19 și 26
  3. ^ Console Hacking 2010 - PS3 Epic Fail Arhivat 15 decembrie 2014 la Internet Archive ., Pagina 123–128
  4. ^ Vulnerabilitate de securitate Android , la bitcoin.org . Adus pe 24 februarie 2015 .
  5. ^ RFC 6979 - Utilizarea deterministă a algoritmului de semnătură digitală (DSA) și a curbei eliptice Algoritmul de semnătură digitală (ECDSA) , la tools.ietf.org . Adus pe 24 februarie 2015 .
  6. ^ The Double-Base Number System in Elliptic Curve Cryptography ( PDF ), pe lirmm.fr . Adus la 22 aprilie 2014 .
  7. ^ Mike Bendel, hackerii descriu securitatea PS3 ca fiind epică, obțin acces nelimitat , Exophase.com, 29 decembrie 2010. Accesat pe 5 ianuarie 2011 .
  8. ^ Cryptology ePrint Archive: Report 2011/232 , at eprint.iacr.org . Adus pe 24 februarie 2015 .
  9. ^ Vulnerability Note VU # 536044 - OpenSSL scurge cheia privată ECDSA printr-un atac de sincronizare la distanță
  10. ^ ChangeLog , pe openssl.org , OpenSSL Project. Adus la 22 aprilie 2014 .
  11. ^ 12 august 2013 la 00:43, Richard Chirgwin tweet_btn (), Android bug batters Portofele Bitcoin , pe theregister.co.uk . Adus la 17 ianuarie 2017 .

Bibliografie

Elemente conexe

linkuri externe