Module crypto-gost-tls13 bevat de implementatie TLS 1.3 (RFC 8446 + RFC 9367) met GOST-cryptografie. Deze release is de initiële versie van de bibliotheek en gereed voor intern gebruik.
Een kenmerk van de bibliotheek is de implementatie in pure Java. Alle cryptografische bewerkingen worden uitgevoerd met behulp van de ingebouwde middelen van de bibliotheek — zonder externe afhankelijkheden.
Dit is op zijn manier een van de eerste open implementaties van TLS 1.3 met GOST op Java, daarom is interop-testen in de minimaal beschikbare omvang uitgevoerd.
Hieronder volgen de mogelijkheden van de bibliotheek.
- Protocollen:
- Handshake: volledig (client/server), verkort (PSK), wederzijds (mTLS).
- ALPN (RFC 7301) — akkoord over het applicatielaagprotocol (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — naam opgegeven de server voor multi-tenant implementaties.
- KeyUpdate (RFC 8446 §4.6.3) — het vernieuwen van encryptiesleutels voor verkeer.
- Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying — sleutels voor encryptie worden per TLS-record gewijzigd.
- Fragmentatie en samenstelling van handshakes en records (RFC 8446 §5.1).
- Session resumption: PSK via NewSessionTicket (PskStore in-memory, single-use).
- OCSP stapling: server voegt het OCSP-antwoord toe aan het certificaat.
- Post-handshake berichten: NewSessionTicket (opslag voor PSK).
- Cryptografie:
- Key schedule: HKDF-Streebog (RFC 5869) volgens het TLS 1.3-schema (RFC 8446 §7.1).
- Bescherming van records: MGM-AEAD (Kuznyechik) met nonce volgens RFC 8446 §5.3.
- Ephemerale sleutels worden gewist na gebruik.
- Certificaten:
- Parsing X.509v3 (GOST R 34.10-2012) — ingebouwde DER-parser.
- Validatie van de keten: handtekeningen, DN (issuer → subject), Basisbeperkingen, Sleutelgebruik, Uitgebreid Sleutel gebruik (serverAuth/clientAuth), pathLen.
- Hostname-controle: dNSName + iPAddress (RFC 6125).
- Verificatie van OCSP-antwoorden (RFC 6960).
4.Transport:
- TlsTransport — interface.
- InMemoryTlsTransport — voor tests en single-process scenario's (in-memory wachtrij).
- SocketTlsTransport — blocking I/O via java.net.Socket.
- ChannelTlsTransport — transport op basis van NIO SocketChannel (blocking mode, onderbroken).
- Stapsgewijze handshake:
- TlsHandshakeEngine — toestandsmachine voor handshake (losgekoppeld van I/O). Gebruikt TlsSession als orkestrator; geschikt voor integratie met JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — ByteBuffer-overloads voor zero-copy integratie met NIO. Sleutel laden:
- Pkcs12Loader — lezen van PFX (PKCS#12) met PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Afsluiten van de sessie:
- close_notify — correcte sluiting volgens het protocol.
- Wissen van sleutelmateriaal bij sluiting of fout.
- Verwerking van alert: fatal — onmiddellijke sluiting + wissen.
- Beveiliging van de implementatie:
- Constant-time vergelijking voor verify_data en PSK binders (bescherming tegen timingaanvallen)
- Het wissen van de sleutelmaterialen: destroy() voor alle objecten met sleutels (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) bij close, fatale waarschuwing, uitzondering in handshake.
- Bescherming tegen DoS: limieten voor de lengte van de certificaatketen (10), berichten na de handshake, grootte van records.
- MGM nonce: MSB van de eerste byte wordt gewist voor ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE privé-sleutel en transcript van de handshake worden gewist na voltooiing van de handshake.
- HMAC sleutelmateriaal wordt gewist na gebruik (HkdfStreebog, KdfGostR3411_2012_256).
- Beperkingen:
- Alleen resumption PSK (0-RTT en externe PSK worden niet ondersteund).
- Alleen psk_dhe_ke (pure PSK zonder ECDHE wordt niet ondersteund).
- HelloRetryRequest (RFC 8446 §4.1.4) wordt niet ondersteund - er wordt slechts één named group gebruikt (GC256A standaard).
- Alleen GOST (non-GOST cipher suites worden niet ondersteund).
- Testen:
- De bibliotheek bevat Known Answer Tests uit RFC 9367 Appendix A.1 (L en S varianten) - volledige key schedule, TLSTREE, AEAD, ECDHE. En doorloopt een volledig scala aan KAT-tests.
- 4 integratietests (self-interop) via echte TCP-sockets.
- Fuzzing-tests voor parsers: TlsMessageParser (8 methoden), TlsDerParser (3 methoden), TlsOcspVerifier (1 methode), voor veiligheid en het verminderen van aanvalsvectors op parsers.
- Architectonische oplossingen:
- TlsHandshakeEngine - toestandsmachine, losgekoppeld van I/O (voor toekomstige JSSE-module).
- ByteBuffer-overschrijvingen TlsRecord.protect/unprotect voor NIO/JSSE.
- TLSTREE cache (TlsTreeCache) - herberekening van alleen de gewijzigde niveaus (RFC 9367).
- InMemoryTlsTransport.Pair - bidirectioneel paar voor tests en single-process interactie.
De bibliotheek wordt verspreid onder een vrije licentie.
Bron: linux.org.ru
