Como funciona a criptografia SSH?

33

Eu li sobre como gerar 2 chaves (privada e pública) no host do cliente e copiar a chave pública para o host do servidor.

Pelo que entendi, (corrija-me se estiver errado): o servidor criptografa os dados com a chave pública e os envia para o cliente, o cliente os descriptografa com a chave privada.

Mas se eu precisar criptografar dados no cliente para enviar para o servidor, como isso acontece?

A chave pública criptografa dados no cliente? Mas como o servidor pode descriptografá-lo, se ele tiver apenas a chave pública?

Como funciona a criptografia SSH?

    
por DrStrangeLove 29.01.2012 / 21:37

5 respostas

35

A primeira coisa depois de estabelecer a conexão TCP, ambos os sistemas concordam com uma chave de sessão , usando esses protocolos como Troca de chaves DH , ECDH ou GSSAPI. Essa chave é simétrica e temporária - os dois lados usam a mesma chave para criptografar e descriptografar dados usando algoritmos como AES ou RC4 .

O par de chaves do cliente nunca é usado para criptografar dados, apenas para autenticação - "publickey" é um dos vários métodos disponíveis, onde o cliente apresenta sua própria chave pública juntamente com a prova de propriedade de chave privada . Da mesma forma, o par de chaves do servidor é usado apenas para autenticar o servidor durante trocas de chaves DH ou ECDH; nenhum dado é criptografado usando-o.

O protocolo SSH2 está documentado em vários RFCs, incluindo:

  • RFC 4253 - protocolo de camada de transporte Secure Shell (SSH)
  • RFC 4419 - Diffie-Hellman Group Exchange
  • RFC 4432 - Intercâmbio de chaves RSA
  • RFC 4462 - Autenticação GSSAPI & Troca de Chaves
por 29.01.2012 / 22:24
13

Aqui estão alguns exemplos práticos, Suponha que a Chave A foi mantida em segredo e é por isso que a chave privada e a Chave B foram postadas em um local de acesso público e, portanto, é a chave pública.

Portanto, se você quiser enviar uma mensagem para todos e desejar que eles verifiquem que ela veio de você e não foi alterada enquanto estava sendo entregue, envie sua mensagem e inclua um hash da mensagem criptografada com a Chave A. Então, qualquer um que tenha a Chave B pode descriptografar o hash, compará-lo à mensagem recebida e verificar se a mensagem veio de você (devido ao fato de que somente uma pessoa com a Chave A poderia ter gerado a carga criptografada que decifrou com êxito o hash, e porque você é a única pessoa com a Chave A, ela só pode vir de você). Isso é chamado de assinatura .

Agora vamos dizer que alguém quer enviar uma mensagem secreta para você, mas não quer revelar quem ela é. Eles podem criptografar sua mensagem com uma chave simétrica (como Zoredache mencionou simétrica é muito mais barato), então pegue a chave e criptografe com a Chave B e envie para você. Como somente a Chave A pode descriptografar algo que foi criptografado com a Chave B, nenhuma outra pessoa pode ver o que está na mensagem que foi enviada para você. É assim que a criptografia normal funciona e como o SSH troca dados.

    
por 29.01.2012 / 22:28
13

A primeira coisa que eu acho que você precisa entender é que enquanto muitos protocolos de criptografia como SSH e SSL usam PKI para fins de autenticação, quase nenhum desses sistemas usará a PKI para realmente transmitir a carga útil.

A PKI exige muita CPU para ser usada para transmitir os dados reais da carga útil. O que acontece é que a PKI é usada para negociar uma chave gerada aleatoriamente, para ser usada com um protocolo de criptografia simétrica. O protocolo a ser usado também é negociado e deve ser o protocolo mais strong com o qual os dois sistemas podem concordar. Então, uma vez que o aperto de mão inicial e a negociação estejam concluídos, praticamente tudo é apenas criptografia simétrica padrão.

    
por 29.01.2012 / 22:03
3

Aqui é uma descrição relativamente acessível da matemática por trás do funcionamento da criptografia de chave pública privada.

Uma descrição ainda mais básica da BBC é aqui .

    
por 31.01.2012 / 20:06
1

você escreve

"The public key encrypts data on the client? But how can the server decrypt it, if it only has the public key?"

Eu não sei muito sobre isso, mas acho que posso respondê-lo claramente.

Se A quiser enviar uma mensagem para B, A usa a chave pública de B. É assim que B é capaz de descriptografá-lo.

Se A usasse sua própria chave pública para criptografar a mensagem, então, de fato, B não seria capaz de descriptografá-la.

Isso é explicado aqui

link

    
por 02.09.2014 / 00:47