Pierwsza wersja implementacji protokołu TLS 1.3 w Javie z algorytmami GOST zgodnie z RFC 9367

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.

  1. 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).
  1. 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.
  1. 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).
  1. 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).
  1. 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.
  1. 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.
  1. 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).
  1. 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).
  1. 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.
  1. 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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster