Antes de mais nada, você deve entender o conceito de uma troca Diffie-Hellman. Ele permite estabelecer um canal entre dois pontos de extremidade com esses recursos:
- Protege contra a escuta. Alguém farejando o canal não pode descriptografá-lo.
- Diffie-Hellman NÃO protege contra ataques man-in-the-middle. Esse tipo de ataque é evitado através da verificação da chave do host. Isso é feito após a troca DH, por isso é criptografado e não pode ser analisado com wireshark neste momento.
-
Ele gera um número aleatório que não pode ser determinado por nenhum dos pares sozinho, mas os dois juntos. Este é um conceito interessante para mim.
-
No artigo da Wikipédia, aqui está uma estrutura simplificada da troca:
- Seja g um número público conhecido de um grupo cíclico finito.
- Alice escolhe um número natural aleatório a e envia g a para Bob.
- Bob escolhe um número natural aleatório b e envia g b para Alice.
- Alice calcula (g b ) a = g ab
- Bob calcula (g a ) b = g ab
Como resultado, eles geraram um segredo aleatório seguro g ab .
E AGORA PARA A CAPTURA DO WIRESHARK!
-
SSHv2 Client: Inicio do Exchange de Chaves
Vários parâmetros de negociação, como compressão e alguns algoritmos de criptografia.
-
Servidor SSHv2: inicialização do Exchange de chaves
Responder acima
-
Cliente SSHv2: Iniciação do Exchange de Chave Diffie-Hellman
Negociação dos parâmetros DH sobre o grupo matemático. (Veja RFC4419 seção 3 para mais detalhes).
-
Servidor SSHv2: Resposta de troca de chaves Diffie-Hellman
Responder acima.
-
Cliente SSHv2: Init Giff Diffie-Hellman
Primeira troca real de DH. Após a notação do wikipedia, este seria o passo 2 (Alice envia g a ).
-
Servidor SSHv2: Diffie-Hellman GEX Reply
A troca termina (Bob envia g b ).
Depois de receber este pacote, os dois pares conhecem a chave secreta (g ab ) e estabelecem um canal pseudo-seguro com ela (seguro contra espionagem casual, mas não contra o interceptor man-in-the-middle). ataques).
-
Cliente SSHv2: novas chaves
Isso parece uma simples mensagem de confirmação para mim. É pequeno e não contém dados significativos.
Ok, suponho que há muita coisa acontecendo depois disso (verificação de chave pública do servidor, autenticação do usuário, estabelecimento de canais de dados para shell / sftp / scp / tunnels, etc). Eu não sei os detalhes exatos e (des) felizmente tudo isso é criptografado.
Referências úteis: