Modul crypto-gost-tls13 obsahuje implementaci TLS 1.3 (RFC 8446 + RFC 9367) s kryptografií GOST. Tato verze je počáteční verzí knihovny a je připravena k internímu použití.
Unikátní vlastností knihovny je její čistá implementace v Javě. Všechny kryptografické operace se provádějí pomocí vestavěných nástrojů knihovny, bez jakýchkoli externích závislostí.
Toto je jedna z prvních open source implementací TLS 1.3 s GOST v Javě, takže interop testování bylo provedeno v minimálním možném rozsahu.
Níže jsou uvedeny možnosti knihovny.
- Protokoly:
- Handshake: plný (klient/server), krátký (PSK), vzájemný (mTLS).
- ALPN (RFC 7301) - Vyjednávání protokolu aplikační vrstvy (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Indikace názvu server pro nasazení s více nájemci.
- KeyUpdate (RFC 8446 §4.6.3) – aktualizace šifrovacích klíčů provozu.
- Šifrovací sady: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256bitový), CryptoPro-B (512bitový)
- Překlíčování TLSTREE pro každý záznam – změna šifrovacího klíče pro každý záznam TLS.
- Fragmentace a opětovné sestavení handshakes a záznamů (RFC 8446 §5.1).
- Obnovení relace: PSK přes NewSessionTicket (PskStore v paměti, jednorázové použití).
- Sešívání OCSP: serveru připojí odpověď OCSP k certifikátu.
- Zprávy po navázání spojení: NewSessionTicket (s výjimkou PSK).
- Kryptografie:
- Klíčový harmonogram: HKDF-Streebog (RFC 5869) přes TLS 1.3 (RFC 8446 §7.1).
- Ochrana záznamu: MGM-AEAD (Kuznyechik) s nonce dle RFC 8446 §5.3.
- Dočasné klíče se po použití vymažou.
- Certifikáty:
- Syntaktická analýza X.509v3 (GOST R 34.10-2012) — vestavěný analyzátor DER.
- Ověřovací řetězec: podpisy, DN (vydavatel → subjekt), základní omezení, použití klíče, rozšířené použití klíče (serverAuth / clientAuth), délka cesty.
- Kontrola názvu hostitele: dNSName + iPAddress (RFC 6125).
- Ověřování odpovědí OCSP (RFC 6960).
4.Doprava:
- TlsTransport - rozhraní.
- InMemoryTlsTransport – pro testy a scénáře s jedním procesem (fronta v paměti).
- SocketTlsTransport — blokování I/O přes java.net.Socket.
- ChannelTlsTransport – přenos založený na NIO SocketChannel (blokovací režim, přerušitelný).
- Postupné podání ruky:
- TlsHandshakeEngine je stavový automat pro handshake (oddělený od I/O). Používá TlsSession jako orchestrátor a je vhodný pro integraci s JSSE (SSLEngine).
- Rozhraní API pro ByteBuffer:
- TlsRecord.protect/unprotect — Přetížení ByteBufferu pro integraci s nulovou kopií pomocí NIO. Načítání klíčů:
- Pkcs12Loader — čtení PFX (PKCS#12) s PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Konec sezení:
- close_notify - správné zavření dle protokolu.
- Otření materiálu klíče při zavírání nebo chybě.
- Způsob manipulace: fatální - okamžité zavření + smazání.
- Zabezpečení implementace:
- Porovnání v konstantním čase pro bindery verify_data a PSK (ochrana proti útokům na časování)
- Mazání materiálu klíče: destroy() na všech objektech s klíči (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), při zavření, fatálním poplachu, výjimce při handshake
- Ochrana proti útokům DoS: omezení délky řetězce certifikátů (10), zprávy po navázání kontaktu (po handshake), velikost záznamu.
- MGM nonce: MSB prvního bajtu je vymazán pro ICN (RFC 9058 §3, RFC 9367 §3.3).
- Soukromý klíč ECDHE a přepis handshake jsou po dokončení handshake zničeny.
- Materiál klíče HMAC se po použití vymaže (HkdfStreebog, KdfGostR3411_2012_256).
- Omezení:
- Pouze obnovení PSK (0-RTT a externí PSK nejsou podporovány).
- Pouze psk_dhe_ke (čistý PSK bez ECDHE není podporován).
- HelloRetryRequest (RFC 8446 §4.1.4) není podporován - používá se pouze jedna pojmenovaná skupina (standardně GC256A).
- Pouze GOST (šifrovací sady jiné než GOST nejsou podporovány).
- Testování:
- Knihovna obsahuje testy se známými odpověďmi z RFC 9367, dodatek A.1 (varianty L a S) – kompletní klíčový plán, TLSTREE, AEAD a ECDHE. Také splňuje všechny požadavky na testy KAT.
- 4 integrační testy (self-interop) přes reálné TCP sockety.
- Fuzz testy pro parsery: TlsMessageParser (8 metod), TlsDerParser (3 metody), TlsOcspVerifier (1 metoda) pro zajištění bezpečnosti a snížení vektoru útoku na parsery.
- Architektonická řešení:
- TlsHandshakeEngine - stavový automat oddělený od I/O (pro budoucí JSSE modul).
- Přetížení ByteBuffer funkcí TlsRecord.protect/unprotect pro NIO/JSSE.
- TLSTREE cache (TlsTreeCache) - přepočet pouze změněných úrovní (RFC 9367).
- InMemoryTlsTransport.Pair je obousměrný pár pro testy a komunikaci mezi jednotlivými procesy.
Knihovna je šířena pod volnou licencí.
Zdroj: linux.org.ru
