Imaginează-ți următorul scenariu:
Într-o anumită criptomonedă, confidențialitatea ar trebui să fie cât mai ridicată posibil.
În acest scop, se creează un cont nou cu o nouă adresă pentru fiecare tranzacție de intrare (adresa este cheia publică a unei perechi de chei private/publice). Cu toate acestea, utilizatorii nu sunt întotdeauna online pentru a genera conturi noi cu adrese noi de îndată ce cineva dorește să le trimită bani. Prin urmare, toți utilizatorii ar trebui să poată crea conturi noi cu adrese noi pentru alți utilizatori atunci când doresc să trimită bani cuiva. Desigur, doar destinatarul ar trebui să poată cheltui banii transferați în conturi create pentru el de alte persoane.
Toate acestea ar trebui să se bazeze pe ECC, adică o extensie a ECDSA algoritm, ca să spunem așa.
Dar, așa cum tocmai s-a descris în exemplul de criptomonedă, numai persoana pentru care a fost generată o cheie publică are voie să semneze mesaje pentru această cheie publică sau să decripteze datele care au fost criptate cu această cheie publică.
Deoarece securitatea algoritmului criptografic utilizat este crucială pentru o criptomonedă, doar prin NIST și SECG vor fi utilizați parametri de curbă prefabricați și standardizați despre care se știe că sunt siguri și eficienți.
Singurele modificări tehnice care trebuie luate în considerare sunt următoarele:
Notă: Deoarece adresa unui cont va fi cheia publică corespunzătoare a unei perechi de chei, termenii „adresă” și „cheie publică” vor fi folosiți în mod interschimbabil în cele ce urmează.
Parametrii din algoritmul ECDSA:
- $d$ = cheie privată generată aleatoriu
- $G$ = punctul de bază al curbei eliptice
Schimbări:
- Intervalul disponibil pentru cheile private este redus de la $[1, n - 1]$ la $[1, \frac{n}{2} - 1]$
- Ca și în cazul generarii cheii publice, un punct $P$ se calculează după cum urmează: $P = d \times G$. Acest punct $P$ formează așa-numita cheie de generare a adresei delegate (DAG Key).
- Pentru a genera o adresă (cheie publică) pentru o altă persoană, o așa-numită cheie aleatorie a adresei (cheie AR) ($i$) cu același interval ca cel al cheii private ($[1, \frac{n}{2} - 1]$) trebuie generat
- Pentru a genera o adresă pentru o persoană arbitrară, cheia DAG ($P$) acestei persoane se adaugă cu înmulțirea tastei AR ($i$) și punctul de bază ($G$): $Q = P + i \times G$. De cand $P$ este $d \times G$, trebuie să fie valabile următoarele: $Q = P + i \times G = (d + i) \times G$. Acest punct $Q$ formează noua adresă pentru persoana a cărei cheie DAG a fost utilizată pentru calcul.
Exemplu:
- Alice creează o cheie privată generată aleatoriu ($d$).
- Alice își folosește cheia privată pentru a genera cheia DAG ($P$)
- Alice face cheia DAG disponibilă public
- Bob vrea să genereze o adresă (o cheie publică) pentru Alice și obține cheia DAG de la Alice pentru a face acest lucru
- Bob creează o cheie AR generată aleatoriu
- Bob generează o nouă adresă pentru Alice folosind cheia DAG a lui Alice și cheia AR generată în pasul anterior
- Bob trimite o sumă la adresa nou creată
- Bob trimite cheia AR lui Alice
- Doar Alice poate trimite bani de la această adresă, deoarece ea este singura care poate crea semnături valide pentru adresa nou creată (cheia publică). Pentru a face acest lucru, ea trebuie pur și simplu să calculeze cheia privată la această adresă, după cum urmează: $d + i$ (adăugarea cheii ei private $d$ și tasta AR $i$ creat de Bob).
Întrebări:
Este chiar teoretic posibil să se delege generarea cheii publice?
Dacă da, ar fi fezabilă o astfel de modificare a algoritmului standard ECDSA? Cu alte cuvinte, pentru a crea chei publice pentru alte persoane fără a ști sau dezvălui cheia privată a acelei chei publice?
Sau există o abordare mai bună pentru a rezolva această problemă?