Modul crypto-gost-tls13 enthält die Implementierung TLS 1.3 (RFC 8446 + RFC 9367) mit GOST-Kryptographie. Diese Version ist die erste Version der Bibliothek und für den internen Gebrauch bereit.
Ein besonderes Merkmal der Bibliothek ist die Implementierung in reinem Java. Alle kryptographischen Operationen werden mit den integrierten Mitteln der Bibliothek ausgeführt — ohne externe Abhängigkeiten.
Es handelt sich um eine der ersten offenen Implementierungen von TLS 1.3 mit GOST in Java, daher wurde das Interop-Testen in einem minimal verfügbaren Umfang durchgeführt.
Im Folgenden sind die Möglichkeiten der Bibliothek aufgeführt.
- Protokolle:
- Handshake: voll (Client/Server), verkürzt (PSK), gegenseitig (mTLS).
- ALPN (RFC 7301) — Aushandlung des Anwendungsprotokolls (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — Namensangabe сервера für Multi-Tenant-Bereitstellungen.
- KeyUpdate (RFC 8446 §4.6.3) — Aktualisierung der Verschlüsselungsschlüssel des Verkehrs.
- Cipher Suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-Bit), CryptoPro-B (512-Bit)
- Per-Record TLSTREE-Re-Keying — Schlüsselwechsel für jede TLS-Aufzeichnung.
- Fragmentierung und Zusammenstellung von Handshakes und Aufzeichnungen (RFC 8446 §5.1).
- Sitzungswiederherstellung: PSK über NewSessionTicket (PskStore im Speicher, einmalige Nutzung).
- OCSP Stapling: der Server fügt die OCSP-Antwort dem Zertifikat bei.
- Post-Handschlag-Nachrichten: NewSessionTicket (Speicherung für PSK).
- Kryptographie:
- Schlüsselplan: HKDF-Streebog (RFC 5869) gemäß TLS 1.3 (RFC 8446 §7.1).
- Aufzeichnungsschutz: MGM-AEAD (Kuznyechik) mit nonce gemäß RFC 8446 §5.3.
- Ephemerale Schlüssel werden nach der Nutzung überschrieben.
- Zertifikate:
- Parsing von X.509v3 (GOST R 34.10-2012) — eingebauter DER-Parser.
- Kettenvalidierung: Signaturen, DN (Aussteller → Betreff), Grundlegende Constraints, Schlüsselverwendung, Erweiterte Schlüsselnutzung (serverAuth / clientAuth), pathLen.
- Hostname-Überprüfung: dNSName + iPAddress (RFC 6125).
- Verifizierung von OCSP-Antworten (RFC 6960).
4.Transport:
- TlsTransport — Schnittstelle.
- InMemoryTlsTransport — für Tests und Single-Process-Szenarien (In-Memory-Warteschlange).
- SocketTlsTransport — blockierendes I/O über java.net.Socket.
- ChannelTlsTransport — transportbasiert auf NIO SocketChannel (blockierender Modus, unterbrechbar).
- Schrittweise Handshake:
- TlsHandshakeEngine — Zustandmaschine für Handshake (von I/O entkoppelt). Verwendet TlsSession als Orchestrator; geeignet für die Integration mit JSSE (SSLEngine).
- ByteBuffer-API:
- TlsRecord.protect/unprotect — ByteBuffer-Overloads für Zero-Copy-Integration mit NIO. Schlüsselladung:
- Pkcs12Loader — Lesen von PFX (PKCS#12) mit PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Sitzungsabschluss:
- close_notify — ordnungsgemäßer Abschluss gemäß Protokoll.
- Überschreiben von Schlüsselmaterial beim Abschluss oder Fehler.
- Alert-Verarbeitung: fatal — sofortige Schließung + Überschreibung.
- Sicherheit der Implementierung:
- Constant-Time-Vergleiche für verify_data und PSK-Binder (Schutz vor Timing-Angriffen).
- Löschung des Schlüsselmaterials: destroy() auf allen Objekten mit Schlüsseln (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) bei close, fatal alert, Ausnahme im Handshake
- DoS-Schutz: Begrenzungen für die Länge der Zertifikatkette (10), Post-Handshake-Nachrichten, Aufzeichnungsgröße.
- MGM nonce: MSB des ersten Bytes wird für ICN (RFC 9058 §3, RFC 9367 §3.3) gelöscht.
- ECDHE-Geheimschlüssel und der Handshake-Transkript werden nach Abschluss des Handshakes gelöscht.
- HMAC-Schlüsselmaterial wird nach der Verwendung gelöscht (HkdfStreebog, KdfGostR3411_2012_256).
- Einschränkungen:
- Nur resumption PSK (0-RTT und external 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 (GC256A standardmäßig).
- Nur GOST (nicht-GOST Chiffren werden nicht unterstützt).
- Testen:
- Die Bibliothek enthält bekannte Antworttests aus Anhang A.1 von RFC 9367 (L- und S-Varianten) — vollständiger Schlüsselplan, TLSTREE, AEAD, ECDHE. Und besteht den vollständigen Testbereich der KAT.
- 4 Integrationstests (self-interop) über echte TCP-Sockets.
- Fuzzing-Tests für Parser: TlsMessageParser (8 Methoden), TlsDerParser (3 Methoden), TlsOcspVerifier (1 Methode), um Sicherheit und die Reduzierung von Angriffsvektoren auf Parser zu gewährleisten.
- Architektonische Entscheidungen:
- TlsHandshakeEngine — Zustandsmaschine, getrennt von I/O (für zukünftiges JSSE-Modul).
- ByteBuffer-Überladung von TlsRecord.protect/unprotect für NIO/JSSE.
- TLSTREE-Cache (TlsTreeCache) – Berechnung nur der geänderten Ebenen (RFC 9367).
- InMemoryTlsTransport.Pair – bidirektionales Paar für Tests und interprozessuale Kommunikation.
Die Bibliothek wird unter einer freien Lizenz vertrieben.
Quelle: linux.org.ru
