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 mm. Váže dohromady šest výpovědí:

  1. Ke kterému podniku hodnocení patří (f)
  2. Které hodnocení je míněno (c)
  3. Jaký text za ním stál — jako hash (h)
  4. 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ématu rv
  5. Z jakého QR kódu hodnocení pochází (qh); bez QR kódu pole odpadá
  6. 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:

  1. Hodnocení bylo skutečně vystaveno systémem McGesund.
  2. Text se od odeslání nezměnil.
  3. 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:

Mrˇıˊzˇkoveˊ probleˊmy\boxed{\text{Mřížkové problémy}}

Přesněji: Module-LWE a Module-SIS.


5. Co je mřížka?

Nejprve jen body v prostoru. Vezměme dva vektory:

b1=(2,0),b2=(1,2).b_1=(2,0), \qquad b_2=(1,2).

Všechny celočíselné kombinace

ab1+bb2,a,bZa\,b_1+b\,b_2, \qquad a,b\in\mathbb{Z}

tvoří mřížku. Například:

2b1+b2=(4,0)+(1,2)=(5,2).2b_1+b_2 = (4,0)+(1,2) = (5,2).
b₁ = (2,0)b₂ = (1,2)(5,2)0
Dva vektory, všechny celočíselné kombinace z nich: mřížka. Vyznačený bod vzniká jako dvakrát b₁ a jednou b₂.

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

a(x)=1+2x+x3a(x)=1+2x+x^3

lze zapsat jako seznam koeficientů:

a=(1,2,0,1).a=(1,2,0,1).

Počítá se v okruhu:

Rq=Zq[x]/(xn+1).R_q=\mathbb{Z}_q[x]/(x^n+1).

To znamená dvojí:

  • Zq\mathbb{Z}_q: počítání modulo qq
  • xn=1x^n=-1: dodatečné pravidlo, které fixuje délku polynomu

Pro všechny tři stupně ML-DSA platí:

n=256,q=8380417.n=256, \qquad q=8380417.

Polynom má tedy 256 koeficientů, uvažovaných modulo 8 380 417. Co se mezi stupni mění, není nn ani qq, 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:

t=As1+s2(modq).\mathbf{t}=\mathbf{A}\mathbf{s}_1+\mathbf{s}_2 \pmod q.

Přitom jsou:

  • A\mathbf{A} — veřejná, zdánlivě náhodná matice z polynomů
  • s1,s2\mathbf{s}_1,\mathbf{s}_2 — malé tajné vektory
  • t\mathbf{t} — veřejná hodnota

Útočník zná A\mathbf{A} a t\mathbf{t}, ale ne s1,s2\mathbf{s}_1,\mathbf{s}_2. 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

q=17.q=17.

Nechť

A=(3572),s1=(11),s2=(10).A=\begin{pmatrix}3&5\\7&2\end{pmatrix}, \qquad \mathbf{s}_1=\begin{pmatrix}1\\-1\end{pmatrix}, \qquad \mathbf{s}_2=\begin{pmatrix}1\\0\end{pmatrix}.

Pak:

As1=(3572)=(25),A\mathbf{s}_1=\begin{pmatrix}3-5\\7-2\end{pmatrix}=\begin{pmatrix}-2\\5\end{pmatrix},
t=As1+s2=(25)+(10)=(15)    (165)(mod17).\mathbf{t}=A\mathbf{s}_1+\mathbf{s}_2=\begin{pmatrix}-2\\5\end{pmatrix}+\begin{pmatrix}1\\0\end{pmatrix}=\begin{pmatrix}-1\\5\end{pmatrix} \;\equiv\; \boxed{\begin{pmatrix}16\\5\end{pmatrix}} \pmod{17}.

V tomto miniformátu by šlo vyzkoušet všechny možnosti. U ML-DSA-87 je A\mathbf{A} matice 8×78\times 7 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 s1,s2\mathbf{s}_1,\mathbf{s}_2. U ML-DSA-87 pocházejí jejich koeficienty z intervalu

[η,η]kdeη=2,[-\eta,\eta] \quad\text{kde}\quad \eta=2,

