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 única da biblioteca é sua implementação em Java puro. Todas as operações criptográficas são realizadas usando as ferramentas integradas da biblioteca, sem dependências externas.
Esta é uma das primeiras implementações de código aberto do TLS 1.3 com GOST em Java, portanto, os testes de interoperabilidade foram realizados na medida do possível.
Abaixo estão as funcionalidades da biblioteca.
- Protocolos:
- Aperto de mãos: completo (cliente/servidor), curto (PSK), mútuo (mTLS).
- ALPN (RFC 7301) - Negociação de Protocolo da Camada de Aplicação (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Indicação de Nome servidor para implantações multi-inquilino.
- KeyUpdate (RFC 8446 §4.6.3) – atualização de chaves de criptografia de tráfego.
- Conjuntos de criptografia: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256 bits), CryptoPro-B (512 bits)
- Recodificação TLSTREE por registro — alteração da chave de criptografia para cada registro TLS.
- Fragmentação e remontagem de apertos de mão e registros (RFC 8446 §5.1).
- Retomada da sessão: PSK via NewSessionTicket (PskStore em memória, uso único).
- Grampeamento OCSP: servidor Anexa a resposta OCSP ao certificado.
- Mensagens pós-aperto de mãos: NewSessionTicket (exceto para PSK).
- Criptografia:
- Configuração principal: HKDF-Streebog (RFC 5869) sobre TLS 1.3 (RFC 8446 §7.1).
- Proteção de registro: MGM-AEAD (Kuznyechik) com nonce de acordo com RFC 8446 §5.3.
- As chaves efêmeras são apagadas após o uso.
- Certificados:
- Análise sintática X.509v3 (GOST R 34.10-2012) — analisador DER integrado.
- Cadeia de validação: assinaturas, DN (emissor → sujeito), restrições básicas, uso de chave, uso de chave estendida * (autenticação do servidor / autenticação do cliente), comprimento do caminho.
- Verificação do nome do host: dNSName + endereço IP (RFC 6125).
- Verificação de respostas OCSP (RFC 6960).
4.Transporte:
- TlsTransport - interface.
- InMemoryTlsTransport - para testes e cenários de processo único (fila em memória).
- SocketTlsTransport — E/S bloqueante em java.net.Socket.
- ChannelTlsTransport - Transporte baseado em SocketChannel da NIO (modo bloqueante, interrompível).
- Aperto de mãos passo a passo:
- TlsHandshakeEngine é uma máquina de estados para handshake (desacoplada de E/S). Ela utiliza TlsSession como orquestrador e é adequada para integração com JSSE (SSLEngine).
- API ByteBuffer:
- TlsRecord.protect/unprotect — Sobrecargas de ByteBuffer para integração sem cópia com NIO. Carregando chaves:
- Pkcs12Loader — leitura de PFX (PKCS#12) com PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Fim da sessão:
- close_notify - fechamento correto de acordo com o protocolo.
- Apagar o material essencial ao fechar ou ao cometer um erro.
- Alerta de tratamento: fatal - fechamento imediato + exclusão.
- Segurança de implementação:
- Comparações em tempo constante para verify_data e binders PSK (proteção contra ataques de temporização)
- Apagando o material da 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 pós-handshake, tamanho do registro.
- Nonce MGM: O bit mais significativo (MSB) do primeiro byte é limpo para ICN (RFC 9058 §3, RFC 9367 §3.3).
- A chave privada ECDHE e o registro do handshake são destruídos após a conclusão do mesmo.
- O material da chave HMAC é apagado após o uso (HkdfStreebog, KdfGostR3411_2012_256).
- Restrições:
- Somente PSK de retomada (0-RTT e PSK externo não são suportados).
- Apenas psk_dhe_ke (PSK puro sem ECDHE não é suportado).
- O HelloRetryRequest (RFC 8446 §4.1.4) não é suportado - apenas um grupo nomeado é usado (GC256A por padrão).
- Somente GOST (conjuntos de cifras não-GOST não são suportados).
- Teste:
- A biblioteca contém testes de resposta conhecida (KAT) do Apêndice A.1 da RFC 9367 (variantes L e S) — esquema de chaves completo, TLSTREE, AEAD e ECDHE. Ela também passa em toda a gama de testes KAT.
- 4 testes de integração (autointeroperabilidade) via sockets TCP reais.
- Testes de fuzzing para analisadores sintáticos: TlsMessageParser (8 métodos), TlsDerParser (3 métodos), TlsOcspVerifier (1 método), para garantir a segurança e reduzir o vetor de ataque aos analisadores.
- Soluções arquitetônicas:
- TlsHandshakeEngine - máquina de estados desacoplada de E/S (para futuro módulo JSSE).
- Sobrecargas de ByteBuffer de TlsRecord.protect/unprotect para NIO/JSSE.
- Cache TLSTREE (TlsTreeCache) - recálculo apenas dos níveis alterados (RFC 9367).
- InMemoryTlsTransport.Pair é um par bidirecional para testes e comunicação de processo único.
A biblioteca é distribuída sob uma licença livre.
Fonte: linux.org.ru
