FIPS 186‑2
FIPS 186‑2 – amerykański standard opisujący metodologię i wymagania techniczne dla Cyfrowego Algorytmu Podpisu (ang. Digital Signature Algorithm, DSA) oraz powiązane funkcje skrótu. Został opublikowany przez National Institute of Standards and Technology (NIST) w 1999 roku i stanowił drugą wersję pierwszego standardu FIPS 186. Standard ten był obowiązujący w Stanach Zjednoczonych do momentu jego zastąpienia przez FIPS 186‑3 w 2009 roku.
Historia
Rozwój DSA rozpoczął się w latach 1990–1994, kiedy to NIST rozpoczął prace nad cyfrowymi metodami podpisu zastępującymi algorytm RSA w niektórych zastosowaniach rządowych. Pierwszy wariant standardu, FIPS 186‑1, został opublikowany w 1994 roku. Po kilku latach praktycznych testów i uwag ze strony społeczności kryptograficznej, w 1999 roku wprowadzono zaktualizowaną wersję – FIPS 186‑2, w której doprecyzowano parametry kryptograficzne i wprowadzono dodatkowe wytyczne dotyczące bezpieczeństwa.
Zakres standardu
FIPS 186‑2 definiuje następujące elementy:
- Parametry algorytmu DSA, w tym zakresy dla liczb pierwszych p i q oraz generatora g.
- Procedury generowania kluczy prywatnych i publicznych.
- Opis sposobu tworzenia podpisu cyfrowego (wartości r i s).
- Wymagania dotyczące funkcji skrótu – w wersji 186‑2 dopuszczalne były SHA‑1 oraz SHS‑2 (SHA‑224/256), chociaż głównym algorytmem zalecanym był SHA‑1.
- Testy i procedury weryfikacji podpisu.
- Wytyczne dotyczące implementacji w środowiskach sprzętowych i programowych.
Kluczowe parametry DSA w FIPS 186‑2
| Parametr | Opis | Zakres |
|---|---|---|
| p | Liczba pierwsza o długości 1024 bitów | 1024 bit |
| q | Podprymka p o długości 160 bitów | 160 bit |
| g | Generator podgrupy, wyliczany jako g = h^{(p‑1)/q} mod p przy odpowiednim h |
0 < g < p |
| x | Klucz prywatny | 0 < x < q |
| y | Klucz publiczny (y = g^x mod p) | 0 < y < p |
Procedura podpisu
- Obliczenie skrótu wiadomości H(m) przy użyciu SHA‑1 lub innego dopuszczonego algorytmu.
- Wylosowanie pery (liczby jednorazowej) k, spełniającej 0 < k < q.
- Obliczenie r = (g^k mod p) mod q. Jeśli r = 0, proces wraca do kroku 2.
- Obliczenie s = (k^{-1}(H(m) + x·r)) mod q. Jeśli s = 0, proces wraca do kroku 2.
- Podpisem jest para (r, s).
Weryfikacja podpisu
- Sprawdzenie, czy 0 < r < q oraz 0 < s < q.
- Obliczenie skrĂłtu H(m).
- Obliczenie w = s^{-1} mod q.
- Obliczenie u1 = (H(m)·w) mod q i u2 = (r·w) mod q.
- Obliczenie v = ((g^{u1}·y^{u2}) mod p) mod q.
- Podpis jest ważny, jeśli v = r.
Bezpieczeństwo i krytyka
Po opublikowaniu FIPS 186‑2 pojawiły się główne uwagi:
- Użycie jedynie 1024‑bitowego modułu p i 160‑bitowego q uznano z czasem za niewystarczające w kontekście postępującej mocy obliczeniowej (kryptografii kwantowej).
- Dependencja od SHA‑1, którego kolizje zostały wykryte w 2005 roku i udokumentowane w 2017 roku, co podważyło integralność podpisów generowanych zgodnie z FIPS 186‑2.
- Brak wyraźnych wytycznych co do bezpiecznego generowania losowego pery k, co w praktyce doprowadziło do ataków typu „nonce reuse” (np. w 2010 r. w ramach skandalu o prywatnych kluczach w niektórych implementacjach DSA).
W odpowiedzi na te problemy NIST wprowadził FIPS 186‑3, podnosząc rozmiary parametrów (2048 bit i 256 bit) oraz rekomendując użycie SHA‑2 i później SHA‑3.
Zastosowania
Standard FIPS 186‑2 był szeroko przyjmowany w następujących obszarach:
- Podpisywanie certyfikatĂłw X.509 w systemach rzÄ…dowych USA.
- Systemy autoryzacji w Public Key Infrastructure (PKI) opartych na DSA.
- Implementacje sprzętowe w modułach bezpieczeństwa (HSM) i kartach inteligentnych.
- Oprogramowanie kryptograficzne, m.in. biblioteki OpenSSL (do wersji 1.0.x) oraz Microsoft CryptoAPI.
PowiÄ…zane standardy i dokumenty
Warto zapoznać się z następującymi pozycjami, które uzupełniają lub rozszerzają temat FIPS 186‑2:
- FIPS 186‑1 – pierwsza wersja standardu DSA.
- FIPS 186‑3 – nowsza wersja zwiększająca rozmiary parametrów.
- NIST SP 800‑56A – wytyczne dotyczące wymiany kluczy.
- NIST SP 800‑90A – generatory liczb losowych (RNG).
- ISO/IEC 14888‑3 – międzynarodowy odpowiednik DSA.
Przyszłość
Choć FIPS 186‑2 nie jest już rekomendowany, jego struktura i podejście do podpisów cyfrowych pozostają istotnym elementem historii kryptografii. Dziś większość nowych systemów przechodzi na algorytmy o większej odporności, takie jak ECDSA lub RSA‑PSS, jednak wiedza o FIPS 186‑2 jest niezbędna przy analizie starszych systemów oraz przy archiwizacji i weryfikacji starszych dokumentów podpisanych przy użyciu DSA.
Bibliografia
- NIST. Digital Signature Standard (DSS). FIPS 186‑2, 1999.
- J. Menezes, P. van Oorschot, S. Vanstone. Handbook of Applied Cryptography. CRC Press, 1996.
- R. Krawczyk, M. Bellare, D. Wagner. HMAC: Keyed-Hashing for Message Authentication. RFC 2104, 1997.
- U.S. Government. Federal Information Processing Standards (FIPS). FIPS 186‑3, 2009.
Artykuł powstał na podstawie dostępnych źródeł publicznych oraz dokumentacji NIST. Dla pełnego zrozumienia stosowanych algorytmów zaleca się lekturę powyższych norm oraz ich aktualizacji.