Postupak potpisivanja
ML-DSA-87 matematički objašnjen
Kako ML-DSA-87 (FIPS 204) potpisuje McGesund recenziju — od Module-LWE preko rejection samplinga do provjere u pregledniku.
Stanje: 2026-09-07
1. O čemu je riječ
Kada netko na McGesundu preda recenziju, u pozadini se događa više nego što tekst daje naslutiti. Recenzija se pri slanju digitalno potpisuje. Taj potpis svaki posjetitelj kasnije može preračunati u vlastitom pregledniku — bez povjerenja u nas i bez pitanja upućenog nama.
Za korisnike od tarife Pro naviše to se, među ostalim, radi s ML-DSA-87. Ovaj članak objašnjava što se pritom matematički događa.
Važno unaprijed:
ML-DSA nije šifriranje. Tekst recenzije ostaje javno čitljiv — to je ionako smisao recenzije. ML-DSA ne dokazuje tajnost, nego podrijetlo i cjelovitost.
ML-DSA je razvijen iz CRYSTALS-Dilithiuma i standardiziran je kao FIPS 204. Broj 87 označava razinu parametara. Postoje tri:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 je najviša i nalazi se u NIST sigurnosnoj kategoriji 5.
2. Što se točno potpisuje?
U potpis ne ulazi sam tekst recenzije, nego kompaktan podatkovni objekt koji tekst jednoznačno prikiva. Na McGesundu on u jezgri izgleda ovako:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID tvrtke>",
"c": "<ID recenzije>",
"h": "<SHA-256 teksta recenzije>",
"rh": "<SHA-256 cijelog zapisa o predaji>",
"rv": 1,
"qh": "<SHA-256 QR omotnice, samo kod QR recenzija>",
"iat": 1757203200
}
Taj je objekt naša poruka . On zajedno veže šest tvrdnji:
- Kojem poduzeću recenzija pripada (
f) - Na koju se recenziju misli (
c) - Koji je tekst iza toga stajao — kao hash-vrijednost (
h) - Koji je zapis ukupno predan (
rh): tekst, srca, geo-status i podaci o povodu, kanonski serijalizirani i uhashirani — u verziji shemerv - Iz kojeg QR koda recenzija potječe (
qh); bez QR-a to polje otpada - Kada je potpisano (
iat)
Promijeni li netko kasnije jedan jedini znak u tekstu recenzije, h više ne odgovara — a ni rh. Tko umjesto toga dira samo srca, ostavlja h netaknutim, ali lomi rh. Promijeni li netko jednu od tih hash-vrijednosti, potpis više ne odgovara. Upravo je taj lanac bit.
3. Što potpis treba postići
Posjetitelj koji recenziju čita treba moći sam provjeriti tri stvari:
- Recenziju je doista izdao McGesund.
- Tekst od slanja nije izmijenjen.
- Nitko ne može izmisliti novu recenziju koja izgleda valjano.
Za to postoji par ključeva:
- privatni ključ — nalazi se isključivo u servisu za potpisivanje
- javni ključ — smije ga imati svatko, adresira se preko ID-a ključa (
kid) u omotnici
Potpisuje se privatnim ključem. Provjerava se javnim — i to u pregledniku čitatelja, a ne na našem poslužitelju.
4. Zašto uopće post-kvantni postupak?
Mnogi danas uobičajeni postupci potpisivanja počivaju na faktorizaciji velikih brojeva ili na diskretnim logaritmima. Dovoljno moćno kvantno računalo moglo bi upravo te probleme poznatim algoritmima riješiti znatno brže.
Za recenziju to nije akademsko pitanje. Recenzija bi i za deset godina trebala biti provjerljiva. Tko danas potpisuje, potpisuje za cijeli životni vijek unosa.
ML-DSA zato koristi drugu podlogu:
Točnije: Module-LWE i Module-SIS.
5. Što je rešetka?
Zasad samo točke u prostoru. Uzmimo dva vektora:
Sve cjelobrojne kombinacije
tvore rešetku. Na primjer:
Ono odlučujuće:
U malim su dimenzijama problemi rešetki laki. U vrlo visokim dimenzijama određeni zadaci postaju iznimno teški.
6. Polinomi umjesto pojedinačnih brojeva
ML-DSA ne računa s 2D vektorima, nego s polinomima i vektorima polinoma.
Polinom poput
može se zapisati kao lista koeficijenata:
Računa se u prstenu:
To znači dvoje:
- : računanje modulo
- : dodatno pravilo koje fiksira duljinu polinoma
Za sve tri ML-DSA razine vrijedi:
Polinom dakle ima 256 koeficijenata, promatranih modulo 8.380.417. Ono što se između razina mijenja nije ni , nego veličina matrica — o tome kasnije više.
Uzgred: množenje polinoma u tom prstenu u praksi teče preko NTT, brojevno-teorijske inačice brze Fourierove transformacije. ML-DSA dakle nipošto ne prolazi bez FFT ideja; one su samo u aritmetici umjesto u načelu potpisivanja.
7. Ključni trik: Module-LWE
Osnovna je zamisao Module Learning With Errors:
Pritom su:
- — javna, naizgled slučajna matrica polinoma
- — mali tajni vektori
- — javna vrijednost
Napadač zna i , ali ne i . Jednadžba za njega izgleda kao slučajna jednadžba sa šumom. Male tajne iz nje ne bi smio moći učinkovito izračunati unatrag.
8. Sićušan brojčani primjer
Namjerno uzimamo smiješno malu inačicu — obične brojeve umjesto polinoma, dimenziju 2 umjesto 256, i
Neka je
Tada:
U tom bi se mini-formatu mogle isprobati sve mogućnosti. Kod ML-DSA-87 je matrica od polinoma s po 256 koeficijenata — to je preko 14.000 nepoznanica u strukturi rešetke.
9. Par ključeva servisa za potpisivanje
Privatni ključ sadrži među ostalim male vektore . Kod ML-DSA-87 njihovi koeficijenti potječu iz intervala
dakle iz . Ta malenost nije detalj, nego jezgra: samo zato što su tajne male, uopće nastaje težak problem rešetke.
Javni ključ je pojednostavljeno
je seed iz kojega se da deterministički rekonstruirati — matrica se dakle ne mora prenositi. su gornji bitovi od ; donjih bitova otpada, što ključ znatno smanjuje. To izostavljanje kasnije je razlog za takozvane hintove.
Time nastaje željena asimetrija:
10. Recenzija postaje broj
Servis za potpisivanje najprije uhashira objekt payloada iz odjeljka 2:
U našem primjeru za igru uzimamo umjetni mini-hash. U stvarnom je sustavu dug 512 bitova i dodatno uvezuje javni ključ — time se potpis ne može pripisati drugom ključu.
11. Commitment
Servis za potpisivanje izvlači slučajan mali vektor . U našem primjeru:
Iz njega nastaje međuvrijednost, commitment:
To još nije potpis.
12. Iz recenzije nastaje izazov
Poruka i commitment uhashiraju se zajedno:
Kod ML-DSA-87 je polinom s točno koeficijenata iz , a svih preostalih 196 su nule. Ta je struktura namjerna: ona drži malim.
U našem primjeru za igru naprosto postavljamo
13. Sam potpis
S našim vrijednostima:
14. Korak koji se lako previdi: rejection sampling
Tu je točka u kojoj se ML-DSA razlikuje od naivne konstrukcije — i ona nije opcionalna.
sadrži tajnu . Kad bi se naprosto uvijek izdavao, bi se iz dovoljno potpisa dao statistički izračunati. Kod portala s recenzijama i vrlo mnogo potpisa dnevno to nije teorijski rizik.
Zato servis za potpisivanje prije izdavanja provjerava odaje li previše, a u protivnom potpis odbacuje — tada se kreće iznova s novim slučajnim . To se zove Fiat-Shamir with Aborts.
Uvjet u biti glasi:
Za ML-DSA-87 vrijedi i . Dolazi još i druga granica na donjim bitovima. U praksi je više prolaza normalno — potpisivanje je dakle postupak s petljom, a ne jednokratni korak.
Za verifikaciju je važno: upravo tu granicu preglednik kasnije provjerava. Potpis s prevelikim koeficijentima odbija se, čak i ako jednadžba vrijedi.
15. Zašto preglednik to može provjeriti
Preglednik čitatelja zna:
- recenziju i time
- javni ključ
- potpis
Ne zna . Veza koja ga ipak vodi dalje:
A budući da vrijedi
nepoznati se može zamijeniti javnom vrijednošću:
To je središnja jednadžba — i ona kaže nešto važno: preglednik rekonstruira ne točno, nego samo do na mali član .
16. Mini-primjer do kraja
Imali smo:
Preračunajmo:
Izvorni commitment bio je
Razlika iznosi
Dakle točno predviđeni mali član pogreške. Verifikator ne dobiva , nego nešto što leži blizu .
Upravo zato ML-DSA ne uspoređuje same vrijednosti, nego njihove gornje bitove. I upravo zato potpis dodatno sadrži vektor hintova : on kompaktno javlja na kojim je mjestima zaokruživanje zbog malog člana pogreške prevalilo preko granice. Kod ML-DSA-87 dopušteno je najviše takvih naputaka. Oni ne odaju tajnu — samo popravljaju zaokruživanje.
Na kraju preglednik iznova izračuna izazov. Podudara li se,
i leže li sve norme unutar granica, potpis je valjan.
17. Što se događa ako netko promijeni recenziju?
Pretpostavimo da netko s pristupom bazi podataka — pa i netko kod nas — promijeni tekst recenzije ili jedno od srca. Tada se mijenja barem jedna od dviju hash-vrijednosti u payloadu (h kod teksta, rh kod svakog polja zapisa):
Time se mijenja izazov:
Postojeći je potpis, međutim, stvoren za stari izazov. Preglednik preračuna i utvrdi:
Odlučujuća rečenica uz to: recenziju možemo obrisati, ali je ne možemo neopaženo izmijeniti. Na McGesundu ista provjera dodatno noću teče na poslužitelju preko cijelog fonda — recenzija koja tu provjeru ne prođe više ne ulazi u prosjek poduzeća.
18. Zašto nitko ne može izmisliti potpis?
Napadač zna i , ali ne i . Da bi sagradio valjan potpis, morao bi pronaći trojku koja
- zadovoljava jednadžbu verifikacije i
- poštuje granice normi i
- odgovara izazovu koji proizlazi upravo iz tih vrijednosti.
To se u jezgri svodi na težak problem rešetke — konkretno na Module-SIS: pronaći kratka rješenja homogene jednadžbe modulo . Uvjet malenosti pritom nije ukras, nego sama težina zadatka. Bez njega bi rješenje bilo trivijalno.
19. Zašto „Module"?
Ta riječ opisuje strukturu između jednostavnih vektora i općih rešetki. Umjesto s pojedinačnim brojevima, ML-DSA radi s vektorima polinoma:
i s matricama od njih:
Prednost: dobiva se visoka dimenzija rešetke, ali se zadržava kompaktan, učinkovito izračunljiv prikaz. Sigurnost se da fino podesiti preko veličine matrice, bez mijenjanja prstena.
20. Zašto baš 87?
Tri se razine ne razlikuju u prstenu, nego u dimenzijama:
| Parametar | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Veličina matrice | |||
| Područje tajni | 2 | 4 | 2 |
| Težina izazova | 39 | 49 | 60 |
| Javni ključ | 1.312 B | 1.952 B | 2.592 B |
| Potpis | 2.420 B | 3.309 B | 4.627 B |
| NIST kategorija | 2 | 3 | 5 |
Vrijedi zamijetiti: ML-DSA-87 nije naprosto „ML-DSA-65, samo veći". Područje tajni vraća se sa 4 natrag na 2; sigurnost ovdje dolazi iz veće matrice, a ne iz većih koeficijenata. Riječ je o samostalnom, standardiziranom izboru parametara.
Cijena: 4.627 bajtova po potpisu — po pečatu koji se pohranjuje i pri provjeri isporučuje pregledniku. Zato na McGesundu uz ML-DSA-87 na izbor stoji i FALCON, kojemu je dovoljno 1.280 bajtova.
21. Fiat-Shamir: zašto radi bez sugovornika
Interaktivni bi dokaz tekao ovako:
- Servis za potpisivanje šalje commitment.
- Provjeritelj šalje slučajan izazov.
- Servis za potpisivanje odgovara.
- Provjeritelj preračuna.
Kod recenzije toga dijaloga nema — čitatelj dolazi mjesecima kasnije. Rješenje je Fiat-Shamirova transformacija: izazov se ne baca kockom, nego se uhashira iz samih podataka:
Time od dijaloga nastaje dokument. Servis za potpisivanje ne može si izazov birati jer bi za to morao kontrolirati hash.
22. Cijeli tijek
23. Što McGesund konkretno radi s time
Tri se razine isprepliću:
Envelope. Svaka potpisana recenzija nosi Ed25519 potpis. To je obavezna varijanta — klasična, sićušna, nativno provjerljiva u svakom pregledniku.
Post-kvantni pečati. Uz nju se mogu priložiti jedan ili dva kvantno otporna potpisa. Koji, ovisi o tarifi:
| Tarifa | dostupne razine potpisa |
|---|---|
| Basis | Ed25519, FN-DSA-512 |
| Klassik | Ed25519, FN-DSA-512, FN-DSA-1024 |
| Pro | Ed25519, FN-DSA-1024, ML-DSA-87 |
| Premium | Ed25519, FN-DSA-1024, ML-DSA-87, oba usporedno |
Usporedna je varijanta namjerno redundantna. Pokaže li se jedna od dviju matematičkih obitelji — NTRU rešetke kod FALCON-a, Module rešetke kod ML-DSA — slabijom nego što se danas pretpostavlja, druga nosi dalje.
Vremensko sidro. Otisak ključa za potpisivanje sidri se preko OpenTimestampsa u jednom Bitcoin bloku. Time se ne dokazuje samo da je potpis pravi, nego i da je u određenom trenutku već postojao — a da pritom nitko ne mora vjerovati našem vremenskom žigu.
Sve se to provjerava u pregledniku čitatelja, preko WASM modula. Mi isporučujemo podatke; preračunava se na uređaju posjetitelja. Kad bismo sutra nestali s mreže, jednom preuzeta recenzija ostala bi provjerljiva.
24. ML-DSA i FALCON jedan uz drugoga
| Svojstvo | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Tip | digitalni potpis | digitalni potpis |
| Obitelj rešetki | NTRU | Module-LWE / Module-SIS |
| Prsten | , | , |
| Osnovni mehanizam | kratak vektor Gaussovim uzorkovanjem | izazov-odgovor s prekidima |
| FFT / NTT | FFT s pomičnim zarezom, sigurnosno kritičan | NTT, samo aritmetika |
| Veličina potpisa (najviša razina) | 1.280 B | 4.627 B |
| Implementacija | zahtjevna (pomični zarez) | razmjerno izravna |
| Standardizacija | predviđena kao FIPS 206 (FN-DSA), još nije dovršena | FIPS 204, dovršena |
Ukratko: ML-DSA je lakše ispravno implementirati i provjeriti, FALCON daje znatno kompaktnije potpise. U QR kodu nije nijedan od njih — ondje stoji jedino Ed25519 omotnica. Veličina potpisa zato se broji kod pohrane i isporuke, a robusnost kod implementacije. Zato nudimo oboje.
25. Jedna rečenica za kraj
Tko posjeduje tajni vektor, potpisuje u milisekundama. Tko ga ne posjeduje, morao bi riješiti problem rešetke u preko 14.000 dimenzija — pa i s kvantnim računalom.
Za čitatelja recenzije to naprosto znači: ne mora nam vjerovati. Može preračunati.