Module crypto-ghost-tls13 bevat de implementatie TLS 1.3 (RFC 8446 + RFC 9367) met GOST-cryptografie. Deze release is de eerste versie van de bibliotheek en is klaar voor intern gebruik.
Een uniek kenmerk van de bibliotheek is de implementatie in pure Java. Alle cryptografische bewerkingen worden uitgevoerd met behulp van de ingebouwde tools van de bibliotheek, zonder externe afhankelijkheden.
Dit is een van de eerste open-source implementaties van TLS 1.3 met GOST in Java, dus interoperabiliteitstesten zijn tot het minimum beperkt.
Hieronder vindt u een overzicht van de mogelijkheden van de bibliotheek.
- Protocollen:
- Handshake: volledig (client/server), kort (PSK), wederzijds (mTLS).
- ALPN (RFC 7301) - Protocolonderhandeling op applicatielaagniveau (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Naamindicatie server voor implementaties met meerdere tenants.
- KeyUpdate (RFC 8446 §4.6.3) – het bijwerken van de sleutels voor verkeersversleuteling.
- Cipher-suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- TLSTREE-sleutelhercodering per record — het wijzigen van de versleutelingssleutel voor elk TLS-record.
- Fragmentatie en herassemblage van handdrukken en documenten (RFC 8446 §5.1).
- Sessiehervatting: PSK via NewSessionTicket (PskStore in het geheugen, eenmalig gebruik).
- OCSP-nieten: server Voegt het OCSP-antwoord toe aan het certificaat.
- Berichten na de handdruk: NewSessionTicket (opslaan voor PSK).
- Cryptografie:
- Belangrijkste schema: HKDF-Streebog (RFC 5869) via TLS 1.3 (RFC 8446 §7.1).
- Recordbescherming: MGM-AEAD (Kuznyechik) met nonce volgens RFC 8446 §5.3.
- Tijdelijke sleutels worden na gebruik verwijderd.
- Certificaten:
- X.509v3-parsing (GOST R 34.10-2012) — ingebouwde DER-parser.
- Validatieketen: handtekeningen, DN (uitgever → onderwerp), basisbeperkingen, sleutelgebruik, uitgebreid sleutelgebruik (serverAuth / clientAuth), padlengte.
- Hostnaamcontrole: dNSName + IP-adres (RFC 6125).
- Verificatie van OCSP-reacties (RFC 6960).
4.vervoer:
- TlsTransport - interface.
- InMemoryTlsTransport - voor tests en scenario's met één proces (in-memory wachtrij).
- SocketTlsTransport — blokkerende I/O via java.net.Socket.
- ChannelTlsTransport - NIO SocketChannel-gebaseerd transport (blokkerende modus, onderbreekbaar).
- Stapsgewijze handdruk:
- TlsHandshakeEngine is een toestandsmachine voor de handshake (losgekoppeld van I/O). Het gebruikt TlsSession als orchestrator en is geschikt voor integratie met JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — ByteBuffer-overloads voor zero-copy-integratie met NIO. Sleutels laden:
- Pkcs12Loader — leest PFX (PKCS#12) met PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Einde van de sessie:
- close_notify - correcte sluiting volgens het protocol.
- Het wissen van belangrijke gegevens bij het afsluiten of bij het maken van een fout.
- Foutmelding: fataal - onmiddellijk sluiten en wissen.
- Implementatiebeveiliging:
- Vergelijkingen met constante tijdsduur voor verify_data- en PSK-binders (bescherming tegen timingaanvallen)
- Sleutelmateriaal wissen: destroy() op alle objecten met sleutels (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), bij sluiten, fatale waarschuwing, uitzondering in handshake
- DoS-bescherming: beperkingen op de lengte van de certificaatketen (10), berichten na de handshake en de recordgrootte.
- MGM nonce: De meest significante bit van de eerste byte wordt gewist voor ICN (RFC 9058 §3, RFC 9367 §3.3).
- De privésleutel van ECDHE en het handshake-transcript worden vernietigd nadat de handshake is voltooid.
- HMAC-sleutelmateriaal wordt na gebruik gewist (HkdfStreebog, KdfGostR3411_2012_256).
- beperkingen:
- Alleen PSK voor hervatting (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 benoemde groep gebruikt (standaard GC256A).
- Alleen GOST wordt ondersteund (niet-GOST-coderingssuites worden niet ondersteund).
- testen:
- De bibliotheek bevat bekende antwoordtests uit RFC 9367 Appendix A.1 (L- en S-varianten) – het volledige sleutelschema, TLSTREE, AEAD en ECDHE. Ook voldoet de bibliotheek aan alle KAT-tests.
- 4 integratietests (zelf-interoperabiliteit) via echte TCP-sockets.
- Fuzz-tests voor parsers: TlsMessageParser (8 methoden), TlsDerParser (3 methoden), TlsOcspVerifier (1 methode), om de beveiliging te waarborgen en de aanvalsvector op parsers te verkleinen.
- Architectonische oplossingen:
- TlsHandshakeEngine - toestandsmachine losgekoppeld van I/O (voor toekomstige JSSE-module).
- ByteBuffer-overloads van TlsRecord.protect/unprotect voor NIO/JSSE.
- TLSTREE-cache (TlsTreeCache) - herberekening van alleen gewijzigde niveaus (RFC 9367).
- InMemoryTlsTransport.Pair is een bidirectioneel paar voor tests en communicatie tussen afzonderlijke processen.
De bibliotheek wordt onder een gratis licentie verspreid.
Bron: linux.org.ru
