Allkirjastamismeetod
ML-DSA-87 matemaatiliselt selgitatud
Kuidas ML-DSA-87 (FIPS 204) McGesundi arvustuse allkirjastab — Module-LWE-st üle rejection samplingu kuni kontrollini brauseris.
Seisuga: 2026-09-07
1. Millest siin jutt käib
Kui keegi jätab McGesundis arvustuse, toimub taustal rohkem, kui tekst arvata laseb. Arvustus allkirjastatakse saatmisel digitaalselt. Seda allkirja saab iga külastaja hiljem oma brauseris järele arvutada — meid usaldamata ja meilt küsimata.
Klientidele alates paketist Pro tehakse seda muu hulgas ML-DSA-87-ga. See artikkel selgitab, mis seejuures matemaatiliselt toimub.
Kõigepealt oluline:
ML-DSA ei ole krüpteerimine. Arvustuse tekst jääb avalikult loetavaks — selles ju arvustuse mõte ongi. ML-DSA ei tõenda salastatust, vaid päritolu ja terviklikkust.
ML-DSA on välja arendatud CRYSTALS-Dilithiumist ja standarditud kui FIPS 204. Arv 87 tähistab parameetritaset. Neid on kolm:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 on kõrgeim ja kuulub NISTi turvakategooriasse 5.
2. Mida täpselt allkirjastatakse?
Allkirja ei rända mitte arvustuse tekst ise, vaid kompaktne andmeobjekt, mis naelutab teksti üheselt kinni. McGesundis näeb see sisuliselt välja nii:
{
"v": 1,
"typ": "rev-comment",
"f": "<ettevõtte ID>",
"c": "<arvustuse ID>",
"h": "<arvustuse teksti SHA-256>",
"rh": "<kogu esitatud andmekirje SHA-256>",
"rv": 1,
"qh": "<QR-Envelope'i SHA-256, ainult QR-arvustuste puhul>",
"iat": 1757203200
}
See objekt on meie sõnum . See seob kokku kuus väidet:
- Millisele ettevõttele arvustus kuulub (
f) - Millist arvustust mõeldakse (
c) - Milline tekst selle taga oli — räsiväärtusena (
h) - Milline andmekirje tervikuna esitati (
rh): tekst, südamed, geostaatus ja ajendi andmed, kanooniliselt serialiseeritud ja räsitud — skeemiversioonisrv - Millisest QR-koodist arvustus pärineb (
qh); ilma QR-ita see väli puudub - Millal allkirjastati (
iat)
Kui keegi muudab hiljem arvustuse tekstis üht ainsat märki, ei sobi h enam — ja rh samuti mitte. Kes selle asemel keerab ainult südameid, jätab h puutumata, kuid murrab rh. Kui keegi muudab üht neist räsiväärtustest, ei sobi allkiri enam. Just see ahel ongi mõte.
3. Mida allkiri peab tagama
Külastaja, kes arvustust loeb, peab saama kolme asja ise kontrollida:
- Arvustus on tõepoolest McGesundi väljastatud.
- Teksti ei ole pärast saatmist muudetud.
- Keegi ei saa välja mõelda uut, kehtivana näivat arvustust.
Selleks on olemas võtmepaar:
- privaatvõti — asub eranditult allkirjastamisteenuses
- avalik võti — tohib olla igaühel, seda adresseeritakse Envelope'is oleva võtme-ID (
kid) kaudu
Allkirjastatakse privaatvõtmega. Kontrollitakse avalikuga — ja nimelt lugeja brauseris, mitte meie serveris.
4. Miks üldse kvantijärgne meetod?
Paljud tänapäeval tavalised allkirjastamismeetodid põhinevad suurte arvude teguriteks lahutamisel või diskreetsetel logaritmidel. Piisavalt võimas kvantarvuti suudaks just neid ülesandeid teadaolevate algoritmidega tunduvalt kiiremini lahendada.
Arvustuse jaoks ei ole see akadeemiline küsimus. Arvustus peab olema kontrollitav ka kümne aasta pärast. Kes allkirjastab täna, allkirjastab kirje kogu eluea jaoks.
ML-DSA kasutab seetõttu teist alust:
Täpsemalt: Module-LWE ja Module-SIS.
5. Mis on võre?
Kõigepealt lihtsalt punktid ruumis. Võtame kaks vektorit:
Kõik täisarvulised kombinatsioonid
moodustavad võre. Näiteks:
Otsustav on:
Väikestes mõõtmetes on võreülesanded lihtsad. Väga suurtes mõõtmetes muutuvad teatud ülesanded ülimalt raskeks.
6. Polünoomid üksikute arvude asemel
ML-DSA ei arvuta 2D-vektoritega, vaid polünoomide ja polünoomivektoritega.
Polünoomi nagu
saab kirjutada kordajate loendina:
Arvutatakse ringis:
See tähendab kaht asja:
- : arvutamine mooduli järgi
- : lisareegel, mis fikseerib polünoomi pikkuse
Kõigi kolme ML-DSA taseme kohta kehtib:
Polünoomil on seega 256 kordajat, vaadelduna mooduli 8 380 417 järgi. See, mis tasemete vahel muutub, ei ole ega , vaid maatriksite suurus — sellest hiljem lähemalt.
Muuseas: polünoomide korrutamine selles ringis käib praktikas NTT kaudu, mis on kiire Fourier' teisenduse arvuteoreetiline variant. ML-DSA ei saa seega sugugi ilma FFT-ideedeta hakkama; need peituvad lihtsalt aritmeetikas, mitte allkirjastamise põhimõttes.
7. Keskne trikk: Module-LWE
Põhiidee on Module Learning With Errors:
Seejuures on:
- — avalik, näiliselt juhuslik polünoomide maatriks
- — väikesed salajased vektorid
- — avalik väärtus
Ründaja teab -d ja -d, kuid mitte vektoreid . Võrrand näeb tema jaoks välja nagu juhuslik võrrand müraga. Väikesi saladusi ei tohi ta sellest tõhusalt tagasi arvutada saada.
8. Pisike arvunäide
Võtame meelega naeruväärselt väikese variandi — tavalised arvud polünoomide asemel, mõõde 2 mõõtme 256 asemel, ja
Olgu
Siis:
Selles miniformaadis saaks kõik võimalused läbi proovida. ML-DSA-87 puhul on maatriks polünoomidest, millest igaühel on 256 kordajat — see teeb üle 14 000 tundmatu võrestruktuuris.
9. Allkirjastamisteenuse võtmepaar
Privaatvõti sisaldab muu hulgas väikesi vektoreid . ML-DSA-87 puhul pärinevad nende kordajad vahemikust
seega hulgast . See väiksus ei ole detail, vaid tuum: ainult tänu sellele, et saladused on väikesed, tekib üldse raske võreülesanne.
Avalik võti on lihtsustatult
on seeme, millest saab deterministlikult taastada — maatriksit ei pea seega üle kandma. on ülemised bitid; alumised bitti jäetakse ära, mis vähendab võtit tunduvalt. See ärajätmine on hiljem nn vihjete põhjus.
Sellega tekib soovitud asümmeetria:
10. Arvustusest saab arv
Allkirjastamisteenus räsib kõigepealt 2. jaos kirjeldatud andmeobjekti:
Meie mängunäites võtame kunstliku miniräsi. Tegelikus süsteemis on 512 bitti pikk ja seob lisaks avaliku võtme kaasa — seetõttu ei saa allkirja teisele võtmele ümber tõlgendada.
11. Commitment
Allkirjastamisteenus tõmbab juhusliku väikese vektori . Meie näites:
Sellest tekib vahetulemus, commitment:
See ei ole veel allkiri.
12. Arvustusest saab väljakutse
Sõnum ja commitment räsitakse kokku:
ML-DSA-87 puhul on polünoom, millel on täpselt kordajat hulgast , kõik ülejäänud 196 on nullid. See struktuur on taotluslik: see hoiab väikesena.
Meie mängunäites võtame lihtsalt
13. Tegelik allkiri
Meie väärtustega:
14. Samm, mis jääb kergesti kahe silma vahele: rejection sampling
Siin on koht, kus ML-DSA erineb naiivsest konstruktsioonist — ja see ei ole valikuline.
sisaldab saladust . Kui lihtsalt alati välja anda, saaks piisavalt paljudest allkirjadest statistiliselt välja arvutada. Arvustusportaali puhul, kus tehakse päevas väga palju allkirju, ei ole see teoreetiline risk.
Seepärast kontrollib allkirjastamisteenus enne väljastamist, kas reedab liiga palju, ja hülgab allkirja vastasel juhul — siis alustatakse uue juhusliku -ga otsast peale. Seda nimetatakse Fiat-Shamir with Aborts.
Tingimus on sisuliselt järgmine:
ML-DSA-87 puhul kehtivad ja . Lisaks tuleb teine piir alumistele bittidele. Praktikas on mitu läbimist tavaline — allkirjastamine on seega silmusega menetlus, mitte ühekordne samm.
Kontrollimise jaoks on tähtis: just seda piiri kontrollib brauser hiljem kaasa. Liiga suurte kordajatega allkiri lükatakse tagasi ka siis, kui võrrand kehtib.
15. Miks brauser saab seda kontrollida
Lugeja brauser teab:
- arvustust ja sellega -i
- avalikku võtit
- allkirja
Ta ei tea vektorit . Seos, mis viib ta sellest hoolimata edasi:
Ja kuna
kehtib, saab tundmatu asendada avaliku väärtusega:
See on keskne võrrand — ja see ütleb midagi olulist: brauser ei taasta -d täpselt, vaid ainult väikese liikme täpsusega.
16. Minimaalne näide lõpuni
Meil oli:
Arvutame järele:
Esialgne commitment oli
Vahe on
Seega täpselt ettekuulutatud väike veaterm. Kontrollija ei saa mitte -d, vaid midagi, mis asub lähedal.
Just seepärast ei võrdle ML-DSA väärtusi endid, vaid nende ülemisi bitte. Ja just seepärast sisaldab allkiri lisaks vihjevektorit : see teatab kompaktselt, millistes kohtades on ümardamine väikese veatermi tõttu üle piiri kaldunud. ML-DSA-87 puhul on lubatud kõige rohkem sellist vihjet. Nad ei reeda saladust — nad ainult parandavad ümardamist.
Lõpuks arvutab brauser väljakutse uuesti. Kui see langeb kokku,
ja kõik normid jäävad piiridesse, on allkiri kehtiv.
17. Mis juhtub, kui keegi arvustust muudab?
Oletame, et keegi, kellel on ligipääs andmebaasile — ka keegi meie juurest — muudab arvustuse teksti või üht südametest. Siis muutub vähemalt üks kahest räsiväärtusest andmeosas (h teksti puhul, rh iga andmekirje välja puhul):
Sellega muutub väljakutse:
Olemasolev allkiri loodi aga vana väljakutse jaoks. Brauser arvutab järele ja tuvastab:
Otsustav lause selle kohta: me võime arvustuse kustutada, aga me ei saa seda märkamatult muuta. McGesundis käib sama kontroll lisaks igal ööl serveripoolselt üle kogu andmestiku — arvustus, mis seda kontrolli ei läbi, ei lähe enam ettevõtte keskmisesse arvesse.
18. Miks keegi ei saa allkirja välja mõelda?
Ründaja teab -d ja -d, kuid mitte vektoreid . Kehtiva allkirja ehitamiseks peaks ta leidma kolmiku , mis
- rahuldab kontrollvõrrandit ja
- peab kinni normipiiridest ja
- sobib väljakutsega, mis tuleneb just neist väärtustest endist.
See taandub sisuliselt raskele võreülesandele — konkreetselt ülesandele Module-SIS: leida homogeense võrrandi lühikesed lahendid mooduli järgi. Väiksuse tingimus ei ole seejuures kaunistus, vaid tegelik raskusaste. Ilma selleta oleks lahend triviaalne.
19. Miks „Module"?
See sõna kirjeldab struktuuri, mis jääb lihtsate vektorite ja üldiste võrede vahele. Üksikute arvudega arvutamise asemel töötab ML-DSA polünoomivektoritega:
ja neist koostatud maatriksitega:
Eelis: saadakse võre suur mõõde, kuid säilib kompaktne, tõhusalt arvutatav esitus. Turvalisust saab maatriksi suuruse kaudu peenhäälestada, ilma ringi vahetamata.
20. Miks just 87?
Kolm taset ei erine ringi, vaid mõõtmete poolest:
| Parameeter | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Maatriksi suurus | |||
| Saladuse vahemik | 2 | 4 | 2 |
| Väljakutse kaal | 39 | 49 | 60 |
| Avalik võti | 1 312 B | 1 952 B | 2 592 B |
| Allkiri | 2 420 B | 3 309 B | 4 627 B |
| NISTi kategooria | 2 | 3 | 5 |
Tähelepanuväärne: ML-DSA-87 ei ole lihtsalt „ML-DSA-65, ainult suurem". Saladuse vahemik läheb 4-lt taas 2-le tagasi; turvalisus tuleb siin suuremast maatriksist, mitte suurematest kordajatest. Tegemist on iseseisva, standarditud parameetrivalikuga.
Hind: 4 627 baiti allkirja kohta — iga templi kohta, mis salvestatakse ja kontrollimisel brauserile edastatakse. Seepärast on McGesundis ML-DSA-87 kõrval valikus ka FALCON, mis saab hakkama 1 280 baidiga.
21. Fiat-Shamir: miks see töötab ilma vastaspooleta
Interaktiivne tõestus käiks nii:
- Allkirjastamisteenus saadab commitmenti.
- Kontrollija saadab juhusliku väljakutse.
- Allkirjastamisteenus vastab.
- Kontrollija arvutab järele.
Arvustuse puhul seda dialoogi ei ole — lugeja tuleb kuid hiljem. Lahendus on Fiat-Shamiri teisendus: väljakutset ei veeretata täringuga, vaid räsitakse andmetest endist:
Nii saab dialoogist dokument. Allkirjastamisteenus ei saa väljakutset ise valida, sest selleks peaks ta räsi kontrolli all hoidma.
22. Kogu kulg
23. Mida McGesund sellega konkreetselt teeb
Kolm tasandit haakuvad omavahel:
Envelope. Iga allkirjastatud arvustus kannab Ed25519 allkirja. See on kohustuslik variant — klassikaline, tilluke, igas brauseris natiivselt kontrollitav.
Kvantijärgsed templid. Lisaks võib kõrvale panna ühe või kaks kvantiresistentset allkirja. Millised, sõltub paketist:
| Pakett | saadaolevad allkirjatasemed |
|---|---|
| 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, mõlemad paralleelselt |
Paralleelne variant on teadlikult üleliigne. Kui üks kahest matemaatilisest perekonnast — NTRU-võred FALCONi puhul, moodulvõred ML-DSA puhul — peaks osutuma nõrgemaks, kui täna eeldatakse, kannab teine edasi.
Ajaankur. Allkirjastamisvõtme sõrmejälg ankurdatakse OpenTimestampsi kaudu Bitcoini plokki. Sellega ei saa tõendada mitte üksnes seda, et allkiri on ehtne, vaid ka seda, et ta oli teataval ajahetkel juba olemas — ilma et keegi peaks uskuma meie ajatemplit.
Kõike seda kontrollitakse lugeja brauseris WASM-mooduli abil. Meie tarnime andmed; järele arvutatakse külastaja seadmes. Kui me homme võrgust kaoksime, jääks juba korra alla laaditud arvustus kontrollitavaks.
24. ML-DSA ja FALCON kõrvuti
| Omadus | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Tüüp | digitaalallkiri | digitaalallkiri |
| Võreperekond | NTRU | Module-LWE / Module-SIS |
| Ring | , | , |
| Põhimehhanism | lühike vektor Gaussi sämplimise abil | väljakutse ja vastus katkestustega |
| FFT / NTT | ujukoma-FFT, turvakriitiline | NTT, ainult aritmeetika |
| Allkirja suurus (kõrgeim tase) | 1 280 B | 4 627 B |
| Teostus | nõudlik (ujukoma) | võrdlemisi sirgjooneline |
| Standardimine | ette nähtud FIPS 206-na (FN-DSA), veel lõpetamata | FIPS 204, lõpetatud |
Lühidalt: ML-DSA-d on lihtsam korrektselt teostada ja kontrollida, FALCON annab tunduvalt kompaktsemad allkirjad. QR-koodis ei ole kumbagi — seal on üksnes Ed25519 Envelope. Allkirja suurus loeb seetõttu salvestamisel ja edastamisel, robustsus teostamisel. Seepärast pakume mõlemat.
25. Üks lause kaasavõtmiseks
Kellel on salajane vektor, allkirjastab millisekunditega. Kellel seda ei ole, peaks lahendama võreülesande enam kui 14 000 mõõtmes — ka kvantarvutiga.
Arvustuse lugeja jaoks tähendab see lihtsalt: ta ei pea meid uskuma. Ta saab järele arvutada.