În speranța de a satisface invitația @fgrieu în comentarii, încerc un răspuns care vine din implementarea lui Monero. Sursa acestor cuvinte este cheatsheet-ul pe care l-am scris https://getmonero.org/library/RingsCheatsheet20210301.pdf în timp ce studia https://www.getmonero.org/library/Zero-to-Monero-2-0-0.pdf
Cred că lucrul corect este să începem de la semnătura Schnorr non-interactivă (în aromă Fiat-Shamir) pentru chei peste curba eliptică. Să recapitulăm rapid.
Sa spunem $(x,X)$ este perechea chei private/publice, unde $X\triunghiq xG$ cu $G$ punctul generator al CE; $tx$ este tranzacția/textul/orice lucru trebuie să semnăm; Semnare $tx$ cu $x$ înseamnă a putea genera o pereche $(c,r)$ astfel încât:
$H(tx, rG + cX)=c$
Unde $H$ este un hash (indiferent aici care) și $c$ și $r$ sunt numite „provocare” și „răspuns”, termenii provenind din schema interactivă. $c$ este obținut dintr-un secret aleatoriu unic $\alpha$ cunoscută numai de semnatar și niciodată refolosită în două semnături, iar egalitatea de mai sus este echivalentă cu:
$rG + cX = \alpha G$
(Btw, prin înlocuire, obțineți cum $c$ este definit ;) )
Așadar, privind-o dintr-o vedere de pasăre, putem spune că verificarea $tx$ semnătură de către $x$ este o funcție a elementelor semnate, a cheii publice, a provocării și a răspunsului:
$f(tx, X, r, c)$
Semnăturile inelului sunt despre găsirea de arome ale acestei scheme cu momeli, păstrând în același timp doar un singur semnatar ACTUAL (din punct de vedere tehnic: este nevoie de mai multe $X_i$ -sa spunem $n$- în verificarea algo dar singur $x$ în semnarea algo); și totul fără coordonare între proprietarii chei implicați.
Există o provocare și un răspuns pentru fiecare $X_i$, deci avem $c_i$ și $r_i$, oricum ar fi lucrurile amenajat astfel încât din $c_i$ putem calcula $c_{i+1}$, cu „overflow” când $i=n$ (aici este „inelul”), deci:
$H(tx, r_{i}G + c_{i}X_{i})=c_{i+1}$ cu $1 \le i \le n-1$
$H(tx, r_{n}G + c_{n}X_{n})=c_1$ cu $i=n$
dat fiind că putem regresa de la $c_n$ la $c_1$ condițiile de mai sus conduc la funcția de verificare a semnăturii:
$f(tx, X_i, r_i, c_1)$
Dar de unde vine „magia”? Cum este aranjament făcut să aibă $c_i$ formând un lanț închis în care având în vedere o valoare de provocare le puteți calcula pe toate celelalte (rețineți că am ales $c_1$ ca unul special, dar asta nu este cu adevărat nimic special)?
Ei bine, datorită acestor fapte:
- dacă indicăm ca $c_\pi$ provocarea asociată semnatarului ACTUAL, $c_{\pi+1}$ este calculat dintr-un secret aleatoriu $\alpha$ cunoscut doar semnatarului ACTUAL (își amintește ceva? ;) );
- toti ceilalti $c_i$ sunt calculate cu formula lanțului de mai sus;
- toate $r_i$ sunt doar numere aleatorii, cu excepția $r_\pi$ care este ales astfel încât să lase $c_{\pi+1}$ să respecte și formula lanțului (chiar dacă provine din $\alpha$)
Și acum, în cele din urmă, Imaginea Cheie $X^*$! Pe lângă faptul că este anunțat în tranzacție pentru a preveni dublarea cheltuielilor, este și parte din $c_i$ calcul, iar din nou $\alpha$Se folosește trucul cu formula /chain: și este valabil numai dacă Key Image $X^*$ se obține într-un mod foarte specific, în funcție de cheile private și publice ale semnatarului ACTUAL.
De aceea nu poți alege pur și simplu unul aleatoriu încă nefolosit!
Înțeleg că aceasta este doar linia principală a raționamentului, lipsesc multe detalii, dar sper că le puteți găsi în cheatsheet cu ajutorul acestor cuvinte însoțitoare (presupun că pentru nevoile dvs. vă puteți preocupa doar de „Non-interactiv (Fiat -Shamir) Schnorr”, „SAG” și „bLSAG”)