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