tedy z {2,1,0,1,2}\{-2,-1,0,1,2\}. 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ě

(ρ,t1).(\rho,\mathbf{t}_1).

ρ\rho je seed, ze kterého lze A\mathbf{A} deterministicky rekonstruovat — matice se tedy nemusí přenášet. t1\mathbf{t}_1 jsou horní bity hodnoty t\mathbf{t}; spodních d=13d=13 bitů odpadá, což klíč výrazně zmenší. Toto vynechání je později důvodem pro takzvané hinty.

Tím vzniká žádoucí asymetrie:

verˇejneˊ oveˇrˇenıˊ    tajneˊ podepsaˊnıˊ\boxed{\text{veřejné ověření}\;\neq\;\text{tajné podepsání}}

10. Z hodnocení se stane číslo

Podpisová služba nejprve zahashuje objekt payloadu z kapitoly 2:

μ=H(m).\mu=H(m).

V našem hračkovém příkladu bereme umělý mini-hash. Ve skutečném systému má μ\mu 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 y\mathbf{y}. V našem příkladu:

y=(21).\mathbf{y}=\begin{pmatrix}2\\-1\end{pmatrix}.

Z něj vzniká mezihodnota, commitment:

w=Ay=(32+5(1)72+2(1))=(112).\mathbf{w}=A\mathbf{y} =\begin{pmatrix}3\cdot2+5\cdot(-1)\\7\cdot2+2\cdot(-1)\end{pmatrix} =\begin{pmatrix}1\\12\end{pmatrix}.

To ještě není podpis.


12. Z hodnocení se stane výzva

Zpráva a commitment se zahashují dohromady:

c=H(μ,w).c=H(\mu,\mathbf{w}).

U ML-DSA-87 je cc polynom s přesně τ=60\tau=60 koeficienty z {1,+1}\{-1,+1\}, všech zbývajících 196 je nulových. Tato struktura je záměrná: drží cs1c\cdot\mathbf{s}_1 malé.

V našem hračkovém příkladu prostě položíme

c=2.c=2.

13. Vlastní podpis

z=y+cs1.\mathbf{z}=\mathbf{y}+c\,\mathbf{s}_1.

S našimi hodnotami:

cs1=2(11)=(22),c\,\mathbf{s}_1=2\begin{pmatrix}1\\-1\end{pmatrix}=\begin{pmatrix}2\\-2\end{pmatrix},
z=(21)+(22)=(43)\mathbf{z}=\begin{pmatrix}2\\-1\end{pmatrix}+\begin{pmatrix}2\\-2\end{pmatrix} =\boxed{\begin{pmatrix}4\\-3\end{pmatrix}}

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ý.

z=y+cs1\mathbf{z}=\mathbf{y}+c\,\mathbf{s}_1 obsahuje tajemství s1\mathbf{s}_1. Kdyby se z\mathbf{z} prostě vždy vydávalo ven, dalo by se s1\mathbf{s}_1 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 z\mathbf{z} neprozrazuje příliš mnoho, a v opačném případě podpis zahodí — pak se začne znovu s novým náhodným y\mathbf{y}. Říká se tomu Fiat-Shamir with Aborts.

Podmínka v podstatě zní:

z<γ1β.\|\mathbf{z}\|_\infty < \gamma_1-\beta.
commitment w = Ayvýzva c = H(μ, w)odpověď z = y + c · s₁‖z‖∞ < γ₁ − β ?anopodpis se vydáne — nové y
Tři kroky a smyčka. Vyjde-li z příliš velké, nic se nedolaďuje — celý průchod se zahodí a začne se znovu s čerstvým náhodným y. Proto je podepisování zde smyčkový postup.

Pro ML-DSA-87 platí γ1=219\gamma_1=2^{19} a β=τη=602=120\beta=\tau\cdot\eta=60\cdot2=120. 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 mm
  • veřejný klíč (ρ,t1)(\rho,\mathbf{t}_1)
  • podpis (c~,z,h)(\tilde c,\mathbf{z},\mathbf{h})

