Módulo crypto-gost-tls13 contém a implementação TLS 1.3 (RFC 8446 + RFC 9367) com criptografia GOST. Esta versão é a versão inicial da biblioteca e está pronta para uso interno.
Uma característica da biblioteca é a implementação em Java puro. Todas as operações criptográficas são realizadas utilizando os recursos embutidos da biblioteca — sem dependências externas.
Este é, de certa forma, uma das primeiras implementações abertas do TLS 1.3 com GOST em Java, portanto, os testes de interoperabilidade foram realizados em um volume minimamente disponível.
Abaixo estão as capacidades da biblioteca.
- Protocolos:
- Handshake: completo (client/server), reduzido (PSK), mútuo (mTLS).
- ALPN (RFC 7301) — negociação de protocolo de camada de aplicação (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) — indicação de nome servidor para implantações multi-tenant.
- KeyUpdate (RFC 8446 §4.6.3) — atualização das chaves de criptografia do tráfego.
- Conjuntos de cifras: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256 bits), CryptoPro-B (512 bits)
- Reconfiguração TLSTREE por registro — troca da chave de criptografia em cada registro TLS.
- Fragmentação e montagem de handshakes e registros (RFC 8446 §5.1).
- Retomada de sessão: PSK através de NewSessionTicket (PskStore em memória, uso único).
- OCSP stapling: servidor anexa a resposta OCSP ao certificado.
- Mensagens pós-handshake: NewSessionTicket (armazenamento para PSK).
- Criptografia:
- Cronograma de chaves: HKDF-Streebog (RFC 5869) conforme o esquema TLS 1.3 (RFC 8446 §7.1).
- Proteção de registros: MGM-AEAD (Kuznyechik) com nonce conforme RFC 8446 §5.3.
- Chaves efêmeras são apagadas após o uso.
- Certificações:
- Análise X.509v3 (GOST R 34.10-2012) — parser DER embutido.
- Validação de cadeia: assinaturas, DN (emitente → assunto), Restrições Básicas, Uso de Chaves, Uso de Chaves Estendidas (serverAuth / clientAuth), pathLen.
- Verificação de hostname: dNSName + iPAddress (RFC 6125).
- Verificação de respostas OCSP (RFC 6960).
4.Transporte:
- TlsTransport — interface.
- InMemoryTlsTransport — para testes e cenários de um único processo (fila em memória).
- SocketTlsTransport — I/O bloqueante através de java.net.Socket.
- ChannelTlsTransport — transporte baseado em SocketChannel NIO (modo bloqueante, interrompível).
- Handshake passo a passo:
- TlsHandshakeEngine — máquina de estados para handshake (desvinculada de I/O). Usa TlsSession como orquestrador; adequada para integração com JSSE (SSLEngine).
- ByteBuffer API:
- TlsRecord.protect/unprotect — sobrecargas de ByteBuffer para integração zero-copy com NIO. Carregamento de chaves:
- Pkcs12Loader — leitura de PFX (PKCS#12) com PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Finalização de sessão:
- close_notify — fechamento correto conforme o protocolo.
- Apagar material de chave ao fechar ou em caso de erro.
- Tratamento de alerta: fatal — encerramento imediato + apagamento.
- Segurança da implementação:
- Comparações em tempo constante para verify_data e binders PSK (proteção contra ataques de temporização)
- Destruição de material chave: destroy() em todos os objetos com chaves (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ao fechar, alerta fatal, exceção no handshake
- Proteção contra DoS: limites no comprimento da cadeia de certificados (10), mensagens post-handshake, tamanho das gravações.
- Nonce MGM: MSB do primeiro byte é limpo para ICN (RFC 9058 §3, RFC 9367 §3.3).
- A chave privada ECDHE e a transcrição do handshake são destruídas após a conclusão do handshake.
- O material chave HMAC é limpo após o uso (HkdfStreebog, KdfGostR3411_2012_256).
- Restrições:
- Apenas resumption PSK (0-RTT e external PSK não são suportados).
- Apenas psk_dhe_ke (pure PSK sem ECDHE não é suportado).
- HelloRetryRequest (RFC 8446 §4.1.4) não é suportado — é utilizada apenas uma named group (GC256A por padrão).
- Apenas GOST (non-GOST cipher suites não são suportados).
- Teste:
- A biblioteca contém Known Answer Tests do Apêndice A.1 do RFC 9367 (variações L e S) — agendamento de chave completo, TLSTREE, AEAD, ECDHE. E passa por uma gama completa de testes KAT.
- 4 testes de integração (self-interop) através de sockets TCP reais.
- Testes de fuzzing para parsers: TlsMessageParser (8 métodos), TlsDerParser (3 métodos), TlsOcspVerifier (1 método), para garantir segurança e reduzir vetores de ataque nos parsers.
- Soluções arquitetônicas:
- TlsHandshakeEngine — máquina de estados, desacoplada de I/O (para futuro módulo JSSE).
- Sobrecargas de ByteBuffer TlsRecord.protect/unprotect para NIO/JSSE.
- Cache TLSTREE (TlsTreeCache) — recálculo apenas dos níveis alterados (RFC 9367).
- InMemoryTlsTransport.Pair — par bidirecional para testes e interação de processo único.
A biblioteca é distribuída sob uma licença livre.
Fonte: linux.org.ru
