¿Cómo funciona el cifrado SSH?

34

Leí acerca de generar 2 claves (privadas y públicas) en el host del cliente y copiar la clave pública en el host del servidor.

Según tengo entendido, (corríjame si estoy equivocado): el servidor cifra los datos con la clave pública y los envía al cliente, el cliente los descifra con la clave privada.

Pero si necesito cifrar datos en el cliente para enviarlos al servidor, ¿cómo sucede?

¿La clave pública encripta los datos del cliente? Pero, ¿cómo puede descifrarlo el servidor, si solo tiene la clave pública?

¿Cómo funciona el cifrado SSH?

DrStrangeLove
fuente

Respuestas:

35

Lo primero después de establecer la conexión TCP, ambos sistemas acuerdan una clave de sesión , utilizando protocolos como el intercambio de claves DH , ECDH o GSSAPI. Esta clave es simétrica y temporal: ambas partes usan la misma clave para cifrar y descifrar datos utilizando algoritmos como AES o RC4 .

El par de claves del cliente nunca se utiliza para cifrar datos, solo para la autenticación : la "clave pública" es uno de los varios métodos disponibles, donde el cliente presenta su propia clave pública junto con la prueba de la propiedad de la clave privada. Del mismo modo, el par de claves del servidor solo se utiliza para autenticar el servidor durante los intercambios de claves DH o ECDH; no se encriptan datos al usarlo.

El protocolo SSH2 está documentado en varias RFC , que incluyen:

  • RFC 4253 - Protocolo de capa de transporte Secure Shell (SSH)
  • RFC 4419 - Intercambio del grupo Diffie-Hellman
  • RFC 4432 - Intercambio de claves RSA
  • RFC 4462 - Autenticación GSSAPI e intercambio de claves
Gravedad
fuente
13

Lo primero que creo que debe comprender es que, si bien muchos protocolos de cifrado como SSH y SSL usan PKI para fines de autenticación, casi ninguno de estos sistemas usará PKI para transmitir la carga útil.

PKI es demasiado intensivo en CPU para ser utilizado para transmitir los datos reales de carga útil. Lo que sucede es que la PKI se usa para negociar una clave generada aleatoriamente, para usarse con un protocolo de cifrado simétrico. El protocolo que se utilizará también se negocia, y debe ser el protocolo más sólido en el que los dos sistemas puedan acordar. Entonces, una vez que se realiza el apretón de manos inicial y la negociación, casi todo es solo criptografía simétrica estándar.

Zoredache
fuente
2
Para leer más, eso se explica básicamente en RFC4253 , página 15.
slhck
12

Aquí hay algunos ejemplos prácticos, suponga que la clave A se mantuvo en secreto y es por eso la clave privada y la clave B se publicó en un lugar de acceso público y por lo tanto es la clave pública.

Por lo tanto, si desea enviar un mensaje a todos y desea que verifiquen que proviene de usted y que no se modificó mientras se estaba entregando, debe enviar su mensaje e incluir un hash del mensaje cifrado con la Clave A. Entonces, cualquiera que tiene la clave B puede descifrar el hash, compararlo con el mensaje que recibió y verificar que el mensaje proviene de usted (debido al hecho de que solo una persona con la clave A podría haber generado la carga útil cifrada que descifró correctamente el hash, y porque usted son la única persona con la Clave A, solo podría provenir de usted). Esto se llama Firma .

Ahora digamos que alguien quiere enviarte un mensaje secreto pero no quiere revelar quiénes son. Pueden encriptar su mensaje con una clave simétrica (como Zoredache mencionó que simétrica es mucho más barato de hacer), luego tomar esa clave y encriptarla con la Clave B y enviársela. Debido a que solo la Clave A puede descifrar algo que fue encriptado con la Clave B, ninguna otra persona puede ver lo que está en el mensaje que se le envió. Así es como funciona el cifrado normal y cómo SSH intercambia datos.

Scott Chamberlain
fuente
3

Aquí hay una descripción relativamente accesible de las matemáticas detrás de cómo funciona el cifrado de clave pública-privada.

Una descripción aún más básica de la BBC está aquí .

Chogg
fuente
Agregué un nuevo enlace a la BBC que explica este proceso y parte de la historia.
Chogg
1

usted escribe

"¿La clave pública encripta los datos del cliente? Pero, ¿cómo puede el servidor descifrarlos, si solo tiene la clave pública?"

No sé mucho al respecto, pero creo que puedo responder a eso con bastante claridad.

Si A quiere enviar un mensaje a B, A usa la clave pública de B. Así es como B es capaz de descifrarlo.

Si A usa su propia clave pública para cifrar el mensaje, entonces, de hecho, B no podrá descifrarlo.

Eso se explica aquí

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

barlop
fuente