Podpisová schéma
ML-DSA-87 vysvetlený matematicky
Ako ML-DSA-87 (FIPS 204) podpisuje hodnotenie McGesund — od Module-LWE cez rejection sampling až po overenie v prehliadači.
Stav: 2026-09-07
1. O čo tu ide
Keď niekto na McGesund odovzdá hodnotenie, deje sa na pozadí viac, než by text naznačoval. Hodnotenie sa pri odoslaní digitálne podpíše. Tento podpis si môže každý návštevník neskôr prepočítať vo vlastnom prehliadači — bez toho, aby nám dôveroval, a bez toho, aby sa nás pýtal.
Pre zákazníkov od tarifu Pro sa to okrem iného deje pomocou ML-DSA-87. Tento článok vysvetľuje, čo sa pritom matematicky deje.
Dôležité na úvod:
ML-DSA nie je šifrovanie. Text hodnotenia zostáva verejne čitateľný — to je predsa zmyslom hodnotenia. ML-DSA nedokazuje utajenie, ale pôvod a neporušenosť.
ML-DSA vzniklo z CRYSTALS-Dilithium a je štandardizované ako FIPS 204. Číslo 87 označuje parametrický stupeň. Sú tri:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 je najvyšší a leží v bezpečnostnej kategórii NIST 5.
2. Čo presne sa podpisuje?
Do podpisu neputuje samotný text hodnotenia, ale kompaktný dátový objekt, ktorý text jednoznačne pribíja. Na McGesund vyzerá v jadre takto:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID firmy>",
"c": "<ID hodnotenia>",
"h": "<SHA-256 textu hodnotenia>",
"rh": "<SHA-256 celého odovzdaného záznamu>",
"rv": 1,
"qh": "<SHA-256 QR obálky, len pri QR hodnoteniach>",
"iat": 1757203200
}
Tento objekt je naša správa . Zväzuje dokopy šesť výpovedí:
- Ku ktorému podniku hodnotenie patrí (
f) - Ktoré hodnotenie je myslené (
c) - Aký text za ním stál — ako hašovú hodnotu (
h) - Aký záznam bol odovzdaný ako celok (
rh): text, srdcia, geo-status a údaje o príležitosti, kanonicky serializované a zahašované — vo verzii schémyrv - Z ktorého QR kódu hodnotenie pochádza (
qh); bez QR toto pole odpadá - Kedy sa podpisovalo (
iat)
Ak niekto neskôr zmení v texte hodnotenia jediný znak, h už nesedí — a rh takisto nie. Kto namiesto toho pohne len srdcami, nechá h nedotknuté, ale zlomí rh. Ak niekto zmení jednu z týchto hašových hodnôt, podpis už nesedí. Práve táto reťaz je pointou.
3. Čo má podpis dokázať
Návštevník, ktorý hodnotenie číta, má vedieť sám overiť tri veci:
- Hodnotenie bolo skutočne vydané McGesundom.
- Text sa od odoslania nezmenil.
- Nikto nedokáže vymyslieť nové, platne vyzerajúce hodnotenie.
Na to slúži pár kľúčov:
- súkromný kľúč — leží výlučne v podpisovej službe
- verejný kľúč — môže ho mať každý, adresuje sa cez ID kľúča (
kid) v obálke
Podpisuje sa súkromným kľúčom. Overuje sa verejným — a to v prehliadači čitateľa, nie na našom serveri.
4. Prečo vôbec postkvantová schéma?
Mnohé dnes bežné podpisové schémy stoja na faktorizácii veľkých čísel alebo na diskrétnych logaritmoch. Dostatočne výkonný kvantový počítač by práve tieto problémy dokázal so známymi algoritmami vyriešiť podstatne rýchlejšie.
Pri hodnotení to nie je akademická otázka. Hodnotenie má byť overiteľné aj o desať rokov. Kto podpisuje dnes, podpisuje na celú životnosť záznamu.
ML-DSA preto používa iný základ:
Presnejšie: Module-LWE a Module-SIS.
5. Čo je mriežka?
Najprv len body v priestore. Vezmime dva vektory:
Všetky celočíselné kombinácie
tvoria mriežku. Napríklad:
Rozhodujúce je:
V malých dimenziách sú mriežkové problémy ľahké. Vo veľmi vysokých dimenziách sa určité úlohy stávajú mimoriadne ťažkými.
6. Polynómy namiesto jednotlivých čísel
ML-DSA nepočíta s 2D vektormi, ale s polynómami a vektormi polynómov.
Polynóm ako
sa dá zapísať ako zoznam koeficientov:
Počíta sa v okruhu:
To znamená dvoje:
- : počítanie modulo
- : dodatočné pravidlo, ktoré fixuje dĺžku polynómov
Pre všetky tri stupne ML-DSA platí:
Polynóm má teda 256 koeficientov, uvažovaných modulo 8 380 417. Medzi stupňami sa nemení ani , ale veľkosť matíc — o tom neskôr viac.
Mimochodom: násobenie polynómov v tomto okruhu beží v praxi cez NTT, teoreticko-číselný variant rýchlej Fourierovej transformácie. ML-DSA sa teda zďaleka nezaobíde bez myšlienok FFT; sú len ukryté v aritmetike namiesto v princípe podpisu.
7. Ústredný trik: Module-LWE
Jadrom myšlienky je Module Learning With Errors:
Pritom sú:
- — verejná, zdanlivo náhodná matica z polynómov
- — malé tajné vektory
- — verejná hodnota
Útočník pozná a , ale nie . Rovnica preň vyzerá ako náhodná rovnica so šumom. Malé tajomstvá z nej nemá dokázať efektívne spätne vypočítať.
8. Maličký číselný príklad
Berieme zámerne smiešne malý variant — obyčajné čísla namiesto polynómov, dimenziu 2 namiesto 256, a
Nech je
Potom:
V tomto miniformáte by sa dali vyskúšať všetky možnosti. Pri ML-DSA-87 je matica z polynómov po 256 koeficientoch — to je vyše 14 000 neznámych v mriežkovej štruktúre.
9. Pár kľúčov podpisovej služby
Súkromný kľúč obsahuje okrem iného malé vektory . Pri ML-DSA-87 pochádzajú ich koeficienty z intervalu
teda z množiny . Táto malosť nie je detail, ale jadro veci: len preto, že sú tajomstvá malé, vzniká vôbec ťažký mriežkový problém.
Verejný kľúč je zjednodušene
je seed, z ktorého sa dá deterministicky zrekonštruovať — matica sa teda nemusí prenášať. sú horné bity hodnoty ; spodných bitov odpadá, čo kľúč výrazne zmenší. Toto vynechanie je neskôr dôvodom pre takzvané hinty.
Tým vzniká žiadaná asymetria:
10. Z hodnotenia sa stáva číslo
Podpisová služba najprv zahašuje objekt payloadu z časti 2:
V našom hračkárskom príklade berieme umelý mini-haš. V skutočnom systéme je dlhé 512 bitov a viaže navyše aj verejný kľúč — vďaka tomu sa podpis nedá preložiť na iný kľúč.
11. Commitment
Podpisová služba ťahá náhodný malý vektor . V našom príklade:
Z toho vzniká medzihodnota, commitment:
To ešte nie je podpis.
12. Z hodnotenia sa stáva výzva
Správa a commitment sa zahašujú spoločne:
Pri ML-DSA-87 je polynóm s presne koeficientmi z množiny , všetkých ostatných 196 je nulových. Táto štruktúra je zámerná: udržiava malé.
V našom hračkárskom príklade jednoducho položíme
13. Samotný podpis
S našimi hodnotami:
14. Krok, ktorý sa ľahko prehliadne: rejection sampling
Tu leží miesto, v ktorom sa ML-DSA líši od naivnej konštrukcie — a nie je voliteľné.
obsahuje tajomstvo . Keby sa jednoducho vždy vydalo, dalo by sa z dostatočného množstva podpisov štatisticky vypočítať. Pri hodnotiacom portáli s veľmi mnohými podpismi denne to nie je teoretické riziko.
Preto podpisová služba pred vydaním overí, či neprezrádza priveľa, a v opačnom prípade podpis zahodí — potom sa začne odznova s novým náhodným . Nazýva sa to Fiat-Shamir with Aborts.
Podmienka znie v podstate:
Pre ML-DSA-87 platí a . K tomu pristupuje druhá hranica na spodných bitoch. V praxi je viacero priebehov normou — podpisovanie je teda slučkový postup, nie jednorazový krok.
Pre verifikáciu je dôležité: práve túto hranicu overuje neskôr aj prehliadač. Podpis s priveľkými koeficientmi sa odmietne, aj keď rovnica vychádza.
15. Prečo to prehliadač dokáže overiť
Prehliadač čitateľa pozná:
- hodnotenie a tým
- verejný kľúč
- podpis
nepozná. Súvislosť, ktorá ho napriek tomu posunie ďalej:
A pretože platí
dá sa neznáme nahradiť verejnou hodnotou:
To je ústredná rovnica — a hovorí niečo dôležité: prehliadač rekonštruuje nie presne, ale len s presnosťou na malý člen .
16. Miniatúrny príklad do konca
Mali sme:
Prepočítajme si to:
Pôvodný commitment bol
Rozdiel je
Teda presne predpovedaný malý chybový člen. Verifikátor nedostane , ale niečo, čo leží blízko pri .
Práve preto ML-DSA neporovnáva samotné hodnoty, ale ich horné bity. A práve preto obsahuje podpis navyše vektor hintov : kompaktne oznamuje, na ktorých miestach zaokrúhlenie kvôli malému chybovému členu preklopilo cez hranicu. Pri ML-DSA-87 je povolených najviac takýchto pokynov. Tajomstvo neprezrádzajú — len opravujú zaokrúhlenie.
Na záver prehliadač nanovo vypočíta výzvu. Ak sa zhoduje,
a všetky normy ležia v hraniciach, podpis je platný.
17. Čo sa stane, keď niekto hodnotenie zmení?
Predpokladajme, že niekto s prístupom do databázy — aj niekto u nás — zmení text hodnotenia alebo jedno zo sŕdc. Potom sa zmení aspoň jedna z dvoch hašových hodnôt v payloade (h pri texte, rh pri ktoromkoľvek poli záznamu):
Tým sa zmení výzva:
Existujúci podpis však bol vytvorený pre starú výzvu. Prehliadač si to prepočíta a zistí:
Rozhodujúca veta k tomu: hodnotenie môžeme zmazať, ale nemôžeme ho nepozorovane zmeniť. Na McGesund beží to isté overenie navyše každú noc serverovo nad celým fondom — hodnotenie, ktoré týmto overením neprejde, už nevstupuje do priemeru podniku.
18. Prečo nikto nedokáže podpis vymyslieť?
Útočník pozná a , ale nie . Aby postavil platný podpis, musel by nájsť trojicu , ktorá
- spĺňa verifikačnú rovnicu a
- dodržiava hranice noriem a
- zodpovedá výzve, ktorá z týchto hodnôt samotných vyplýva.
To v jadre vedie na ťažký mriežkový problém — konkrétne na Module-SIS: nájsť krátke riešenia homogénnej rovnice modulo . Podmienka malosti pritom nie je ozdoba, ale samotná miera obtiažnosti. Bez nej by bolo riešenie triviálne.
19. Prečo „Module"?
Toto slovo opisuje štruktúru medzi jednoduchými vektormi a všeobecnými mriežkami. Namiesto počítania s jednotlivými číslami pracuje ML-DSA s vektormi polynómov:
a s maticami z nich:
Výhoda: získa sa vysoká dimenzia mriežky, ale zachová sa kompaktná, efektívne počítateľná reprezentácia. Bezpečnosť sa dá jemne dolaďovať cez veľkosť matice bez toho, aby sa menil okruh.
20. Prečo práve 87?
Tri stupne sa nelíšia v okruhu, ale v dimenziách:
| Parameter | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Veľkosť matice | |||
| Rozsah tajomstva | 2 | 4 | 2 |
| Váha výzvy | 39 | 49 | 60 |
| Verejný kľúč | 1 312 B | 1 952 B | 2 592 B |
| Podpis | 2 420 B | 3 309 B | 4 627 B |
| Kategória NIST | 2 | 3 | 5 |
Pozoruhodné: ML-DSA-87 nie je jednoducho „ML-DSA-65, len väčšie". Rozsah tajomstva ide zo 4 opäť späť na 2; bezpečnosť tu vyplýva z väčšej matice, nie z väčších koeficientov. Ide o samostatnú, štandardizovanú voľbu parametrov.
Cena: 4 627 bajtov na podpis — na každú pečiatku, ktorá sa uloží a pri overovaní doručí prehliadaču. Preto stojí na McGesund vedľa ML-DSA-87 na výber aj FALCON, ktorý si vystačí s 1 280 bajtmi.
21. Fiat-Shamir: prečo to funguje bez protistrany
Interaktívny dôkaz by prebiehal takto:
- Podpisová služba pošle commitment.
- Overovateľ pošle náhodnú výzvu.
- Podpisová služba odpovie.
- Overovateľ si to prepočíta.
Pri hodnotení tento dialóg neexistuje — čitateľ prichádza o mesiace neskôr. Riešením je Fiat-Shamirova transformácia: výzva sa nehádže kockou, ale hašuje sa zo samotných údajov:
Tým sa z dialógu stáva dokument. Podpisová služba si výzvu nemôže vybrať, pretože by na to musela ovládať haš.
22. Celý priebeh
23. Čo s tým McGesund konkrétne robí
Do seba zapadajú tri roviny:
Obálka. Každé podpísané hodnotenie nesie podpis Ed25519. To je povinný variant — klasický, drobný, natívne overiteľný v každom prehliadači.
Postkvantové pečiatky. Navyše sa dajú priložiť jeden alebo dva kvantovo odolné podpisy. Ktoré, závisí od tarifu:
| Tarif | dostupné stupne podpisu |
|---|---|
| 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 súbežne |
Súbežný variant je zámerne redundantný. Ak by sa jedna z dvoch matematických rodín — NTRU mriežky pri FALCONe, modulové mriežky pri ML-DSA — ukázala slabšia, než sa dnes predpokladá, druhá nesie ďalej.
Časová kotva. Odtlačok podpisového kľúča sa cez OpenTimestamps ukotví v bloku Bitcoinu. Tým sa dá doložiť nielen to, že podpis je pravý, ale aj to, že v určitom okamihu už existoval — bez toho, aby musel niekto veriť našej časovej pečiatke.
Overuje sa to všetko v prehliadači čitateľa, cez modul WASM. My dodávame údaje; prepočítava sa na zariadení návštevníka. Keby sme zajtra zmizli zo siete, raz stiahnuté hodnotenie zostane overiteľné.
24. ML-DSA a FALCON vedľa seba
| Vlastnosť | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Typ | digitálny podpis | digitálny podpis |
| Rodina mriežok | NTRU | Module-LWE / Module-SIS |
| Okruh | , | , |
| Kľúčový mechanizmus | krátky vektor cez Gaussovo vzorkovanie | výzva a odpoveď s prerušeniami |
| FFT / NTT | FFT s pohyblivou rádovou čiarkou, kritická pre bezpečnosť | NTT, len aritmetika |
| Veľkosť podpisu (najvyšší stupeň) | 1 280 B | 4 627 B |
| Implementácia | náročná (pohyblivá rádová čiarka) | pomerne priamočiara |
| Štandardizácia | plánovaná ako FIPS 206 (FN-DSA), zatiaľ neuzavretá | FIPS 204, uzavretá |
Stručne povedané: ML-DSA sa ľahšie správne implementuje a overuje, FALCON dodáva podstatne kompaktnejšie podpisy. V QR kóde nie je ani jeden z nich — tam stojí samotná obálka Ed25519. Veľkosť podpisu preto zaváži pri ukladaní a doručovaní, robustnosť pri implementácii. Preto ponúkame oboje.
25. Jedna veta na záver
Kto vlastní tajný vektor, podpisuje za milisekundy. Kto ho nevlastní, musel by vyriešiť mriežkový problém vo vyše 14 000 dimenziách — aj s kvantovým počítačom.
Pre čitateľa hodnotenia to znamená jednoducho: nemusí nám veriť. Môže si to prepočítať.