Como a criptografia SSH funciona?

34

Eu li sobre a geração de 2 chaves (privadas e públicas) no host do cliente e a cópia da chave pública no host do servidor.

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

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

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

Como a criptografia SSH funciona?

DrStrangeLove
fonte

Respostas:

35

Primeira coisa após estabelecer a conexão TCP, ambos os sistemas concordam com uma chave de sessão , usando protocolos como troca de chave 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 da 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árias RFCs , incluindo:

  • RFC 4253 - Protocolo de camada de transporte Secure Shell (SSH)
  • RFC 4419 - Troca de grupo Diffie-Hellman
  • RFC 4432 - Troca de chaves RSA
  • RFC 4462 - Autenticação GSSAPI e troca de chaves
gravidade
fonte
13

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

A PKI é muito intensiva da 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 forte com o qual os dois sistemas possam concordar. Assim, uma vez que o aperto de mão inicial e a negociação sejam concluídos, praticamente tudo será apenas criptografia simétrica padrão.

Zoredache
fonte
2
Para ler mais, que é basicamente explicado em RFC4253 , página 15.
slhck
12

Aqui estão alguns exemplos práticos: Assuma que a Chave A foi mantida em segredo e, portanto, a chave privada e a Chave B foi publicada em um local acessível ao público e, portanto, é a chave pública.

Portanto, se você deseja enviar uma mensagem para todos e verificar se ela veio de você e foi inalterada durante a entrega, envie sua mensagem e inclua um hash da mensagem criptografada com a Chave A. Então, qualquer pessoa que A chave B pode descriptografar o hash, compará-lo com a mensagem recebida e verificar se a mensagem foi enviada por você (devido ao fato de que apenas uma pessoa com a chave A pode ter gerado a carga criptografada que descriptografou com êxito o hash e porque você é a única pessoa com a Chave A que só pode vir de você). Isso é chamado de assinatura .

Agora, digamos que alguém queira lhe enviar uma mensagem secreta, mas não queira revelar quem eles são. Eles podem criptografar sua mensagem com uma chave simétrica (como Zoredache mencionou que simétrico é muito mais barato de fazer), em seguida, pegar essa chave e criptografá-la com a Chave B e enviá-la para você. Como apenas 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 a você. É assim que a criptografia normal funciona e como o SSH troca dados.

Scott Chamberlain
fonte
3

Aqui está uma descrição relativamente acessível da matemática por trás de como a criptografia de chave pública-privada funciona.

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

Chogg
fonte
Eu adicionei um novo link para a BBC explicando esse processo e um pouco da história.
precisa saber é o seguinte
1

você escreve

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

Não sei muito sobre isso, mas acho que posso responder claramente.

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

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

Isso é explicado aqui

http://www.comodo.com/resources/small-business/digital-certificates2.php

barlop
fonte