A primeira versión da implementación do protocolo TLS 1.3 en Java con algoritmos GOST de acordo coa RFC 9367

Módulo cripto-gost-tls13 contén a implementación TLS 1.3 (RFC 8446 + RFC 9367) con criptografía GOST. Esta versión é a versión inicial da biblioteca e está lista para uso interno.

Unha característica única da biblioteca é a súa implementación pura en Java. Todas as operacións criptográficas realízanse coas ferramentas integradas da biblioteca, sen dependencias externas.

Esta é unha das primeiras implementacións de código aberto de TLS 1.3 con GOST en Java, polo que as probas de interoperabilidade realizáronse na medida do posible.

A continuación móstranse as capacidades da biblioteca.

  1. Protocolos:
  • Protocolo de enlace: completo (cliente/servidor), curto (PSK), mutuo (mTLS).
  • ALPN (RFC 7301) - Negociación do protocolo de capa de aplicación (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) - Indicación de nome servidor para implementacións con varios inquilinos.
  • KeyUpdate (RFC 8446 §4.6.3): actualización das claves de cifrado do tráfico.
  • Conjuntos de cifrado: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256 bits), CryptoPro-B (512 bits)
  • Recodificación TLSTREE por rexistro: cambio da clave de cifrado para cada rexistro TLS.
  • Fragmentación e reensamblaxe de apertóns de comunicación e rexistros (RFC 8446 §5.1).
  • Reanudación da sesión: PSK a través de NewSessionTicket (PskStore na memoria, de uso único).
  • Grapado OCSP: servidor прикладывает OCSP-ответ к сертификату.
  • Mensaxes posteriores ao aperto de man: NewSessionTicket (gardado para PSK).
  1. Criptografía:
  • Programación de claves: HKDF-Streebog (RFC 5869) sobre TLS 1.3 (RFC 8446 §7.1).
  • Protección de rexistros: MGM-AEAD (Kuznyechik) con nonce segundo RFC 8446 §5.3.
  • As claves efémeras bórranse despois do seu uso.
  1. Certificados:
  • Análise X.509v3 (GOST R 34.10-2012): analizador DER integrado.
  • Cadea de validación: sinaturas, DN (emisor → asunto), restricións básicas, uso de clave, uso de clave estendida * (serverAuth / clientAuth), pathLen.
  • Comprobación do nome do host: dNSName + iPAddress (RFC 6125).
  • Verificación das respostas de OCSP (RFC 6960).

4.Transporte:

  • Interface de TlsTransport.
  • InMemoryTlsTransport: para probas e escenarios de proceso único (cola na memoria).
  • SocketTlsTransport: bloqueo de E/S a través de java.net.Socket.
  • ChannelTlsTransport - Transporte baseado en NIO SocketChannel (modo de bloqueo, interrompible).
  1. Apertón de mans paso a paso:
  • TlsHandshakeEngine é unha máquina de estados para protocolos de enlace (desacoplada das entradas/saídas). Emprega TlsSession como orquestrador e é axeitada para a integración con JSSE (SSLEngine).
  1. API de ByteBuffer:
  • TlsRecord.protect/unprotect — Sobrecargas de ByteBuffer para a integración de copia cero con NIO. Cargando claves:
  • Pkcs12Loader: lendo PFX (PKCS#12) con PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Fin da sesión:
  • close_notify - peche correcto segundo o protocolo.
  • Limpeza do material da chave ao pechar ou ao cometer un erro.
  • Alerta de manexo: fatal - peche inmediato + borrado.
  1. Seguridade na implementación:
  • Comparacións en tempo constante para os aglutinantes verify_data e PSK (protección contra ataques de temporización)
  • Borrando o material da clave: destroy() en todos os obxectos con claves (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ao pechar, alerta fatal, excepción no handshake
  • Protección contra a denegación de servizo: límites na lonxitude da cadea de certificados (10), mensaxes posteriores ao handshake, tamaño do rexistro.
  • Nonce MGM: O MSB do primeiro byte está limpo para ICN (RFC 9058 §3, RFC 9367 §3.3).
  • A clave privada ECDHE e a transcrición do handshake destrúense unha vez finalizado este.
  • O material da clave HMAC bórrase despois do seu uso (HkdfStreebog, KdfGostR3411_2012_256).
  1. Limitacións:
  • Só PSK de reanudación (non se admiten 0-RTT nin PSK externo).
  • Só psk_dhe_ke (non se admite PSK puro sen ECDHE).
  • Non se admite HelloRetryRequest (RFC 8446 §4.1.4); só se usa un grupo con nome (GC256A por defecto).
  • Só GOST (non se admiten conxuntos de cifrado que non sexan GOST).
  1. Probando:
  • A biblioteca contén probas de resposta coñecida do apéndice A.1 da RFC 9367 (variantes L e S): a programación de claves completa, TLSTREE, AEAD e ECDHE. Tamén supera a gama completa de probas KAT.
  • 4 probas de integración (autointeroperabilidade) a través de sockets TCP reais.
  • Probas fuzz para analizadores: TlsMessageParser (8 métodos), TlsDerParser (3 métodos), TlsOcspVerifier (1 método), para garantir a seguridade e reducir o vector de ataque sobre os analizadores.
  1. Solucións arquitectónicas:
  • TlsHandshakeEngine: máquina de estados desacoplada das E/S (para o futuro módulo JSSE).
  • Sobrecargas de ByteBuffer de TlsRecord.protect/unprotect para NIO/JSSE.
  • Caché TLSTREE (TlsTreeCache): recálculo só dos niveis modificados (RFC 9367).
  • InMemoryTlsTransport.Pair é un par bidireccional para probas e comunicación dun só proceso.

A biblioteca distribúese baixo unha licenza libre.

Fonte: linux.org.ru

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