Moduł krypto-gost-tls13 zawiera implementację TLS 1.3 (RFC 8446 + RFC 9367) z kryptografią GOST. To wydanie jest początkową wersją biblioteki i jest gotowe do użytku wewnętrznego.
Unikalną cechą biblioteki jest jej czysta implementacja w Javie. Wszystkie operacje kryptograficzne są wykonywane za pomocą wbudowanych narzędzi biblioteki, bez zewnętrznych zależności.
Jest to jedna z pierwszych implementacji protokołu TLS 1.3 z GOST w Javie o otwartym kodzie źródłowym, dlatego testy współdziałania przeprowadzono w minimalnym możliwym zakresie.
Poniżej przedstawiono możliwości biblioteki.
- Protokoły:
- Uścisk dłoni: pełny (klient/serwer), krótki (PSK), wzajemny (mTLS).
- ALPN (RFC 7301) - Negocjacje protokołu warstwy aplikacji (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) – Wskazanie nazwy serwer dla wdrożeń wielodostępnych.
- KeyUpdate (RFC 8446 §4.6.3) – aktualizacja kluczy szyfrujących ruch.
- Zestawy szyfrów: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bitowy), CryptoPro-B (512-bitowy)
- Ponowne wprowadzanie kluczy TLSTREE dla każdego rekordu — zmiana klucza szyfrującego dla każdego rekordu TLS.
- Fragmentacja i ponowne składanie uścisków dłoni i rekordów (RFC 8446 §5.1).
- Wznowienie sesji: PSK przez NewSessionTicket (PskStore w pamięci, jednorazowego użytku).
- Zszywanie OCSP: Serwer прикладывает OCSP-ответ к сертификату.
- Wiadomości po uzgadnianiu: NewSessionTicket (zapisz dla PSK).
- Kryptografia:
- Harmonogram kluczy: HKDF-Streebog (RFC 5869) przez TLS 1.3 (RFC 8446 §7.1).
- Ochrona rekordu: MGM-AEAD (Kuznyechik) z nonce zgodnie z RFC 8446 §5.3.
- Klucze efemeryczne są kasowane po użyciu.
- Certyfikaty:
- Analiza X.509v3 (GOST R 34.10-2012) — wbudowany parser DER.
- Łańcuch walidacji: podpisy, DN (wydawca → podmiot), ograniczenia podstawowe, użycie klucza, rozszerzone użycie klucza * (serverAuth / clientAuth), pathLen.
- Sprawdzenie nazwy hosta: dNSName + iPAddress (RFC 6125).
- Weryfikacja odpowiedzi OCSP (RFC 6960).
4.Transport:
- TlsTransport - interfejs.
- InMemoryTlsTransport – do testów i scenariuszy pojedynczego procesu (kolejka w pamięci).
- SocketTlsTransport — blokowanie wejścia/wyjścia przez java.net.Socket.
- ChannelTlsTransport - transport oparty na NIO SocketChannel (tryb blokowany, z możliwością przerwania).
- Uścisk dłoni krok po kroku:
- TlsHandshakeEngine to maszyna stanowa do uzgadniania (oddzielona od wejścia/wyjścia). Wykorzystuje TlsSession jako koordynator i nadaje się do integracji z JSSE (SSLEngine).
- API ByteBuffer:
- TlsRecord.protect/unprotect — przeciążenia ByteBuffer do integracji zerowej kopii z NIO. Ładowanie kluczy:
- Pkcs12Loader — odczyt PFX (PKCS#12) przy użyciu PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Koniec sesji:
- close_notify - poprawne zamknięcie zgodnie z protokołem.
- Wycieranie materiału klucza podczas zamykania lub popełniania błędu.
- Obsługa alertu: krytyczny - natychmiastowe zamknięcie + usunięcie.
- Bezpieczeństwo wdrożenia:
- Porównania w czasie stałym dla powiązań verify_data i PSK (ochrona przed atakami czasowymi)
- Czyszczenie materiału klucza: destroy() dla wszystkich obiektów z kluczami (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), przy zamknięciu, krytyczny alert, wyjątek w uzgadnianiu
- Ochrona przed atakami DoS: ograniczenia długości łańcucha certyfikatów (10), komunikatów po uzgadnianiu, rozmiaru rekordu.
- Nonce MGM: MSB pierwszego bajtu jest czyszczony dla ICN (RFC 9058 §3, RFC 9367 §3.3).
- Prywatny klucz ECDHE oraz transkrypt uścisku dłoni zostają zniszczone po zakończeniu uścisku dłoni.
- Materiał klucza HMAC jest usuwany po użyciu (HkdfStreebog, KdfGostR3411_2012_256).
- Ograniczenia:
- Tylko wznawianie PSK (0-RTT i zewnętrzny PSK nie są obsługiwane).
- Tylko psk_dhe_ke (czysty PSK bez ECDHE nie jest obsługiwany).
- HelloRetryRequest (RFC 8446 §4.1.4) nie jest obsługiwany — używana jest tylko jedna nazwana grupa (domyślnie GC256A).
- Tylko GOST (szyfrowanie inne niż GOST nie jest obsługiwane).
- Testowanie:
- Biblioteka zawiera testy znanych odpowiedzi z dodatku A.1 do dokumentu RFC 9367 (warianty L i S) – pełny harmonogram kluczy, TLSTREE, AEAD i ECDHE. Zdaje również pełny zakres testów KAT.
- 4 testy integracyjne (samodzielnej współpracy) poprzez prawdziwe gniazda TCP.
- Testy rozmyte dla parserów: TlsMessageParser (8 metod), TlsDerParser (3 metody), TlsOcspVerifier (1 metoda) w celu zapewnienia bezpieczeństwa i ograniczenia wektora ataku na parsery.
- Rozwiązania architektoniczne:
- TlsHandshakeEngine - maszyna stanowa oddzielona od wejścia/wyjścia (na potrzeby przyszłego modułu JSSE).
- Przeciążenie ByteBuffer funkcji TlsRecord.protect/unprotect dla NIO/JSSE.
- Pamięć podręczna TLSTREE (TlsTreeCache) — przeliczanie tylko zmienionych poziomów (RFC 9367).
- InMemoryTlsTransport.Pair to dwukierunkowa para przeznaczona do testów i komunikacji pojedynczego procesu.
Biblioteka rozpowszechniana jest na podstawie wolnej licencji.
Źródło: linux.org.ru
