Modulul crypto-gost-tls13 conține o implementare TLS 1.3 (RFC 8446 + RFC 9367) cu criptografie GOST. Această versiune este versiunea inițială a bibliotecii și este pregătită pentru utilizare internă.
Particularitatea bibliotecii este implementarea în Java pură. Toate operațiunile criptografice sunt efectuate cu ajutorul funcționalităților integrate ale bibliotecii — fără dependențe externe.
Aceasta este una dintre primele implementări deschise ale TLS 1.3 cu GOST în Java, așadar testarea de interoperabilitate a fost realizată într-un volum minim accesibil.
Mai jos sunt prezentate capabilitățile bibliotecii.
- Protocole:
- Handshake: complet (client/server), scurtat (PSK), mutual (mTLS).
- ALPN (RFC 7301) — negocierea protocoalelor la nivel aplicativ (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — specificarea numelui server pentru desfășurări multi-tenant.
- KeyUpdate (RFC 8446 §4.6.3) — actualizarea cheilor de criptare a traficului.
- Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Re-keying per-record TLSTREE — schimbarea cheii de criptare pentru fiecare înregistrare TLS.
- Fragmentarea și asamblarea handshake-urilor și înregistrărilor (RFC 8446 §5.1).
- Revenirea sesiunii: PSK prin NewSessionTicket (PskStore in-memory, o utilizare).
- OCSP stapling: serverul atașează răspunsul OCSP la certificat.
- Mesaje post-handshake: NewSessionTicket (salvare pentru PSK).
- Criptografie:
- Key schedule: HKDF-Streebog (RFC 5869) conform schemei TLS 1.3 (RFC 8446 §7.1).
- Protecția înregistrărilor: MGM-AEAD (Kuznyechik) cu nonce conform RFC 8446 §5.3.
- Cheile efemere sunt șterse după utilizare.
- Certificate:
- Parsing X.509v3 (GOST R 34.10-2012) — parser DER încorporat.
- Validarea lanțului: semnături, DN (issuer → subject), Constrângeri de bază, Utilizarea cheii, Utilizarea cheii extinse * (serverAuth / clientAuth), pathLen.
- Verificarea hostname-ului: dNSName + iPAddress (RFC 6125).
- Verificarea răspunsurilor OCSP (RFC 6960).
4.Transport:
- TlsTransport — interfață.
- InMemoryTlsTransport — pentru teste și scenarii monoproces (coadă în memorie).
- SocketTlsTransport — I/O blocant prin java.net.Socket.
- ChannelTlsTransport — transport bazat pe NIO SocketChannel (mod blocant, interuptibil).
- Handshake pas cu pas:
- TlsHandshakeEngine — mașină de stări pentru handshake (decuplată de I/O). Folosește TlsSession ca orchestrator; adecvat pentru integrarea cu JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — suprascriere ByteBuffer pentru integrare zero-copy cu NIO. Încărcarea cheilor:
- Pkcs12Loader — citire PFX (PKCS#12) cu PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Finalizarea sesiunii:
- close_notify — închiderea corectă conform protocolului.
- Ștergerea materialului cheie la închidere sau la eroare.
- Tratarea alertelor: fatal — închidere imediată + ștergere.
- Securitatea implementării:
- Comparații în timp constant pentru verify_data și PSK binders (protecție împotriva atacurilor de timing)
- Ștergerea materialului cheie: destroy() pe toate obiectele cu chei (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), la close, alertă fatală, excepție în handshake
- Protecție împotriva DoS: limite pentru lungimea lanțului de certificate (10), mesaje post-handshake, dimensiunea înregistrărilor.
- Nonce MGM: MSB primului octet este golit pentru ICN (RFC 9058 §3, RFC 9367 §3.3).
- Cheia privată ECDHE și transcriptul handshake sunt distruse după finalizarea handshake-ului.
- Materialul cheie HMAC este șters după utilizare (HkdfStreebog, KdfGostR3411_2012_256).
- Limitări:
- Numai resumption PSK (0-RTT și external PSK nu sunt suportate).
- Numai psk_dhe_ke (pure PSK fără ECDHE nu este suportat).
- HelloRetryRequest (RFC 8446 §4.1.4) nu este suportat — se folosește un singur grup denumit (GC256A ca default).
- Numai GOST (suite de cifrare non-GOST nu sunt suportate).
- Testare:
- Biblioteca conține Known Answer Tests din RFC 9367 Appendix A.1 (variante L și S) — program complet de chei, TLSTREE, AEAD, ECDHE. Și trece printr-un spectru complet de teste KAT.
- 4 teste de integrare (self-interop) prin socket-uri TCP reale.
- Teste de fuzzing pentru parseri: TlsMessageParser (8 metode), TlsDerParser (3 metode), TlsOcspVerifier (1 metodă), pentru asigurarea securității și reducerea vectorilor de atac asupra parserilor.
- Soluții arhitecturale:
- TlsHandshakeEngine — mașină de stat, dezlegată de I/O (pentru viitorul modul JSSE).
- Supraîncărcări ByteBuffer TlsRecord.protect/unprotect pentru NIO/JSSE.
- Cache TLSTREE (TlsTreeCache) — recalcularea doar a nivelurilor modificate (RFC 9367).
- InMemoryTlsTransport.Pair — pereche bidirecțională pentru teste și interacțiune într-un singur proces.
Biblioteca este distribuită sub o licență liberă.
Sursa: linux.org.ru
