La primera versión de la implementación del protocolo TLS 1.3 en Java con algoritmos GOST de acuerdo con RFC 9367.

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

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

Esta es una de las primeras implementaciones de código abierto de TLS 1.3 con GOST en Java, por lo que las pruebas de interoperabilidad se han realizado en la mínima medida posible.

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

  1. Protocolos:
  • Protocolo de enlace: completo (cliente/servidor), corto (PSK), mutuo (mTLS).
  • ALPN (RFC 7301) - Negociación de protocolo de capa de aplicación (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) - Indicación de nombre servidor para implementaciones multiusuario.
  • Actualización de claves (RFC 8446 §4.6.3): actualización de las claves de cifrado del tráfico.
  • Conjuntos de cifrado: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256 bits), CryptoPro-B (512 bits)
  • Reconfiguración de claves TLSTREE por registro: cambio de la clave de cifrado para cada registro TLS.
  • Fragmentación y reensamblaje de apretones de manos y registros (RFC 8446 §5.1).
  • Reanudación de la sesión: PSK a través de NewSessionTicket (PskStore en memoria, de un solo uso).
  • Grapado OCSP: servidor adjunta la respuesta OCSP al certificado.
  • Mensajes posteriores al establecimiento de la conexión: NewSessionTicket (guardar para PSK).
  1. Criptografía:
  • Calendario clave: HKDF-Streebog (RFC 5869) sobre 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:
  • Análisis sintáctico X.509v3 (GOST R 34.10-2012): analizador DER integrado.
  • Cadena de validación: firmas, DN (emisor → sujeto), restricciones básicas, uso de clave, uso extendido de clave * (serverAuth / clientAuth), pathLen.
  • Verificación del nombre de host: dNSName + dirección IP (RFC 6125).
  • Verificación de las respuestas OCSP (RFC 6960).

4.Transporte:

  • TlsTransport - interfaz.
  • InMemoryTlsTransport: para pruebas y escenarios de un solo proceso (cola en memoria).
  • SocketTlsTransport: E/S bloqueante a través de java.net.Socket.
  • ChannelTlsTransport: transporte basado en SocketChannel de NIO (modo de bloqueo, interrumpible).
  1. Saludo de manos paso a paso:
  • TlsHandshakeEngine es una máquina de estados para el protocolo de enlace (desacoplada de la E/S). Utiliza TlsSession como orquestador y es adecuada para la integración con JSSE (SSLEngine).
  1. API de ByteBuffer:
  • TlsRecord.protect/unprotect: sobrecargas de ByteBuffer para la integración sin copia con NIO. Cargando claves:
  • Pkcs12Loader: lectura de PFX (PKCS#12) con PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Fin de la sesión:
  • close_notify - cierre correcto según el protocolo.
  • Borrar el material clave al cerrar o al cometer un error.
  • Alerta de manejo: fatal - cierre inmediato + borrado.
  1. Seguridad de la implementación:
  • Comparaciones en tiempo constante para los enlazadores verify_data y PSK (protección contra ataques de temporización).
  • Borrado de material clave: destroy() en todos los objetos con claves (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), al cerrar, alerta fatal, excepción en handshake
  • Protección contra ataques DoS: límites en la longitud de la cadena de certificados (10), mensajes posteriores al establecimiento de la conexión y tamaño del registro.
  • Nonce MGM: El MSB del primer byte se borra para ICN (RFC 9058 §3, RFC 9367 §3.3).
  • La clave privada ECDHE y la transcripción del protocolo de enlace se destruyen una vez que finaliza el protocolo de enlace.
  • El material de la clave HMAC se borra después de su uso (HkdfStreebog, KdfGostR3411_2012_256).
  1. Limitaciones:
  • Solo se admite la reanudación mediante PSK (no se admiten 0-RTT ni PSK externo).
  • Solo se admite psk_dhe_ke (no se admite PSK puro sin ECDHE).
  • HelloRetryRequest (RFC 8446 §4.1.4) no es compatible; solo se utiliza un grupo con nombre (GC256A por defecto).
  • Solo se admiten conjuntos de cifrado GOST (no se admiten conjuntos de cifrado que no sean GOST).
  1. Pruebas:
  • La biblioteca contiene pruebas de respuestas conocidas del apéndice A.1 de la RFC 9367 (variantes L y S): el esquema completo de claves, TLSTREE, AEAD y ECDHE. Además, supera todas las pruebas KAT.
  • 4 pruebas de integración (autointeroperabilidad) a través de sockets TCP reales.
  • Pruebas de fuzzing para analizadores sintácticos: TlsMessageParser (8 métodos), TlsDerParser (3 métodos), TlsOcspVerifier (1 método), para garantizar la seguridad y reducir el vector de ataque a los analizadores sintácticos.
  1. Soluciones arquitectónicas:
  • TlsHandshakeEngine: máquina de estados desacoplada de E/S (para un futuro módulo JSSE).
  • Sobrecargas de ByteBuffer de TlsRecord.protect/unprotect para NIO/JSSE.
  • Caché TLSTREE (TlsTreeCache): recálculo solo de los niveles modificados (RFC 9367).
  • InMemoryTlsTransport.Pair es un par bidireccional para pruebas y comunicación de un solo proceso.

La biblioteca se distribuye bajo una licencia gratuita.

Fuente: linux.org.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster