Die erste Veröffentlichung der TLS 1.3-Protokollimplementierung in Java mit GOST-Algorithmen gemäß RFC 9367

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.

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

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz und VPS-VDS-Servern 🔥 Kaufen Sie zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster