La prima versione dell'implementazione del protocollo TLS 1.3 su Java con algoritmi GOST in conformità con l'RFC 9367

Modulo crypto-gost-tls13 contiene l'implementazione TLS 1.3 (RFC 8446 + RFC 9367) con crittografia GOST. Questa versione è una release iniziale della libreria ed è pronta per uso interno.

Una caratteristica della libreria è l'implementazione in puro Java. Tutte le operazioni crittografiche vengono eseguite con i mezzi integrati della libreria — senza dipendenze esterne.

È una delle prime implementazioni aperte di TLS 1.3 con GOST su Java, quindi il test di inter-operabilità è stato eseguito con un minimo di disponibilità.

Di seguito sono presentate le funzionalità della libreria.

  1. Protocolli:
  • Handshake: completo (client/server), abbreviato (PSK), mutuo (mTLS).
  • ALPN (RFC 7301) — negoziazione del protocollo applicativo (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) — indicazione del nome server per implementazioni multi-tenant.
  • KeyUpdate (RFC 8446 §4.6.3) — aggiornamento delle chiavi di crittografia del traffico.
  • Ciphersuite: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
  • Re-keying TLSTREE per ogni record TLS — cambiamento della chiave di crittografia per ogni record TLS.
  • Frammentazione e assemblaggio di handshake e record (RFC 8446 §5.1).
  • Ripristino della sessione: PSK tramite NewSessionTicket (PskStore in-memory, uso singolo).
  • OCSP stapling: server allega la risposta OCSP al certificato.
  • Messaggi post-handshake: NewSessionTicket (memorizzazione per PSK).
  1. Crittografia:
  • Key schedule: HKDF-Streebog (RFC 5869) secondo lo schema TLS 1.3 (RFC 8446 §7.1).
  • Protezione dei record: MGM-AEAD (Kuznyechik) con nonce secondo RFC 8446 §5.3.
  • Le chiavi effimere vengono distrutte dopo l'uso.
  1. Certificati:
  • Parsing X.509v3 (GOST R 34.10-2012) — parser DER integrato.
  • Validazione della catena: firme, DN (emittente → soggetto), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
  • Verifica del nome host: dNSName + iPAddress (RFC 6125).
  • Verifica delle risposte OCSP (RFC 6960).

4.Trasporto:

  • TlsTransport — interfaccia.
  • InMemoryTlsTransport — per test e scenari a processo singolo (coda in memoria).
  • SocketTlsTransport — I/O bloccante tramite java.net.Socket.
  • ChannelTlsTransport — trasporto basato su NIO SocketChannel (modalità bloccante, interruttibile).
  1. Handshake step-by-step:
  • TlsHandshakeEngine — macchina a stati per handshake (separata dall'I/O). Utilizza TlsSession come orchestratore; adatta per l'integrazione con JSSE (SSLEngine).
  1. ByteBuffer API:
  • TlsRecord.protect/unprotect — sovraccarichi ByteBuffer per integrazione zero-copy con NIO. Caricamento chiavi:
  • Pkcs12Loader — lettura PFX (PKCS#12) con PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Chiusura di sessione:
  • close_notify — chiusura corretta secondo il protocollo.
  • Distruzione del materiale crittografico alla chiusura o in caso di errore.
  • Gestione degli alert: fatal — chiusura immediata + distruzione.
  1. Sicurezza dell'implementazione:
  • Confronti in tempo costante per verify_data e PSK binders (protezione da attacchi di timing)
  • Sovrascrittura del materiale chiave: destroy() su tutti gli oggetti con chiavi (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), durante close, alert fatale, eccezione in handshake
  • Protezione contro DoS: limiti sulla lunghezza della catena di certificati (10), messaggi post-handshake, dimensione delle registrazioni.
  • Nonce MGM: l'MSB del primo byte è azzerato per ICN (RFC 9058 §3, RFC 9367 §3.3).
  • La chiave privata ECDHE e il transcritto dell'handshake vengono distrutti al termine dell'handshake.
  • Il materiale chiave HMAC viene sovrascritto dopo l'uso (HkdfStreebog, KdfGostR3411_2012_256).
  1. Limitazioni:
  • Solo resumption PSK (0-RTT e external PSK non supportati).
  • Solo psk_dhe_ke (pure PSK senza ECDHE non supportata).
  • HelloRetryRequest (RFC 8446 §4.1.4) non supportato — viene utilizzato solo un gruppo denominato (GC256A per default).
  • Solo GOST (le suite di cifratura non-GOST non sono supportate).
  1. Testing:
  • La libreria contiene Known Answer Tests dall'Appendice A.1 di RFC 9367 (varianti L e S) — intero key schedule, TLSTREE, AEAD, ECDHE. E supera l'intera gamma di test KAT.
  • 4 test di integrazione (self-interop) tramite socket TCP reali.
  • Test di fuzzing per i parser: TlsMessageParser (8 metodi), TlsDerParser (3 metodi), TlsOcspVerifier (1 metodo), per garantire la sicurezza e ridurre i vettori di attacco sui parser.
  1. Soluzioni architetturali:
  • TlsHandshakeEngine — macchina a stati, scollegata da I/O (per il futuro modulo JSSE).
  • Sovraccarichi ByteBuffer TlsRecord.protect/unprotect per NIO/JSSE.
  • Cache TLSTREE (TlsTreeCache) — ricompilazione solo dei livelli modificati (RFC 9367).
  • InMemoryTlsTransport.Pair — coppia bidirezionale per test e interazione in un solo processo.

La libreria è distribuita sotto licenza libera.

Fonte: linux.org.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster