Modul krypto-gost-tls13 innehåller implementeringen TLS 1.3 (RFC 8446 + RFC 9367) med GOST-kryptografi. Denna utgåva är den första versionen av biblioteket och är redo för intern användning.
En unik egenskap hos biblioteket är dess rena Java-implementering. Alla kryptografiska operationer utförs med hjälp av bibliotekets inbyggda verktyg, utan externa beroenden.
Detta är en av de första implementeringarna av TLS 1.3 med öppen källkod och GOST i Java, så interoptestning har utförts i minsta möjliga utsträckning.
Nedan följer bibliotekets möjligheter.
- Protokoll:
- Handskakning: fullständig (klient/server), kort (PSK), ömsesidig (mTLS).
- ALPN (RFC 7301) - Förhandling av applikationslagerprotokoll (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Namnindikering server för distributioner med flera hyresgäster.
- KeyUpdate (RFC 8446 §4.6.3) – uppdatering av trafikkrypteringsnycklar.
- Chiffersviter: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bitars), CryptoPro-B (512-bitars)
- TLSTREE-omnyckling per post — ändrar krypteringsnyckeln för varje TLS-post.
- Fragmentering och återmontering av handskakningar och register (RFC 8446 §5.1).
- Återupptagning av session: PSK via NewSessionTicket (PskStore i minnet, engångsbruk).
- OCSP-häftning: server прикладывает OCSP-ответ к сертификату.
- Meddelanden efter handskakning: NewSessionTicket (spara för PSK).
- Kryptografi:
- Nyckelschema: HKDF-Streebog (RFC 5869) över TLS 1.3 (RFC 8446 §7.1).
- Recordskydd: MGM-AEAD (Kuznyechik) med nonce-skydd enligt RFC 8446 §5.3.
- Tillfälliga nycklar raderas efter användning.
- Certifikat:
- X.509v3-parsning (GOST R 34.10-2012) — inbyggd DER-parser.
- Valideringskedja: signaturer, DN (utfärdare → ämne), grundläggande begränsningar, nyckelanvändning, utökad nyckel*användning (serverAuth / clientAuth), pathLen.
- Värdnamnskontroll: dNSName + iPAdress (RFC 6125).
- Verifiering av OCSP-svar (RFC 6960).
4.transport:
- TlsTransport - gränssnitt.
- InMemoryTlsTransport – för tester och scenarier med en enda process (kö i minnet).
- SocketTlsTransport — blockerar I/O över java.net.Socket.
- ChannelTlsTransport - NIO SocketKanalbaserad transport (blockeringsläge, avbrottsbar).
- Steg-för-steg handslag:
- TlsHandshakeEngine är en tillståndsmaskin för handskakning (frikopplad från I/O). Den använder TlsSession som orkestrator och är lämplig för integration med JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — ByteBuffer-överbelastning för nollkopieringsintegration med NIO. Laddar nycklar:
- Pkcs12Loader — läser PFX (PKCS#12) med PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Slut på sessionen:
- close_notify - korrekt stängning enligt protokollet.
- Avtorkning av nyckelmaterial vid stängning eller vid fel.
- Hanteringsvarning: allvarlig - omedelbar stängning + radering.
- Implementeringssäkerhet:
- Jämförelser i konstant tid för verify_data och PSK-bindare (skydd mot tidsattacker)
- Rensar nyckelmaterial: destroy() på alla objekt med nycklar (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), vid stängning, allvarlig varning, undantag i handskakning
- DoS-skydd: begränsningar för certifikatkedjelängd (10), meddelanden efter handskakning, poststorlek.
- MGM nonce: MSB för den första byten rensas för ICN (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE:s privata nyckel och handskakningstranskription förstörs efter att handskakningen är slutförd.
- HMAC-nyckelmaterial raderas efter användning (HkdfStreebog, KdfGostR3411_2012_256).
- restriktioner:
- Endast återupptagnings-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 namngiven grupp används (GC256A som standard).
- Endast GOST (icke-GOST-chiffreringssviter stöds inte).
- Testning:
- Biblioteket innehåller Known Answer Tests från RFC 9367 Appendix A.1 (L- och S-varianter) – hela nyckelschemat, TLSTREE, AEAD och ECDHE. Det klarar också alla KAT-tester.
- 4 integrationstester (självinteroperabilitet) via riktiga TCP-sockets.
- Fuzz-tester för parsers: TlsMessageParser (8 metoder), TlsDerParser (3 metoder), TlsOcspVerifier (1 metod), för att garantera säkerhet och minska attackvektorn på parsers.
- Arkitektoniska lösningar:
- TlsHandshakeEngine - tillståndsmaskin frikopplad från I/O (för framtida JSSE-modul).
- ByteBuffer-överbelastningar av TlsRecord.protect/unprotect för NIO/JSSE.
- TLSTREE-cache (TlsTreeCache) - omberäkning av endast ändrade nivåer (RFC 9367).
- InMemoryTlsTransport.Pair är ett dubbelriktat par för tester och kommunikation mellan enskilda processer.
Biblioteket distribueras under en fri licens.
Källa: linux.org.ru
