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.
- 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).
- 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.
- 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).
- 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).
- 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.
- 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.
- 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).
- 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).
- 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.
- 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
