Prima versiune a implementării protocolului TLS 1.3 în Java cu algoritmi GOST conform RFC 9367

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.

  1. 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).
  1. 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.
  1. 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).
  1. 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).
  1. 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.
  1. Finalizarea sesiunii:
  • close_notify — închiderea corectă conform protocolului.
  • Ștergerea materialului cheie la închidere sau la eroare.
  • Tratarea alertelor: fatal — închidere imediată + ștergere.
  1. 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).
  1. 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).
  1. 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.
  1. 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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster