O artigo da Wikipedia está confundindo diferentes camadas SSHv2. (Ele pode ter sido um pouco correto para o SSHv1 há uma década, mas é definitivamente simplificado ao nível do absurdo.)
Os pares de chaves SSHv2, tanto seus como servidores, são usados somente para autenticação , e a configuração da criptografia é sempre feita usando pares de chaves DH temporariamente gerados para cada conexão. O par de chaves SSH do servidor apenas assina dados de configuração de criptografia (para provar a identidade do servidor), enquanto o par de chaves SSH do cliente não é usado para esse processo.
No SSHv2, quando você se conecta ao servidor (depois de ambas as extremidades trocarem listas de algoritmos suportados), o primeiro passo é troca de chaves , que de alguma forma gera uma chave simétrica usada para criptografar toda a conexão. (O servidor também é autenticado como um efeito colateral desse processo.)
Na maioria das vezes D – H ou ECDH será usado para isso, o que significa:
-
O cliente gera um par de chaves DH (usado somente para esta conexão) e envia sua chave pública DH.
-
O servidor também gera um novo par de chaves DH. Ele também carrega seu par de chaves SSH "host key" do disco.
Em seguida, ele assina a chave pública DH com a chave privada SSH e envia as chaves públicas (assim como a assinatura) para o cliente.
-
O cliente verifica a assinatura e verifica se a chave pública SSH do servidor está em known_hosts.
Em seguida, ele usa as duas chaves DH (público + servidor público do cliente) para gerar a chave de criptografia compartilhada e descarta o par de chaves DH.
-
O servidor também usa as duas chaves DH (private do cliente + do servidor) para gerar a mesma chave de criptografia compartilhada e também joga fora seu par de chaves DH.
-
Ambos os lados ativam a criptografia.
(Existem alguns outros métodos de troca de chaves, mas eles raramente são usados.)
O próximo passo é autenticação do cliente . Observe que, neste momento, a conexão já está criptografada, mesmo que a chave SSH do cliente ainda não tenha sido usada!
-
O cliente envia uma "solicitação de serviço" para autenticação do cliente.
-
O servidor oferece alguns mecanismos - "senha", "chave pública", possivelmente outros.
-
Se você tiver um par de chaves SSH, o cliente seleciona "chave pública", envia suas chaves públicas SSH e usa sua chave privada SSH para assinar alguns dados aleatórios fornecidos pelo servidor para comprovar a propriedade das chaves.
Se você não tiver um par de chaves SSH, o cliente selecionará "senha" e enviará sua senha diretamente - no entanto, ainda dentro do túnel criptografado.