Parašo algoritmas
ML-DSA-87 paaiškintas matematiškai
Kaip ML-DSA-87 (FIPS 204) pasirašo McGesund atsiliepimą — nuo Module-LWE ir atmetimo atrankos iki patikros naršyklėje.
Būklė: 2026-09-07
1. Apie ką čia kalbama
Kai kas nors McGesund sistemoje palieka atsiliepimą, fone įvyksta daugiau, nei leidžia numanyti tekstas. Išsiunčiamas atsiliepimas pasirašomas skaitmeniniu būdu. Šį parašą kiekvienas lankytojas gali vėliau perskaičiuoti savo paties naršyklėje — nepasitikėdamas mumis ir mūsų neklausdamas.
Klientams nuo tarifo Pro tai vyksta, be kita ko, su ML-DSA-87. Šis straipsnis paaiškina, kas tuo metu vyksta matematiškai.
Svarbu iš karto:
ML-DSA nėra šifravimas. Atsiliepimo tekstas lieka viešai skaitomas — juk tokia atsiliepimo prasmė. ML-DSA įrodo ne slaptumą, o kilmę ir vientisumą.
ML-DSA išvystytas iš CRYSTALS-Dilithium ir standartizuotas kaip FIPS 204. Skaičius 87 nurodo parametrų lygį. Jų yra trys:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 yra aukščiausias ir priklauso NIST 5 saugumo kategorijai.
2. Kas tiksliai pasirašoma?
Į parašą keliauja ne pats atsiliepimo tekstas, o kompaktiškas duomenų objektas, kuris vienareikšmiškai užfiksuoja tekstą. McGesund sistemoje jis iš esmės atrodo taip:
{
"v": 1,
"typ": "rev-comment",
"f": "<įmonės ID>",
"c": "<atsiliepimo ID>",
"h": "<atsiliepimo teksto SHA-256>",
"rh": "<viso pateikimo duomenų rinkinio SHA-256>",
"rv": 1,
"qh": "<QR voko SHA-256, tik QR atsiliepimuose>",
"iat": 1757203200
}
Šis objektas yra mūsų pranešimas . Jis susieja šešis teiginius:
- Kuriai įmonei atsiliepimas priklauso (
f) - Kuris atsiliepimas turimas omenyje (
c) - Koks tekstas už jo stovėjo — kaip maišos reikšmė (
h) - Koks duomenų rinkinys iš viso buvo pateiktas (
rh): tekstas, širdelės, geo statusas ir aplinkybių duomenys, kanoniškai serializuoti ir sumaišyti — schemos versijojerv - Iš kurio QR kodo atsiliepimas kilęs (
qh); be QR šio lauko nėra - Kada buvo pasirašyta (
iat)
Jei kas nors vėliau pakeičia bent vieną atsiliepimo teksto ženklą, h nebetinka — ir rh taip pat ne. Kas vietoj to tik pasuka širdeles, h nepaliečia, bet sulaužo rh. Pakeitus bent vieną iš šių maišos reikšmių, parašas nebetinka. Būtent ši grandinė ir yra esmė.
3. Ką parašas turi užtikrinti
Lankytojas, skaitantis atsiliepimą, turi galėti pats patikrinti tris dalykus:
- Atsiliepimą tikrai išdavė McGesund.
- Tekstas nuo išsiuntimo nebuvo pakeistas.
- Niekas negali išgalvoti naujo, galiojančiai atrodančio atsiliepimo.
Tam naudojama raktų pora:
- privatusis raktas — laikomas išimtinai parašų tarnyboje
- viešasis raktas — jį gali turėti bet kas, jis adresuojamas per rakto ID (
kid) voke
Pasirašoma privačiuoju raktu. Tikrinama viešuoju — ir būtent skaitytojo naršyklėje, o ne mūsų serveryje.
4. Kam apskritai postkvantinis metodas?
Daugelis šiandien įprastų parašo algoritmų remiasi didelių skaičių skaidymu dauginamaisiais arba diskretiniais logaritmais. Pakankamai galingas kvantinis kompiuteris būtent šiuos uždavinius žinomais algoritmais galėtų išspręsti gerokai greičiau.
Atsiliepimui tai nėra akademinis klausimas. Atsiliepimas turi likti patikrinamas ir po dešimties metų. Kas pasirašo šiandien, pasirašo visam įrašo gyvavimo laikui.
Todėl ML-DSA naudoja kitokį pagrindą:
Tiksliau: Module-LWE ir Module-SIS.
5. Kas yra gardelė?
Iš pradžių tiesiog taškai erdvėje. Imkime du vektorius:
Visos sveikaskaitinės kombinacijos
sudaro gardelę. Pavyzdžiui:
Lemiama:
Mažuose matmenyse gardelių uždaviniai yra lengvi. Labai aukštuose matmenyse tam tikros užduotys tampa ypač sunkios.
6. Daugianariai vietoj pavienių skaičių
ML-DSA skaičiuoja ne su dvimačiais vektoriais, o su daugianariais ir daugianarių vektoriais.
Daugianarį, tokį kaip
galima užrašyti koeficientų sąrašu:
Skaičiuojama žiede:
Tai reiškia du dalykus:
- : skaičiavimas moduliu
- : papildoma taisyklė, fiksuojanti daugianario ilgį
Visiems trims ML-DSA lygiams galioja:
Taigi daugianaris turi 256 koeficientus, nagrinėjamus moduliu 8 380 417. Tarp lygių keičiasi ne ar , o matricų dydis — apie tai vėliau.
Beje: daugianarių daugyba šiame žiede praktikoje atliekama per NTT — skaičių teorinį greitosios Furjė transformacijos variantą. Taigi ML-DSA anaiptol neapsieina be FFT idėjų; jos tiesiog slypi aritmetikoje, o ne parašo principe.
7. Pagrindinė gudrybė: Module-LWE
Pagrindinė idėja yra Module Learning With Errors:
Čia:
- — vieša, tariamai atsitiktinė daugianarių matrica
- — maži slapti vektoriai
- — vieša reikšmė
Užpuolikas žino ir , bet ne . Lygtis jam atrodo kaip atsitiktinė lygtis su triukšmu. Mažų paslapčių iš jos jis neturi sugebėti efektyviai atkurti.
8. Mažytis skaitinis pavyzdys
Sąmoningai imame juokingai mažą variantą — įprastus skaičius vietoj daugianarių, 2 matmenis vietoj 256, ir
Tegul
Tada:
Tokiame mažame formate būtų galima perrinkti visas galimybes. ML-DSA-87 atveju yra matrica iš daugianarių, kurių kiekvienas turi 256 koeficientus — tai daugiau nei 14 000 nežinomųjų gardelės struktūroje.
9. Parašų tarnybos raktų pora
Privačiajame rakte yra, be kita ko, maži vektoriai . ML-DSA-87 atveju jų koeficientai imami iš intervalo
taigi iš aibės . Šis mažumas nėra smulkmena, o pati esmė: tik dėl to, kad paslaptys yra mažos, apskritai atsiranda sunkus gardelės uždavinys.
Viešasis raktas supaprastintai yra
yra sėkla, iš kurios galima deterministiškai atkurti — taigi matricos perduoti nereikia. yra viršutiniai bitai; apatiniai bitai atmetami, o tai gerokai sumažina raktą. Būtent šis praleidimas vėliau yra vadinamųjų užuominų priežastis.
Taip atsiranda norima asimetrija:
10. Atsiliepimas virsta skaičiumi
Parašų tarnyba pirmiausia apskaičiuoja 2 skyriaus naudingosios apkrovos objekto maišą:
Mūsų žaisliniame pavyzdyje imame dirbtinę mažą maišą. Tikroje sistemoje yra 512 bitų ilgio ir papildomai susieja viešąjį raktą — dėl to parašo nepavyks pertraktuoti kaip skirto kitam raktui.
11. Įsipareigojimas
Parašų tarnyba ištraukia atsitiktinį mažą vektorių . Mūsų pavyzdyje:
Iš jo gaunama tarpinė reikšmė — įsipareigojimas:
Tai dar nėra parašas.
12. Iš atsiliepimo gaunamas iššūkis
Pranešimas ir įsipareigojimas sumaišomi kartu:
ML-DSA-87 atveju yra daugianaris su lygiai koeficientais iš aibės , o visi likę 196 yra nuliai. Ši struktūra pasirinkta tyčia: ji išlaiko mažą.
Mūsų žaisliniame pavyzdyje tiesiog imame
13. Pats parašas
Su mūsų reikšmėmis:
14. Žingsnis, kurį lengva pražiūrėti: atmetimo atranka
Čia yra vieta, kurioje ML-DSA skiriasi nuo naivios konstrukcijos — ir ji nėra pasirenkama.
savyje turi paslaptį . Jei būtų tiesiog visada išduodamas, iš pakankamai daug parašų būtų galima statistiškai apskaičiuoti. Atsiliepimų portalui su labai daug parašų per dieną tai nėra teorinė rizika.
Todėl parašų tarnyba prieš išdavimą patikrina, ar neatskleidžia per daug, ir priešingu atveju parašą atmeta — tada viskas pradedama iš naujo su nauju atsitiktiniu . Tai vadinama Fiat-Shamir with Aborts.
Sąlyga iš esmės yra tokia:
ML-DSA-87 atveju galioja ir . Prisideda dar antra riba apatiniams bitams. Praktikoje keli praėjimai yra įprasta — taigi pasirašymas yra ciklinis metodas, o ne vienas žingsnis.
Verifikacijai svarbu štai kas: būtent šią ribą naršyklė vėliau taip pat tikrina. Parašas su per dideliais koeficientais atmetamas, net jei lygtis ir tenkinama.
15. Kodėl naršyklė tai gali patikrinti
Skaitytojo naršyklė žino:
- atsiliepimą, taigi ir
- viešąjį raktą
- parašą
Ji nežino . Ryšys, kuris ją vis dėlto veda pirmyn:
Ir kadangi galioja
nežinomą galima pakeisti viešąja reikšme:
Tai pagrindinė lygtis — ir ji sako svarbų dalyką: naršyklė atkuria ne tiksliai, o tik iki mažo nario .
16. Mažas pavyzdys iki galo
Turėjome:
Perskaičiuokime:
Pradinis įsipareigojimas buvo
Skirtumas yra
Taigi būtent numatytas mažas paklaidos narys. Tikrintojas gauna ne , o kai ką, kas yra arti .
Būtent todėl ML-DSA lygina ne pačias reikšmes, o jų viršutinius bitus. Ir būtent todėl parašas papildomai turi užuominų vektorių : jis kompaktiškai praneša, kuriose vietose apvalinimas dėl mažo paklaidos nario persivertė per ribą. ML-DSA-87 atveju leidžiama daugiausia tokių užuominų. Paslapties jos neatskleidžia — jos tik pataiso apvalinimą.
Pabaigoje naršyklė iš naujo apskaičiuoja iššūkį. Jei jis sutampa,
ir visos normos telpa į ribas, parašas galioja.
17. Kas nutinka, kai kas nors pakeičia atsiliepimą?
Tarkime, kažkas, turintis prieigą prie duomenų bazės — taip pat ir kažkas iš mūsų — pakeičia atsiliepimo tekstą arba vieną iš širdelių. Tada pasikeičia bent viena iš dviejų maišos reikšmių naudingojoje apkrovoje (h — dėl teksto, rh — dėl bet kurio duomenų rinkinio lauko):
Kartu pasikeičia iššūkis:
Tačiau esamas parašas buvo sukurtas senajam iššūkiui. Naršyklė perskaičiuoja ir nustato:
Lemiamas sakinys toks: atsiliepimą galime ištrinti, bet pakeisti jo nepastebimai negalime. McGesund sistemoje ta pati patikra papildomai kas naktį atliekama serveryje visam duomenų kiekiui — atsiliepimas, kuris šios patikros neišlaiko, į įmonės vidurkį nebeįskaitomas.
18. Kodėl niekas negali išgalvoti parašo?
Užpuolikas žino ir , bet ne . Kad sukonstruotų galiojantį parašą, jis turėtų rasti trejetą , kuris
- tenkina verifikacijos lygtį ir
- laikosi normų ribų ir
- atitinka iššūkį, kuris gaunamas iš tų pačių reikšmių.
Iš esmės tai veda prie sunkaus gardelės uždavinio — konkrečiai prie Module-SIS: rasti trumpus homogeninės lygties sprendinius moduliu . Mažumo sąlyga čia yra ne priedas, o pats sunkumo šaltinis. Be jos sprendinys būtų trivialus.
19. Kodėl „Module"?
Šis žodis apibūdina struktūrą tarp paprastų vektorių ir bendrųjų gardelių. Užuot skaičiavęs su pavieniais skaičiais, ML-DSA dirba su daugianarių vektoriais:
ir su jų matricomis:
Privalumas: gaunamas didelis gardelės matmuo, bet išlaikomas kompaktiškas, efektyviai skaičiuojamas pavidalas. Saugumą galima tiksliai derinti keičiant matricos dydį, nekeičiant žiedo.
20. Kodėl būtent 87?
Trys lygiai skiriasi ne žiedu, o matmenimis:
| Parametras | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Matricos dydis | |||
| Paslapties intervalas | 2 | 4 | 2 |
| Iššūkio svoris | 39 | 49 | 60 |
| Viešasis raktas | 1 312 B | 1 952 B | 2 592 B |
| Parašas | 2 420 B | 3 309 B | 4 627 B |
| NIST kategorija | 2 | 3 | 5 |
Verta pastebėti: ML-DSA-87 nėra tiesiog „ML-DSA-65, tik didesnis". Paslapties intervalas nuo 4 vėl grįžta į 2; saugumas čia ateina iš didesnės matricos, o ne iš didesnių koeficientų. Tai savarankiškas, standartizuotas parametrų pasirinkimas.
Kaina: 4 627 baitai vienam parašui — vienam antspaudui, kuris saugomas ir tikrinant pateikiamas naršyklei. Todėl McGesund sistemoje greta ML-DSA-87 galima rinktis ir FALCON, kuriam pakanka 1 280 baitų.
21. Fiat-Shamir: kodėl tai veikia be pašnekovo
Interaktyvus įrodymas vyktų taip:
- Parašų tarnyba siunčia įsipareigojimą.
- Tikrintojas siunčia atsitiktinį iššūkį.
- Parašų tarnyba atsako.
- Tikrintojas perskaičiuoja.
Atsiliepimo atveju tokio dialogo nėra — skaitytojas ateina po kelių mėnesių. Sprendimas yra Fiat-Shamir transformacija: iššūkis ne metamas kauliuku, o apskaičiuojamas kaip maiša iš pačių duomenų:
Taip dialogas virsta dokumentu. Parašų tarnyba negali pasirinkti iššūkio, nes tam ji turėtų kontroliuoti maišą.
22. Visa eiga
23. Ką konkrečiai su tuo daro McGesund
Susikabina trys lygmenys:
Vokas. Kiekvienas pasirašytas atsiliepimas turi Ed25519 parašą. Tai privaloma dalis — klasikinė, mažytė, natyviai patikrinama kiekvienoje naršyklėje.
Postkvantiniai antspaudai. Papildomai šalia gali būti padėti vienas ar du kvantams atsparūs parašai. Kurie — priklauso nuo tarifo:
| Tarifas | galimi parašų lygiai |
|---|---|
| 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, abu lygiagrečiai |
Lygiagretus variantas sąmoningai perteklinis. Jei viena iš dviejų matematinių šeimų — NTRU gardelės FALCON atveju, modulinės gardelės ML-DSA atveju — pasirodytų silpnesnė, nei manoma šiandien, kita laikytų toliau.
Laiko inkaras. Parašo rakto kontrolinis atspaudas per OpenTimestamps įtvirtinamas Bitcoin bloke. Taip galima įrodyti ne tik tai, kad parašas tikras, bet ir tai, kad jis tam tikru momentu jau egzistavo — nereikalaujant iš nieko tikėti mūsų laiko žyma.
Visa tai tikrinama skaitytojo naršyklėje per WASM modulį. Mes pateikiame duomenis; perskaičiuojama lankytojo įrenginyje. Jei rytoj dingtume iš tinklo, kartą atsisiųstas atsiliepimas liktų patikrinamas.
24. ML-DSA ir FALCON greta
| Savybė | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Tipas | skaitmeninis parašas | skaitmeninis parašas |
| Gardelių šeima | NTRU | Module-LWE / Module-SIS |
| Žiedas | , | , |
| Pagrindinis mechanizmas | trumpas vektorius per Gauso atranką | iššūkis ir atsakymas su nutraukimais |
| FFT / NTT | slankiojo kablelio FFT, kritinė saugumui | NTT, tik aritmetika |
| Parašo dydis (aukščiausias lygis) | 1 280 B | 4 627 B |
| Realizacija | sudėtinga (slankusis kablelis) | palyginti tiesmuka |
| Standartizavimas | numatytas kaip FIPS 206 (FN-DSA), dar nebaigtas | FIPS 204, baigtas |
Trumpai tariant: ML-DSA lengviau teisingai realizuoti ir patikrinti, FALCON pateikia gerokai kompaktiškesnius parašus. QR kode nėra nė vieno iš jų — ten yra vien Ed25519 vokas. Todėl parašo dydis svarbus saugant ir pateikiant, o patvarumas — realizuojant. Todėl siūlome abu.
25. Vienas sakinys įsidėmėti
Kas turi slaptąjį vektorių, pasirašo per milisekundes. Kas jo neturi, turėtų išspręsti gardelės uždavinį daugiau nei 14 000 matmenų erdvėje — net ir su kvantiniu kompiuteriu.
Atsiliepimo skaitytojui tai reiškia paprastą dalyką: jam nereikia mumis tikėti. Jis gali perskaičiuoti.