Modul crypto-gost-tls13 obsahuje implementaci TLS 1.3 (RFC 8446 + RFC 9367) s GOST kryptografií. Tato verze je počáteční verzí knihovny a je připravena pro interní použití.
Hlavní vlastností knihovny je implementace v čisté Javě. Všechny kryptografické operace jsou prováděny vestavěnými prostředky knihovny — bez externích závislostí.
Toto je jedno z prvních otevřených implementací TLS 1.3 s GOST na Javě, proto bylo interop testování provedeno v minimálně dostupném rozsahu.
Níže jsou uvedeny možnosti knihovny.
- Protokoly:
- Handshake: plný (client/server), zkrácený (PSK), vzájemný (mTLS).
- ALPN (RFC 7301) — dohodnutí protokolu aplikační vrstvy (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — specifikace názvu serveru pro multi-tenant nasazení.
- KeyUpdate (RFC 8446 §4.6.3) — aktualizace klíčů pro šifrování provozu.
- Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying — změna klíče šifrování pro každou TLS zprávu.
- Fragmentace a sestavení handshake a záznamů (RFC 8446 §5.1).
- Obnovení relace: PSK prostřednictvím NewSessionTicket (PskStore v paměti, jednorázové použití).
- OCSP stapling: server připojuje OCSP odpověď k certifikátu.
- Post-handshake zprávy: NewSessionTicket (uchování pro PSK).
- Kryptografie:
- Key schedule: HKDF-Streebog (RFC 5869) podle schématu TLS 1.3 (RFC 8446 §7.1).
- Ochrana záznamů: MGM-AEAD (Kuznyechik) s nonce podle RFC 8446 §5.3.
- Efemérní klíče jsou vymazány po použití.
- Certifikáty:
- Parsing X.509v3 (GOST R 34.10-2012) — vestavěný DER parser.
- Validace řetězce: podpisy, DN (issuer → subject), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
- Kontrola hostname: dNSName + iPAddress (RFC 6125).
- Verifikace OCSP odpovědí (RFC 6960).
4.Transport:
- TlsTransport — rozhraní.
- InMemoryTlsTransport — pro testování a jednou procesní scénáře (in-memory fronta).
- SocketTlsTransport — blokující I/O přes java.net.Socket.
- ChannelTlsTransport — transport založený na SocketChannel NIO (blokující režim, přerušitelné).
- Krokový handshake:
- TlsHandshakeEngine — stavový stroj pro handshake (odpojený od I/O). Používá TlsSession jako orchestrátor; je vhodný pro integraci s JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — přetížení ByteBuffer pro zero-copy integraci s NIO. Načítání klíčů:
- Pkcs12Loader — čtení PFX (PKCS#12) s PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Ukončení relace:
- close_notify — správné uzavření podle protokolu.
- Vymazání klíčového materiálu při uzavření nebo chybě.
- Zpracování alertu: fatal — okamžité uzavření + vymazání.
- Bezpečnost implementace:
- Constant-time porovnání pro verify_data a PSK binders (ochrana proti timing attacks)
- Zničení klíčového materiálu: destroy() na všech objektech s klíči (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), při uzavření, fatálním upozornění, výjimce v handshake
- Ochrana proti DoS: limity na délku řetězce certifikátů (10), post-handshake zprávy, velikost záznamů.
- MGM nonce: MSB prvního bytu je vymazán pro ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE soukromý klíč a transkript handshake jsou zničeny po dokončení handshake.
- HMAC klíčový materiál je vymazán po použití (HkdfStreebog, KdfGostR3411_2012_256).
- Omezení:
- Pouze resumption PSK (0-RTT a external PSK nejsou podporovány).
- Pouze psk_dhe_ke (čistý PSK bez ECDHE není podporován).
- HelloRetryRequest (RFC 8446 §4.1.4) není podporováno — používá se pouze jedna pojmenovaná skupina (GC256A jako výchozí).
- Pouze GOST (cipher suites non-GOST nejsou podporovány).
- Testování:
- Knihovna obsahuje Known Answer Tests z RFC 9367 Příloha A.1 (varianty L a S) — kompletní key schedule, TLSTREE, AEAD, ECDHE. A prochází kompletní spektrem KAT testů.
- 4 integrační testy (self-interop) přes skutečné TCP sokety.
- Fuzzing testy pro parzery: TlsMessageParser (8 metod), TlsDerParser (3 metody), TlsOcspVerifier (1 metoda), pro zajištění bezpečnosti a snížení vektorů útoků na parzery.
- Architektonická řešení:
- TlsHandshakeEngine — stavový stroj, odpojený od I/O (pro budoucí modul JSSE).
- ByteBuffer přetížení TlsRecord.protect/unprotect pro NIO/JSSE.
- TLSTREE cache (TlsTreeCache) — přepočet pouze změněných úrovní (RFC 9367).
- InMemoryTlsTransport.Pair — obousměrný pár pro testy a jednoprocesní interakci.
Knihovna je distribuována pod svobodnou licencí.
Zdroj: linux.org.ru
