Modul krypto-gost-tls13 indeholder implementeringen TLS 1.3 (RFC 8446 + RFC 9367) med GOST-kryptografi. Denne udgivelse er den første version af biblioteket og er klar til intern brug.
En unik egenskab ved biblioteket er dets rene Java-implementering. Alle kryptografiske operationer udføres ved hjælp af bibliotekets indbyggede værktøjer uden eksterne afhængigheder.
Dette er en af de første open source-implementeringer af TLS 1.3 med GOST i Java, så interop-testning er blevet udført i det mindst mulige omfang.
Nedenfor er bibliotekets muligheder.
- Protokoller:
- Handshake: fuldt (klient/server), kort (PSK), gensidigt (mTLS).
- ALPN (RFC 7301) - Protokolforhandling på applikationslag (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Navneangivelse server til implementeringer med flere lejere.
- KeyUpdate (RFC 8446 §4.6.3) – opdatering af trafikkrypteringsnøgler.
- Cipher-suiter: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- TLSTREE-omkodning per post — ændring af krypteringsnøglen for hver TLS-post.
- Fragmentering og gensamling af handshakes og optegnelser (RFC 8446 §5.1).
- Genoptagelse af session: PSK via NewSessionTicket (PskStore i hukommelsen, til engangsbrug).
- OCSP-hæftning: server tilføjer OCSP-svaret til certifikatet.
- Beskeder efter handshake: NewSessionTicket (gem til PSK).
- Kryptografi:
- Nøgleplan: HKDF-Streebog (RFC 5869) over TLS 1.3 (RFC 8446 §7.1).
- Beskyttelse af arkiver: MGM-AEAD (Kuznyechik) med nonce i henhold til RFC 8446 §5.3.
- Kortvarige nøgler slettes efter brug.
- Certifikater:
- X.509v3-parsing (GOST R 34.10-2012) — indbygget DER-parser.
- Valideringskæde: signaturer, DN (udsteder → emne), grundlæggende begrænsninger, nøglebrug, udvidet nøgle * brug (serverAuth / clientAuth), pathLen.
- Kontrol af værtsnavn: dNSName + iPAddress (RFC 6125).
- Verifikation af OCSP-svar (RFC 6960).
4.transport:
- TlsTransport - grænseflade.
- InMemoryTlsTransport - til test og scenarier med én proces (kø i hukommelsen).
- SocketTlsTransport — blokerer I/O over java.net.Socket.
- ChannelTlsTransport - NIO SocketKanalbaseret transport (blokeringstilstand, afbrydelig).
- Trin-for-trin håndtryk:
- TlsHandshakeEngine er en tilstandsmaskine til handshake (afkoblet fra I/O). Den bruger TlsSession som orkestrator og er egnet til integration med JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — ByteBuffer-overbelastning for nul-kopi-integration med NIO. Indlæser nøgler:
- Pkcs12Loader — læser PFX (PKCS#12) med PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Slut på sessionen:
- close_notify - korrekt lukning i henhold til protokollen.
- Aftørring af nøglemateriale ved lukning eller ved fejl.
- Håndteringsadvarsel: fatal - øjeblikkelig lukning + sletning.
- Implementeringssikkerhed:
- Konstanttidssammenligninger for verify_data og PSK-bindere (beskyttelse mod timingangreb)
- Sletning af nøglemateriale: destroy() på alle objekter med nøgler (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ved lukning, fatal alarm, undtagelse i handshake
- DoS-beskyttelse: begrænsninger på certifikatkædelængde (10), meddelelser efter handshake, poststørrelse.
- MGM nonce: MSB'en for den første byte ryddes for ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE-privatnøglen og handshake-transkriptet destrueres, når handshaket er fuldført.
- HMAC-nøglemateriale slettes efter brug (HkdfStreebog, KdfGostR3411_2012_256).
- begrænsninger:
- Kun genoptagelses-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 navngiven gruppe bruges (GC256A som standard).
- Kun GOST (ikke-GOST-krypteringspakker understøttes ikke).
- Test:
- Biblioteket indeholder Known Answer Tests fra RFC 9367 Appendix A.1 (L- og S-varianter) – det fulde nøgleskema, TLSTREE, AEAD og ECDHE. Det består også hele spektret af KAT-tests.
- 4 integrationstests (selvinteroperabilitet) via rigtige TCP-sockets.
- Fuzz-tests for parsere: TlsMessageParser (8 metoder), TlsDerParser (3 metoder), TlsOcspVerifier (1 metode) for at sikre sikkerhed og reducere angrebsvektoren på parsere.
- Arkitektoniske løsninger:
- TlsHandshakeEngine - tilstandsmaskine afkoblet fra I/O (til fremtidigt JSSE-modul).
- ByteBuffer-overbelastninger af TlsRecord.protect/unprotect for NIO/JSSE.
- TLSTREE-cache (TlsTreeCache) - genberegning af kun ændrede niveauer (RFC 9367).
- InMemoryTlsTransport.Pair er et tovejspar til test og kommunikation mellem enkelte processer.
Biblioteket distribueres under en fri licens.
Kilde: linux.org.ru
