Está disponível o primeiro lançamento oficial da implementação experimental do servidor e cliente para o protocolo SSH3, estruturado como uma extensão do protocolo HTTP/3, utilizando QUIC (baseado em UDP) e TLS 1.3 para estabelecer um canal de comunicação seguro e mecanismos HTTP para autenticação de usuários. O projeto é desenvolvido por François Michel, um estudante de doutorado da Universidade Católica de Leuven (Bélgica), com a participação de Olivier Bonaventure, professor da mesma universidade, conhecido pelo desenvolvimento da subsistema Multipath TCP e do código de roteamento de segmentos IPv6 para o núcleo do Linux, além de coautor de 10 RFCs e rascunhos de mais de 60 especificações de rede. O código da implementação de referência do cliente e servidor foi escrito na linguagem Go e é distribuído sob a licença Apache 2.0.
O desenvolvimento do SSH3 foi resultado de uma revisão completa do protocolo SSH, realizada por um grupo separado de pesquisadores, de forma independente do OpenSSH e de outros projetos que trabalham em implementações do protocolo clássico SSH. No SSH3, a semântica do protocolo clássico SSH é realizada através de mecanismos HTTP, o que permitiu agregar funcionalidades adicionais e ocultar a atividade relacionada ao SSH em meio a outros tráfegos.
Ao utilizar o SSH3, o servidor é indistinguível de um servidor HTTP e aceita solicitações na porta 443 da rede (HTTPS), fazendo com que o tráfego SSH3 se misture ao tráfego HTTP típico, dificultando a realização de ataques relacionados à varredura de portas e à identificação de servidores SSH para tentativa de quebra de senhas. Para tornar mais difícil a realização de ataques ao servidores O SSH3, além de conhecer as informações sobre a presença do servidor em um determinado endereço IP, pode usar um caminho secreto identificador do servidor SSH3. Sem o envio do identificador correto, o servidor tratará as respostas como um servidor HTTPS comum e não informará a possibilidade de conexão via SSH3. Por exemplo, ao especificar o identificador "e6ae772cbdaafd6918865cc2ce449dae", a conexão ao servidor só pode ser feita pela URL "https://192.0.2.0:443/e6ae772cbdaafd6918865cc2ce449dae"; se o identificador for especificado incorretamente, o servidor retornará um erro padrão "404".
Da funcionalidade avançada do SSH3, destaca-se a capacidade de usar certificados X.509 e métodos OAuth 2.0/OpenID Connect para autenticação, além dos métodos clássicos de SSH; suporte para redirecionamento de portas UDP através do túnel SSH, além da possibilidade de redirecionamento de portas TCP (por exemplo, para encaminhamento de QUIC, DNS e RTP); uso de recursos avançados do protocolo QUIC, como migração de conexões sem interrupção e estabelecimento de conexões multipath para paralelizar o tráfego por várias rotas.
Uma questão importante é a redução significativa do tempo de estabelecimento de conexão ao usar SSH3. Ao conectar-se ao servidor SSH3, são necessárias apenas 3 iterações de rede (Round Trip), enquanto para o SSHv2 são realizadas de 5 a 7 iterações de troca de pacotes. O tempo de resposta para entrada no teclado para sessões já estabelecidas em SSH3 e SSHv2 está no mesmo nível.

Para a criptografia da comunicação no SSH3, é utilizado o protocolo TLS 1.3, e para autenticação, podem ser utilizados métodos clássicos baseados em senhas e chaves públicas (RSA e EdDSA/ed25519). Além disso, no SSH3 podem ser utilizados métodos baseados no protocolo OAuth 2.0, permitindo delegar a autenticação a provedores externos, por exemplo, para permitir o login com confirmação por meio de contas em serviços como Google, Microsoft e GitHub. Para conexão com servidores por chaves, além das chaves SSH, é possível usar certificados X.509, utilizados para HTTPS.
A implementação publicada do cliente e servidor SSH3 suporta muitas funcionalidades básicas do OpenSSH, incluindo:
- Suporte para o arquivo ~/.ssh/authorized_keys com configurações de chaves em servidor.
- Possibilidade de usar o arquivo de configuração ~/.ssh/config do lado do cliente. Atualmente, são suportados os parâmetros Hostname, User, Port e IdentityFile, enquanto os demais são ignorados.
- Suporte à autenticação de conexão ao servidor baseada em certificados.
- Suporte ao mecanismo known_hosts (em situações onde certificados X.509 não são aplicados).
- Suporte para o funcionamento do cliente com o OpenSSH Agent (ssh-agent) e uso automático do agente para autenticação com chaves públicas.
- Suporte para a função de redirecionamento via SSH-agent para uso de chaves locais em um servidor externo.
- Redirecionamento direto de portas TCP.
Fonte: opennet.ru
