Cryptology Academy · Lekcja

Podpisy CRYSTALS-Dilithium i Falcon

Porównać oparte na kratach schematy podpisów cyfrowych standaryzowane przez NIST

Lekcja 3 z 413 kroki

Podpisy CRYSTALS-Dilithium i Falcon to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Potrzeba podpisów postkwantowych

Podpisy RSA i ECDSA są łamane przez algorytm Shora. Podpisy postkwantowe muszą je zastąpić w: certyfikatach TLS, podpisywaniu kodu, podpisywaniu wiadomości e-mail (S/MIME, PGP) oraz uwierzytelnianiu aktualizacji oprogramowania. NIST ustandaryzował dwa schematy oparte na kratach: ML-DSA i FN-DSA.

CRYSTALS-Dilithium (ML-DSA)

Dilithium opiera się na trudności problemów Module-LWE i Module-SIS (Short Integer Solution). Dowód bezpieczeństwa sformułowano w kwantowym modelu losowej wyroczni (QROM). Dostępne są trzy warianty: Dilithium2 (~128 bitów), Dilithium3 (~192 bity), Dilithium5 (~256 bitów). Prosta ścieżka podpisywania bez próbkowania z odrzucaniem.

Podpisywanie w Dilithium

Klucz prywatny: tajne macierze s1, s2. Klucz publiczny: t = As1 + s2. Podpisywanie: należy wylosować y; obliczyć w = Ay; obliczyć wyzwanie c = H(mu || w1), gdzie w1 = HighBits(w); obliczyć z = y + cs1; jeśli ||z|| lub ||r0|| jest zbyt duże, odrzucić wynik i spróbować ponownie. Wynik: (z, c, hint).

Weryfikacja w Dilithium

Aby zweryfikować (z, c, hint), należy sprawdzić, czy ||z|| jest małe; obliczyć w' = Az - ct; użyć hint do odzyskania w1; zweryfikować c == H(mu || w1). Hint to niewielka liczba bitów pochodząca z MakeHint(). Odrzucanie zapewnia, że z nie ujawnia s1 — uzasadnienie bezpieczeństwa ma postać argumentu „aborts-then-uniform”.

Rozmiary kluczy i podpisów Dilithium

ML-DSA-65 (Dilithium3, bezpieczeństwo 192-bitowe): klucz publiczny 1952 bajty, klucz prywatny 4000 bajtów, podpis 3293 bajty. Dla porównania ECDSA-P256: klucz publiczny 64 bajty, podpis 64 bajty. Podpisy Dilithium są około 40–50 razy większe, ale zapewniają odporność na ataki kwantowe.

Falcon (FN-DSA)

Falcon opiera się na kratach NTRU i wykorzystuje próbnik gaussowski nad kratą NTRU. Podpisy są znacznie mniejsze niż w Dilithium, ale podpisywanie wymaga zmiennoprzecinkowego próbnika gaussowskiego — trudniejszego do zaimplementowania w stałym czasie i bardziej złożonego pod względem bezpiecznego kodowania.

Rozmiary kluczy i podpisów Falcon

Falcon-512 (bezpieczeństwo 128-bitowe): klucz publiczny 897 bajtów, podpis 666 bajtów — znacznie mniej niż w Dilithium. Kompromis: Falcon jest trudniejszy do bezpiecznego zaimplementowania (próbkowanie gaussowskie jest podatne na ataki czasowe). Nadaje się do środowisk o ograniczonej przepustowości, ale wymaga starannej implementacji.

SPHINCS+ (SLH-DSA)

SPHINCS+ to schemat podpisu oparty na funkcjach skrótu — zachowawczy wybór bez strukturalnych założeń algebraicznych. Bezpieczeństwo opiera się wyłącznie na bezpieczeństwie funkcji skrótu. Rozmiar podpisu: około 8–50 KB (duży). Podpisywanie jest powolne. Stosuje się go tam, gdzie kluczowe jest długoterminowe zaufanie, a wydajność ma drugorzędne znaczenie.

Wybór między schematami

ML-DSA (Dilithium): ogólnego zastosowania, prosta implementacja, odpowiedni do certyfikatów TLS i podpisywania kodu. FN-DSA (Falcon): środowiska o ograniczonej przepustowości (IoT, LPWAN). SLH-DSA (SPHINCS+): ultrazachowawczy, przeznaczony do długotrwałych kluczy głównych (offline'owe klucze CA, główny element zaufania oprogramowania).

Kwestie implementacyjne

Dilithium: próbkowanie z odrzucaniem może ujawniać informacje poprzez czas wykonania gałęzi — należy używać porównania w stałym czasie. Falcon: próbnik gaussowski wykorzystuje arytmetykę zmiennoprzecinkową — należy zapewnić deterministyczność obliczeń zmiennoprzecinkowych. W obu przypadkach należy unikać kanałów bocznych w arytmetyce wielomianowej. Należy używać implementacji referencyjnych z pakietów zgłoszeniowych NIST.

Standardy FIPS

NIST FIPS 204: ML-DSA (Dilithium). NIST FIPS 205: SLH-DSA (SPHINCS+). NIST FIPS 206: FN-DSA (Falcon). Wszystkie opublikowano w sierpniu 2024 roku. Biblioteki OpenSSL 3.x, BoringSSL i liboqs (projekt Open Quantum Safe) implementują wszystkie trzy schematy.

Szybki test

Jaka jest główna zaleta Falcona w porównaniu z Dilithium?

Podsumowanie

ML-DSA (Dilithium): oparty na kratach, prosty, podpisy o rozmiarze około 3 KB. FN-DSA (Falcon): oparty na NTRU, podpisy o rozmiarze około 700 bajtów, złożona implementacja. SLH-DSA (SPHINCS+): oparty na funkcjach skrótu, zachowawczy, duży. Wszystkie ustandaryzowano w dokumentach FIPS 204/205/206. Dalej: migracja do PQC z wykorzystaniem podejść hybrydowych.

Bezpłatny start

Ucz się Cryptology Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
67
Lekcje
261

Często zadawane pytania

Czy lekcja „Podpisy CRYSTALS-Dilithium i Falcon” jest bezpłatna?

Tak — pełny tekst „Podpisy CRYSTALS-Dilithium i Falcon” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podpisy CRYSTALS-Dilithium i Falcon”?

Porównać oparte na kratach schematy podpisów cyfrowych standaryzowane przez NIST Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Podpisy CRYSTALS-Dilithium i Falcon”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?

Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Algorytmy Shora i Grovera — wyjaśnienie
  2. CRYSTALS-Kyber: KEM oparty na kratach
  3. Podpisy CRYSTALS-Dilithium i Falcon
  4. Migracja do PQC: podejścia hybrydowe
← Powrót do Cryptology Academy