Modul cripto-gost-tls13 conține implementarea TLS 1.3 (RFC 8446 + RFC 9367) cu criptografie GOST. Această versiune este versiunea inițială a bibliotecii și este gata pentru utilizare internă.
O caracteristică unică a bibliotecii este implementarea sa pură în Java. Toate operațiunile criptografice sunt efectuate folosind instrumentele încorporate ale bibliotecii, fără dependențe externe.
Aceasta este una dintre primele implementări open source ale TLS 1.3 cu GOST în Java, așa că testarea interoperabilității a fost efectuată în măsura minimă posibilă.
Mai jos sunt prezentate capacitățile bibliotecii.
- Protocoale:
- Strângere de mână: completă (client/server), scurtă (PSK), mutuală (mTLS).
- ALPN (RFC 7301) - Negocierea protocolului la nivelul aplicației (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Indicarea numelui Server pentru implementări cu mai mulți chiriași.
- KeyUpdate (RFC 8446 §4.6.3) – actualizarea cheilor de criptare a traficului.
- Suite de criptare: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256 biți), CryptoPro-B (512 biți)
- Reintroducerea cheii TLSTREE per înregistrare — modificarea cheii de criptare pentru fiecare înregistrare TLS.
- Fragmentarea și reasamblarea strângerilor de mână și a înregistrărilor (RFC 8446 §5.1).
- Reluarea sesiunii: PSK prin NewSessionTicket (PskStore în memorie, de unică folosință).
- Capsare OCSP: serverului прикладывает OCSP-ответ к сертификату.
- Mesaje post-handshake: NewSessionTicket (salvat pentru PSK).
- Criptografie:
- Programare cheie: HKDF-Streebog (RFC 5869) peste 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:
- Analiză X.509v3 (GOST R 34.10-2012) — parser DER încorporat.
- Lanț de validare: semnături, DN (emitent → subiect), Constrângeri de bază, Utilizarea cheii, Utilizarea cheii extinse * (serverAuth / clientAuth), pathLen.
- Verificare nume gazdă: dNSName + iPAddress (RFC 6125).
- Verificarea răspunsurilor OCSP (RFC 6960).
4.Transport:
- TlsTransport - interfață.
- InMemoryTlsTransport - pentru teste și scenarii cu un singur proces (coadă în memorie).
- SocketTlsTransport — blocarea I/O prin java.net.Socket.
- ChannelTlsTransport - Transport bazat pe NIO SocketChannel (mod de blocare, întreruptibil).
- Strângere de mână pas cu pas:
- TlsHandshakeEngine este o mașină de stare pentru handshake (decuplată de I/O). Folosește TlsSession ca orchestrator și este potrivită pentru integrarea cu JSSE (SSLEngine).
- API-ul ByteBuffer:
- TlsRecord.protect/unprotect — Supraîncărcări ByteBuffer pentru integrare zero-copy cu NIO. Se încarcă cheile:
- Pkcs12Loader — citire PFX (PKCS#12) cu PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Sfârșitul sesiunii:
- close_notify - închidere corectă conform protocolului.
- Ștergerea materialului cheii la închidere sau la efectuarea unei erori.
- Alertă de manipulare: fatală - închidere imediată + ștergere.
- Securitatea implementării:
- Comparații în timp constant pentru binderii verify_data și PSK (protecție împotriva atacurilor de temporizare)
- Ștergerea materialului cheii: destroy() pe toate obiectele cu chei (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), la închidere, alertă fatală, excepție în handshake
- Protecție DoS: limite privind lungimea lanțului de certificate (10), mesajele post-handshake, dimensiunea înregistrării.
- Nonce MGM: MSB-ul primului octet este șters pentru ICN (RFC 9058 §3, RFC 9367 §3.3).
- Cheia privată ECDHE și transcrierea handshake-ului sunt distruse după finalizarea handshake-ului.
- Materialul cheii HMAC este șters după utilizare (HkdfStreebog, KdfGostR3411_2012_256).
- restricţii:
- Numai PSK de reluare (0-RTT și PSK extern nu sunt acceptate).
- Doar psk_dhe_ke (PSK pur fără ECDHE nu este acceptat).
- Cererea HelloRetryRequest (RFC 8446 §4.1.4) nu este acceptată - se folosește un singur grup denumit (GC256A în mod implicit).
- Numai GOST (suitele de cifrare non-GOST nu sunt acceptate).
- Testare:
- Biblioteca conține teste cu răspunsuri cunoscute din RFC 9367 Anexa A.1 (variantele L și S) - lista completă de chei, TLSTREE, AEAD și ECDHE. De asemenea, trece întreaga gamă de teste KAT.
- 4 teste de integrare (auto-interoperabilitate) prin socket-uri TCP reale.
- Teste fuzz pentru parsere: TlsMessageParser (8 metode), TlsDerParser (3 metode), TlsOcspVerifier (1 metodă), pentru a asigura securitatea și a reduce vectorul de atac asupra parserelor.
- Soluții arhitecturale:
- TlsHandshakeEngine - mașină de stare decuplată de I/O (pentru viitorul modul JSSE).
- Supraîncărcări ByteBuffer pentru TlsRecord.protect/unprotect pentru NIO/JSSE.
- Memoria cache TLSTREE (TlsTreeCache) - recalcularea doar a nivelurilor modificate (RFC 9367).
- InMemoryTlsTransport.Pair este o pereche bidirecțională pentru teste și comunicare între procese individuale.
Biblioteca este distribuită sub o licență gratuită.
Sursa: linux.org.ru
