Modul crypto-gost-tls13 innehÄller implementering av TLS 1.3 (RFC 8446 + RFC 9367) med GOST-kryptografi. Denna version Àr en initial version av biblioteket och redo för internt bruk.
Ett kĂ€nnetecken för biblioteket Ă€r att det Ă€r implementerat i ren Java. Alla kryptografiska operationer utförs med hjĂ€lp av bibliotekets inbyggda medel â utan externa beroenden.
Detta Àr i ett avseende en av de första öppna implementeringarna av TLS 1.3 med GOST pÄ Java, sÄ interop-testning har utförts i minimiomfattning.
Nedan följer funktionerna i biblioteket.
- Protokoll:
- Handshake: komplett (client/server), förkortad (PSK), ömsesidig (mTLS).
- ALPN (RFC 7301) â förhandling av applikationsprotokoll (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) â namn angivelse servern för multi-tenant distributioner.
- KeyUpdate (RFC 8446 §4.6.3) â uppdatering av krypteringsnycklar för trafik.
- Cipher-sviter: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Per-post TLSTREE omnyckling â Ă€ndring av krypteringsnyckeln för varje TLS-post.
- Fragmentering och sammanstÀllning av handskakningar och poster (RFC 8446 §5.1).
- SessionÄterupplivning: PSK via NewSessionTicket (PskStore i minnet, engÄngsbruk).
- OCSP stapling: server bifogar OCSP-svaret till certifikatet.
- Post-handshake-meddelanden: NewSessionTicket (lagring för PSK).
- Kryptografi:
- Nyckelschema: HKDF-Streebog (RFC 5869) enligt TLS 1.3-schema (RFC 8446 §7.1).
- Skydd av poster: MGM-AEAD (Kuznyechik) med nonce enligt RFC 8446 §5.3.
- Effemeriska nycklar raderas efter anvÀndning.
- Certifikat:
- Parsing av X.509v3 (GOST R 34.10-2012) â inbyggd DER-parser.
- Validering av kedja: signaturer, DN (utfĂ€rdare â Ă€mne), GrundlĂ€ggande begrĂ€nsningar, NyckelanvĂ€ndning, Utökad nyckelanvĂ€ndning (serverAuth / clientAuth), pathLen.
- Hostname-kontroll: dNSName + iPAddress (RFC 6125).
- Verifikation av OCSP-svar (RFC 6960).
4.Transport:
- TlsTransport â grĂ€nssnitt.
- InMemoryTlsTransport â för tester och enprocess-scenarier (i-minnet kö).
- SocketTlsTransport â blocking I/O via java.net.Socket.
- ChannelTlsTransport â NIO SocketChannel-baserad transport (blocking mode, avbrutbar).
- Steg-för-steg handskakning:
- TlsHandshakeEngine â tillstĂ„ndsmaskin för handskakning (frikopplad frĂ„n I/O). AnvĂ€nder TlsSession som dirigent; lĂ€mplig för integration med JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect â ByteBuffer-överskott för zero-copy integration med NIO. Laddning av nycklar:
- Pkcs12Loader â lĂ€sning av PFX (PKCS#12) med PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Avslutande av session:
- close_notify â korrekt stĂ€ngning enligt protokollet.
- Radering av nyckelmaterial vid stÀngning eller fel.
- Bearbetning av alert: fatal â omedelbar stĂ€ngning + radering.
- SĂ€kerhet i implementationen:
- Konstant-tid jÀmförelser för verify_data och PSK binders (skydd mot timing-attacker)
- Ăverskrivning av nyckelmateriel: destroy() pĂ„ alla objekt med nycklar (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), vid close, fatal alert, exception i handshake
- Skydd mot DoS: grÀnser för lÀngd pÄ certifikatkedjor (10), post-handshake-meddelanden, storlek pÄ poster.
- MGM nonce: MSB för första byte rensas för ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE privat nyckel och handshake-transkript raderas efter att handshake avslutas.
- HMAC nyckelmateriel raderas efter anvÀndning (HkdfStreebog, KdfGostR3411_2012_256).
- BegrÀnsningar:
- Endast resumption PSK (0-RTT och extern PSK stöds inte).
- Endast psk_dhe_ke (ren PSK utan ECDHE stöds inte).
- HelloRetryRequest (RFC 8446 §4.1.4) stöds inte â endast en named group anvĂ€nds (GC256A som standard).
- Endast GOST (icke-GOST cipher suites stöds inte).
- Testning:
- Biblioteket innehĂ„ller kĂ€nda svarstester frĂ„n RFC 9367 Appendix A.1 (L och S varianter) â fullstĂ€ndig key schedule, TLSTREE, AEAD, ECDHE. Och genomgĂ„r hela spektrumet av KAT tester.
- 4 integrations tester (self-interop) via riktiga TCP-sockets.
- Fuzzing-tester för parsers: TlsMessageParser (8 metoder), TlsDerParser (3 metoder), TlsOcspVerifier (1 metod), för att sÀkerstÀlla sÀkerhet och minska attackvektorer pÄ parsers.
- Arkitektoniska lösningar:
- TlsHandshakeEngine â tillstĂ„ndsmaskin, löst kopplad frĂ„n I/O (för framtida JSSE-modul).
- ByteBuffer-överskridningar TlsRecord.protect/unprotect för NIO/JSSE.
- TLSTREE-cache (TlsTreeCache) â omberĂ€kning av endast Ă€ndrade nivĂ„er (RFC 9367).
- InMemoryTlsTransport.Pair â tvĂ„vĂ€gspar för tester och enkelprocessinteraktion.
Biblioteket distribueras under en fri licens.
KĂ€lla: linux.org.ru