Nezná s1\mathbf{s}_1. Souvislost, která ho přesto posune dál:

z=y+cs1Az=Ay+cAs1.\mathbf{z}=\mathbf{y}+c\,\mathbf{s}_1 \quad\Longrightarrow\quad A\mathbf{z}=A\mathbf{y}+c\,A\mathbf{s}_1.

A protože platí

t=As1+s2\mathbf{t}=A\mathbf{s}_1+\mathbf{s}_2

lze neznámé As1A\mathbf{s}_1 nahradit veřejnou hodnotou:

Azct=Aycs2.A\mathbf{z}-c\,\mathbf{t}=A\mathbf{y}-c\,\mathbf{s}_2.

To je ústřední rovnice — a říká něco důležitého: prohlížeč rekonstruuje AyA\mathbf{y} nikoli přesně, nýbrž jen až na malý člen cs2c\,\mathbf{s}_2.


16. Miniaturní příklad až do konce

Měli jsme:

A=(3572),t=(15),c=2,z=(43).A=\begin{pmatrix}3&5\\7&2\end{pmatrix},\quad \mathbf{t}=\begin{pmatrix}-1\\5\end{pmatrix},\quad c=2,\quad \mathbf{z}=\begin{pmatrix}4\\-3\end{pmatrix}.

Spočítejme:

Az=(1215286)=(322),ct=2(15)=(210),A\mathbf{z}=\begin{pmatrix}12-15\\28-6\end{pmatrix}=\begin{pmatrix}-3\\22\end{pmatrix}, \qquad c\,\mathbf{t}=2\begin{pmatrix}-1\\5\end{pmatrix}=\begin{pmatrix}-2\\10\end{pmatrix},
Azct=(112).A\mathbf{z}-c\,\mathbf{t}=\begin{pmatrix}-1\\12\end{pmatrix}.

Původní commitment byl

w=(112).\mathbf{w}=\begin{pmatrix}1\\12\end{pmatrix}.

Rozdíl činí

(112)(112)=(20)=cs2.\begin{pmatrix}-1\\12\end{pmatrix}-\begin{pmatrix}1\\12\end{pmatrix} =\begin{pmatrix}-2\\0\end{pmatrix} =-c\,\mathbf{s}_2.

Tedy přesně předpovězený malý chybový člen. Verifikátor nedostane w\mathbf{w}, nýbrž něco, co leží blízko w\mathbf{w}.

Právě proto ML-DSA neporovnává hodnoty samotné, nýbrž jejich horní bity. A právě proto obsahuje podpis navíc vektor hintů h\mathbf{h}: 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 ω=75\omega=75 takových pokynů. Tajemství neprozradí — jen opraví zaokrouhlení.

Nakonec prohlížeč znovu spočítá výzvu. Souhlasí-li,

cnoveˊ=c,c_{\text{nové}}=c,

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):

