Pierwsze wydanie implementacji protokołu TLS 1.3 w Javie z algorytmami GOST zgodnymi z RFC 9367

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.

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

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster