Procedeu de semnătură
Ed25519 explicat matematic
Semnătura atașată fiecărei recenzii McGesund — de la curbă la cheie și până la ecuația pe care browserul cititorului o recalculează singur.
Actualizat: 2026-09-07
1. Despre ce este vorba aici
O recenzie de pe McGesund nu este un câmp de text dintr-o bază de date pe care trebuie să îl crezi pe cuvânt. Ea este semnată digital în momentul trimiterii, iar orice vizitator poate recalcula ulterior această semnătură în propriul browser.
Pentru această semnătură folosim Ed25519. Spre deosebire de FALCON și ML-DSA, care pot fi așezate alături ca ștampile suplimentare, Ed25519 nu este o opțiune: fiecare recenzie semnată o poartă, indiferent de tarif și de modul de depunere.
Un lucru important de la bun început:
Ed25519 nu este o criptare. Textul recenziei trebuie doar să poată fi citit. Semnătura nu dovedește confidențialitatea, ci originea și integritatea.
2. Ce anume se semnează
Nu se semnează textul propriu-zis, ci un obiect de date compact, care fixează fără echivoc textul și tot restul:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID companie>",
"c": "<ID recenzie>",
"h": "<SHA-256 al textului recenziei>",
"rh": "<SHA-256 al întregului set de date trimis>",
"rv": 1,
"qh": "<SHA-256 al envelope-ului QR, doar la recenziile prin QR>",
"kid": "<ID cheie>",
"iat": 1757203200
}
Acest obiect este codificat în CBOR. Această secvență de octeți — nu reprezentarea ei elegantă de mai sus — este mesajul nostru . Semnătura și mesajul călătoresc împreună într-un plic:
Cifra este versiunea formatului. Mai mult nu conține — în special nicio semnătură post-cuantică: aceasta se află, dacă există, alături de setul de date, nu în plic.
3. Ce trebuie să realizeze semnătura
Un cititor care ajunge pe profilul unei companii are două întrebări:
- Provine această recenzie cu adevărat din sistemul McGesund?
- A fost ea modificată ulterior?
Pentru asta există o pereche de chei:
- o cheie privată — rămâne în serviciul de semnare
- o cheie publică — o poate avea oricine, este adresată prin ID-ul de cheie (
kid) din payload
Semnarea se face cu cheia privată. Verificarea, cu cea publică — și anume în browserul cititorului, nu pe serverul nostru. Aici este esența: o verificare pe care am efectua-o noi înșine și al cărei rezultat l-am comunica nu ar fi o verificare, ci o afirmație.
4. De ce o curbă eliptică?
Orice semnătură are nevoie de un calcul ușor într-un sens și practic imposibil în celălalt. La Ed25519, acesta este înmulțirea scalară pe o curbă eliptică:
Calcularea punctului public pornind de la numărul secret costă microsecunde. Deducerea lui din este problema logaritmului discret — pentru ea nu se cunoaște niciun procedeu care, la această dimensiune, să se încheie în intervale de timp omenești.
Câștigul practic față de procedee mai vechi, precum RSA, este dimensiunea:
| cheie publică | semnătură | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
La un nivel de securitate comparabil. 64 de octeți per recenzie nu reprezintă, nici la milioane de recenzii, o dimensiune la care să merite să te gândești.
5. Curba edwards25519
Calculele se fac modulo un număr prim:
De aici și numele. Curba este o curbă Edwards răsucită:
Un „punct” este o pereche de numere din care satisface această ecuație. Nu există nicio curbă de văzut — desenul din secțiunea următoare este un ajutor intuitiv peste numerele reale, nu o imagine a spațiului de calcul real.
Mai apar două mărimi:
- un punct de bază , stabilit prin convenție,
- ordinul al subgrupului generat de :
este prim. Asta înseamnă: dacă aduni la sine însuși mereu și mereu, parcurgi exact puncte diferite și ajungi apoi din nou la început. De aceea toate calculele cu scalari se fac modulo , iar toate calculele cu coordonate modulo . Confundarea acestor două numere este greșeala clasică de începător.
6. Adunarea punctelor
Două puncte sunt combinate într-un al treilea după o formulă fixă:
Elementul neutru este — punctul din care începe calculul.
Această formulă are o proprietate care nu se vede și care este mai importantă pentru securitate decât orice constantă: ea este completă. Funcționează pentru toate intrările, fără cazuri speciale pentru „ambele puncte sunt egale” sau „rezultatul este elementul neutru”. La curbele Weierstrass mai vechi aceste cazuri speciale există, iar fiecare dintre ele este o ramificație în program — o ramificație al cărei timp de execuție se poate măsura. Cine măsoară cât durează o semnătură află, la asemenea procedee, ceva despre cheia secretă.
Formule complete înseamnă: mereu aceeași cale de calcul, mereu același timp, nimic de măsurat.
7. Înmulțirea scalară — strada cu sens unic
înseamnă: adună la sine însuși exact de ori. La un de 253 de biți, asta ar însemna o muncă absurd de mare — de aceea se dublează:
iar din aceste rezultate intermediare se compune -ul dorit. În jur de 253 de dublări sunt suficiente pentru orice . Aceasta este calea înainte.
Înapoi, această scurtătură nu există. A determina numărul pornind de la punctul înseamnă a rezolva problema logaritmului discret.
În procedeul real se calculează modulo . Acolo nu există niciun „stânga”, niciun „dreapta” și nicio apropiere: din și rezultă două perechi de numere fără nicio înrudire vizibilă.
8. Perechea de chei a serviciului de semnare
La început stau 32 de octeți aleatori, seed-ul. Tot restul se derivă din el:
Din prima jumătate ia naștere scalarul secret , însă nu nemodificat. Trei biți sunt setați, respectiv șterși — așa-numitul clamping:
- cei mai de jos trei biți sunt puși pe zero: astfel devine un multiplu de 8. Motivul este cofactorul 8 al curbei — grupul complet de puncte este de opt ori mai mare decât subgrupul de ordin . Un divizibil cu 8 ajunge garantat în subgrupul corect și nu dezvăluie nimic despre punctele de ordin mic.
- bitul cel mai de sus este șters, iar cel imediat următor este setat: astfel are întotdeauna aceeași lungime în biți. Un mai scurt ar necesita mai puține dublări — și, din nou, s-ar putea citi ceva din timpul de execuție.
Cheia publică este apoi pur și simplu
stocată pe 32 de octeți: coordonata și, în bitul cel mai semnificativ, semnul lui . Pe îl recalculează verificatorul singur din ecuația curbei — cele două soluții diferă doar prin semn, iar care dintre ele este cea corectă o spune acest singur bit.
A doua jumătate a valorii hash, prefixul, nu este necesară pentru cheie. Ea intră în joc în secțiunea următoare.
9. De ce aleatoriul de aici nu este aleatoriu
Orice semnătură de acest tip are nevoie de o valoare unică , numită adesea nonce. Ea nu are voie să se repete niciodată: cine deține două semnături cu același poate deduce cheia secretă cu algebră de școală.
Exact de asta au eșuat sisteme reale. Cazul cel mai cunoscut este verificarea semnăturilor unei console de jocuri, al cărei producător a folosit în 2010 mereu același nonce — cheia privată devenea astfel public reconstruibilă.
Ed25519 rezolvă asta prin faptul că nu folosește deloc aleatoriu:
Nonce-ul depinde de prefixul secret și de mesaj. De aici rezultă două lucruri:
- Două recenzii diferite produc, cu o probabilitate covârșitoare, valori diferite — cazul repetării nu apare.
- Aceeași recenzie produce întotdeauna aceeași semnătură. Un proces de semnare poate fi astfel reprodus, iar un generator de numere aleatoare slab de pe server nu poate strica nimic, pentru că nu este nevoie de niciunul.
Pentru un portal de recenzii cu multe semnături pe zi, acesta nu este un avantaj academic. Este diferența dintre „o eroare în sursa de aleatoriu ar fi fatală” și „nu există nicio sursă de aleatoriu care să poată ceda”.
10. Semnarea
Trei rânduri, nimic mai mult:
Semnătura este perechea
32 de octeți pentru punctul , 32 de octeți pentru numărul — în total 64 de octeți.
Demn de remarcat este al doilea rând: în intră , cheia publică și mesajul. Faptul că este inclusă în hash nu este un accesoriu — împiedică atacurile prin care o semnătură este reinterpretată pentru o altă cheie.
11. Verificarea
Browserul cititorului cunoaște: recenzia , semnătura și cheia publică . El recalculează și verifică o singură ecuație:
Dacă ea se verifică, semnătura este validă. RFC 8032 permite suplimentar varianta înmulțită cu cofactorul, , care tratează mai îngăduitor câteva cazuri marginale.
Niciun server nu este întrebat, niciun serviciu nu trebuie să fie disponibil. Cheia publică este suficientă.
12. De ce ecuația se verifică
Este suficient să înlocuim:
Tot secretul stă în transformarea din mijloc: înmulțirea scalară este compatibilă cu adunarea. Cine cunoaște poate calcula un care satisface ecuația. Cine nu cunoaște ar trebui să găsească, pentru un ales de el, un potrivit — iar asta înseamnă să rezolve logaritmul discret.
13. Un mini-exemplu calculat integral
Cu numerele reale nu se poate verifica nimic — valorile de 253 de biți nu pot fi controlate în minte. De aceea, același procedeu într-un grup minuscul, în care fiecare pas poate fi urmărit cu calculatorul de buzunar.
Pasul 1: Grupul
Calculăm cu resturile modulo și luăm . Avem
așadar generează un subgrup de ordin . Puterile sunt:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
preia rolul punctului de bază , iar înmulțirea pe cel al adunării punctelor. Scalarii se calculează modulo , valorile modulo .
Pasul 2: Perechea de chei
Fie secretul . Atunci
poate fi cunoscut de oricine.
Pasul 3: Nonce și commitment
Din prefix și recenzie să rezulte . De aici:
Pasul 4: Challenge-ul
Hash-ul peste , și recenzie să dea
Pasul 5: Semnătura
Semnătura este perechea .
Pasul 6: Browserul verifică
El calculează ambele părți. În stânga:
În dreapta, cu :
Ambele părți dau :
Pasul 7: Cineva modifică textul recenziei
Textul intră în hash, așadar se schimbă challenge-ul — să zicem la . Semnătura rămâne neschimbată la , dar partea dreaptă nu. Cu :
Putem șterge o recenzie. Nu o putem modifica fără ca acest lucru să iasă la iveală.
Notă de onestitate privind exemplul
Aici s-a calculat în grupul multiplicativ modulo , nu pe o curbă: ține locul lui , iar produsul pe cel al adunării de puncte . Structura este aceeași, și exact despre asta este vorba. Diferite sunt ordinele de mărime: față de , iar acolo cheia nu se găsește încercând cele unsprezece posibilități.
14. Ce se întâmplă dacă cineva modifică recenzia
Să presupunem că cineva cu acces la baza de date — inclusiv cineva de la noi — modifică textul recenziei sau una dintre inimi. Atunci se schimbă setul de date și, odată cu el, cel puțin una dintre cele două valori hash h și rh din payload. Astfel se schimbă , deci challenge-ul , deci partea dreaptă a ecuației de verificare. Semnătura veche nu se mai potrivește.
Fraza decisivă în această privință: putem șterge o recenzie, dar nu o putem modifica pe nesimțite. La McGesund, aceeași verificare rulează suplimentar în fiecare noapte, pe server, asupra întregului fond — o recenzie care nu o trece nu mai intră în media companiei.
15. De ce eșuează un atacator
El cunoaște cheia publică , punctul de bază , curba și fiecare semnătură emisă până acum. Ceea ce îi lipsește este .
Cel mai bun atac clasic cunoscut asupra problemei logaritmului discret într-un grup de ordin are nevoie de aproximativ pași. La acestea sunt în jur de
operații. Pentru comparație: chiar și o mașină care ar face un miliard de miliarde () de pași pe secundă ar avea nevoie pentru asta de un multiplu al vârstei universului.
A falsifica fără cheie ar însemna să găsești, pentru un ales de tine, un potrivit — aceeași sarcină, în altă deghizare.
16. De ce Ed25519 și nu ECDSA
Ambele se bazează pe aceeași problemă. Diferența stă în tot ce se întâmplă în jur:
| ECDSA (curbe NIST) | Ed25519 | |
|---|---|---|
| Nonce | necesită aleatoriu proaspăt | determinist, din prefix și mesaj |
| Formule | cazuri speciale, ramificații dependente de date | complete, o singură cale de calcul |
| Parametrii curbei | originea constantelor nu a fost niciodată explicată complet | aleși după criterii verificabile |
| Dimensiunea semnăturii | 64–72 B, codare variabilă | fix 64 B |
| În browser | disponibil de mult timp | nativ din 2023/2024, altfel ca bibliotecă JS |
Pentru noi, nonce-ul a fost argumentul decisiv. Un portal de recenzii semnează des și automatizat; un procedeu la care o singură valoare aleatoare slabă dezvăluie cheia este alegerea greșită pentru așa ceva.
17. Ce nu realizează Ed25519
Ed25519 se bazează pe logaritmul discret — și exact această problemă o rezolvă eficient un calculator cuantic suficient de mare, cu algoritmul lui Shor. Dacă și când vor exista asemenea mașini rămâne deschis. Pentru o recenzie care trebuie să fie verificabilă și peste zece ani, aceasta este totuși o întrebare la care trebuie răspuns astăzi.
De aceea, alături de semnătura Ed25519 poate apărea o ștampilă rezistentă la calculul cuantic:
- FALCON (FN-DSA) — semnături compacte din rețele NTRU
- ML-DSA-87 (FIPS 204) — standardul NIST finalizat
Niciuna dintre ele nu înlocuiește Ed25519, ci se așază alături. Dacă unul dintre procedee cade, celălalt continuă să susțină.
18. Fluxul în imagine
19. Ce face McGesund concret cu asta
Envelope-ul. Fiecare recenzie semnată poartă un plic MCG1: cu versiunea formatului, payload-ul și semnătura Ed25519. Câmpul kid din payload spune despre ce cheie este vorba; cheia publică asociată este livrată de server la cerere — ea este publică, nu are nimic de protejat.
Verificarea în browser. Chrome și Firefox pot folosi Ed25519 nativ, prin interfața WebCrypto, din 2023/2024. Safari nu — acolo apelul aruncă o eroare în loc să verifice. De aceea codul nostru de verificare revine la o implementare pur JavaScript, care este încărcată doar acolo unde este nevoie de ea. Astfel, verificarea semnăturii se realizează în orice browser, și anume pe dispozitivul cititorului.
Ancora temporală. Amprenta cheii de semnare este ancorată printr-un bloc Bitcoin, prin OpenTimestamps. Astfel se poate dovedi nu doar că semnătura este autentică, ci și că cheia exista deja la un anumit moment — fără ca cineva să fie nevoit să creadă marcajul nostru de timp.
Legarea de conținut. Payload-ul poartă rh, hash-ul peste întregul set de date trimis: text, inimi, statusul geo, datele privind ocazia și proveniența. Astfel, semnătura Ed25519 leagă nu doar textul, ci tot ce se afișează alături de recenzie.
20. O frază de reținut
Cine deține scalarul secret semnează în microsecunde. Cine nu îl deține ar trebui să rezolve un logaritm discret într-un grup cu aproximativ elemente.
Pentru cititorul unei recenzii asta înseamnă pur și simplu: nu trebuie să ne creadă. Poate să verifice singur.