Introducción
Este documento describe el intercambio de nivel de paquete durante la negociación de Secure Shell (SSH).
Prerequisites
Requirements
Cisco recomienda que conozca los conceptos básicos de seguridad:
- Autenticación
- Confidencialidad
- Integridad
- Métodos de intercambio de claves
Componentes Utilizados
Este documento no tiene restricciones específicas en cuanto a versiones de software y de hardware.
La información que contiene este documento se creó a partir de los dispositivos en un ambiente de laboratorio específico. Todos los dispositivos que se utilizan en este documento se pusieron en funcionamiento con una configuración verificada (predeterminada). Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.
Protocolo SSH
El protocolo SSH es un método para el inicio de sesión remoto seguro de un ordenador a otro. Las aplicaciones SSH se basan en una arquitectura cliente-servidor, que conecta una instancia de cliente SSH con un servidor SSH.
Intercambio SSH
1. El primer paso de SSH se llama Identification String Exchange
.
1.1. El cliente construye un paquete y lo envía al servidor que contiene:
- Versión del protocolo SSH
- Versión del software
Versión de protocolo de cliente y versión de software
1.2. El servidor responde con su propio Intercambio de Cadenas de Identificación, incluyendo su versión de protocolo SSH y versión de software.
Versión de protocolo de servidor y versión de software
2. El siguiente paso es Algorithm Negotiation.
En este paso, tanto el cliente como el servidor negocian estos algoritmos:
- Intercambio de claves
- Cifrado
- Código de autenticación de mensajes (HMAC) basado en hash
- Compresión
2.1. El cliente envía un mensaje Key Exchange Init al servidor, especificando los algoritmos que soporta. Los algoritmos se enumeran por orden de preferencia.
Client Key Exchange Init
Algoritmos admitidos por el cliente
2.2. El servidor responde con su propio mensaje Key Exchange Init, enumerando los algoritmos que admite.
2.3. Dado que estos mensajes se intercambian simultáneamente, ambas partes comparan sus listas de algoritmos. Si hay una coincidencia en los algoritmos soportados por ambos lados, proceden al siguiente paso. Si no hay una coincidencia exacta, el servidor selecciona el primer algoritmo de la lista del cliente que también admite.
Nota: Si el cliente y el servidor no pueden acordar un algoritmo común, el intercambio de claves falla.
Init de intercambio de claves del servidor
3. A continuación, ambos lados entran en la Key Exchang
e
fase para generar el secreto compartido mediante el intercambio de claves DH y autenticar el servidor:
3.1. El cliente genera un par de claves Public and Private,
y envía la clave pública DH en el paquete Diffie-Hellman Group Exchange Init. Este par de claves se utiliza para calcular claves secretas.
Cliente Diffie-Hellman Group Exchange Init
3.2. El servidor genera su propio Public and Private k
par de claves. Utiliza la clave pública del cliente y su propio par de claves para calcular el secreto compartido.
3.3. El servidor también calcula un Hash de Exchange con estas entradas:
- Cadena de identificación de cliente
- Cadena de identificación del servidor
- Carga útil de Client Key Exchange Init
- Carga de Server Key Exchange Init
- Clave pública del servidor desde claves de host (par de claves RSA)
- Clave pública DH del cliente
- Clave pública DH del servidor
- Clave secreta compartida
3.4. Tras calcular el hash, el servidor lo firma con su clave privada RSA.
3.5. El servidor construye un mensaje Diffie-Hellman Group Exchange que incluye:
- Clave pública RSA del servidor (para ayudar al cliente a autenticar el servidor)
- DH Clave pública del servidor (para calcular el secreto compartido)
- HASH (para autenticar el servidor y probar que el servidor ha generado el secreto compartido, ya que la clave secreta forma parte del cálculo del hash)
Respuesta de intercambio de grupo Diffie-Hellman del servidor
3.6. Después de recibir la respuesta de Diffie-Hellman Group Exchange, el cliente calcula el hash de la misma manera y lo compara con el hash recibido, descifrándolo mediante la clave pública RSA del servidor.
3.7. Antes de descifrar el HASH recibido, el cliente debe verificar la clave pública del servidor. Esta verificación se realiza a través de un certificado digital firmado por una autoridad de certificación (CA). Si el certificado no existe, corresponde al cliente decidir si acepta la clave pública del servidor.
Nota: Cuando utiliza SSH para iniciar sesión en un dispositivo por primera vez que no utiliza un certificado digital, puede encontrar una ventana emergente solicitándole que acepte manualmente la clave pública del servidor. Para evitar ver esta ventana emergente cada vez que se conecte, puede agregar la clave de host del servidor a la caché.
Clave pública del servidor
4. Dado que el secreto compartido ahora se genera, ambos extremos lo utilizan para derivar estas claves:
- Claves de cifrado
- Llaves IV - Estos son números aleatorios utilizados como entrada de algoritmos simétricos para mejorar la seguridad.
- Claves de integridad
El final del intercambio de claves se señala mediante el intercambio del NEW KEYS
mensaje, que informa a cada parte de que todos los mensajes futuros están cifrados y protegidos mediante estas nuevas claves.
Claves nuevas de cliente y servidor
5. El paso final es la solicitud de servicio. El cliente envía un paquete de petición de servicio SSH al servidor para iniciar la autenticación de usuario. El servidor responde con un mensaje de aceptación del servicio SSH, solicitando al cliente que inicie sesión. Este intercambio ocurre sobre el canal seguro establecido.
Información Relacionada