· Michal Pietrus  · 3 min read

Demystifying SLH-DSA and its practical use

On one hand, elegance and "simplicity", but on the other, a multitude of variants and specific applicability.

On one hand, elegance and "simplicity", but on the other, a multitude of variants and specific applicability.
An English translation of this post is not yet available. The original Polish version is displayed below.

Być moze interesowałeś się już konceptami schematów (algorytmów) post-quantum, ale jeśli nie, przynajmniej spośród tych, które NIST dotychczas opublikował jako FIPSowy standard, SLH‑DSA (FIPS 205) jest w moim przekonaniu najbardziej elegancki.

Pisałem już o nim kiedyś tutaj (końcówka wpisu), natomiast cała rzecz wokół SLH-DSA jest o jego prostocie i nie poleganiu na własnościach matematycznych, jak np. w przypadku ML-DSA. W SLH-DSA opierasz się na “plain-old hash functions”(!).

Oczywiście musisz to włożyć w jakiś koncept, który pozwoli Ci przejść z właśności integralności (hash functions) do autentyczności, gdzie posiadasz klucz prywatny i publiczny. Tu wchodzisz w XMSS, ale XMSS są “stateful”, czyli potrzebują zewnętrzny stan, np. jakiś licznik zarządzany przez Ciebie, żeby generować kolejne podpisy. Jeśli o to nie zadbasz, kończysz jak kiedyś Sony i Playstation 3 z “nonce reuse” w ECDSA.

Ale SLH-DSA przychodzi jako “stateless” (w końcu sama nazwa to “Stateless Hash-Based Digital Signature Algorithm”), gdzie nie musisz dbać o stan. Wynika to z połączenia kilku koncepcji: deterministyczny i pseudolosowy wybór indeksów na podstawie hasha wiadomości, połączony z Hypertree i Forest of Random Subsets (FORS).

Przegląd wariantów SLH-DSA

Elegancja SLH-DSA przychodzi z kosztem, zarówno zasobów i niezbędnych cykli CPU, jak i wielkości (w bajtach) samej sygnatury.

Zobacz:

SchemeParameter setNIST levelPk bytesSig bytespk+sigSign (cycles)Verify (cycles)
SLH-DSASHAKE-128f13217,08817,120239,793,8064,764,084
SLH-DSASHAKE-128s1327,8567,8884,682,570,99212,909,924
SLH-DSASHAKE-192f34835,66435,712386,861,99219,876,926
SLH-DSASHAKE-192s34816,22416,2728,091,419,5566,465,506
SLH-DSASHAKE-256f56449,85649,920763,942,25019,886,032
SLH-DSASHAKE-256s56429,79229,8567,085,272,10010,216,560

za PQ signatures ZOO

Masz 6 wariantów ze względu na rozróżnienie “f” (fast) oraz “s” (small) względem sygnatur, tj. albo masz szybsze podpisywanie i mniej cykli CPU, albo masz mniejszą sygnaturę kosztem większej liczby niezbędnych cykli CPU.

Aha, zapomniałem, każdy powyższy wariant masz też dostępny z funkcją haszującą SHA2 (SHA2-128f albo SHA2-256s), czyli de facto masz 12 wariantów.

Spośród tych 12 wariantów, wszystkie spełniają EUF-CMA, tj. w/w standardy bezpieczeństwa (w/g NIST) są spełnione dla przypadku, gdzie dana para kluczy podpisuje najwyżej 2^64 wiadomości.

Żeby nie było za łatwo, początkiem kwietnia 2026 NIST opublikował draft(!), SP 800-230 z dodatkowymi wariantami SLH-DSA, gdzie masz dodatkowo:

SchemeParameter setNIST levelPk bytesSig bytes
SLH-DSA-*-128-24SHA2 albo SHAKE1323,856
SLH-DSA-*-192-24SHA2 albo SHAKE3487,752
SLH-DSA-*-256-24SHA2 albo SHAKE56414,944

Te 6 nowych wariantów masz dostępnych w wariancie, gdzie dany klucz podpisuje najwyżej 2^24 wiadomości. Innymi słowy, tą propozycją do wariantów “f” i “s” (powyżej) dokładamy de facto trzeci wariant, tj. “24”.

Dodatkowo, w publikacji podają, że aby uzyskać rozmiary sygnatur wariantu “24”, proces podpisywania jest jeszcze wolniejszy niż wariantu “s” (small) powyżej (zatem jeszcze wolniej i więcej CPU(!)). Nasuwa się zatem paradygmat “sign-once, verify-many”. Tutaj istotną informacją jest, że weryfikacja powinna być mniej kosztowna.

Wybór wariantu SLH-DSA

Na początek, SLH-DSA w dowolnym wariancie wybierasz przede wszystkim wówczas, kiedy dziś projektujesz system i jest duża szansa, że system ten będzie dalej w użyciu po 10-20 latach, np. systemy IoT/OT albo device identity. Wszędzie tam, gdzie nie możesz w prosty sposób wymienić kryptografii i zapewnić crypto agility (NIST CSWP 39). Do wykorzystania SLH-DSA rysują się zatem przypadki użycia z silnym powiązaniem z hardware i długim czasem użytkowania.

ML-DSA czy SLH-DSA-24 w X.509 PKI?

Choć najtańszy wariant SLH-DSA-*-128-24 daje Ci sygnaturę długości 3,856 bajtów, czyli jakieś dwa i pół dzisiejszego certyfikatu X.509 WEB PKI z podpisem ECDSA (jeden cert ~1440 bajtów), a do tego jeszcze trzeba dorzucić resztę danych certyfikatu. Przyszłościowo zatem (NIST.SP.800-230 to dopiero draft) rozważ na tym root certificate, a CAs i leafs na ML-DSA.

SHA2 czy SHAKE?

Implementacyjnie: SHAKE. Ekosystemowo, prawdopodobnie SHA2 (np. sprzętowe wsparcie CPU).

Back to Blog

Related Posts

View All Posts »