Modul crypto-gost-tls13 enthält die Implementierung TLS 1.3 (RFC 8446 + RFC 9367) mit GOST-Kryptographie. Diese Version ist die erste Fassung der Bibliothek und ist für den internen Gebrauch bestimmt.
Ein besonderes Merkmal der Bibliothek ist ihre reine Java-Implementierung. Alle kryptografischen Operationen werden mit den in der Bibliothek integrierten Werkzeugen durchgeführt, ohne externe Abhängigkeiten.
Dies ist eine der ersten Open-Source-Implementierungen von TLS 1.3 mit GOST in Java, daher wurden Interoperabilitätstests nur im minimal erforderlichen Umfang durchgeführt.
Nachfolgend sind die Funktionen der Bibliothek aufgeführt.
- Protokolle:
- Handshake: vollständig (Client/Server), kurz (PSK), gegenseitig (mTLS).
- ALPN (RFC 7301) - Application Layer Protocol Negotiation (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) – Namensangabe Server für Mandantenumgebungen.
- KeyUpdate (RFC 8446 §4.6.3) – Aktualisierung der Datenverkehrsverschlüsselungsschlüssel.
- Verschlüsselungssammlungen: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-Bit), CryptoPro-B (512-Bit)
- TLSTREE-Neuverschlüsselung pro Datensatz – Änderung des Verschlüsselungsschlüssels für jeden TLS-Datensatz.
- Fragmentierung und Wiederzusammenführung von Handshakes und Aufzeichnungen (RFC 8446 §5.1).
- Sitzungswiederaufnahme: PSK über NewSessionTicket (PskStore im Speicher, einmalig verwendbar).
- OCSP-Heftung: Server Fügt die OCSP-Antwort dem Zertifikat hinzu.
- Post-Handshake-Nachrichten: NewSessionTicket (außer für PSK).
- Kryptographie:
- Wichtiger Flugplan: HKDF-Streebog (RFC 5869) über TLS 1.3 (RFC 8446 §7.1).
- Aufzeichnungsschutz: MGM-AEAD (Kuznyechik) mit Nonce gemäß RFC 8446 §5.3.
- Ephemere Schlüssel werden nach Gebrauch gelöscht.
- Zertifikate:
- X.509v3-Parsing (GOST R 34.10-2012) — eingebauter DER-Parser.
- Validierungskette: Signaturen, DN (Aussteller → Subjekt), Grundlegende Einschränkungen, Schlüsselverwendung, Erweiterte Schlüsselverwendung (Serverauthentifizierung / Clientauthentifizierung), Pfadlänge.
- Hostnamenprüfung: dNSName + iPAddress (RFC 6125).
- Überprüfung der OCSP-Antworten (RFC 6960).
4.Transport:
- TlsTransport - Schnittstelle.
- InMemoryTlsTransport - für Tests und Einzelprozess-Szenarien (In-Memory-Warteschlange).
- SocketTlsTransport — blockierende E/A über java.net.Socket.
- ChannelTlsTransport – NIO SocketChannel-basierter Transport (blockierender Modus, unterbrechbar).
- Schritt-für-Schritt-Anleitung zum Händeschütteln:
- TlsHandshakeEngine ist eine Zustandsmaschine für den Handshake (entkoppelt von der Ein-/Ausgabe). Sie verwendet TlsSession als Orchestrator und eignet sich für die Integration mit JSSE (SSLEngine).
- ByteBuffer-API:
- TlsRecord.protect/unprotect – ByteBuffer-Überladungen für die Zero-Copy-Integration mit NIO. Schlüssel werden geladen:
- Pkcs12Loader — Lesen von PFX (PKCS#12) mit PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Sitzungsende:
- close_notify - korrektes Schließen gemäß Protokoll.
- Abwischen von Schlüsselmaterial beim Schließen oder bei einem Fehler.
- Warnung bei der Bearbeitung: Schwerwiegender Fehler – sofortiges Schließen + Löschen.
- Implementierungssicherheit:
- Vergleiche in konstanter Zeit für verify_data- und PSK-Binder (Schutz vor Timing-Angriffen)
- Wichtige Daten löschen: destroy() für alle Objekte mit Schlüsseln (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) beim Schließen, bei schwerwiegenden Warnungen und bei Ausnahmen im Handshake
- DoS-Schutz: Beschränkungen der Zertifikatskettenlänge (10), der Post-Handshake-Nachrichten und der Datensatzgröße.
- MGM-Nonce: Das MSB des ersten Bytes wird für ICN freigegeben (RFC 9058 §3, RFC 9367 §3.3).
- Der private Schlüssel von ECDHE und das Handshake-Protokoll werden nach Abschluss des Handshakes vernichtet.
- Das HMAC-Schlüsselmaterial wird nach Gebrauch gelöscht (HkdfStreebog, KdfGostR3411_2012_256).
- Einschränkungen:
- Resumption PSK only (0-RTT und externes PSK werden nicht unterstützt).
- Nur psk_dhe_ke (reines PSK ohne ECDHE wird nicht unterstützt).
- HelloRetryRequest (RFC 8446 §4.1.4) wird nicht unterstützt - es wird nur eine benannte Gruppe verwendet (standardmäßig GC256A).
- Nur GOST (nicht GOST-Verschlüsselungssuiten werden nicht unterstützt).
- Testen:
- Die Bibliothek enthält bekannte Antworttests aus RFC 9367 Anhang A.1 (L- und S-Varianten) – den vollständigen Lösungsschlüssel, TLSTREE, AEAD und ECDHE. Sie besteht außerdem alle KAT-Tests.
- 4 Integrationstests (Selbstinteroperabilität) über echte TCP-Sockets.
- Fuzz-Tests für Parser: TlsMessageParser (8 Methoden), TlsDerParser (3 Methoden), TlsOcspVerifier (1 Methode), um die Sicherheit zu gewährleisten und die Angriffsfläche für Parser zu verringern.
- Architektonische Lösungen:
- TlsHandshakeEngine - Zustandsautomat, entkoppelt von der Ein-/Ausgabe (für das zukünftige JSSE-Modul).
- ByteBuffer-Überladungen von TlsRecord.protect/unprotect für NIO/JSSE.
- TLSTREE-Cache (TlsTreeCache) - Neuberechnung nur der geänderten Ebenen (RFC 9367).
- InMemoryTlsTransport.Pair ist ein bidirektionales Paar für Tests und die Kommunikation zwischen einzelnen Prozessen.
Die Bibliothek wird unter einer freien Lizenz vertrieben.
Source: linux.org.ru
