Parakstu algoritms
ML-DSA-87 matemātiski izskaidrots
Kā ML-DSA-87 (FIPS 204) paraksta McGesund atsauksmi — no Module-LWE pār Rejection Sampling līdz pārbaudei pārlūkprogrammā.
Stāvoklis: 2026-09-07
1. Par ko šeit ir runa
Kad kāds McGesund vietnē iesniedz atsauksmi, fonā notiek vairāk, nekā ļauj nojaust teksts. Nosūtīšanas brīdī atsauksme tiek digitāli parakstīta. Šo parakstu vēlāk ikviens apmeklētājs var pārrēķināt savā pārlūkprogrammā — bez uzticēšanās mums un bez jautāšanas mums.
Klientiem, sākot no tarifa Pro, tas cita starpā notiek ar ML-DSA-87. Šis raksts skaidro, kas tur matemātiski notiek.
Svarīgi jau iepriekš:
ML-DSA nav šifrēšana. Atsauksmes teksts paliek publiski lasāms — tāda taču ir atsauksmes jēga. ML-DSA pierāda nevis slepenību, bet gan izcelsmi un neskartību.
ML-DSA ir izstrādāts no CRYSTALS-Dilithium un ir standartizēts kā FIPS 204. Skaitlis 87 apzīmē parametru līmeni. To ir trīs:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 ir augstākais un atrodas NIST drošības kategorijā 5.
2. Kas tieši tiek parakstīts?
Parakstā nonāk nevis pats atsauksmes teksts, bet kompakts datu objekts, kas viennozīmīgi nostiprina tekstu. McGesund vietnē tas pēc būtības izskatās šādi:
{
"v": 1,
"typ": "rev-comment",
"f": "<uzņēmuma ID>",
"c": "<atsauksmes ID>",
"h": "<atsauksmes teksta SHA-256>",
"rh": "<visa iesniegtā datu ieraksta SHA-256>",
"rv": 1,
"qh": "<QR aploksnes SHA-256, tikai QR atsauksmēm>",
"iat": 1757203200
}
Šis objekts ir mūsu ziņojums . Tas sasaista kopā sešus apgalvojumus:
- Kuram uzņēmumam atsauksme pieder (
f) - Kura atsauksme ir domāta (
c) - Kāds teksts aiz tās stāvēja — kā jaucējvērtība (
h) - Kāds datu ieraksts kopumā tika iesniegts (
rh): teksts, sirdis, ģeostatuss un ziņas par apmeklējuma iemeslu, kanoniski serializēti un sajaukti — shēmas versijārv - No kura QR koda atsauksme nāk (
qh); bez QR šis lauks atkrīt - Kad tika parakstīts (
iat)
Ja kāds vēlāk maina kaut vienu rakstzīmi atsauksmes tekstā, h vairs neatbilst — un rh arī ne. Kas turpretī pagroza tikai sirdis, tas h atstāj neskartu, bet salauž rh. Ja kāds maina vienu no šīm jaucējvērtībām, paraksts vairs neatbilst. Tieši šī ķēde ir būtība.
3. Ko parakstam ir jāpaveic
Apmeklētājam, kas atsauksmi lasa, ir jāspēj pašam pārbaudīt trīs lietas:
- Atsauksmi tiešām ir izsniedzis McGesund.
- Teksts kopš nosūtīšanas nav mainīts.
- Neviens nevar izdomāt jaunu atsauksmi, kas izskatītos derīga.
Tam kalpo atslēgu pāris:
- privātā atslēga — atrodas vienīgi parakstīšanas dienestā
- publiskā atslēga — to drīkst zināt ikviens, un tā tiek adresēta ar atslēgas ID (
kid) aploksnē
Parakstīts tiek ar privāto atslēgu. Pārbaudīts — ar publisko, turklāt lasītāja pārlūkprogrammā, nevis uz mūsu servera.
4. Kāpēc vispār pēckvantu algoritms?
Daudzi šodien izplatītie parakstu algoritmi balstās uz lielu skaitļu faktorizāciju vai uz diskrētajiem logaritmiem. Pietiekami jaudīgs kvantu dators tieši šīs problēmas ar zināmiem algoritmiem varētu atrisināt ievērojami ātrāk.
Atsauksmei tas nav akadēmisks jautājums. Atsauksmei arī pēc desmit gadiem jābūt pārbaudāmai. Kas paraksta šodien, paraksta uz visu ieraksta dzīves laiku.
Tāpēc ML-DSA izmanto citu pamatu:
Precīzāk: Module-LWE un Module-SIS.
5. Kas ir režģis?
Sākumā tikai punkti telpā. Ņemsim divus vektorus:
Visas veselo skaitļu kombinācijas
veido režģi. Piemēram:
Izšķirošais:
Mazās dimensijās režģu problēmas ir vieglas. Ļoti augstās dimensijās noteikti uzdevumi kļūst ārkārtīgi grūti.
6. Polinomi atsevišķu skaitļu vietā
ML-DSA rēķina nevis ar 2D vektoriem, bet ar polinomiem un polinomu vektoriem.
Polinomu, piemēram,
var pierakstīt kā koeficientu virkni:
Rēķināts tiek gredzenā:
Tas nozīmē divas lietas:
- : rēķināšana pēc moduļa
- : papildu likums, kas nofiksē polinoma garumu
Visiem trim ML-DSA līmeņiem ir spēkā:
Polinomam tātad ir 256 koeficienti, aplūkoti pēc moduļa 8 380 417. Starp līmeņiem mainās nevis vai , bet matricu izmērs — par to vēlāk.
Starp citu: polinomu reizināšana šajā gredzenā praksē notiek caur NTT, ātrās Furjē transformācijas skaitļu teorijas variantu. ML-DSA tātad nebūt neiztiek bez FFT idejām; tās vienkārši slēpjas aritmētikā, nevis paraksta principā.
7. Galvenais triks: Module-LWE
Pamatideja ir Module Learning With Errors:
Tajā ir:
- — publiska, šķietami nejauša matrica no polinomiem
- — mazi slepenie vektori
- — publiskā vērtība
Uzbrucējs zina un , bet ne . Vienādojums viņam izskatās pēc nejauša vienādojuma ar troksni. Mazos noslēpumus viņam no tā nav jāspēj efektīvi atrēķināt atpakaļ.
8. Sīks skaitlisks piemērs
Mēs apzināti ņemam smieklīgi mazu variantu — parastus skaitļus polinomu vietā, 2. dimensiju 256. vietā, un
Lai
Tad:
Šādā mini formātā varētu izmēģināt visas iespējas. ML-DSA-87 gadījumā ir matrica no polinomiem, katram ar 256 koeficientiem — tie ir vairāk nekā 14 000 nezināmo režģa struktūrā.
9. Parakstīšanas dienesta atslēgu pāris
Privātā atslēga cita starpā satur mazos vektorus . ML-DSA-87 gadījumā to koeficienti nāk no intervāla
tātad no kopas . Šis mazums nav sīkums, bet gan pati būtība: tikai tāpēc, ka noslēpumi ir mazi, vispār rodas grūta režģa problēma.
Publiskā atslēga vienkāršoti ir
ir sēkla, no kuras var deterministiski rekonstruēt — matrica tātad nav jāpārraida. ir augstākie biti; apakšējie biti tiek nomesti, kas atslēgu ievērojami samazina. Šis izlaidums vēlāk ir iemesls tā sauktajām norādēm (hints).
Tā rodas vēlamā asimetrija:
10. Atsauksme kļūst par skaitli
Parakstīšanas dienests vispirms sajauc 2. sadaļas payload objektu:
Mūsu rotaļlietas piemērā mēs ņemam mākslīgu mini jaucējvērtību. Īstajā sistēmā ir 512 bitu gara un papildus piesaista publisko atslēgu — tādējādi parakstu nevar attiecināt uz citu atslēgu.
11. Saistījums
Parakstīšanas dienests izlozē nejaušu mazu vektoru . Mūsu piemērā:
No tā rodas starpvērtība — saistījums:
Tas vēl nav paraksts.
12. No atsauksmes rodas izaicinājums
Ziņojums un saistījums tiek sajaukti kopā:
ML-DSA-87 gadījumā ir polinoms ar tieši koeficientiem no kopas , visi pārējie 196 ir nulle. Šī struktūra ir apzināta: tā notur mazu.
Mūsu rotaļlietas piemērā mēs vienkārši pieņemam
13. Pats paraksts
Ar mūsu vērtībām:
14. Solis, kuru viegli pārskatīt: Rejection Sampling
Šeit ir vieta, kurā ML-DSA atšķiras no naivas konstrukcijas — un tā nav izvēles iespēja.
satur noslēpumu . Ja vienkārši vienmēr izsniegtu, tad no pietiekami daudziem parakstiem varētu statistiski atrēķināt. Atsauksmju portālam ar ļoti daudziem parakstiem dienā tas nav teorētisks risks.
Tāpēc parakstīšanas dienests pirms izsniegšanas pārbauda, vai neizpauž par daudz, un pretējā gadījumā parakstu atmet — tad viss sākas no jauna ar jaunu nejaušu . To sauc par Fiat-Shamir with Aborts.
Nosacījums pēc būtības ir šāds:
ML-DSA-87 gadījumā ir spēkā un . Klāt nāk otra robeža apakšējiem bitiem. Praksē vairāki caurlaidieni ir normāli — parakstīšana tātad ir cikliska procedūra, nevis viens vienreizējs solis.
Verifikācijai svarīgi ir tas, ka tieši šo robežu pārlūkprogramma vēlāk pārbauda līdzi. Paraksts ar pārāk lieliem koeficientiem tiek noraidīts pat tad, ja vienādojums izpildās.
15. Kāpēc pārlūkprogramma to var pārbaudīt
Lasītāja pārlūkprogramma zina:
- atsauksmi un līdz ar to
- publisko atslēgu
- parakstu
Tā nezina . Sakarība, kas tai tomēr palīdz tikt uz priekšu:
Un tā kā ir spēkā
nezināmo var aizstāt ar publisko vērtību:
Tas ir centrālais vienādojums — un tas pasaka kaut ko svarīgu: pārlūkprogramma rekonstruē nevis precīzi, bet tikai līdz mazajam loceklim .
16. Mini piemērs līdz galam
Mums bija:
Pārrēķinām:
Sākotnējais saistījums bija
Starpība ir
Tātad tieši paredzētais mazais kļūdas loceklis. Verificētājs saņem nevis , bet kaut ko, kas atrodas tuvu pie .
Tieši tāpēc ML-DSA salīdzina nevis pašas vērtības, bet to augstākos bitus. Un tieši tāpēc paraksts papildus satur norāžu vektoru : tas kompakti pavēsta, kurās vietās noapaļošana mazā kļūdas locekļa dēļ ir pārsviedusies pāri robežai. ML-DSA-87 gadījumā atļauts ir ne vairāk kā šādu norāžu. Tās neizpauž noslēpumu — tās tikai izlabo noapaļošanu.
Beigās pārlūkprogramma no jauna aprēķina izaicinājumu. Ja tas sakrīt,
un ja visas normas iekļaujas robežās, paraksts ir derīgs.
17. Kas notiek, ja kāds atsauksmi maina?
Pieņemsim, ka kāds ar piekļuvi datubāzei — arī kāds no mūsējiem — maina atsauksmes tekstu vai kādu no sirdīm. Tad mainās vismaz viena no abām jaucējvērtībām payload objektā (h teksta gadījumā, rh jebkura datu ieraksta lauka gadījumā):
Līdz ar to mainās izaicinājums:
Esošais paraksts tomēr ir radīts vecajam izaicinājumam. Pārlūkprogramma pārrēķina un konstatē:
Izšķirošais teikums šeit: mēs varam atsauksmi izdzēst, bet nevaram to nemanāmi mainīt. McGesund vietnē tā pati pārbaude papildus katru nakti tiek veikta servera pusē pār visu kopumu — atsauksme, kas šo pārbaudi neiztur, vairs neieplūst uzņēmuma vidējā vērtējumā.
18. Kāpēc neviens nevar izdomāt parakstu?
Uzbrucējs zina un , bet ne . Lai uzbūvētu derīgu parakstu, viņam būtu jāatrod trijnieks , kas
- apmierina verifikācijas vienādojumu un
- ievēro normas robežas un
- atbilst tam izaicinājumam, kas izriet tieši no šīm pašām vērtībām.
Tas pēc būtības noved pie grūtas režģa problēmas — konkrēti pie Module-SIS: atrast īsus risinājumus homogēnam vienādojumam pēc moduļa . Mazuma nosacījums šeit nav papildinājums, bet gan pati grūtības pakāpe. Bez tā risinājums būtu triviāls.
19. Kāpēc „Module"?
Šis vārds apraksta struktūru starp vienkāršiem vektoriem un vispārīgiem režģiem. Tā vietā, lai rēķinātu ar atsevišķiem skaitļiem, ML-DSA strādā ar polinomu vektoriem:
un ar matricām no tiem:
Priekšrocība: tiek iegūta režģa augstā dimensija, taču saglabāts kompakts, efektīvi rēķināms attēlojums. Drošību var smalki noregulēt ar matricas izmēru, nemainot gredzenu.
20. Kāpēc tieši 87?
Trīs līmeņi atšķiras nevis gredzenā, bet dimensijās:
| Parametrs | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Matricas izmērs | |||
| Noslēpuma diapazons | 2 | 4 | 2 |
| Izaicinājuma svars | 39 | 49 | 60 |
| Publiskā atslēga | 1312 B | 1952 B | 2592 B |
| Paraksts | 2420 B | 3309 B | 4627 B |
| NIST kategorija | 2 | 3 | 5 |
Ievērības vērts: ML-DSA-87 nav vienkārši „ML-DSA-65, tikai lielāks". Noslēpuma diapazons no 4 atgriežas atpakaļ uz 2; drošība šeit nāk no lielākas matricas, nevis no lielākiem koeficientiem. Tā ir patstāvīga, standartizēta parametru izvēle.
Cena: 4627 baiti uz vienu parakstu — uz vienu zīmogu, kas tiek glabāts un pārbaudes brīdī nogādāts pārlūkprogrammai. Tāpēc McGesund vietnē blakus ML-DSA-87 ir pieejams arī FALCON, kam pietiek ar 1280 baitiem.
21. Fiat-Shamir: kāpēc tas darbojas bez sarunu partnera
Interaktīvs pierādījums noritētu šādi:
- Parakstīšanas dienests nosūta saistījumu.
- Pārbaudītājs nosūta nejaušu izaicinājumu.
- Parakstīšanas dienests atbild.
- Pārbaudītājs pārrēķina.
Atsauksmes gadījumā šāda dialoga nav — lasītājs ierodas mēnešus vēlāk. Risinājums ir Fiat-Shamir transformācija: izaicinājums netiek izmests ar kauliņu, bet sajaukts no pašiem datiem:
Tādējādi no dialoga rodas dokuments. Parakstīšanas dienests izaicinājumu nevar izvēlēties, jo tam vajadzētu kontrolēt jaucējvērtību.
22. Visa norise
23. Ko McGesund ar to konkrēti dara
Trīs līmeņi darbojas kopā:
Aploksne. Katra parakstītā atsauksme nes Ed25519 parakstu. Tas ir obligātais variants — klasisks, sīks, katrā pārlūkprogrammā natīvi pārbaudāms.
Pēckvantu zīmogi. Papildus blakus var tikt novietoti viens vai divi kvantu izturīgi paraksti. Kuri — atkarīgs no tarifa:
| Tarifs | pieejamie parakstu līmeņi |
|---|---|
| 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, abi paralēli |
Paralēlais variants ir apzināti dublējošs. Ja viena no abām matemātiskajām saimēm — NTRU režģi FALCON gadījumā, moduļu režģi ML-DSA gadījumā — izrādītos vājāka, nekā šodien pieņemts, otra turpina nest.
Laika enkurs. Parakstīšanas atslēgas nospiedums caur OpenTimestamps tiek noenkurots Bitcoin blokā. Tādējādi var pierādīt ne tikai to, ka paraksts ir īsts, bet arī to, ka tas noteiktā brīdī jau eksistēja — un nevienam nav jātic mūsu laika zīmogam.
Viss šis tiek pārbaudīts lasītāja pārlūkprogrammā, caur WASM moduli. Mēs piegādājam datus; pārrēķināts tiek apmeklētāja ierīcē. Ja mēs rīt pazustu no tīkla, vienreiz lejupielādēta atsauksme paliktu pārbaudāma.
24. ML-DSA un FALCON blakus
| Īpašība | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Veids | ciparparaksts | ciparparaksts |
| Režģu saime | NTRU | Module-LWE / Module-SIS |
| Gredzens | , | , |
| Pamatmehānisms | īss vektors ar Gausa izlasi | izaicinājums-atbilde ar pārtraukumiem |
| FFT / NTT | peldošā komata FFT, drošībai kritiska | NTT, tikai aritmētika |
| Paraksta izmērs (augstākais līmenis) | 1280 B | 4627 B |
| Implementācija | prasīga (peldošais komats) | salīdzinoši tiešāka |
| Standartizācija | paredzēta kā FIPS 206 (FN-DSA), vēl nav pabeigta | FIPS 204, pabeigta |
Īsi sakot: ML-DSA ir vieglāk pareizi implementēt un pārbaudīt, FALCON dod ievērojami kompaktākus parakstus. QR kodā neatrodas neviens no abiem — tur ir vienīgi Ed25519 aploksne. Paraksta izmērs tāpēc svarīgs ir glabāšanā un piegādē, bet robustums — implementācijā. Tāpēc mēs piedāvājam abus.
25. Viens teikums līdzņemšanai
Kam pieder slepenais vektors, tas paraksta milisekundēs. Kam tā nav, tam būtu jāatrisina režģa problēma vairāk nekā 14 000 dimensijās — arī ar kvantu datoru.
Atsauksmes lasītājam tas vienkārši nozīmē: viņam mums nav jātic. Viņš var pārrēķināt.