O que exatamente o ssh envia ao executar a negociação de chaves?

10

Ao especificar explicitamente o arquivo de identidade para ssh:

ssh -i ./id_rsa ...

Eu tenho essas linhas no rastreamento de depuração ssh:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

Isso significa que o ssh-generator também id_rsacontém expoente público de RSA? id_rsaO formato parece ser bastante explícito que contém chave privada com o bloco "BEGIN PRIVATE KEY"; portanto, "oferecer chave pública" deve significar algo diferente de "enviar a chave pública ao servidor".

EDITAR:

Para esclarecer, quero saber o que exatamente está acontecendo por trás da linha "oferta de chave pública". Se o cliente possuir várias chaves, todas elas serão oferecidas ao servidor uma a uma.

Alex B
fonte
Para adicionar esse problema, existe um método para o servidor verificar se obtivemos uma boa chave antes do desafio. Porque eu já tinha um servidor recusado nossa chave antes mesmo de descriptografá-la. O erro onde existe por causa do nome não está bem especificado.
Gopoi 29/10/10

Respostas:

12

para conectar-se a um servidor SSH e autenticar com seu par de chaves público / privado, você deve primeiro compartilhar sua chave pública com o servidor.

isso é feito copiando a chave pública da sua chave privada para o servidor e adicionando-a ~/ssh/authorized_keyscopiando / colando, copiando id_rsa.pubpara ~/.ssh/authorized_keyso servidor ou com cat id_rsa.pub >> ~/.ssh/authorized_keys, anexando-a à lista.

quando você se conecta, o servidor usa sua chave pública para assinar um desafio e seu cliente usa sua chave privada id_rsapara descriptografar o desafio, criptografá-lo novamente com o público do servidor host keye enviá-lo de volta.

o host verifica se você descriptografou o desafio corretamente, descriptografando sua resposta com sua chave privada, e o cliente / host estabelece uma conexão criptografada, com base nos dados compartilhados, não nas chaves públicas / privadas.

em NENHUM PONTO, na troca, sua chave privada ou a chave privada do host foram trocadas ou reveladas uma à outra. sua chave pública É armazenada no servidor, mas é por isso que é uma chave PÚBLICA.

cpbills
fonte
Sim, está tudo bem, mas tudo isso acontece antes que o servidor identifique a chave pública para criptografar o desafio. Eu tenho várias chaves e todas elas são "oferecidas" ao servidor, uma por uma. O que exatamente isso implica? E sim, eu sei que a chave privada não é realmente enviada, provavelmente devo remover completamente essa linha da pergunta. : P
Alex B
quando você especifica, ssh -i keynameestá dizendo ao cliente ssh exatamente qual chave você planeja usar para se conectar ao servidor. se você tiver uma dúzia de chaves em ~/.ssh/seu cliente, NÃO iterará em cada chave. procurará ~/.ssh/id_rsa, ~/.ssh/id_dsapotencialmente alguns outros nomes de arquivos codificados no cliente, ou qual chave é especificada para esse host em ~/.ssh/config... breve história; seu cliente não está / oferecendo / nenhuma chave para o servidor.
Cpbills
quando você se conecta, seu / cliente / descriptografa o desafio do servidor e, em seguida, recai na sua lista de chaves privadas locais padronizadas para criptografar o desafio e enviar a resposta. Se a resposta ao desafio falhar, ela / poderá / seguir para o próximo nome-chave codificado, criptografar novamente com / that / private key e tentar novamente. novamente, suas chaves, pública e privada, não são / compartilhadas / com o servidor na autenticação de login.
Cpbills
1
ah, reli seu comentário; host: criptografa o desafio com a chave do host, cliente: descriptografa o desafio com a chave do pub do host, cliente: criptografa o desafio com a chave privada, host: tenta descriptografar o desafio com todas as chaves públicas listadas no ~/.ssh/authorized_keyshost, sabe qual é o desafio e o que ele está procurando pois, assim que uma chave pública a desbloqueia, ela sabe usá-la.
Cpbills
@cpbills, desculpe, esqueci de mencionar que tenho algumas chaves de um agente encaminhado, portanto várias chaves são oferecidas (-vvv log mostra todas elas oferecidas, mesmo que eu especifique o arquivo de identidade).
Alex B
1

A criptografia de chave pública / privada é baseada em um sistema muito simples:

Você tem uma chave pública capaz de executar criptografia unidirecional e uma chave privada capaz de criptografar. A chave pública pode ser dada a todos no mundo, e ninguém poderá descriptografar seus dados criptografados, embora eles possam criptografar dados que você pode descriptografar com sua chave privada.

Portanto, a resposta para sua pergunta é "Sua chave pública".

Satanicpuppy
fonte
Sim, obrigado, eu sei em detalhes como a criptografia de chave pública funciona, mas quero saber as especificidades do protocolo SSH e o formato da chave. Estou interessado em saber se ele armazena o expoente público no arquivo de chave privada ou não? Pelo que sei, "oferecer chave pública" também pode significar assinar um nonce com sua chave privada, para que o servidor possa encontrar uma chave pública correspondente.
Alex B
Sim. ele faz ssh-keygen -y vai lhe dar a chave pública da chave privada, a não funciona inversa
Matt Freeman
1

Acho que não deveria estar enviando a chave pública ou privada no momento. Uma criptografia deve ser executada pelo cliente usando a chave privada em texto sem formatação que já é conhecido pelo servidor. O host pode descriptografar essa mensagem usando a chave pública, sabendo que o único que poderia ter criptografado adequadamente é um cliente que detém a chave privada correspondente, autenticando o cliente.

Acredito que diz Offering public key: ./id_rsaporque usa a chave privada (armazenada em ./id_rsa) para executar uma criptografia em texto sem formatação conhecida pelo servidor e, em seguida, o servidor usará a chave pública para descriptografar esse texto cifrado e confirmar se ele corresponde ao texto sem formatação. O arquivo de chave pública ./id_rsa.pubnunca deve ser necessário pelo cliente após a geração inicial da chave. Isso é usado apenas pelo servidor para descriptografia.

Trey Hunner
fonte
Eu suspeitava que algo assim acontecesse, mas queria algumas especificações (isto é, protocolo de negociação de chaves SSH). Não sei por que você foi votado.
Alex B
Desculpe, minha resposta foi tão animada. Não estou familiarizado com as especificidades da negociação de chaves SSH, apenas com as negociações gerais necessárias na autenticação de chave pública. Eu poderia ter sido rejeitado para a resposta não específica.
Trey Hunner