Module crypto-gost-tls13 contient une implĂ©mentation TLS 1.3 (RFC 8446 + RFC 9367) avec la cryptographie GOST. Cette version est la premiĂšre version de la bibliothĂšque et prĂȘte Ă ĂȘtre utilisĂ©e en interne.
La particularitĂ© de la bibliothĂšque est son implĂ©mentation en Java pur. Toutes les opĂ©rations cryptographiques sont effectuĂ©es Ă l'aide des moyens intĂ©grĂ©s de la bibliothĂšque â sans dĂ©pendances externes.
C'est l'une des premiÚres implémentations ouvertes de TLS 1.3 avec GOST en Java, donc les tests d'interopérabilité ont été réalisés dans un volume minimum.
Ci-dessous se trouvent les fonctionnalités de la bibliothÚque.
- Protocoles :
- Handshake : complet (client/serveur), réduit (PSK), mutuel (mTLS).
- ALPN (RFC 7301) â nĂ©gociation de protocole de couche d'application (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) â spĂ©cification de nom de serveurs pour les dĂ©ploiements multi-locataires.
- KeyUpdate (RFC 8446 §4.6.3) â mise Ă jour des clĂ©s de chiffrement du trafic.
- Suites de chiffrement : TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE : CryptoPro-A (256 bits), CryptoPro-B (512 bits)
- Re-keying TLSTREE par enregistrement â changement de clĂ© de chiffrement pour chaque enregistrement TLS.
- Fragmentation et assemblage des poignées de main et des enregistrements (RFC 8446 §5.1).
- Reprise de session : PSK via NewSessionTicket (PskStore en mémoire, usage unique).
- OCSP stapling : serveur attache la réponse OCSP au certificat.
- Messages post-handshake : NewSessionTicket (stockage pour PSK).
- Cryptographie :
- Plan de clé : HKDF-Streebog (RFC 5869) selon le schéma TLS 1.3 (RFC 8446 §7.1).
- Protection des enregistrements : MGM-AEAD (Kuznyechik) avec nonce selon RFC 8446 §5.3.
- Les clés éphémÚres sont effacées aprÚs utilisation.
- Certificats :
- Analyse X.509v3 (GOST R 34.10-2012) â analyseur DER intĂ©grĂ©.
- Validation de la chaĂźne : signatures, DN (Ă©mission â sujet), Contraintes de base, Utilisation de clĂ©, Utilisation de clĂ© Ă©tendue (serverAuth / clientAuth), pathLen.
- Vérification du nom d'hÎte : dNSName + iPAddress (RFC 6125).
- Vérification des réponses OCSP (RFC 6960).
4.Transport :
- TlsTransport â interface.
- InMemoryTlsTransport â pour les tests et les scĂ©narios Ă processus unique (file d'attente en mĂ©moire).
- SocketTlsTransport â I/O bloquant via java.net.Socket.
- ChannelTlsTransport â transport basĂ© sur NIO SocketChannel (mode bloquant, interruptible).
- Handshake étape par étape :
- TlsHandshakeEngine â machine d'Ă©tat pour la poignĂ©e de main (dĂ©couple de l'I/O). Utilise TlsSession comme orchestre ; adaptĂ© pour l'intĂ©gration avec JSSE (SSLEngine).
- API ByteBuffer :
- TlsRecord.protect/unprotect â surcharges ByteBuffer pour une intĂ©gration zĂ©ro-copy avec NIO. Chargement des clĂ©s :
- Pkcs12Loader â lecture PFX (PKCS#12) avec PBKDF2-HMAC-SHA256 + AES-256-CBC.
- ClĂŽture de session :
- close_notify â fermeture correcte selon le protocole.
- Effacement du matériel clé lors de la fermeture ou d'une erreur.
- Traitement de l'alerte : fatal â fermeture immĂ©diate + effacement.
- Sécurité de l'implémentation :
- Comparaisons en temps constant pour verify_data et PSK binders (protection contre les attaques par temporisation)
- Effacement des matériaux clés : destroy() sur tous les objets avec des clés (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), lors de la fermeture, alerte fatale, exception dans l handshake.
- Protection contre les attaques DoS : limites sur la longueur de la chaĂźne de certificats (10), messages post-handshake, taille des enregistrements.
- Nonce MGM : le MSB du premier octet est remis à zéro pour l'ICN (RFC 9058 §3, RFC 9367 §3.3).
- La clé privée ECDHE et le transcript du handshake sont détruits aprÚs la fin de l handshake.
- Le matériel clé HMAC est effacé aprÚs utilisation (HkdfStreebog, KdfGostR3411_2012_256).
- Limitations :
- Seul le PSK de reprise est supporté (0-RTT et PSK externes ne sont pas pris en charge).
- Seul psk_dhe_ke est supporté (pure PSK sans ECDHE n'est pas pris en charge).
- HelloRetryRequest (RFC 8446 §4.1.4) n'est pas supportĂ© â seule un groupe nommĂ© est utilisĂ© (GC256A par dĂ©faut).
- Seules les suites de chiffrement GOST sont supportées (les suites non-GOST ne sont pas prises en charge).
- Tests :
- La bibliothĂšque contient des tests de rĂ©ponse connus provenant de l'annexe A.1 du RFC 9367 (versions L et S) â plan clĂ© complet, TLSTREE, AEAD, ECDHE. Elle passe Ă©galement l'ensemble des tests KAT.
- 4 tests d'intégration (auto-interop) via des sockets TCP réels.
- Tests de fuzzing pour les parseurs : TlsMessageParser (8 méthodes), TlsDerParser (3 méthodes), TlsOcspVerifier (1 méthode), pour assurer la sécurité et réduire les vecteurs d'attaque sur les parseurs.
- Solutions architecturales :
- TlsHandshakeEngine â machine d'Ă©tat, dĂ©couplĂ©e de l'I/O (pour le futur module JSSE).
- Surcharge de ByteBuffer TlsRecord.protect/unprotect pour NIO/JSSE.
- Cache TLSTREE (TlsTreeCache) â recalcul uniquement des niveaux modifiĂ©s (RFC 9367).
- InMemoryTlsTransport.Pair â paire bidirectionnelle pour les tests et l'interaction en un seul processus.
La bibliothÚque est distribuée sous une licence libre.
Source : linux.org.ru
