Moduł crypto-gost-tls13 zawiera implementację TLS 1.3 (RFC 8446 + RFC 9367) z kryptografią GOST. Ta wersja jest początkową wersją biblioteki i jest gotowa do użytku wewnętrznego.
Cechą charakterystyczną biblioteki jest implementacja w czystej Javie. Wszystkie operacje kryptograficzne są wykonywane wbudowanymi środkami biblioteki — bez zewnętrznych zależności.
Jest to jedna z pierwszych otwartych implementacji TLS 1.3 z GOST w Javie, dlatego testy interop wykonały się w minimalnie dostępnym zakresie.
Poniżej przedstawione są możliwości biblioteki.
- Protokoły:
- Handshake: pełny (client/server), skrócony (PSK), wzajemny (mTLS).
- ALPN (RFC 7301) — uzgadnianie protokołu aplikacyjnego (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — wskazanie nazwy serwera dla wdrożeń multi-tenant.
- KeyUpdate (RFC 8446 §4.6.3) — aktualizacja kluczy szyfrujących ruch.
- Suite szyfrujące: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying — zmiana klucza szyfrującego dla każdego zapisu TLS.
- Fragmentacja i składanie handshake i zapisów (RFC 8446 §5.1).
- Wznawianie sesji: PSK przez NewSessionTicket (PskStore w pamięci, jednorazowe wykorzystanie).
- OCSP stapling: serwer dołącza odpowiedź OCSP do certyfikatu.
- Post-handshake messages: NewSessionTicket (przechowywanie dla PSK).
- Kryptografia:
- Harmonogram kluczy: HKDF-Streebog (RFC 5869) według schematu TLS 1.3 (RFC 8446 §7.1).
- Ochrona zapisów: MGM-AEAD (Kuznyechik) z nonce według RFC 8446 §5.3.
- Ephemeryczne klucze są usuwane po użyciu.
- Certyfikaty:
- Parsowanie X.509v3 (GOST R 34.10-2012) — wbudowany parser DER.
- Walidacja łańcucha: podpisy, DN (issuer → subject), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
- Weryfikacja nazwy hosta: dNSName + iPAddress (RFC 6125).
- Weryfikacja odpowiedzi OCSP (RFC 6960).
4.Transport:
- TlsTransport — interfejs.
- InMemoryTlsTransport — do testów i scenariuszy jednoprocowych (kolejka w pamięci).
- SocketTlsTransport — blocking I/O przez java.net.Socket.
- ChannelTlsTransport — transport oparty na NIO SocketChannel (tryb blokujący, przerywalny).
- Krok po kroku handshake:
- TlsHandshakeEngine — maszyna stanów dla handshake (odłączona od I/O). Używana jest TlsSession jako orkiestrator; nadaje się do integracji z JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — przeciążenia ByteBuffer dla integracji zero-copy z NIO. Ładowanie kluczy:
- Pkcs12Loader — odczyt PFX (PKCS#12) z PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Zakończenie sesji:
- close_notify — poprawne zamknięcie według protokołu.
- Niszczenie materiału kluczowego przy zamykaniu lub błędzie.
- Obsługa alertów: fatal — natychmiastowe zamknięcie + usunięcie.
- Bezpieczeństwo implementacji:
- Porównania w stałym czasie dla verify_data i PSK binders (ochrona przed atakami czasowymi)
- Niszczenie kluczowego materiału: destroy() na wszystkich obiektach z kluczami (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), przy close, fatal alert, exception w handshake
- Ochrona przed DoS: limity na długość łańcuchów certyfikatów (10), post-handshake messages, rozmiar zapisów.
- MGM nonce: MSB pierwszego bajtu jest czyszczony dla ICN (RFC 9058 §3, RFC 9367 §3.3).
- Prywatny klucz ECDHE i transkrypt handshake są niszczone po zakończeniu handshake.
- Materiał klucza HMAC jest czyszczony po użyciu (HkdfStreebog, KdfGostR3411_2012_256).
- Ograniczenia:
- Tylko resumption PSK (0-RTT i external 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 (GC256A domyślnie).
- Tylko GOST (non-GOST cipher suites nie są obsługiwane).
- Testowanie:
- Biblioteka zawiera Znane Testy Odpowiedzi z RFC 9367 Appendix A.1 (L i S warianty) — pełen harmonogram kluczy, TLSTREE, AEAD, ECDHE. I przechodzi pełen zakres testów KAT.
- 4 testy integracyjne (self-interop) przez rzeczywiste gniazda TCP.
- Testy fuzzingowe dla parserów: TlsMessageParser (8 metod), TlsDerParser (3 metody), TlsOcspVerifier (1 metoda), w celu zapewnienia bezpieczeństwa i zmniejszenia wektora ataków na parsery.
- Rozwiązania architektoniczne:
- TlsHandshakeEngine — maszyna stanów, niezwiązana z I/O (dla przyszłego modułu JSSE).
- Przeciążenia ByteBuffer TlsRecord.protect/unprotect dla NIO/JSSE.
- TLSTREE cache (TlsTreeCache) — przeliczenie tylko zmienionych poziomów (RFC 9367).
- InMemoryTlsTransport.Pair — dwukierunkowa para do testów i jednoprocowego interfejsu.
Biblioteka jest dystrybuowana na wolnej licencji.
Źródło: linux.org.ru
