Module crypto-gost-tls13 indeholder implementeringen af TLS 1.3 (RFC 8446 + RFC 9367) med GOST-kryptografi. Denne udgave er den første version af biblioteket og klar til intern brug.
Et særligt træk ved biblioteket er implementeringen i ren Java. Alle kryptografiske operationer udføres ved hjælp af bibliotekets indbyggede funktioner - uden eksterne afhængigheder.
Dette er i sin slags en af de første åbne implementeringer af TLS 1.3 med GOST på Java, derfor er interop-testning udført i minimum af omfang.
Nedenfor er mulighederne for biblioteket.
- Protokoller:
- Handshake: fuld (client/server), forkortet (PSK), gensidig (mTLS).
- ALPN (RFC 7301) - forhandling af applikationsprotokol (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - angivelse af navn server til multi-tenant deployment.
- KeyUpdate (RFC 8446 §4.6.3) - opdatering af krypteringsnøgler for trafik.
- Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-record TLSTREE re-keying - ændring af krypteringsnøglen for hver TLS-post.
- Fragmentering og samling af håndtryk og poster (RFC 8446 §5.1).
- Session genoptagelse: PSK via NewSessionTicket (PskStore in-memory, one-time use).
- OCSP stapling: server vedhæfter OCSP-svar til certifikatet.
- Post-handshake beskeder: NewSessionTicket (gem til PSK).
- Kryptografi:
- Nøgleplan: HKDF-Streebog (RFC 5869) i henhold til TLS 1.3 (RFC 8446 §7.1).
- Beskyttelse af poster: MGM-AEAD (Kuznyechik) med nonce i henhold til RFC 8446 §5.3.
- Ephemerale nøgler slettes efter brug.
- Certifikater:
- Parsing af X.509v3 (GOST R 34.10-2012) - indbygget DER-parser.
- Validering af kæden: signaturer, DN (issuer → subject), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
- Hostname verifikation: dNSName + iPAddress (RFC 6125).
- Verifikation af OCSP-svar (RFC 6960).
4.Transport:
- TlsTransport - grænseflade.
- InMemoryTlsTransport - til test og enkeltproces-scenarier (in-memory kø).
- SocketTlsTransport - blocking I/O gennem java.net.Socket.
- ChannelTlsTransport - NIO SocketChannel-baseret transport (blocking mode, afbrydelig).
- Trinvist håndtryk:
- TlsHandshakeEngine - tilstandsmaskine til håndtryk (løst fra I/O). Bruges TlsSession som orkestrator; egnet til integration med JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect - ByteBuffer-overbelastninger til zero-copy integration med NIO. Indlæsning af nøgler:
- Pkcs12Loader - læsning af PFX (PKCS#12) med PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Afslutning af session:
- close_notify - korrekt lukning i henhold til protokollen.
- Sletning af nøglemateriale ved lukning eller fejl.
- Håndtering af alert: fatal - øjeblikkelig lukning + sletning.
- Sikkerhed ved implementering:
- Constant-time sammenligning for verify_data og PSK binders (beskyttelse mod timing angreb)
- Sletning af nøglemateriale: destroy() på alle objekter med nøgler (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ved close, fatal alert, exception i handshake
- Beskyttelse mod DoS: grænser for længden af certifikatkæder (10), post-handshake beskeder, størrelse på poster.
- MGM nonce: MSB af det første byte nulstilles for ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE-private nøgle og handshake-transkript slettes efter afslutning af handshake.
- HMAC-nøglemateriale slettes efter brug (HkdfStreebog, KdfGostR3411_2012_256).
- Begrænsninger:
- Kun resumption PSK (0-RTT og ekstern PSK understøttes ikke).
- Kun psk_dhe_ke (ren PSK uden ECDHE understøttes ikke).
- HelloRetryRequest (RFC 8446 §4.1.4) understøttes ikke — kun én named group bruges (GC256A som standard).
- Kun GOST (non-GOST cipher suites understøttes ikke).
- Testning:
- Biblioteket indeholder kendte svar tests fra RFC 9367 Appendix A.1 (L og S varianter) — fuld nøgleplan, TLSTREE, AEAD, ECDHE. Og gennemgår et fuldt spektrum af KAT tests.
- 4 integrations tests (self-interop) gennem virkelige TCP-sokker.
- Fuzzing-tester for parsere: TlsMessageParser (8 metoder), TlsDerParser (3 metoder), TlsOcspVerifier (1 metode), for at sikre sikkerhed og reducere angrebsvektoren på parsere.
- Arkitektoniske løsninger:
- TlsHandshakeEngine — tilstands-maskine, adskilt fra I/O (til fremtidig JSSE modul).
- ByteBuffer-overbelastninger TlsRecord.protect/unprotect for NIO/JSSE.
- TLSTREE-cache (TlsTreeCache) — genberegning af kun de ændrede niveauer (RFC 9367).
- InMemoryTlsTransport.Pair — tovejspair til tests og enkeltprocesinteraktion.
Biblioteket distribueres under en fri licens.
Kilde: linux.org.ru
