Allekirjoitusmenetelmä
ML-DSA-87 matemaattisesti selitettynä
Miten ML-DSA-87 (FIPS 204) allekirjoittaa McGesund-arvion — Module-LWE:stä rejection samplingin kautta selaimessa tapahtuvaan todennukseen.
Päivitetty: 2026-09-07
1. Mistä tässä on kyse
Kun joku antaa McGesundissa arvion, taustalla tapahtuu enemmän kuin teksti antaa olettaa. Arvio allekirjoitetaan digitaalisesti lähetyshetkellä. Jokainen kävijä voi myöhemmin laskea tämän allekirjoituksen uudelleen omassa selaimessaan — meihin luottamatta ja meiltä kysymättä.
Pro-paketista alkaen se tapahtuu muun muassa ML-DSA-87:llä. Tämä kirjoitus selittää, mitä siinä matemaattisesti tapahtuu.
Tärkeä huomautus aluksi:
ML-DSA ei ole salausmenetelmä. Arvioteksti pysyy julkisesti luettavana — sehän on arvion tarkoitus. ML-DSA ei todista salassapitoa vaan alkuperän ja eheyden.
ML-DSA on kehitetty CRYSTALS-Dilithiumista ja standardoitu nimellä FIPS 204. Luku 87 ilmaisee parametritason. Niitä on kolme:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 on korkein ja kuuluu NIST-turvallisuusluokkaan 5.
2. Mitä tarkalleen allekirjoitetaan?
Allekirjoitukseen ei mene arvioteksti itse vaan tiivis tietokohde, joka naulaa tekstin yksikäsitteisesti kiinni. McGesundissa se näyttää ytimeltään tältä:
{
"v": 1,
"typ": "rev-comment",
"f": "<yritystunnus>",
"c": "<arviotunnus>",
"h": "<arviotekstin SHA-256>",
"rh": "<koko lähetystietueen SHA-256>",
"rv": 1,
"qh": "<QR-Envelopen SHA-256, vain QR-arvioissa>",
"iat": 1757203200
}
Tämä kohde on viestimme . Se sitoo yhteen kuusi väitettä:
- Mihin yritykseen arvio kuuluu (
f) - Mistä arviosta on kyse (
c) - Mikä teksti sen takana oli — tiivistearvona (
h) - Mikä tietue kokonaisuudessaan lähetettiin (
rh): teksti, sydämet, sijaintitila ja käynnin syytä koskevat tiedot, kanonisesti sarjallistettuina ja tiivistettyinä — skeemaversiossarv - Mistä QR-koodista arvio on peräisin (
qh); ilman QR-koodia kenttä jää pois - Milloin allekirjoitettiin (
iat)
Jos joku muuttaa myöhemmin yhden ainoan merkin arviotekstissä, h ei enää täsmää — eikä rh liioin. Se, joka sen sijaan kääntää vain sydämiä, jättää kentän h koskematta mutta rikkoo kentän rh. Jos joku muuttaa jompaakumpaa näistä tiivistearvoista, allekirjoitus ei enää täsmää. Juuri tämä ketju on koko juju.
3. Mitä allekirjoituksen on määrä saada aikaan
Arvion lukevan kävijän on voitava tarkistaa itse kolme asiaa:
- Arvio on todella McGesundin antama.
- Tekstiä ei ole muutettu lähettämisen jälkeen.
- Kukaan ei voi keksiä uutta, kelvolliselta näyttävää arviota.
Sitä varten on avainpari:
- yksityinen avain — sijaitsee yksinomaan allekirjoituspalvelussa
- julkinen avain — saa olla kenellä tahansa, ja se osoitetaan Envelopessa olevalla avaintunnuksella (
kid)
Allekirjoittaminen tapahtuu yksityisellä avaimella. Todentaminen tapahtuu julkisella — ja nimenomaan lukijan selaimessa, ei meidän palvelimellamme.
4. Miksi ylipäätään post-kvanttimenetelmä?
Monet nykyisin tavanomaiset allekirjoitusmenetelmät perustuvat suurten lukujen tekijöihinjakoon tai diskreetteihin logaritmeihin. Riittävän tehokas kvanttitietokone voisi ratkaista juuri nämä ongelmat tunnetuilla algoritmeilla huomattavasti nopeammin.
Arvion kohdalla se ei ole akateeminen kysymys. Arvion on määrä olla todennettavissa vielä kymmenen vuoden kuluttua. Se, joka allekirjoittaa tänään, allekirjoittaa merkinnän koko elinkaareksi.
Siksi ML-DSA käyttää toisenlaista perustaa:
Tarkemmin: Module-LWE ja Module-SIS.
5. Mikä on hila?
Aluksi vain pisteitä avaruudessa. Otetaan kaksi vektoria:
Kaikki kokonaislukukertoimiset yhdistelmät
muodostavat hilan. Esimerkiksi:
Ratkaisevaa on:
Pienissä ulottuvuuksissa hilaongelmat ovat helppoja. Hyvin korkeissa ulottuvuuksissa tietyistä tehtävistä tulee äärimmäisen vaikeita.
6. Polynomit yksittäisten lukujen sijaan
ML-DSA ei laske kaksiulotteisilla vektoreilla vaan polynomeilla ja polynomivektoreilla.
Polynomi kuten
voidaan kirjoittaa kerroinlistana:
Laskutoimitukset tehdään renkaassa:
Se tarkoittaa kahta asiaa:
- : laskeminen modulo
- : lisäsääntö, joka kiinnittää polynomin pituuden
Kaikilla kolmella ML-DSA-tasolla pätee:
Polynomilla on siis 256 kerrointa, tarkasteltuna modulo 8 380 417. Tasojen välillä ei muutu eikä vaan matriisien koko — siitä lisää myöhemmin.
Sivumennen: polynomien kertolasku tässä renkaassa etenee käytännössä NTT:n kautta, joka on nopean Fourier-muunnoksen lukuteoreettinen variantti. ML-DSA ei siis suinkaan tule toimeen ilman FFT-ideoita; ne ovat vain aritmetiikassa eivätkä allekirjoitusperiaatteessa.
7. Keskeinen temppu: Module-LWE
Ydinajatus on Module Learning With Errors:
Tässä:
- — julkinen, näennäisen satunnainen polynomimatriisi
- — pienet salaiset vektorit
- — julkinen arvo
Hyökkääjä tuntee arvot ja mutta ei arvoja . Yhtälö näyttää hänestä satunnaiselta yhtälöltä, jossa on kohinaa. Pieniä salaisuuksia hänen ei ole määrä pystyä laskemaan siitä tehokkaasti takaisin.
8. Pienenpieni lukuesimerkki
Otamme tarkoituksella naurettavan pienen variantin — tavallisia lukuja polynomien sijaan, ulottuvuus 2 eikä 256, ja
Olkoon
Silloin:
Tässä minimuodossa kaikki vaihtoehdot voisi käydä läpi kokeilemalla. ML-DSA-87:ssä on -matriisi polynomeja, joilla kullakin on 256 kerrointa — se tarkoittaa yli 14 000 tuntematonta hilarakenteessa.
9. Allekirjoituspalvelun avainpari
Yksityinen avain sisältää muun muassa pienet vektorit . ML-DSA-87:ssä niiden kertoimet ovat väliltä
siis joukosta . Tämä pienuus ei ole yksityiskohta vaan ydin: vain siksi, että salaisuudet ovat pieniä, syntyy ylipäätään vaikea hilaongelma.
Julkinen avain on yksinkertaistettuna
on siemen, josta voidaan rekonstruoida deterministisesti — matriisia ei siis tarvitse siirtää. on arvon ylimmät bitit; alimmat bittiä jäävät pois, mikä pienentää avainta selvästi. Tämä poisjättö on myöhemmin syy niin sanottuihin vihjeisiin.
Näin syntyy haluttu epäsymmetria:
10. Arviosta tulee luku
Allekirjoituspalvelu tiivistää ensin luvun 2 payload-kohteen:
Leluesimerkissämme käytämme keinotekoista minitiivistettä. Todellisessa järjestelmässä on 512 bittiä pitkä ja sitoo lisäksi julkisen avaimen mukaan — siten allekirjoitusta ei voi tulkita uudelleen toiselle avaimelle.
11. Commitment
Allekirjoituspalvelu arpoo satunnaisen pienen vektorin . Esimerkissämme:
Siitä syntyy välituloksena commitment:
Tämä ei ole vielä allekirjoitus.
12. Arviosta tulee haaste
Viesti ja commitment tiivistetään yhdessä:
ML-DSA-87:ssä on polynomi, jossa on täsmälleen kerrointa joukosta , ja loput 196 ovat nollia. Tämä rakenne on tarkoituksellinen: se pitää tulon pienenä.
Leluesimerkissämme asetamme yksinkertaisesti
13. Varsinainen allekirjoitus
Meidän arvoillamme:
14. Askel, joka helposti jää huomaamatta: rejection sampling
Tässä on kohta, jossa ML-DSA eroaa naiivista rakenteesta — eikä se ole valinnainen.
sisältää salaisuuden . Jos annettaisiin aina yksinkertaisesti ulos, olisi laskettavissa tilastollisesti riittävän monesta allekirjoituksesta. Arviointiportaalille, joka tekee hyvin paljon allekirjoituksia päivässä, se ei ole teoreettinen riski.
Siksi allekirjoituspalvelu tarkistaa ennen ulosantoa, paljastaako liikaa, ja hylkää allekirjoituksen muussa tapauksessa — silloin aloitetaan alusta uudella satunnaisella :llä. Tätä kutsutaan nimellä Fiat-Shamir with Aborts.
Ehto kuuluu olennaisesti näin:
ML-DSA-87:llä pätee ja . Lisäksi tulee toinen raja alimmille biteille. Käytännössä useat läpimenot ovat normaaleja — allekirjoittaminen on siis silmukkamenetelmä eikä kertaluonteinen askel.
Todennuksen kannalta on tärkeää: juuri tämän rajan selain tarkistaa myöhemmin mukana. Allekirjoitus, jonka kertoimet ovat liian suuria, hylätään, vaikka yhtälö menisi tasan.
15. Miksi selain voi tarkistaa tämän
Lukijan selain tuntee:
- arvion ja siten viestin
- julkisen avaimen
- allekirjoituksen
Arvoa se ei tunne. Yhteys, joka silti vie sitä eteenpäin:
Ja koska pätee
tuntematon voidaan korvata julkisella arvolla:
Tämä on keskeinen yhtälö — ja se sanoo jotakin tärkeää: selain ei rekonstruoi arvoa tarkasti vaan vain pientä termiä vaille.
16. Miniesimerkki loppuun asti
Meillä oli:
Lasketaan tarkistukseksi:
Alkuperäinen commitment oli
Erotus on
Siis täsmälleen ennustettu pieni virhetermi. Todentaja ei saa arvoa vaan jotakin, joka on lähellä arvoa .
Juuri siksi ML-DSA ei vertaa arvoja itseään vaan niiden ylimpiä bittejä. Ja juuri siksi allekirjoitus sisältää lisäksi vihjevektorin : se kertoo tiiviisti, missä kohdin pyöristys on pienen virhetermin vuoksi kaatunut rajan yli. ML-DSA-87:ssä sallitaan enintään tällaista vihjettä. Ne eivät paljasta salaisuutta — ne vain korjaavat pyöristyksen.
Lopuksi selain laskee haasteen uudelleen. Jos se täsmää,
ja kaikki normit ovat rajojen sisällä, allekirjoitus on kelvollinen.
17. Mitä tapahtuu, jos joku muuttaa arviota?
Oletetaan, että joku, jolla on pääsy tietokantaan — myös joku meiltä — muuttaa arviotekstiä tai yhtä sydämistä. Silloin muuttuu vähintään toinen payloadin kahdesta tiivistearvosta (h tekstin kohdalla, rh minkä tahansa tietueen kentän kohdalla):
Siten muuttuu haaste:
Olemassa oleva allekirjoitus on kuitenkin luotu vanhalle haasteelle. Selain laskee tarkistukseksi ja toteaa:
Ratkaiseva lause tähän: voimme poistaa arvion, mutta emme voi muuttaa sitä huomaamatta. McGesundissa sama tarkistus ajetaan lisäksi öisin palvelinpuolella koko aineistolle — arvio, joka ei läpäise tätä tarkistusta, ei enää vaikuta yrityksen keskiarvoon.
18. Miksi kukaan ei voi keksiä allekirjoitusta?
Hyökkääjä tuntee arvot ja mutta ei arvoja . Rakentaakseen kelvollisen allekirjoituksen hänen pitäisi löytää kolmikko , joka
- toteuttaa todennusyhtälön ja
- pysyy normirajoissa ja
- vastaa haastetta, joka saadaan täsmälleen näistä arvoista itsestään.
Tämä johtaa ytimeltään vaikeaan hilaongelmaan — konkreettisesti ongelmaan Module-SIS: lyhyiden ratkaisujen löytämiseen homogeeniselle yhtälölle modulo . Pienuusehto ei ole tässä koriste vaan varsinainen vaikeusaste. Ilman sitä ratkaisu olisi triviaali.
19. Miksi ”Module”?
Sana kuvaa rakennetta yksinkertaisten vektorien ja yleisten hilojen välillä. Yksittäisillä luvuilla laskemisen sijaan ML-DSA työskentelee polynomivektoreilla:
ja niistä muodostetuilla matriiseilla:
Etu: saadaan hilan korkea ulottuvuus mutta säilytetään tiivis, tehokkaasti laskettava esitys. Turvallisuutta voidaan hienosäätää matriisin koolla ilman renkaan vaihtamista.
20. Miksi juuri 87?
Kolme tasoa eivät eroa toisistaan renkaan vaan ulottuvuuksien osalta:
| Parametri | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Matriisin koko | |||
| Salaisuusalue | 2 | 4 | 2 |
| Haasteen paino | 39 | 49 | 60 |
| Julkinen avain | 1 312 B | 1 952 B | 2 592 B |
| Allekirjoitus | 2 420 B | 3 309 B | 4 627 B |
| NIST-luokka | 2 | 3 | 5 |
Huomionarvoista: ML-DSA-87 ei ole yksinkertaisesti ”ML-DSA-65, vain isompana”. Salaisuusalue palaa arvosta 4 takaisin arvoon 2; turvallisuus tulee tässä suuremmasta matriisista eikä suuremmista kertoimista. Kyseessä on itsenäinen, standardoitu parametrivalinta.
Hinta: 4 627 tavua allekirjoitusta kohti — leimaa kohti, joka tallennetaan ja toimitetaan todennettaessa selaimelle. Siksi McGesundissa on ML-DSA-87:n rinnalla valittavissa myös FALCON, joka tulee toimeen 1 280 tavulla.
21. Fiat-Shamir: miksi se toimii ilman vastapuolta
Vuorovaikutteinen todistus etenisi näin:
- Allekirjoituspalvelu lähettää commitmentin.
- Todentaja lähettää satunnaisen haasteen.
- Allekirjoituspalvelu vastaa.
- Todentaja laskee tarkistukseksi.
Arvion kohdalla tätä vuoropuhelua ei ole — lukija saapuu kuukausia myöhemmin. Ratkaisu on Fiat-Shamir-muunnos: haastetta ei arvota, vaan se tiivistetään itse tiedoista:
Näin vuoropuhelusta tulee asiakirja. Allekirjoituspalvelu ei voi valita haastettaan, sillä sen pitäisi sitä varten hallita tiivistefunktiota.
22. Koko kulku
23. Mitä McGesund tekee tällä käytännössä
Kolme tasoa nivoutuu toisiinsa:
Envelope. Jokainen allekirjoitettu arvio kantaa Ed25519-allekirjoitusta. Se on pakollinen variantti — klassinen, hyvin pieni, natiivisti todennettavissa jokaisessa selaimessa.
Post-kvanttileimat. Lisäksi rinnalle voidaan asettaa yksi tai kaksi kvanttiresistenttiä allekirjoitusta. Mitkä, riippuu paketista:
| Paketti | käytettävissä olevat allekirjoitustasot |
|---|---|
| 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, molemmat rinnakkain |
Rinnakkainen variantti on tarkoituksella redundantti. Jos toinen näistä matemaattisista perheistä — NTRU-hilat FALCONissa, moduulihilat ML-DSA:ssa — osoittautuisi heikommaksi kuin nykyisin oletetaan, toinen kantaa edelleen.
Aikaankkuri. Allekirjoitusavaimen sormenjälki ankkuroidaan OpenTimestampsin kautta Bitcoin-lohkoon. Siten voidaan osoittaa paitsi se, että allekirjoitus on aito, myös se, että se oli olemassa jo tiettynä ajankohtana — ilman että kenenkään täytyisi uskoa meidän aikaleimaamme.
Kaikki tämä todennetaan lukijan selaimessa WASM-moduulin kautta. Me toimitamme tiedot; uudelleenlaskenta tapahtuu kävijän laitteella. Jos poistuisimme huomenna verkosta, kerran ladattu arvio pysyisi todennettavissa.
24. ML-DSA ja FALCON rinnakkain
| Ominaisuus | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Tyyppi | digitaalinen allekirjoitus | digitaalinen allekirjoitus |
| Hilaperhe | NTRU | Module-LWE / Module-SIS |
| Rengas | , | , |
| Ydinmekanismi | lyhyt vektori Gauss-otannalla | haaste-vastaus keskeytyksin |
| FFT / NTT | liukuluku-FFT, turvallisuuskriittinen | NTT, vain aritmetiikkaa |
| Allekirjoituksen koko (korkein taso) | 1 280 B | 4 627 B |
| Toteutus | vaativa (liukuluvut) | verrattain suoraviivainen |
| Standardointi | suunniteltu standardiksi FIPS 206 (FN-DSA), ei vielä valmis | FIPS 204, valmis |
Lyhyesti: ML-DSA on helpompi toteuttaa ja todentaa oikein, FALCON tuottaa selvästi tiiviimpiä allekirjoituksia. QR-koodissa ei ole kumpaakaan — siellä on yksin Ed25519-Envelope. Allekirjoituksen koko ratkaisee siksi tallennuksessa ja toimituksessa, robustius toteutuksessa. Siksi tarjoamme molempia.
25. Yksi lause mukaan otettavaksi
Se, jolla on salainen vektori, allekirjoittaa millisekunneissa. Sen, jolla sitä ei ole, olisi ratkaistava hilaongelma yli 14 000 ulottuvuudessa — myös kvanttitietokoneella.
Arvion lukijalle se tarkoittaa yksinkertaisesti: hänen ei tarvitse uskoa meitä. Hän voi laskea itse.