No protocolo SSH, a Confirmação pelo Servidor é o estágio final e decisivo do processo de troca de chaves (Key Exchange - KEX). Após o cliente e o servidor realizarem os cálculos matemáticos do algoritmo Diffie-Hellman (ou ECDH), o servidor deve enviar uma prova inequívoca de que ele possui a identidade correta e de que o segredo compartilhado foi estabelecido com sucesso. Esta etapa encerra a fase de negociação em texto claro e “tranca” o túnel criptográfico.


1. O Pacote de Assinatura do KEX (KEXDH_REPLY)

A confirmação ocorre através do envio de um pacote específico (geralmente SSH_MSG_KEXDH_REPLY). Este pacote não contém a chave de sessão em si (que nunca é enviada), mas sim três elementos cruciais:

  • A Chave Pública do Host (K_S): O servidor envia sua chave pública para que o cliente possa identificá-lo.

  • O Valor Público do Servidor (f): O resultado do cálculo matemático do servidor (gbmodp).

  • A Assinatura do Hash de Intercâmbio (H): O servidor utiliza sua Chave Privada de Host para assinar um hash que resume toda a conversa tida até aquele momento.


2. Verificação de Identidade (Host Verification)

Ao receber a confirmação, o cliente realiza uma verificação de segurança em duas etapas antes de aceitar o servidor:

  1. Validação Matemática: O cliente usa a chave pública do servidor para verificar a assinatura digital. Se a assinatura for válida, isso prova que o servidor possui a chave privada correspondente e que os dados da negociação não foram alterados por um terceiro (Integridade).

  2. Consulta ao Banco de Dados Local: O cliente compara a chave pública recebida com as chaves armazenadas no arquivo ~/.ssh/known_hosts.

    • Primeiro Acesso: O cliente solicita ao usuário que confirme a digital (fingerprint) da chave.

    • Acessos Posteriores: Se a chave for idêntica, a confirmação é automática. Se for diferente, o SSH aborta a conexão para prevenir um ataque de intercepção.


3. A Mensagem “NEW KEYS”

Uma vez que a identidade do servidor é confirmada e os cálculos do segredo compartilhado (K) batem, ambos os lados enviam a mensagem técnica SSH_MSG_NEWKEYS.

  • Sinalização de Mudança: Esta mensagem avisa à contraparte: “A partir do próximo pacote, tudo o que eu enviar será cifrado com a nova chave de sessão que acabamos de confirmar”.

  • Ativação do Motor de Cifragem: O servidor ativa seus algoritmos simétricos (como AES-GCM ou ChaCha20). O estado da conexão muda de “negociação” para “cifrado”.


4. Garantia de Sigilo Direto (Forward Secrecy)

Um aspecto técnico vital da confirmação pelo servidor é que ela valida um segredo efêmero.

  • O servidor confirma uma chave que só existirá para esta sessão específica.

  • Mesmo que um atacante obtenha a chave privada do servidor no futuro, a confirmação feita nesta sessão permanece segura, pois a chave de sessão assinada não pode ser derivada apenas da chave de host.

5. Transição para a Autenticação de Usuário

A confirmação pelo servidor marca o fim da Camada de Transporte. Com o túnel agora “confirmado” e seguro, o servidor fica em estado de prontidão para receber a próxima fase: o Processo de Autenticação do Usuário.

A partir deste ponto, qualquer tentativa de espionagem mostrará apenas dados cifrados. O servidor provou quem é; agora é a vez do cliente provar quem é o usuário que deseja entrar.