Podpisové schéma
ML-DSA-87 vysvětlený matematicky
Jak ML-DSA-87 (FIPS 204) podepisuje hodnocení na McGesund — od Module-LWE přes rejection sampling až po ověření v prohlížeči.
Stav: 2026-09-07
1. O co tu jde
Když někdo na McGesund odešle hodnocení, děje se na pozadí víc, než by text napovídal. Hodnocení je při odeslání digitálně podepsáno. Tento podpis si může každý návštěvník později přepočítat ve vlastním prohlížeči — bez toho, aby nám věřil, a bez toho, aby se nás ptal.
Pro zákazníky od tarifu Pro se tak děje mimo jiné pomocí ML-DSA-87. Tento článek vysvětluje, co se přitom matematicky děje.
Důležité na úvod:
ML-DSA není šifrování. Text hodnocení zůstává veřejně čitelný — to je přece smysl hodnocení. ML-DSA nedokazuje utajení, nýbrž původ a neporušenost.
ML-DSA vzniklo z CRYSTALS-Dilithium a je standardizováno jako FIPS 204. Číslo 87 označuje parametrový stupeň. Existují tři:
- ML-DSA-44
- ML-DSA-65
- ML-DSA-87
ML-DSA-87 je nejvyšší a spadá do bezpečnostní kategorie 5 podle NIST.
2. Co přesně se podepisuje?
Do podpisu neputuje samotný text hodnocení, nýbrž kompaktní datový objekt, který text jednoznačně přibíjí. Na McGesund vypadá v jádru takto:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID firmy>",
"c": "<ID hodnocení>",
"h": "<SHA-256 textu hodnocení>",
"rh": "<SHA-256 celého odeslaného datového záznamu>",
"rv": 1,
"qh": "<SHA-256 QR obálky, jen u QR hodnocení>",
"iat": 1757203200
}
Tento objekt je naše zpráva . Váže dohromady šest výpovědí:
- Ke kterému podniku hodnocení patří (
f) - Které hodnocení je míněno (
c) - Jaký text za ním stál — jako hash (
h) - Jaký datový záznam celkově byl odeslán (
rh): text, srdíčka, geostatus a údaje o důvodu, kanonicky serializované a zahashované — ve verzi schématurv - Z jakého QR kódu hodnocení pochází (
qh); bez QR kódu pole odpadá - Kdy se podepisovalo (
iat)
Změní-li někdo později jediný znak v textu hodnocení, h už nesedí — a rh rovněž ne. Kdo místo toho jen pootočí srdíčka, nechá h nedotčené, ale zlomí rh. Změní-li někdo jeden z těchto hashů, podpis už nesedí. Přesně tento řetěz je ta pointa.
3. Co má podpis dokázat
Návštěvník, který hodnocení čte, má být schopen sám ověřit tři věci:
- Hodnocení bylo skutečně vystaveno systémem McGesund.
- Text se od odeslání nezměnil.
- Nikdo nemůže vymyslet nové, platně vypadající hodnocení.
K tomu slouží pár klíčů:
- soukromý klíč — leží výhradně v podpisové službě
- veřejný klíč — může mít každý, adresuje se přes ID klíče (
kid) v obálce
Podepisuje se soukromým klíčem. Ověřuje se veřejným — a to v prohlížeči čtenáře, ne na našem serveru.
4. Proč vůbec postkvantové schéma?
Mnohá dnes běžná podpisová schémata stojí na faktorizaci velkých čísel nebo na diskrétních logaritmech. Dostatečně výkonný kvantový počítač by právě tyto problémy uměl známými algoritmy řešit podstatně rychleji.
Pro hodnocení to není akademická otázka. Hodnocení má být ověřitelné ještě za deset let. Kdo podepisuje dnes, podepisuje na celou dobu životnosti záznamu.
ML-DSA proto používá jiný základ:
Přesněji: Module-LWE a Module-SIS.
5. Co je mřížka?
Nejprve jen body v prostoru. Vezměme dva vektory:
Všechny celočíselné kombinace
tvoří mřížku. Například:
To rozhodující:
V malých dimenzích jsou mřížkové problémy snadné. Ve velmi vysokých dimenzích se určité úlohy stávají extrémně obtížnými.
6. Polynomy místo jednotlivých čísel
ML-DSA nepočítá s 2D vektory, nýbrž s polynomy a vektory polynomů.
Polynom jako
lze zapsat jako seznam koeficientů:
Počítá se v okruhu:
To znamená dvojí:
- : počítání modulo
- : dodatečné pravidlo, které fixuje délku polynomu
Pro všechny tři stupně ML-DSA platí:
Polynom má tedy 256 koeficientů, uvažovaných modulo 8 380 417. Co se mezi stupni mění, není ani , nýbrž velikost matic — k tomu později více.
Mimochodem: násobení polynomů v tomto okruhu běží v praxi přes NTT, teoreticko-číselnou variantu rychlé Fourierovy transformace. ML-DSA se tedy zdaleka neobejde bez myšlenek FFT; jen vězí v aritmetice, a ne v principu podpisu.
7. Ústřední trik: Module-LWE
Jádrem myšlenky je Module Learning With Errors:
Přitom jsou:
- — veřejná, zdánlivě náhodná matice z polynomů
- — malé tajné vektory
- — veřejná hodnota
Útočník zná a , ale ne . Rovnice pro něj vypadá jako náhodná rovnice se šumem. Malá tajemství z ní nemá umět efektivně dopočítat zpět.
8. Nepatrný číselný příklad
Bereme záměrně směšně malou variantu — běžná čísla místo polynomů, dimenzi 2 místo 256, a
Nechť
Pak:
V tomto miniformátu by šlo vyzkoušet všechny možnosti. U ML-DSA-87 je matice z polynomů po 256 koeficientech — to je přes 14 000 neznámých v mřížkové struktuře.
9. Pár klíčů podpisové služby
Soukromý klíč obsahuje mimo jiné malé vektory . U ML-DSA-87 pocházejí jejich koeficienty z intervalu
tedy z . Tato malost není detail, nýbrž jádro věci: jen proto, že jsou tajemství malá, vzniká vůbec obtížný mřížkový problém.
Veřejný klíč je zjednodušeně
je seed, ze kterého lze deterministicky rekonstruovat — matice se tedy nemusí přenášet. jsou horní bity hodnoty ; spodních bitů odpadá, což klíč výrazně zmenší. Toto vynechání je později důvodem pro takzvané hinty.
Tím vzniká žádoucí asymetrie:
10. Z hodnocení se stane číslo
Podpisová služba nejprve zahashuje objekt payloadu z kapitoly 2:
V našem hračkovém příkladu bereme umělý mini-hash. Ve skutečném systému má 512 bitů a váže navíc i veřejný klíč — díky tomu nelze podpis vyložit jako podpis pod jiným klíčem.
11. Commitment
Podpisová služba vylosuje náhodný malý vektor . V našem příkladu:
Z něj vzniká mezihodnota, commitment:
To ještě není podpis.
12. Z hodnocení se stane výzva
Zpráva a commitment se zahashují dohromady:
U ML-DSA-87 je polynom s přesně koeficienty z , všech zbývajících 196 je nulových. Tato struktura je záměrná: drží malé.
V našem hračkovém příkladu prostě položíme
13. Vlastní podpis
S našimi hodnotami:
14. Krok, který se snadno přehlédne: rejection sampling
Zde leží bod, v němž se ML-DSA liší od naivní konstrukce — a není volitelný.
obsahuje tajemství . Kdyby se prostě vždy vydávalo ven, dalo by se z dostatečného množství podpisů statisticky dopočítat. U hodnoticího portálu s velmi mnoha podpisy denně to není teoretické riziko.
Podpisová služba proto před vydáním ověří, zda neprozrazuje příliš mnoho, a v opačném případě podpis zahodí — pak se začne znovu s novým náhodným . Říká se tomu Fiat-Shamir with Aborts.
Podmínka v podstatě zní:
Pro ML-DSA-87 platí a . K tomu přistupuje druhá mez na spodních bitech. V praxi je několik průchodů běžných — podepisování je tedy smyčkový postup, ne jednorázový krok.
Pro verifikaci je důležité: přesně tuto mez prohlížeč později ověřuje také. Podpis s příliš velkými koeficienty je odmítnut, i kdyby rovnice vycházela.
15. Proč to prohlížeč umí ověřit
Prohlížeč čtenáře zná:
- hodnocení a s ním
- veřejný klíč
- podpis
Nezná . Souvislost, která ho přesto posune dál:
A protože platí
lze neznámé nahradit veřejnou hodnotou:
To je ústřední rovnice — a říká něco důležitého: prohlížeč rekonstruuje nikoli přesně, nýbrž jen až na malý člen .
16. Miniaturní příklad až do konce
Měli jsme:
Spočítejme:
Původní commitment byl
Rozdíl činí
Tedy přesně předpovězený malý chybový člen. Verifikátor nedostane , nýbrž něco, co leží blízko .
Právě proto ML-DSA neporovnává hodnoty samotné, nýbrž jejich horní bity. A právě proto obsahuje podpis navíc vektor hintů : kompaktně sděluje, na kterých místech zaokrouhlení kvůli malému chybovému členu překlopilo přes hranici. U ML-DSA-87 je povoleno nejvýše takových pokynů. Tajemství neprozradí — jen opraví zaokrouhlení.
Nakonec prohlížeč znovu spočítá výzvu. Souhlasí-li,
a leží-li všechny normy v mezích, je podpis platný.
17. Co se stane, když někdo hodnocení změní?
Dejme tomu, že někdo s přístupem k databázi — i někdo u nás — změní text hodnocení nebo jedno ze srdíček. Pak se změní alespoň jeden z obou hashů v payloadu (h u textu, rh u kteréhokoli pole datového záznamu):
Tím se změní výzva:
Existující podpis byl ale vytvořen pro starou výzvu. Prohlížeč to přepočítá a zjistí:
Rozhodující věta k tomu: hodnocení můžeme smazat, ale nemůžeme ho nepozorovaně změnit. Na McGesund běží totéž ověření navíc každou noc serverově nad celým fondem — hodnocení, které tímto ověřením neprojde, už do průměru podniku nevstupuje.
18. Proč nemůže nikdo podpis vymyslet?
Útočník zná a , ale ne . Aby postavil platný podpis, musel by najít trojici , která
- splňuje ověřovací rovnici a
- dodržuje meze norem a
- odpovídá výzvě, jež z právě těchto hodnot sama vyplývá.
To v jádru vede na obtížný mřížkový problém — konkrétně na Module-SIS: najít krátká řešení homogenní rovnice modulo . Podmínka malosti přitom není ozdoba, nýbrž vlastní míra obtížnosti. Bez ní by bylo řešení triviální.
19. Proč „Module"?
To slovo popisuje strukturu mezi jednoduchými vektory a obecnými mřížkami. Místo počítání s jednotlivými čísly pracuje ML-DSA s vektory polynomů:
a s maticemi z nich:
Výhoda: získá se vysoká dimenze mřížky, ale zachová se kompaktní, efektivně počitatelná reprezentace. Bezpečnost lze doladit velikostí matice, aniž by se měnil okruh.
20. Proč zrovna 87?
Tři stupně se neliší okruhem, nýbrž dimenzemi:
| Parametr | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
|---|---|---|---|
| Velikost matice | |||
| Rozsah tajemství | 2 | 4 | 2 |
| Váha výzvy | 39 | 49 | 60 |
| Veřejný klíč | 1 312 B | 1 952 B | 2 592 B |
| Podpis | 2 420 B | 3 309 B | 4 627 B |
| Kategorie NIST | 2 | 3 | 5 |
Pozoruhodné: ML-DSA-87 není prostě „ML-DSA-65, jen větší". Rozsah tajemství jde ze 4 zase zpátky na 2; bezpečnost tu plyne z větší matice, ne z větších koeficientů. Jde o samostatnou, standardizovanou volbu parametrů.
Cena: 4 627 bajtů na podpis — na každé razítko, které se ukládá a při ověřování doručuje prohlížeči. Proto stojí na McGesund vedle ML-DSA-87 na výběr i FALCON, jenž si vystačí s 1 280 bajty.
21. Fiat-Shamir: proč to funguje bez protějšku
Interaktivní důkaz by probíhal takto:
- Podpisová služba pošle commitment.
- Ověřovatel pošle náhodnou výzvu.
- Podpisová služba odpoví.
- Ověřovatel přepočítá.
U hodnocení tento dialog neexistuje — čtenář přichází o měsíce později. Řešením je Fiat-Shamirova transformace: výzva se nelosuje, nýbrž hashuje ze samotných dat:
Tím se z dialogu stane dokument. Podpisová služba si výzvu nemůže vybrat, musela by k tomu ovládat hash.
22. Celý průběh
23. Co s tím McGesund konkrétně dělá
Do sebe zapadají tři roviny:
Obálka. Každé podepsané hodnocení nese podpis Ed25519. To je povinná varianta — klasická, drobounká, nativně ověřitelná v každém prohlížeči.
Postkvantová razítka. Navíc lze vedle položit jeden nebo dva kvantově odolné podpisy. Které, závisí na tarifu:
| Tarif | dostupné stupně 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, obojí souběžně |
Souběžná varianta je záměrně redundantní. Ukázala-li by se jedna z obou matematických rodin — NTRU mřížky u FALCONu, modulové mřížky u ML-DSA — slabší, než se dnes předpokládá, nese druhá dál.
Časová kotva. Otisk podpisového klíče je přes OpenTimestamps zakotven v bloku Bitcoinu. Tím lze doložit nejen to, že je podpis pravý, ale i to, že v určitém okamžiku již existoval — aniž by někdo musel věřit našemu časovému razítku.
Ověřuje se to vše v prohlížeči čtenáře, přes modul WASM. My dodáváme data; přepočítává se na zařízení návštěvníka. Kdybychom zítra zmizeli ze sítě, jednou stažené hodnocení by zůstalo ověřitelné.
24. ML-DSA a FALCON vedle sebe
| Vlastnost | FALCON (FN-DSA) | ML-DSA |
|---|---|---|
| Typ | digitální podpis | digitální podpis |
| Rodina mřížek | NTRU | Module-LWE / Module-SIS |
| Okruh | , | , |
| Jádro mechanismu | krátký vektor Gaussovým vzorkováním | výzva a odpověď s odmítnutími |
| FFT / NTT | FFT v plovoucí řádové čárce, kritická pro bezpečnost | NTT, jen aritmetika |
| Velikost podpisu (nejvyšší stupeň) | 1 280 B | 4 627 B |
| Implementace | náročná (plovoucí řádová čárka) | poměrně přímočará |
| Standardizace | zamýšleno jako FIPS 206 (FN-DSA), zatím nedokončeno | FIPS 204, dokončeno |
Krátce řečeno: ML-DSA se snáze správně implementuje a ověřuje, FALCON dodává výrazně kompaktnější podpisy. V QR kódu nevězí ani jedno — tam stojí pouze obálka Ed25519. Velikost podpisu se proto počítá při ukládání a doručování, robustnost při implementaci. Proto nabízíme obojí.
25. Jedna věta na závěr
Kdo tajný vektor vlastní, podepisuje v milisekundách. Kdo ho nevlastní, musel by vyřešit mřížkový problém ve více než 14 000 dimenzích — i s kvantovým počítačem.
Pro čtenáře hodnocení to znamená prostě tohle: nemusí nám věřit. Může si to přepočítat.