Schematy podpisu

ML-DSA-87 wyjaśniony matematycznie

Jak ML-DSA-87 (FIPS 204) podpisuje opinię w McGesund — od Module-LWE przez rejection sampling aż po weryfikację w przeglądarce.

Stan: 2026-09-07

1. O co tutaj chodzi

Gdy ktoś wystawia opinię w McGesund, w tle dzieje się więcej, niż sugeruje tekst. Opinia zostaje przy wysłaniu podpisana cyfrowo. Ten podpis może później przeliczyć każdy odwiedzający w swojej własnej przeglądarce — bez zaufania do nas i bez pytania nas o zgodę.

Dla klientów od taryfy Pro dzieje się to między innymi za pomocą ML-DSA-87. Ten artykuł wyjaśnia, co przy tym dzieje się matematycznie.

Ważna uwaga na wstępie:

ML-DSA nie jest szyfrowaniem. Tekst opinii pozostaje publicznie czytelny — na tym przecież polega sens opinii. ML-DSA nie dowodzi poufności, lecz pochodzenia i nienaruszalności.

ML-DSA powstał z CRYSTALS-Dilithium i jest znormalizowany jako FIPS 204. Liczba 87 oznacza poziom parametrów. Są trzy:

  • ML-DSA-44
  • ML-DSA-65
  • ML-DSA-87

ML-DSA-87 jest najwyższym i mieści się w kategorii bezpieczeństwa NIST 5.


2. Co dokładnie jest podpisywane?

Do podpisu wędruje nie sam tekst opinii, lecz kompaktowy obiekt danych, który jednoznacznie przybija tekst. W McGesund wygląda on w rdzeniu tak:

{
  "v":   1,
  "typ": "rev-comment",
  "f":   "<ID firmy>",
  "c":   "<ID opinii>",
  "h":   "<SHA-256 tekstu opinii>",
  "rh":  "<SHA-256 całego rekordu przesłanej opinii>",
  "rv":  1,
  "qh":  "<SHA-256 koperty QR, tylko przy opiniach z QR>",
  "iat": 1757203200
}

Ten obiekt jest naszą wiadomością mm. Wiąże ze sobą sześć stwierdzeń:

  1. Do jakiej firmy należy opinia (f)
  2. O którą opinię chodzi (c)
  3. Jaki tekst za nią stał — jako wartość skrótu (h)
  4. Jaki rekord w całości został przesłany (rh): tekst, serduszka, status geolokalizacji i informacje o okoliczności, kanonicznie zserializowane i zhaszowane — w wersji schematu rv
  5. Z którego kodu QR pochodzi opinia (qh); bez QR pole odpada
  6. Kiedy podpisano (iat)

Jeśli ktoś zmieni później choćby jeden znak w tekście opinii, h już nie pasuje — a rh również nie. Kto zamiast tego pokręci tylko serduszkami, zostawia h nietknięte, ale łamie rh. Jeśli ktoś zmieni jedną z tych wartości skrótu, podpis już nie pasuje. Dokładnie ten łańcuch jest sednem.


3. Co ma zapewniać podpis

Odwiedzający, który czyta opinię, ma móc sam sprawdzić trzy rzeczy:

  1. Opinia rzeczywiście została wystawiona przez McGesund.
  2. Tekst nie został zmieniony od chwili wysłania.
  3. Nikt nie może wymyślić nowej, ważnie wyglądającej opinii.

Służy do tego para kluczy:

  • klucz prywatny — leży wyłącznie w usłudze podpisującej
  • klucz publiczny — może go mieć każdy, adresowany przez identyfikator klucza (kid) w kopercie

Podpisuje się kluczem prywatnym. Weryfikuje się publicznym — i to w przeglądarce czytelnika, a nie na naszym serwerze.


4. Po co w ogóle metoda postkwantowa?

Wiele dziś powszechnych metod podpisu opiera się na faktoryzacji dużych liczb albo na logarytmach dyskretnych. Dostatecznie wydajny komputer kwantowy mógłby właśnie te problemy rozwiązywać znanymi algorytmami znacznie szybciej.

Dla opinii nie jest to pytanie akademickie. Opinia ma być sprawdzalna jeszcze za dziesięć lat. Kto podpisuje dziś, podpisuje na cały okres życia wpisu.

ML-DSA używa dlatego innej podstawy:

problemy kratowe\boxed{\text{problemy kratowe}}

Dokładniej: Module-LWE i Module-SIS.


5. Czym jest krata?

