Module crypto-gost-tls13 contient l'implémentation TLS 1.3 (RFC 8446 + RFC 9367) avec le chiffrement GOST. Cette version est la version initiale de la bibliothèque et est prête pour un usage interne.
L'une des particularités de cette bibliothèque est son implémentation entièrement en Java. Toutes les opérations cryptographiques sont réalisées à l'aide des outils intégrés de la bibliothèque, sans aucune dépendance externe.
Il s'agit de l'une des premières implémentations open source de TLS 1.3 avec GOST en Java, les tests d'interopérabilité ont donc été réduits au minimum.
Vous trouverez ci-dessous les fonctionnalités de la bibliothèque.
- Protocoles :
- Échange de clés : complet (client/serveur), court (PSK), mutuel (mTLS).
- ALPN (RFC 7301) - Négociation de protocole de couche application (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Indication du nom serveur 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)
- Renouvellement de la clé TLSTREE par enregistrement — modification de la clé de chiffrement pour chaque enregistrement TLS.
- Fragmentation et ré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).
- Agrafage OCSP : serveur ajoute la réponse OCSP au certificat.
- Messages post-établissement de la connexion : NewSessionTicket (sauf pour PSK).
- Cryptographie :
- Calendrier clé : HKDF-Streebog (RFC 5869) sur TLS 1.3 (RFC 8446 §7.1).
- Protection des enregistrements : MGM-AEAD (Kuznyechik) avec nonce conformément à la 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é.
- Chaîne de validation : signatures, DN (émetteur → sujet), contraintes de base, utilisation de la clé, utilisation étendue de la clé * (serverAuth / clientAuth), pathLen.
- Vérification du nom d'hôte : dNSName + adresse IP (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 — E/S bloquantes sur java.net.Socket.
- ChannelTlsTransport - Transport basé sur NIO SocketChannel (mode bloquant, interruptible).
- Poignée de main étape par étape :
- TlsHandshakeEngine est une machine à états pour la négociation de liaison (découplée des E/S). Elle utilise TlsSession comme orchestrateur et est compatible avec JSSE (SSLEngine).
- API ByteBuffer :
- TlsRecord.protect/unprotect — Surcharges de ByteBuffer pour une intégration sans copie avec NIO. Clés de chargement :
- Pkcs12Loader — lecture de PFX (PKCS#12) avec PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Fin de la session :
- close_notify - fermeture correcte conformément au protocole.
- Effacement des éléments clés lors de la fermeture ou en cas d'erreur.
- Alerte de gestion : fatale - fermeture immédiate + effacement.
- Sécurité de la mise en œuvre :
- Comparaisons à temps constant pour verify_data et les liaisons PSK (protection contre les attaques temporelles)
- Suppression des clés : destruction de tous les objets contenant des clés (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), à la fermeture, alerte fatale, exception lors de l'établissement de la liaison
- Protection contre les attaques DoS : limites sur la longueur de la chaîne de certificats (10), messages post-établissement de liaison, taille de l’enregistrement.
- Nonce MGM : Le MSB du premier octet est effacé pour ICN (RFC 9058 §3, RFC 9367 §3.3).
- La clé privée ECDHE et la transcription de la négociation sont détruites une fois la négociation terminée.
- Les données de la clé HMAC sont effacées après utilisation (HkdfStreebog, KdfGostR3411_2012_256).
- Restrictions:
- Reprise PSK uniquement (0-RTT et PSK externe non pris en charge).
- Seul psk_dhe_ke (PSK pur sans ECDHE n'est pas pris en charge).
- HelloRetryRequest (RFC 8446 §4.1.4) n'est pas pris en charge - seul un groupe nommé est utilisé (GC256A par défaut).
- GOST uniquement (les suites de chiffrement non-GOST ne sont pas prises en charge).
- Essai:
- La bibliothèque contient les tests de réponses connues (KAT) de l'annexe A.1 de la RFC 9367 (variantes L et S) : le tableau de clés complet, TLSTREE, AEAD et ECDHE. Elle réussit également l'ensemble des tests KAT.
- 4 tests d'intégration (auto-interopérabilité) via de véritables sockets TCP.
- Tests de fuzzing pour les analyseurs : TlsMessageParser (8 méthodes), TlsDerParser (3 méthodes), TlsOcspVerifier (1 méthode), pour garantir la sécurité et réduire le vecteur d’attaque sur les analyseurs.
- Solutions architecturales :
- TlsHandshakeEngine - machine à états découplée des E/S (pour un futur module JSSE).
- Surcharges ByteBuffer de TlsRecord.protect/unprotect pour NIO/JSSE.
- Cache TLSTREE (TlsTreeCache) - recalcul des seuls niveaux modifiés (RFC 9367).
- InMemoryTlsTransport.Pair est une paire bidirectionnelle destinée aux tests et à la communication mono-processus.
La bibliothèque est distribuée sous une licence libre.
Source: linux.org.ru
