Puncte:3

Este teoretic posibil să se delege generarea cheii publice?

drapel in

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:

  1. Alice creează o cheie privată generată aleatoriu ($d$).
  2. Alice își folosește cheia privată pentru a genera cheia DAG ($P$)
  3. Alice face cheia DAG disponibilă public
  4. Bob vrea să genereze o adresă (o cheie publică) pentru Alice și obține cheia DAG de la Alice pentru a face acest lucru
  5. Bob creează o cheie AR generată aleatoriu
  6. Bob generează o nouă adresă pentru Alice folosind cheia DAG a lui Alice și cheia AR generată în pasul anterior
  7. Bob trimite o sumă la adresa nou creată
  8. Bob trimite cheia AR lui Alice
  9. 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ă?

meshcollider avatar
drapel gb
BIP-32 și alte scheme ierarhice deterministe de generare a adreselor permit delegarea generării cheii publice.
drapel in
Mulțumesc @meshcollider, voi arunca o privire. Știți dacă funcționează similar cu cum l-am propus eu?
meshcollider avatar
drapel gb
Cam asemanator, da. Principalele diferențe ar fi că este determinist (folosește o funcție hash pentru a alege ceea ce numiți AR, astfel încât Alice să-l poată genera singură) și nu trebuie să restricționați intervalul cheilor private (grupul este ciclic, deci dacă adăugați mari chei se va „încheia” modulo ordinea grupului)
drapel in
Are un sens total! E foarte tare. Mulțumesc mult @meshcollider, asta mă ajută foarte mult! Și da, nu aveam nicio idee cum ar trebui să numesc aceste „chei”.
Puncte:3
drapel es

Dacă vă înțeleg corect schema, atunci Alice are nevoie de un canal separat securizat pentru a comunica $i$ lui Bob.

Monero rezolvă această problemă creând o cheie publică de destinație unică de fiecare dată când fondurile sunt trimise cuiva. Aceste fonduri sunt cheltuite cu o semnătură folosind cheia privată unică corespunzătoare, care poate fi determinată doar de destinatar.

Destinatarul are două perechi de chei: $(a, A=aG)$ și $(b, B=bG)$, Unde $G$ este un punct de bază binecunoscut.

Expeditorul creează o pereche de chei efemeră $(r, R=rG)$ și publică $R$.

Cheia publică de destinație unică este $H(rA)G+B$, Unde $H$ este un hash sigur din punct de vedere criptografic care returnează o valoare scalară.

Cheia privată corespunzătoare este recuperabilă numai de către destinatar ca $H(aR)+b$.

Motivul pentru care destinatarul are două perechi de chei este să solicite doar cheia privată $a$ să fie necesar pentru scanarea fondurilor primite și să necesite doar în plus a doua cheie privată $b$ atunci când fondurile trebuie cheltuite. Cu toate acestea, dacă nu aveți nevoie de această distincție, destinatarul ar putea avea doar o pereche de chei $(a,A)$ și apoi cheia publică de destinație unică ar fi $H(rA)G+A$ iar cheia privată corespunzătoare ar fi $H(aR)+a$.

Puteți citi despre implementarea de către Monero a adreselor unice în secțiunea 4.2 Aici și pagina 7 a documentului alb original CryptoNote Aici.

kelalaka avatar
drapel in
Ironia este că, odată ce fondul primit a ajuns la $A$, trebuie să-l transferați la cheltuielile dvs. $B$.
knaccc avatar
drapel es
@kelalaka În Monero, nimic nu este transferat de la $A$ la $B$. O singură adresă de portofel este concatenarea cheilor publice $A$ și $B$. Fondurile sunt cheltuite direct prin referirea cheii publice unice într-o semnătură de inel. Am vrut doar să indice că aveți nevoie doar de $a$ și $B$ pentru a căuta fonduri primite și doar în momentul cheltuirii trebuie să știți suplimentar $b$. Acest lucru permite accesul la $b$ să fie strict restricționat, deoarece trebuie cunoscut doar atunci când trebuie cheltuite fondurile.
kelalaka avatar
drapel in
Da, sunt la curent cu indicația ta. Puteți furniza linkul pentru a-l citi de la Monero?
knaccc avatar
drapel es
@kelalaka Sigur, este Secțiunea „4.2 Adrese unice” aici: https://www.getmonero.org/library/Zero-to-Monero-2-0-0.pdf În notația mea, $a$ este privat cheia de vizualizare, iar $b$ este cheia privată de cheltuieli
knaccc avatar
drapel es
@kelalaka mulțumesc, a adăugat
knaccc avatar
drapel es
@kelalaka Am adăugat un link la o copie a acelei lucrări, deoarece linkul cryptonote.org eșuează când încerc să dau clic pe el. Rețineți că lucrarea CryptoNote are o eroare, deoarece definește $H_s()$ ca producând un element de câmp, atunci când ar trebui să producă un scalar mai mic decât dimensiunea grupului punctului de bază.
drapel in
@knaccc Wow, asta este genial! Exact ceea ce căutam și mult mai bine decât ceea ce am venit. Mulțumesc mult! Singurul lucru pe care nu l-am înțeles încă: de ce trebuie să includ (hash-ul securizat criptografic) atunci când generez cheile? Și ce trebuie să fie hashing pentru a obține?
knaccc avatar
drapel es
@E.Bramtergan $H(rA)$ înseamnă să faceți multiplicarea scalară a punctului curbei eliptice a $r$ cu $A$, tratați rezultatul ca o secvență de octeți și aplicați un hash (cum ar fi SHA-512/256) în modul obișnuit și apoi faceți $mod\ \ell$ la rezultat, unde $\ell$ este ordinea punctului de bază și va depinde de curba pe care o alegeți. Motivul pentru care aveți nevoie de $H()$ este să convertiți secretul partajat Diffie-Hellman $rA==aR$ într-un scalar, astfel încât să poată fi folosit ca o cheie privată în ecuație.Lucrările Monero pe care le-am legat explică toate acestea mult mai detaliat.
drapel in
@knaccc văd. Foarte frumos, iubesc. Multumesc din nou!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.