Na razie tylko punkty w przestrzeni. Weźmy dwa wektory:

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

Wszystkie całkowitoliczbowe kombinacje

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

tworzą kratę. Na przykład:

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
Dwa wektory, wszystkie całkowitoliczbowe kombinacje z nich: krata. Zaznaczony punkt powstaje z dwóch b₁ i jednego b₂.

Rozstrzygające jest to, że:

W małych wymiarach problemy kratowe są łatwe. W bardzo wysokich wymiarach pewne zadania stają się ekstremalnie trudne.


6. Wielomiany zamiast pojedynczych liczb

ML-DSA liczy nie na wektorach dwuwymiarowych, lecz na wielomianach i wektorach wielomianów.

Wielomian taki jak

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

da się zapisać jako lista współczynników:

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

Obliczenia prowadzone są w pierścieniu:

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

To oznacza dwie rzeczy:

  • Zq\mathbb{Z}_q: liczenie modulo qq
  • xn=1x^n=-1: dodatkowa reguła, która ustala długość wielomianu

Dla wszystkich trzech poziomów ML-DSA zachodzi:

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

Wielomian ma więc 256 współczynników, rozpatrywanych modulo 8 380 417. Tym, co zmienia się między poziomami, nie jest nn ani qq, lecz rozmiar macierzy — o tym dalej.

Na marginesie: mnożenie wielomianów w tym pierścieniu przebiega w praktyce przez NTT, teorioliczbowy wariant szybkiej transformaty Fouriera. ML-DSA bynajmniej nie obywa się więc bez idei FFT; tkwią one tylko w arytmetyce, a nie w zasadzie podpisu.


7. Centralna sztuczka: Module-LWE

Rdzeniem jest Module Learning With Errors:

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

Przy czym:

  • A\mathbf{A} — publiczna, pozornie losowa macierz z wielomianów
  • s1,s2\mathbf{s}_1,\mathbf{s}_2 — małe tajne wektory
  • t\mathbf{t} — wartość publiczna

Atakujący zna A\mathbf{A} i t\mathbf{t}, ale nie s1,s2\mathbf{s}_1,\mathbf{s}_2. Równanie wygląda dla niego jak losowe równanie z szumem. Małych sekretów nie powinien z niego efektywnie odzyskać.


8. Maleńki przykład liczbowy

Bierzemy celowo śmiesznie małą wersję — zwykłe liczby zamiast wielomianów, wymiar 2 zamiast 256, oraz

q=17.q=17.

Niech

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

Wtedy:

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

W tym miniformacie dałoby się wypróbować wszystkie możliwości. Przy ML-DSA-87 A\mathbf{A} jest macierzą 8×78\times 7 z wielomianów po 256 współczynników — to ponad 14 000 niewiadomych w strukturze kratowej.


9. Para kluczy usługi podpisującej

Klucz prywatny zawiera między innymi małe wektory s1,s2\mathbf{s}_1,\mathbf{s}_2. Przy ML-DSA-87 ich współczynniki pochodzą z przedziału

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

czyli ze zbioru {2,1,0,1,2}\{-2,-1,0,1,2\}. Ta małość nie jest szczegółem, lecz sednem: dopiero dlatego, że sekrety są małe, w ogóle powstaje trudny problem kratowy.

Klucz publiczny to w uproszczeniu

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

ρ\rho jest seedem, z którego A\mathbf{A} da się deterministycznie zrekonstruować — macierzy nie trzeba więc przesyłać. t1\mathbf{t}_1 to górne bity t\mathbf{t}; dolne d=13d=13 bitów odpada, co znacznie zmniejsza klucz. To pominięcie jest później powodem istnienia tak zwanych hintów.

Powstaje tym samym pożądana asymetria:

weryfikowacˊ publicznie    podpisywacˊ tajnie\boxed{\text{weryfikować publicznie}\;\neq\;\text{podpisywać tajnie}}

10. Opinia staje się liczbą

Usługa podpisująca haszuje najpierw obiekt payload z rozdziału 2:

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

W naszym przykładzie zabawkowym bierzemy sztuczny miniskrót. W prawdziwym systemie μ\mu ma 512 bitów i wiąże dodatkowo klucz publiczny — dzięki temu podpisu nie da się przeinterpretować na inny klucz.


11. Commitment

Usługa podpisująca losuje mały wektor y\mathbf{y}. W naszym przykładzie:

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

Powstaje z niego wartość pośrednia, 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 jeszcze nie jest podpis.


12. Z opinii powstaje challenge

