Voi explica cum funcționează semnăturile care implică curbe eliptice. Criptomonedele folosesc în cea mai mare parte curbe eliptice din cauza dimensiunii mai mici a semnăturilor care trebuie publicate pe blockchain.
Când o cheie privată, care este doar un număr întreg mare, este mapată la o cheie publică (care este un punct pe o curbă eliptică specificată), această mapare are anumite proprietăți matematice. Rețineți că această mapare se face în așa fel încât să fie „un sens”. Puteți mapa cu ușurință de la cheia privată la punctul de curbă eliptică a cheii publice, dar practic nu puteți inversa această operație.
În primul rând, punctele de pe curba eliptică vor forma un grup abelian sub o operațiune pe care o numim „adăugare”. Aceasta înseamnă că puteți face ceea ce arată ca o simplă algebră cu punctele. Puteți lua puncte $A$ și $B$, adaugă-le pentru a obține punct $C$, și veți putea observa asta $A+B==B+A$. Rețineți că definim doar operații de adunare și scădere și nu putem „înmulți” puncte sau „împărți” puncte cu alte puncte.
În al doilea rând, mapările numerelor întregi ale cheii private la puncte sunt „omomorfe aditiv”. Aceasta înseamnă că dacă aveți cheile private $a$ și $b$, care se mapează la cheile publice $A$ și $B$, apoi cheia publică a $a+b$ va fi egală cu ambele $A+B$ și a $C$.
Maparea unei chei private la o cheie publică este pur și simplu de a lua o cheie privată $a$ și calculați cheia publică $aG$, ceea ce înseamnă a adăuga punctul binecunoscut $G$ la sine $a$ ori. Deoarece ar dura o veșnicie pentru a calcula efectiv acest lucru adăugând G la sine $a$ ori, sunt disponibile comenzi rapide matematice. Deoarece aceste comenzi rapide există doar pentru a efectua înmulțirea rapid, dar nu pentru a merge înapoi și a determina cheia privată din oricare ar fi rezultatul înmulțirii, aceasta devine unidirecțională "trapă"funcția.
Acum, imaginați-vă că am cheia privată $a$ și cheia publică $A=aG$și îmi prezinți o provocare. Vii cu un număr întreg aleatoriu cu cheie privată $x$și îmi cereți să vă dau un număr întreg de răspuns $y$ astfel încât să puteți verifica asta $xA==yG$. Voi putea trece provocarea ta doar dacă cunosc cheia privată $a$, ceea ce mi-ar permite să calculez $y=xa$. Acest lucru s-ar verifica pentru că atunci $xA==xaG==yG$.
Ceea ce am descris mai sus are două defecte. Prima este că, odată ce trec provocarea, puteți calcula cu ușurință cheia mea privată $a$ la fel de $y/x$.
Al doilea defect este că am nevoie să-mi oferi o provocare, mai degrabă decât pur și simplu să-ți pot oferi o semnătură fără a fi nevoie să interacționezi cu tine.
Primul defect este remediat prin includerea unui „factor orb”, care îmi permite să trec provocarea fără a-mi dezvălui cheia privată. De exemplu, cu o semnătură Schnorr, aleg o cheie privată aleatorie $k$, dezvăluie numai $K=kG$, și apoi vă cer provocarea dvs $x$. Apoi produc o valoare $y$ astfel încât să puteți verifica asta $xA==K+yG$. Acum, după ce voi dezvălui $y$ pentru a trece provocarea, știi că aș fi putut doar să calculez $y$ cu cunoștințe despre cheia mea privată $a$, dar nu poți să-mi calculezi cheia privată fără să-mi cunoști factorul secret orbitor $k$.
Al doilea defect este remediat prin utilizarea FiatâShamir euristic pentru a crea o provocare folosind o funcție care servește drept „Oracol aleatoriu" care îmi permite să vin cu provocarea aleatorie fără o modalitate de a înșela. În cazul schemei de semnătură ECDSA, această ieșire a funcției este coordonatele x a unei chei publice mapate dintr-o anumită intrare. În cazul unui Schnorr semnătură, funcția este un hash criptografic sigur, cum ar fi SHA512/256.