Podpisová schéma
SLH-DSA vysvetlený matematicky
Ako SLH-DSA-SHA2-256f (FIPS 205) podpisuje bez akéhokoľvek ťažkého problému okrem hašových funkcií — od hašových reťazcov cez Merkleove stromy až po les stromov FORS.
Stav: 2026-11-09
1. O čo tu ide
V McGesund si zákazníci v tarifoch Hodnotenia Premium a Signály Premium môžu zvoliť stupeň podpisu PQ-Dual-Diversified. Každý QR kód potom popri klasickom podpise Ed25519 nesie dva kvantovo odolné podpisy: ML-DSA-87 a SLH-DSA-SHA2-256f.
Tento článok vysvetľuje ten druhý. Je postavený inak než všetko ostatné, čo používame.
SLH-DSA nie je šifrovanie. Obsah zostáva verejne čitateľný. SLH-DSA dokazuje pôvod a neporušenosť — ako každý digitálny podpis.
SLH-DSA znamená v plnom znení Stateless Hash-Based Digital Signature Algorithm. Vzniklo zo SPHINCS+ a v roku 2024 bolo štandardizované ako FIPS 205. Už názov prezrádza, čo je na ňom zvláštne: schéma používa iba hašové funkcie. Žiadne mriežky, žiadne eliptické krivky, žiadne veľké prvočísla.
2. Čo presne sa podpisuje?
SLH-DSA v McGesund podpisuje tú istú množinu údajov, ktorú pokrýva aj podpis Ed25519 v QR kóde: payload QR kódu. Obsahuje okrem iného, ku ktorej firme kód patrí (fid), akého je druhu (typ), kedy bol vydaný (iat) a dokedy platí (exp) — ako kompaktne zakódovanú postupnosť bajtov (CBOR).
Táto postupnosť bajtov je naša správa . Ak niekto dodatočne zmení jediný bit, nesedí už žiadny z podpisov.
Podpis SLH-DSA nie je uložený priamo v QR kóde. S približne 49 KB je na to príliš veľký. Leží ako samostatná „pečiatka" pri zázname QR v backende McGesund a pri kliknutí na „Overiť autenticitu" sa načíta do prehliadača.
3. Prečo schéma len z hašových funkcií?
Každá podpisová schéma stojí na úlohe, ktorá je bez tajného kľúča prakticky neriešiteľná:
| Schéma | Bezpečnosť stojí na |
|---|---|
| Ed25519 | diskrétny logaritmus na eliptickej krivke |
| FALCON | krátke vektory v NTRU mriežkach |
| ML-DSA | Module-LWE a Module-SIS (mriežky) |
| SLH-DSA | iba na vlastnostiach hašovej funkcie |
Ed25519 by veľký kvantový počítač prelomil. FALCON a ML-DSA sa považujú za kvantovo odolné — obe sa však opierajú o mriežkové problémy. Ak by sa jedného dňa našiel zásadný útok na mriežky, zasiahol by obe naraz.
SLH-DSA naproti tomu potrebuje len to, aby hašová funkcia robila to, na čo bola vytvorená:
Je to najdlhšie a najdôkladnejšie skúmaný predpoklad celej kryptografie. Ani kvantový počítač tu nepomôže viac než obmedzene: Groverov algoritmus znižuje počet bitov bezpečnosti na polovicu. Preto variant 256 používa hašové hodnoty s bajtov bitov — po Groverovi stále zostáva 128 bitov.
Práve preto sa stupeň volá Diversified: ML-DSA (mriežky) a SLH-DSA (haš) pochádzajú z rôznych matematických rodín. Ak padne jedna, druhá nesie ďalej.
4. Stavebný kameň 1: podpisovanie hašovými reťazcami (WOTS+)
Základná myšlienka je prekvapivo jednoduchá. Začneme jedinou číslicou.
Vezmite tajnú náhodnú hodnotu a hašujte ju znova a znova:
Koniec reťazca, , sa zverejní. To je verejný kľúč pre túto jednu číslicu.
Na podpísanie číslice medzi 0 a 15 sa vydá hodnota reťazca na pozícii :
Kto chce overovať, hašuje ešte -krát. Ak vyjde presne , podpis je pravý:
Mini-príklad
Podpisujeme číslicu :
- Podpisujúci zverejní .
- Overovateľ vypočíta a porovná s . Sedí.
Falšovateľ, ktorý videl , z nej dokáže bez námahy vypočítať , atď. — teda podpísať väčšie číslice. Menšie nedokáže, na to by musel hašovať spätne.
Kontrolný súčet proti „navyšovaniu"
Aby nikto nemohol číslice jednoducho zvyšovať, podpisuje sa navyše kontrolný súčet:
Ak falšovateľ zvýši niektorú číslicu správy, sa zmenší — a na to by musel v reťazci kontrolného súčtu počítať spätne. Oba smery sú tým zablokované.
Prepočítané na hašovú hodnotu
Hašová hodnota s 32 bajtmi má 64 číslic v základe 16. K tomu pribudnú 3 číslice kontrolného súčtu:
Takýto podpis sa nazýva WOTS+ (Winternitz One-Time Signature). Jeho veľký háčik je v názve: One-Time, teda jednorazový. Kto tým istým kľúčom podpíše dve rôzne správy, prezradí toľko hodnôt reťazcov, že falšovanie je možné.
5. Stavebný kameň 2: veľa jednorazových kľúčov pod jednou strechou (Merkleov strom)
Ak sa každý kľúč smie použiť len raz, treba ich veľmi veľa — no zverejniť chceme iba jeden verejný kľúč.
Riešením je Merkleov strom: verejné kľúče párov WOTS+ tvoria listy. Vždy dvaja susedia sa zahašujú spolu, výsledky opäť po dvojiciach, až kým navrchu nezostane jediný koreň.
V SLH-DSA-SHA2-256f má každý strom výšku , teda listov.
Aby sa ukázalo, že určitý list patrí do stromu, dodá sa autentifikačná cesta: 4 súrodenecké uzly na ceste nahor. Overovateľ sa s nimi prehašuje od listu až ku koreňu. Ak vyjde známy koreň, list do stromu patrí.
6. Stavebný kameň 3: stromy na stromoch (hyperstrom)
16 jednorazových kľúčov, samozrejme, nestačí. Preto SLH-DSA kladie stromy na seba: koreň stromu sa podpíše kľúčom WOTS+ stromu nad ním. Táto veža sa nazýva hyperstrom.
V SLH-DSA-SHA2-256f je vrstiev, každá s výškou 4:
Úplne dole je tak k dispozícii
listov. Koreň najvyššieho stromu sa nazýva — je to vlastný verejný kľúč.
Dôležité: nikto tieto stromy nepočíta vopred. Všetky tajné hodnoty sa podľa potreby odvodzujú z tajného seedu . Ukladajú sa len štyri hodnoty po 32 bajtov:
| Časť | Obsah | Veľkosť |
|---|---|---|
| SK.seed | seed pre všetky tajné hodnoty reťazcov | 32 B |
| SK.prf | seed pre náhodnú zložku | 32 B |
| PK.seed | verejný seed, oddeľuje páry kľúčov od seba | 32 B |
| PK.root | koreň najvyššieho stromu | 32 B |
Súkromný kľúč pozostáva zo všetkých štyroch (128 bajtov), verejný len z PK.seed a PK.root (64 bajtov).
7. Stavebný kameň 4: les proti náhodným zásahom (FORS)
Teraz vlastný problém: ako podpisujúci vie, ktorý z listov je ešte nepoužitý?
Staršie schémy založené na haši (XMSS, LMS) si na to vedú počítadlo. To sa nikdy nesmie vrátiť späť — ani zálohou, ani druhým serverom. Ak sa to predsa stane, jednorazový kľúč sa použije dvakrát a schéma je prelomená. Takéto schémy sa nazývajú stavové.
SLH-DSA je bezstavové: list sa vyberá pseudonáhodne zo samotnej správy. Potom sa môže stať, že dve správy trafia ten istý list. Preto úplne dole nevisí jednorazový podpis, ale podpis na niekoľko použití: FORS (Forest of Random Subsets).
FORS pozostáva z malých Merkleových stromov, každý s listami. Listy sú tajné náhodné hodnoty.
Pri podpisovaní sa haš správy rozloží na 35 čísel po 9 bitov. Každé číslo vyberie vo „svojom" strome presne jeden list. Podpis obsahuje pre každý strom:
- tajnú hodnotu tohto listu
- jeho autentifikačnú cestu (9 uzlov)
Falšovateľ by pre inú správu musel vo všetkých 35 stromoch trafiť listy, ktorých tajomstvá už boli prezradené. Aj keby bola tá istá inštancia FORS použitá niekoľkokrát, je to beznádejné.
8. Celý priebeh podpisovania
- Náhodná zložka. Z , čerstvého náhodného čísla a správy vznikne 32-bajtová hodnota .
- Haš správy.
49 bajtov digestu sa rozdelí: 40 bajtov vyberá 35 listov FORS, zvyšok určuje, ktorý strom (
idx_tree) a ktorý list (idx_leaf) úplne dole v hyperstrome sa použije. - Podpis FORS nad správou. Z neho vyplynie verejný kľúč FORS.
- Podpis hyperstromu nad týmto kľúčom FORS: 17 podpisov WOTS+, každý s autentifikačnou cestou, vrstvu za vrstvou až hore k .
Hotový podpis je jednoducho zreťazenie:
9. Prečo má podpis 49 856 bajtov
S parametrami SLH-DSA-SHA2-256f sa dá veľkosť presne prepočítať ( bajtov na hašovú hodnotu):
| Časť | Výpočet | Bajty |
|---|---|---|
| 32 | ||
| FORS | 11 200 | |
| Hyperstrom | 38 624 | |
| Súčet | 49 856 |
Pre porovnanie: podpis Ed25519 má 64 bajtov, ML-DSA-87 má 4 627 bajtov. Veľkosť je cenou za to, že si SLH-DSA vystačí s ničím iným než hašovými funkciami.
10. Ako overuje prehliadač
Overovanie pri SLH-DSA znamená: znova hašovať.
- Nanovo vypočítať digest z , verejného kľúča a správy.
- Z 35 odkrytých listov FORS a ich ciest vypočítať 35 koreňov stromov a z nich verejný kľúč FORS.
- S každým zo 17 podpisov WOTS+ dohašovať reťazce do konca, vytvoriť verejný kľúč WOTS+ a po ceste sa prehašovať ku koreňu stromu.
- Na konci musí vyjsť presne .
To je niekoľko tisíc volaní hašovej funkcie — pre počítač maličkosť. V prehliadači trvá overenie u nás približne 6 až 12 milisekúnd.
11. Čo sa stane, keď niekto zmení údaje?
Ak sa zmení čo i len jeden bit správy , digest sa zmení úplne. Tým 35 čísel ukazuje na iné listy FORS a schéma na iné miesto v hyperstrome.
Odkryté tajomstvá už nesedia: prepočítané korene sa odlišujú a na konci nevyjde . Overenie zlyhá.
Aby útočník napriek tomu zostavil platný podpis, musel by poznať tajomstvá, ktoré nikdy neboli zverejnené — teda počítať hašovú funkciu spätne.
12. Prečo práve 256f?
FIPS 205 definuje dvanásť sád parametrov: dve hašové rodiny (SHA-2 a SHAKE), tri úrovne bezpečnosti (128, 192, 256) a pre každú rýchly („f") a malý („s") variant.
| Variant | Podpis | Podpisovanie (u nás) | Overenie |
|---|---|---|---|
| SHA2-256s | 29 792 B | cca 2,6 s | cca 3 ms |
| SHA2-256f | 49 856 B | cca 0,26 s | cca 6 ms |
256 znamená bezpečnostnú kategóriu NIST 5 — rovnaký stupeň ako FALCON-1024 a ML-DSA-87.
„f" sme zvolili, pretože firmy môžu vydať až 500 QR kódov naraz. S „s" by podpisovanie trvalo viac ako 20 minút, s „f" menej ako minútu. Podpis je za to väčší — keďže nie je v QR kóde, dá sa to zniesť.
SHA-2 namiesto SHAKE, pretože SHA-256 a SHA-512 sú hardvérovo akcelerované prakticky na každom zariadení.
13. Náhoda pri podpisovaní
FIPS 205 pripúšťa dva spôsoby, ako vytvoriť :
- deterministicky: rovnaká správa, rovnaký podpis
- randomizovane („hedged"): pridá sa čerstvé náhodné číslo
Používame randomizovaný variant. Dva podpisy nad tou istou správou preto vyzerajú rozdielne — oba sú platné. To sťažuje útoky, ktoré kombinujú merania na zariadení (spotreba prúdu, čas) s opakovanými podpismi.
14. Čo s tým McGesund konkrétne robí
Stupeň. PQ-Dual-Diversified je k dispozícii v tarifoch Hodnotenia Premium a Signály Premium. QR kód potom nesie tri podpisy:
| Podpis | Rodina | Miesto |
|---|---|---|
| Ed25519 | eliptická krivka | v QR kóde |
| ML-DSA-87 | mriežky | pečiatka v backende |
| SLH-DSA-SHA2-256f | hašové funkcie | pečiatka v backende |
Podpisovanie. Podpis SLH-DSA stojí približne štvrť sekundy výpočtového času. Aby server zostal medzitým dostupný pre všetkých ostatných, počítajú vlastné vlákna na pozadí.
Overenie. Prehliadač čitateľa načíta obe pečiatky a overí ich tým istým modulom WASM ako všetky ostatné PQ podpisy. My dodávame údaje, počíta sa na zariadení návštevníka.
Zhoda s NIST. Náš modul prechádza oficiálnymi testovacími vektormi NIST pre SLH-DSA-SHA2-256f: z počiatočných hodnôt NIST vznikajú bajt po bajte tie isté kľúče a všetky úmyselne zmanipulované podpisy sú odmietnuté. Môžete si to sami overiť v prehliadači na testovacej stránke NIST.
Časová kotva. Ako pri všetkých kľúčoch, aj odtlačok kľúča SLH-DSA sa cez OpenTimestamps ukotví v bloku Bitcoinu.
15. SLH-DSA, ML-DSA a FALCON vedľa seba
| Vlastnosť | FALCON (FN-DSA) | ML-DSA-87 | SLH-DSA-SHA2-256f |
|---|---|---|---|
| Základ | NTRU mriežky | modulové mriežky | iba hašové funkcie |
| Štandard | FIPS 206 (v príprave) | FIPS 204, finálny | FIPS 205, finálny |
| Verejný kľúč | 1 793 B | 2 592 B | 64 B |
| Podpis | 1 280 B | 4 627 B | 49 856 B |
| Podpisovanie | milisekundy | milisekundy | cca 0,26 s |
| Overenie | milisekundy | milisekundy | milisekundy |
| Predpoklad | mriežkový problém | mriežkový problém | hašová funkcia |
Stručne povedané: SLH-DSA je najpomalšie a najväčšie z troch schém — a najkonzervatívnejšie. Nestavia na ničom, čo by už aj tak nepredpokladal každý iný podpis: na bezpečnej hašovej funkcii.
16. Jedna veta na záver
Kto vlastní tajný seed, podpíše za štvrť sekundy. Kto ho nevlastní, musel by SHA-256 alebo SHA-512 počítať spätne — aj s kvantovým počítačom.
Pre čitateľa hodnotenia to znamená: aj keby jedného dňa padli všetky mriežkové schémy, tento podpis zostane overiteľný. Nemusí nám veriť. Môže si to prepočítať.