Wiadomość i commitment zostają zhaszowane razem:

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

Przy ML-DSA-87 cc jest wielomianem z dokładnie τ=60\tau=60 współczynnikami ze zbioru {1,+1}\{-1,+1\}, wszystkie pozostałe 196 są zerowe. Ta struktura jest zamierzona: utrzymuje cs1c\cdot\mathbf{s}_1 małym.

W naszym przykładzie zabawkowym przyjmujemy po prostu

c=2.c=2.

13. Właściwy podpis

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

Z naszymi wartościami:

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, który łatwo przeoczyć: rejection sampling

Tu leży punkt, w którym ML-DSA różni się od naiwnej konstrukcji — i nie jest on opcjonalny.

z=y+cs1\mathbf{z}=\mathbf{y}+c\,\mathbf{s}_1 zawiera sekret s1\mathbf{s}_1. Gdyby z\mathbf{z} po prostu zawsze wydawać, s1\mathbf{s}_1 dałoby się statystycznie wyliczyć z dostatecznie wielu podpisów. Przy portalu z opiniami o bardzo wielu podpisach dziennie nie jest to ryzyko teoretyczne.

Dlatego usługa podpisująca sprawdza przed wydaniem, czy z\mathbf{z} zdradza za dużo, i w przeciwnym razie odrzuca podpis — wtedy zaczyna od nowa z nowym losowym y\mathbf{y}. Nazywa się to Fiat-Shamir with Aborts.

Warunek brzmi w istocie:

z<γ1β.\|\mathbf{z}\|_\infty < \gamma_1-\beta.
commitment w = Aychallenge c = H(μ, w)odpowiedź z = y + c · s₁‖z‖∞ < γ₁ − β ?takpodpis zostaje wydanynie — nowe y
Trzy kroki i pętla. Jeśli z wypadnie za duże, nie jest poprawiane — cały przebieg zostaje odrzucony i zaczyna się od nowa ze świeżym losowym y. Dlatego podpisywanie jest tu metodą pętlową.

Dla ML-DSA-87 zachodzi γ1=219\gamma_1=2^{19} oraz β=τη=602=120\beta=\tau\cdot\eta=60\cdot2=120. Dochodzi do tego druga granica na dolnych bitach. W praktyce kilka przebiegów jest normą — podpisywanie jest więc metodą pętlową, a nie jednorazowym krokiem.

Dla weryfikacji ważne jest: dokładnie tę granicę przeglądarka sprawdza później również. Podpis o zbyt dużych współczynnikach zostaje odrzucony, nawet jeśli równanie się zgadza.


15. Dlaczego przeglądarka może to sprawdzić

Przeglądarka czytelnika zna:

  • opinię, a tym samym mm
  • klucz publiczny (ρ,t1)(\rho,\mathbf{t}_1)
  • podpis (c~,z,h)(\tilde c,\mathbf{z},\mathbf{h})

Nie zna s1\mathbf{s}_1. Zależność, która mimo to prowadzi ją dalej:

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 ponieważ zachodzi

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

nieznane As1A\mathbf{s}_1 da się zastąpić wartością publiczną:

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

To jest centralne równanie — i mówi ono coś ważnego: przeglądarka rekonstruuje AyA\mathbf{y} nie dokładnie, lecz tylko z dokładnością do małego składnika cs2c\,\mathbf{s}_2.


16. Miniprzykład do końca

Mieliśmy:

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

Przeliczmy:

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

Pierwotny commitment wynosił

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

Różnica wynosi

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

A więc dokładnie przewidziany mały składnik błędu. Weryfikator dostaje nie w\mathbf{w}, lecz coś, co leży blisko w\mathbf{w}.

Właśnie dlatego ML-DSA porównuje nie same wartości, lecz ich górne bity. I właśnie dlatego podpis zawiera dodatkowo wektor hintów h\mathbf{h}: informuje on kompaktowo, w których miejscach zaokrąglenie przechyliło się przez granicę za sprawą małego składnika błędu. Przy ML-DSA-87 dopuszczalnych jest najwyżej ω=75\omega=75 takich wskazówek. Nie zdradzają one sekretu — naprawiają jedynie zaokrąglenie.

Na koniec przeglądarka przelicza challenge na nowo. Jeśli się zgadza,

cnowy=c,c_{\text{nowy}}=c,

i wszystkie normy mieszczą się w granicach, podpis jest ważny.


17. Co się dzieje, gdy ktoś zmieni opinię?

Załóżmy, że ktoś z dostępem do bazy danych — także ktoś u nas — zmienia tekst opinii albo jedno z serduszek. Wtedy zmienia się co najmniej jedna z dwóch wartości skrótu w payloadzie (h przy tekście, rh przy każdym polu rekordu):

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

Tym samym zmienia się challenge:

cc.c\neq c'.

Istniejący podpis został jednak wytworzony dla starego challenge. Przeglądarka przelicza i stwierdza:

cnowycpodpisPodpis niewaz˙nyc_{\text{nowy}}\neq c_{\text{podpis}} \quad\Longrightarrow\quad \boxed{\text{Podpis nieważny}}

Rozstrzygające zdanie brzmi: opinię możemy usunąć, ale nie możemy jej zmienić niepostrzeżenie. W McGesund ta sama weryfikacja przebiega dodatkowo co noc po stronie serwera na całym zasobie — opinia, która jej nie przejdzie, nie wlicza się już do średniej firmy.


18. Dlaczego nikt nie może wymyślić podpisu?

Atakujący zna A\mathbf{A} i t\mathbf{t}, ale nie s1,s2\mathbf{s}_1,\mathbf{s}_2. Aby zbudować ważny podpis, musiałby znaleźć trójkę (c~,z,h)(\tilde c,\mathbf{z},\mathbf{h}), która

  • spełnia równanie weryfikacyjne oraz
  • dotrzymuje granic norm oraz
  • pasuje do challenge wynikającego z dokładnie tych wartości.

To sprowadza się w rdzeniu do trudnego problemu kratowego — konkretnie do Module-SIS: znalezienia krótkich rozwiązań jednorodnego równania modulo qq. Warunek małości nie jest przy tym dodatkiem, lecz właściwym źródłem trudności. Bez niego rozwiązanie byłoby trywialne.

dane publiczne    trudny problem kratowy\boxed{\text{dane publiczne}\;\rightarrow\;\text{trudny problem kratowy}}

19. Dlaczego „Module"?

Słowo to opisuje strukturę pomiędzy zwykłymi wektorami a ogólnymi kratami. Zamiast liczyć na pojedynczych liczbach, ML-DSA pracuje na wektorach wielomianów:

a=(a1(x),a2(x),,ak(x)),\mathbf{a}=(a_1(x),a_2(x),\ldots,a_k(x)),

i na macierzach 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}.

Zaleta: dostaje się wysoki wymiar kraty, a zachowuje kompaktową, efektywnie obliczalną reprezentację. Bezpieczeństwo da się precyzyjnie regulować rozmiarem macierzy, bez zmiany pierścienia.


20. Dlaczego akurat 87?

Trzy poziomy różnią się nie pierścieniem, lecz wymiarami:

ParametrML-DSA-44ML-DSA-65ML-DSA-87
Rozmiar macierzy (k,)(k,\ell)4×44\times46×56\times58×78\times7
Zakres sekretu η\eta242
Waga challenge τ\tau394960
Klucz publiczny1312 B1952 B2592 B
Podpis2420 B3309 B4627 B
Kategoria NIST235

Godne uwagi: ML-DSA-87 nie jest po prostu „ML-DSA-65, tylko większym". Zakres sekretu η\eta wraca z 4 znów do 2; bezpieczeństwo bierze się tu z większej macierzy, a nie z większych współczynników. Chodzi o samodzielny, znormalizowany dobór parametrów.

większa struktura matematycznawyz˙szy margines bezpieczenˊstwa\boxed{\text{większa struktura matematyczna}\rightarrow\text{wyższy margines bezpieczeństwa}}

Cena: 4627 bajtów na podpis — na każdy stempel, który jest przechowywany i przy weryfikacji dostarczany do przeglądarki. Dlatego w McGesund obok ML-DSA-87 do wyboru jest także FALCON, któremu wystarcza 1280 bajtów.


21. Fiat-Shamir: dlaczego działa bez rozmówcy

Dowód interaktywny przebiegałby tak:

  1. Usługa podpisująca wysyła commitment.
  2. Weryfikator wysyła losowy challenge.
  3. Usługa podpisująca odpowiada.
  4. Weryfikator przelicza.

Przy opinii tego dialogu nie ma — czytelnik przychodzi miesiące później. Rozwiązaniem jest transformacja Fiata-Shamira: challenge nie jest losowany, lecz haszowany z samych danych:

c=H(klucz publiczny,  wiadomosˊcˊ,  commitment).c=H(\text{klucz publiczny},\;\text{wiadomość},\;\text{commitment}).

Dialog staje się dzięki temu dokumentem. Usługa podpisująca nie może sobie wybrać challenge, bo musiałaby do tego kontrolować skrót.


22. Cały przebieg

USŁUGA PODPISUJĄCA (MCGESUND)PRZEGLĄDARKA ODWIEDZAJĄCEGOklucz prywatny s₁, s₂payload m = {firma, opinia, h, rh, iat}skrót μlosowy wektor ycommitment w = Aychallenge c = H(μ, w)z = y + c · s₁podpis (c, z, hinty) + kidopinia + podpis + klucz publ.Az − c·t → górne bity + hintyprzeliczenie challengeprzeliczony challenge = dostarczony?ważnynieważnyodrzuć, jeśli z za duże(rejection sampling)
Cała droga opinii. Przerywany skok wstecz to rejection sampling — jest wykonywany tak długo, aż z będzie dostatecznie małe, by nie zdradzać niczego o kluczu tajnym.

23. Co konkretnie robi z tym McGesund

Trzy poziomy zazębiają się ze sobą:

Koperta. Każda podpisana opinia niesie podpis Ed25519. To wariant obowiązkowy — klasyczny, malutki, natywnie weryfikowalny w każdej przeglądarce.

Stemple postkwantowe. Dodatkowo można obok dołożyć jeden albo dwa podpisy odporne na ataki kwantowe. Które, zależy od taryfy:

Taryfadostępne poziomy 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, oba równolegle

Wariant równoległy jest świadomie nadmiarowy. Gdyby jedna z obu rodzin matematycznych — kraty NTRU przy FALCON, kraty modułowe przy ML-DSA — okazała się słabsza, niż dziś się przyjmuje, druga niesie dowód dalej.

Kotwica czasu. Odcisk klucza podpisującego zostaje zakotwiczony przez OpenTimestamps w bloku Bitcoina. Pozwala to wykazać nie tylko, że podpis jest prawdziwy, lecz także, że istniał już w określonym momencie — bez konieczności wiary komukolwiek w nasz znacznik czasu.

Weryfikowane jest to wszystko w przeglądarce czytelnika, przez moduł WASM. My dostarczamy dane; przeliczane jest na urządzeniu odwiedzającego. Gdybyśmy jutro zniknęli z sieci, raz pobrana opinia pozostałaby sprawdzalna.


24. ML-DSA i FALCON obok siebie

WłaściwośćFALCON (FN-DSA)ML-DSA
Typpodpis cyfrowypodpis cyfrowy
Rodzina kratNTRUModule-LWE / Module-SIS
PierścieńZq[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
Mechanizm rdzeniakrótki wektor przez próbkowanie gaussowskiepytanie i odpowiedź z przerwaniami
FFT / NTTFFT zmiennoprzecinkowa, krytyczna dla bezpieczeństwaNTT, tylko arytmetyka
Rozmiar podpisu (najwyższy poziom)1280 B4627 B
Implementacjawymagająca (liczby zmiennoprzecinkowe)stosunkowo prostoliniowa
Normalizacjaprzewidziana jako FIPS 206 (FN-DSA), jeszcze niezamkniętaFIPS 204, zamknięta

Krótko mówiąc: ML-DSA łatwiej poprawnie zaimplementować i sprawdzić, FALCON dostarcza wyraźnie bardziej kompaktowe podpisy. W kodzie QR nie tkwi żaden z nich — tam stoi wyłącznie koperta Ed25519. Rozmiar podpisu liczy się dlatego przy przechowywaniu i dostarczaniu, a odporność przy implementacji. Dlatego oferujemy oba.


25. Jedno zdanie na wynos

ML-DSA tworzy z kroˊtkiego tajnego wektora odpowiedzˊ na challenge,ktoˊry został zhaszowany z samej opinii — sprawdzalnąprzez kaz˙dego, kto ma klucz publiczny.\boxed{ \begin{array}{c} \text{ML-DSA tworzy z krótkiego tajnego wektora odpowiedź na challenge,}\\ \text{który został zhaszowany z samej opinii — sprawdzalną}\\ \text{przez każdego, kto ma klucz publiczny.} \end{array}}

Kto posiada tajny wektor, podpisuje w milisekundach. Kto go nie posiada, musiałby rozwiązać problem kratowy w ponad 14 000 wymiarach — także komputerem kwantowym.

Dla czytelnika opinii oznacza to po prostu: nie musi nam wierzyć. Może przeliczyć.