Prima versione dell'implementazione del protocollo TLS 1.3 in Java con algoritmi GOST conformi alla RFC 9367.

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

Una caratteristica unica di questa libreria è la sua implementazione interamente in Java. Tutte le operazioni crittografiche vengono eseguite utilizzando gli strumenti integrati nella libreria, senza dipendenze esterne.

Questa è una delle prime implementazioni open source di TLS 1.3 con GOST in Java, quindi i test di interoperabilità sono stati eseguiti nella misura minima possibile.

Di seguito sono elencate le funzionalità della biblioteca.

  1. Protocolli:
  • Stretta di mano: completa (client/server), abbreviata (PSK), reciproca (mTLS).
  • ALPN (RFC 7301) - Negoziazione del protocollo a 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 crittografia: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256 bit), CryptoPro-B (512 bit)
  • Riconfigurazione della chiave TLSTREE per ogni record: modifica della chiave di crittografia per ciascun record TLS.
  • Frammentazione e ricomposizione di strette di mano e registrazioni (RFC 8446 §5.1).
  • Ripresa della sessione: PSK tramite NewSessionTicket (PskStore in memoria, monouso).
  • Cucitura OCSP: Server aggiunge la risposta OCSP al certificato.
  • Messaggi successivi all'handshake: NewSessionTicket (salva per PSK).
  1. Crittografia:
  • Schema principale: HKDF-Streebog (RFC 5869) su TLS 1.3 (RFC 8446 §7.1).
  • Protezione dei record: MGM-AEAD (Kuznyechik) con nonce secondo RFC 8446 §5.3.
  • Le chiavi effimere vengono cancellate dopo l'uso.
  1. Certificati:
  • Analisi sintattica X.509v3 (GOST R 34.10-2012) — analizzatore DER integrato.
  • Catena di validazione: firme, DN (emittente → soggetto), vincoli di base, utilizzo della chiave, utilizzo esteso della chiave * (serverAuth / clientAuth), lunghezza del percorso.
  • Verifica del nome host: dNSName + indirizzo IP (RFC 6125).
  • Verifica delle risposte OCSP (RFC 6960).

4.Trasporti:

  • TlsTransport - interfaccia.
  • InMemoryTlsTransport - per test e scenari a processo singolo (coda in memoria).
  • SocketTlsTransport — blocco dell'I/O su java.net.Socket.
  • ChannelTlsTransport - NIO SocketTrasporto basato su canale (modalità bloccante, interrompibile).
  1. Stretta di mano passo dopo passo:
  • TlsHandshakeEngine è una macchina a stati per la gestione dell'handshake (disaccoppiata dall'I/O). Utilizza TlsSession come orchestratore ed è adatta all'integrazione con JSSE (SSLEngine).
  1. API ByteBuffer:
  • TlsRecord.protect/unprotect — Overload di ByteBuffer per l'integrazione zero-copy con NIO. Chiavi di caricamento:
  • Pkcs12Loader — lettura di file PFX (PKCS#12) con PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Fine della sessione:
  • close_notify - chiusura corretta secondo il protocollo.
  • Pulizia dei dati sensibili in caso di chiusura o errore.
  • Avviso di gestione: fatale - chiusura immediata + cancellazione.
  1. Sicurezza dell'implementazione:
  • Confronti a tempo costante per i binder verify_data e PSK (protezione contro gli attacchi basati sui tempi)
  • Cancellazione del materiale chiave: destroy() su tutti gli oggetti con chiavi (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), alla chiusura, avviso fatale, eccezione nell'handshake
  • Protezione DoS: limiti sulla lunghezza della catena di certificati (10), messaggi post-handshake, dimensione del record.
  • Nonce MGM: il bit più significativo (MSB) del primo byte viene azzerato per ICN (RFC 9058 §3, RFC 9367 §3.3).
  • La chiave privata ECDHE e la trascrizione dell'handshake vengono distrutte al termine dell'handshake.
  • Il materiale chiave HMAC viene cancellato dopo l'uso (HkdfStreebog, KdfGostR3411_2012_256).
  1. Restrizioni:
  • Solo PSK di ripresa (0-RTT e PSK esterni non sono supportati).
  • È supportato solo psk_dhe_ke (PSK puro senza ECDHE non è supportato).
  • HelloRetryRequest (RFC 8446 §4.1.4) non è supportato: viene utilizzato un solo gruppo denominato (GC256A per impostazione predefinita).
  • Solo GOST (le suite di cifratura non GOST non sono supportate).
  1. Test:
  • La libreria contiene test a risposta nota (KAT) dall'Appendice A.1 dell'RFC 9367 (varianti L e S): l'intera tabella delle chiavi, TLSTREE, AEAD ed ECDHE. Supera inoltre l'intera gamma di test KAT.
  • 4 test di integrazione (autointeroperabilità) 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 le vulnerabilità dei parser.
  1. Soluzioni architettoniche:
  • TlsHandshakeEngine - macchina a stati disaccoppiata dall'I/O (per un futuro modulo JSSE).
  • Overload di ByteBuffer per TlsRecord.protect/unprotect per NIO/JSSE.
  • Cache TLSTREE (TlsTreeCache) - ricalcolo dei soli livelli modificati (RFC 9367).
  • InMemoryTlsTransport.Pair è una coppia bidirezionale per test e comunicazione a processo singolo.

La libreria è distribuita con una licenza libera.

Fonte: linux.org.ru

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