H(m)H(m).H(m)\neq H(m').

Tím se změní výzva:

cc.c\neq c'.

Existující podpis byl ale vytvořen pro starou výzvu. Prohlížeč to přepočítá a zjistí:

cnoveˊcpodpisPodpis je neplatnyˊc_{\text{nové}}\neq c_{\text{podpis}} \quad\Longrightarrow\quad \boxed{\text{Podpis je neplatný}}

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\mathbf{A} a t\mathbf{t}, ale ne s1,s2\mathbf{s}_1,\mathbf{s}_2. Aby postavil platný podpis, musel by najít trojici (c~,z,h)(\tilde c,\mathbf{z},\mathbf{h}), 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 qq. Podmínka malosti přitom není ozdoba, nýbrž vlastní míra obtížnosti. Bez ní by bylo řešení triviální.

verˇejnaˊ data    teˇzˇkyˊ mrˇıˊzˇkovyˊ probleˊm\boxed{\text{veřejná data}\;\rightarrow\;\text{těžký mřížkový problém}}

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=(a1(x),a2(x),,ak(x)),\mathbf{a}=(a_1(x),a_2(x),\ldots,a_k(x)),

a s maticemi z nich:

A=(a1,1(x)a1,2(x)a2,1(x)a2,2(x)).\mathbf{A}= \begin{pmatrix} a_{1,1}(x)&a_{1,2}(x)&\cdots\\ a_{2,1}(x)&a_{2,2}(x)&\cdots\\ \vdots&\vdots&\ddots \end{pmatrix}.

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:

ParametrML-DSA-44ML-DSA-65ML-DSA-87
Velikost matice (k,)(k,\ell)4×44\times46×56\times58×78\times7
Rozsah tajemství η\eta242
Váha výzvy τ\tau394960
Veřejný klíč1 312 B1 952 B2 592 B
Podpis2 420 B3 309 B4 627 B
Kategorie NIST235

Pozoruhodné: ML-DSA-87 není prostě „ML-DSA-65, jen větší". Rozsah tajemství η\eta 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ů.

veˇtsˇıˊ matematickaˊ strukturavysˇsˇıˊ bezpecˇnostnıˊ rezerva\boxed{\text{větší matematická struktura}\rightarrow\text{vyšší bezpečnostní rezerva}}

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:

  1. Podpisová služba pošle commitment.
  2. Ověřovatel pošle náhodnou výzvu.
  3. Podpisová služba odpoví.
  4. 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:

c=H(verˇejnyˊ klıˊcˇ,  zpraˊva,  commitment).c=H(\text{veřejný klíč},\;\text{zpráva},\;\text{commitment}).

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

PODPISOVÁ SLUŽBA (MCGESUND)PROHLÍŽEČ NÁVŠTĚVNÍKAsoukromý klíč s₁, s₂payload m = {firma, hodnocení, h, rh, iat}hash μnáhodný vektor ycommitment w = Ayvýzva c = H(μ, w)z = y + c · s₁podpis (c, z, hinty) + kidhodnocení + podpis + veř. klíčAz − c·t → horní bity + hintyznovu spočítat výzvunově spočítaná výzva = dodaná?platnýneplatnýzahodit, je-li z příliš velké(rejection sampling)
Celá cesta jednoho hodnocení. Čárkovaný skok zpět je rejection sampling — bere se tak dlouho, dokud není z dost malé, aby neprozradilo nic o tajném klíči.

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:

Tarifdostupné stupně podpisu
BasisEd25519, FN-DSA-512
KlassikEd25519, FN-DSA-512, FN-DSA-1024
ProEd25519, FN-DSA-1024, ML-DSA-87
PremiumEd25519, 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

VlastnostFALCON (FN-DSA)ML-DSA
Typdigitální podpisdigitální podpis
Rodina mřížekNTRUModule-LWE / Module-SIS
OkruhZq[x]/(xn+1)\mathbb{Z}_q[x]/(x^n+1), q=12289q=12289Zq[x]/(x256+1)\mathbb{Z}_q[x]/(x^{256}+1), q=8380417q=8380417
Jádro mechanismukrátký vektor Gaussovým vzorkovánímvýzva a odpověď s odmítnutími
FFT / NTTFFT v plovoucí řádové čárce, kritická pro bezpečnostNTT, jen aritmetika
Velikost podpisu (nejvyšší stupeň)1 280 B4 627 B
Implementacenáročná (plovoucí řádová čárka)poměrně přímočará
Standardizacezamýšleno jako FIPS 206 (FN-DSA), zatím nedokončenoFIPS 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

ML-DSA vytvorˇıˊ z kraˊtkeˊho tajneˊho vektoru odpoveˇdˇ na vyˊzvu,kteraˊ byla vyhasˇovaˊna ze samotneˊho hodnocenıˊ — oveˇrˇitelnoupro kazˇdeˊho, kdo maˊ verˇejnyˊ klıˊcˇ.\boxed{ \begin{array}{c} \text{ML-DSA vytvoří z krátkého tajného vektoru odpověď na výzvu,}\\ \text{která byla vyhašována ze samotného hodnocení — ověřitelnou}\\ \text{pro každého, kdo má veřejný klíč.} \end{array}}

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.