Il primo rilascio dell'implementazione del protocollo TLS 1.3 in Java con algoritmi GOST secondo RFC 9367

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

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

Questo è in un certo senso uno dei primi esempi di implementazione open source di TLS 1.3 con GOST in Java, quindi i test di interop sono stati eseguiti in una misura minima.

Di seguito sono riportate le funzionalità della libreria.

  1. Protocolli:
  • Handshake: completo (client/server), ridotto (PSK), mutuo (mTLS).
  • ALPN (RFC 7301) - negoziazione del protocollo di livello 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.
  • Suite di cifratura: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256 bit), CryptoPro-B (512 bit)
  • TLSTREE re-keying per ogni record - cambio della chiave di crittografia per ogni record TLS.
  • Frammentazione e assemblaggio degli handshake e dei record (RFC 8446 §5.1).
  • Ripristino della sessione: PSK tramite NewSessionTicket (PskStore in-memory, uso singolo).
  • OCSP stapling: un server allega la risposta OCSP al certificato.
  • Messaggi post-handshake: NewSessionTicket (salvataggio per PSK).
  1. Criptografia:
  • Piano chiave: HKDF-Streebog (RFC 5869) secondo lo schema TLS 1.3 (RFC 8446 §7.1).
  • Protezione dei record: MGM-AEAD (Kuznyechik) con nonce come da RFC 8446 §5.3.
  • Le chiavi effimere vengono cancellate dopo l'uso.
  1. Certificazioni:
  • Parsing X.509v3 (GOST R 34.10-2012) — parser DER integrato.
  • Validazione della catena: firme, DN (issuer → subject), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
  • Controllo dell'hostname: dNSName + iPAddress (RFC 6125).
  • Verifica delle risposte OCSP (RFC 6960).

4.Trasporto:

  • TlsTransport — interfaccia.
  • InMemoryTlsTransport — per test e scenari mono-processo (coda in-memory).
  • SocketTlsTransport — I/O bloccante tramite java.net.Socket.
  • ChannelTlsTransport — trasporto basato su NIO SocketChannel (modalità bloccante, interrompibile).
  1. Handshake passo dopo passo:
  • TlsHandshakeEngine — macchina a stati per l'handshake (indipendente da I/O). Usa TlsSession come orchestratore; adatto per l'integrazione con JSSE (SSLEngine).
  1. API ByteBuffer:
  • TlsRecord.protect/unprotect — sovraccarichi ByteBuffer per integrazione zero-copy con NIO. Caricamento delle chiavi:
  • Pkcs12Loader — lettura PFX (PKCS#12) con PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Chiusura della sessione:
  • close_notify — chiusura corretta secondo il protocollo.
  • Cancellazione del materiale chiave alla chiusura o in caso di errore.
  • Gestione degli alert: fatal — chiusura immediata + cancellazione.
  1. Sicurezza dell'implementazione:
  • Confronto a tempo costante per verify_data e binders PSK (protezione contro attacchi di timing)
  • Stripping del materiale chiave: destroy() su tutti gli oggetti con chiavi (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) durante la chiusura, alert fatale, eccezione nella handshake
  • Protezione contro DoS: limiti sulla lunghezza della catena di certificati (10), messaggi post-handshake, dimensione delle registrazioni.
  • MGM nonce: il MSB del primo byte viene azzerato per ICN (RFC 9058 §3, RFC 9367 §3.3).
  • La chiave privata ECDHE e il transcript della handshake vengono distrutti dopo il completamento della handshake.
  • Il materiale chiave HMAC viene azzerato dopo l'uso (HkdfStreebog, KdfGostR3411_2012_256).
  1. Limitazioni:
  • Solo resumption PSK (0-RTT ed external PSK non supportati).
  • Solo psk_dhe_ke (pure PSK senza ECDHE non supportato).
  • HelloRetryRequest (RFC 8446 §4.1.4) non supportato — viene utilizzato solo un gruppo nominato (GC256A per impostazione predefinita).
  • Solo GOST (non-GOST cipher suites non supportati).
  1. Testing:
  • La libreria contiene Known Answer Tests da RFC 9367 Appendix A.1 (varianti L e S) — pianificazione completa delle chiavi, TLSTREE, AEAD, ECDHE. E supera l'intero spettro dei test KAT.
  • 4 test di integrazione (self-interop) attraverso 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 architettoniche:
  • TlsHandshakeEngine — macchina a stati, scollegata da I/O (per il futuro modulo JSSE).
  • ByteBuffer sovraccarichi TlsRecord.protect/unprotect per NIO/JSSE.
  • Cache TLSTREE (TlsTreeCache) — ricompilazione solo dei livelli modificati (RFC 9367).
  • InMemoryTlsTransport.Pair — coppia bidirezionale per test e interazione su un singolo 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