Se ha publicado la primera implementación del protocolo TLS 1.3 en Java con algoritmos GOST de acuerdo con el RFC 9367.

Módulo crypto-gost-tls13 contiene la implementación TLS 1.3 (RFC 8446 + RFC 9367) con criptografía GOST. Esta versión es la versión inicial de la biblioteca y está lista para uso interno.

Una característica de la biblioteca es su implementación en Java puro. Todas las operaciones criptográficas se realizan mediante las herramientas integradas de la biblioteca, sin dependencias externas.

Es una de las primeras implementaciones abiertas de TLS 1.3 con GOST en Java, por lo que las pruebas de interoperabilidad se han llevado a cabo en el volumen mínimo posible.

A continuación se presentan las capacidades de la biblioteca.

  1. Protocolos:
  • Handshake: completo (cliente/servidor), abreviado (PSK), mutuo (mTLS).
  • ALPN (RFC 7301) — negociación del protocolo de aplicación (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) — indicación de nombre servidores para implementaciones multi-tenant.
  • KeyUpdate (RFC 8446 §4.6.3) — actualización de claves de cifrado del tráfico.
  • Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256 bits), CryptoPro-B (512 bits)
  • Re-keying TLSTREE por registro: cambio de clave de cifrado para cada registro TLS.
  • Fragmentación y ensamblaje de handshakes y registros (RFC 8446 §5.1).
  • Reanudación de sesión: PSK a través de NewSessionTicket (PskStore en memoria, de un solo uso).
  • OCSP stapling: servidor adjunta la respuesta OCSP al certificado.
  • Post-handshake messages: NewSessionTicket (almacenamiento para PSK).
  1. Criptografía:
  • Key schedule: HKDF-Streebog (RFC 5869) según el esquema TLS 1.3 (RFC 8446 §7.1).
  • Protección de registros: MGM-AEAD (Kuznyechik) con nonce según RFC 8446 §5.3.
  • Las claves efímeras se borran después de su uso.
  1. Certificados:
  • Parsing de X.509v3 (GOST R 34.10-2012) — analizador DER integrado.
  • Validación de cadena: firmas, DN (emisor → sujeto), Basic Constraints, Key Usage, Extended Key Usage (serverAuth / clientAuth), pathLen.
  • Verificación del hostname: dNSName + iPAddress (RFC 6125).
  • Verificación de respuestas OCSP (RFC 6960).

4.Transporte:

  • TlsTransport — interfaz.
  • InMemoryTlsTransport — para pruebas y escenarios de un solo proceso (cola en memoria).
  • SocketTlsTransport — I/O bloqueante a través de java.net.Socket.
  • ChannelTlsTransport — transporte basado en NIO SocketChannel (modo bloqueante, interrumpible).
  1. Handshake paso a paso:
  • TlsHandshakeEngine — máquina de estados para handshake (desacoplada de I/O). Se utiliza TlsSession como orquestador; apta para integración con JSSE (SSLEngine).
  1. ByteBuffer API:
  • TlsRecord.protect/unprotect — sobrecargas de ByteBuffer para integración zero-copy con NIO. Carga de claves:
  • Pkcs12Loader — lectura de PFX (PKCS#12) con PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Finalización de sesión:
  • close_notify — cierre correcto según el protocolo.
  • Borrado de material clave al cerrar o al producirse un error.
  • Manejo de alerta: fatal — cierre inmediato + borrado.
  1. Seguridad de la implementación:
  • Comparaciones en tiempo constante para verify_data y PSK binders (protección contra ataques de temporización)
  • Destrucción de material clave: destroy() en todos los objetos con claves (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), al cerrar, alerta fatal, excepción en el handshake
  • Protección contra DoS: límites en la longitud de la cadena de certificados (10), mensajes post-handshake, tamaño de registros.
  • Nonce MGM: se limpia el MSB del primer byte para ICN (RFC 9058 §3, RFC 9367 §3.3).
  • La clave privada ECDHE y la transcripción del handshake se destruyen después de completar el handshake.
  • El material clave HMAC se limpia después de su uso (HkdfStreebog, KdfGostR3411_2012_256).
  1. Restricciones:
  • Solo PSK de reanudación (0-RTT y PSK externo no son compatibles).
  • Solo psk_dhe_ke (PSK puro sin ECDHE no es compatible).
  • HelloRetryRequest (RFC 8446 §4.1.4) no es compatible: solo se utiliza un grupo nombrado (GC256A por defecto).
  • Solo GOST (los conjuntos de cifrado no GOST no son compatibles).
  1. Pruebas:
  • La biblioteca contiene pruebas de respuesta conocidas del Apéndice A.1 de RFC 9367 (versiones L y S): programación completa de claves, TLSTREE, AEAD, ECDHE. Y pasa un completo espectro de pruebas KAT.
  • 4 pruebas de integración (auto-interop) a través de sockets TCP reales.
  • Pruebas de fuzzing para los analizadores: TlsMessageParser (8 métodos), TlsDerParser (3 métodos), TlsOcspVerifier (1 método), para garantizar la seguridad y reducir los vectores de ataque en los analizadores.
  1. Decisiones arquitectónicas:
  • TlsHandshakeEngine: máquina de estados, desacoplada de I/O (para el futuro módulo JSSE).
  • Sobrecargas de ByteBuffer TlsRecord.protect/unprotect para NIO/JSSE.
  • Caché TLSTREE (TlsTreeCache): recálculo solo de los niveles que han cambiado (RFC 9367).
  • InMemoryTlsTransport.Pair: par bidireccional para pruebas y comunicación de un solo proceso.

La biblioteca se distribuye bajo una licencia libre.

Fuente: linux.org.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster