Esto parece demasiado simple y siento que me he perdido algo evidentemente obvio, pero ¿qué sucede realmente cuando usas SSH sin generar un par de claves?
Se ha formulado una variante de esta pregunta.aquíy al igual que la respuesta, siempre entendí que sin el par de claves, SSH recurre a la autenticación de contraseña.
sin embargo, elArtículo de WikipediaSólo describe dos formas de usarlo. Ambos parecen involucrar pares de claves, uno generado manualmente y otro automáticamente.
Hay varias formas de utilizar SSH; Una es utilizar pares de claves públicas y privadas generadas automáticamente para cifrar simplemente una conexión de red y luego utilizar la autenticación de contraseña para iniciar sesión.
Otra es utilizar un par de claves pública y privada generada manualmente para realizar la autenticación, permitiendo a los usuarios o programas iniciar sesión sin tener que especificar una contraseña.
Cuando creo una conexión SSH a un servidor no seguro sin un par de claves, se me solicita mi nombre de usuario y contraseña y luego tengo acceso al shell.
¿La contraseña alternativa es un detalle de implementación y, por lo tanto, no está en la wiki? ¿Se ha generado automáticamente un par de claves, como se sugirió (de ser así, cómo llegó la clave pública al servidor)? ¿O se trata solo de contraseña?
Si utiliza solo la combinación de contraseña y nombre de usuario, ¿se cifran los datos? Si es así, ¿cómo se cifra?
Respuesta1
El artículo de Wikipedia confunde diferentes capas de SSHv2. (Podría haber sidoun pococorrecto para SSHv1 hace una década, pero definitivamente está simplificado al nivel de una tontería).
Los pares de claves SSHv2, tanto la suya como la del servidor, se utilizan paraautenticaciónsoloy la configuración del cifrado siempre se realiza utilizando pares de claves DH generadas temporalmente para cada conexión. Solo el par de claves SSH del servidorseñalesdatos de configuración de cifrado (para demostrar la identidad del servidor), mientras que el par de claves SSH del cliente no se utiliza para este proceso en absoluto.
En SSHv2, cuando se conecta al servidor (después de que ambos extremos intercambien listas de algoritmos compatibles), el primer paso esintercambio de llaves, que de alguna manera genera una clave simétrica utilizada para cifrar toda la conexión. (El servidor también se autentica como efecto secundario de este proceso).
La mayor parte del tiempoD-HoECDHse utilizará para esto, lo que significa:
El cliente genera un par de claves DH (utilizado solo para esta conexión) y envía su clave pública DH.
El servidor también genera un par de claves DH nuevo. También carga su par de claves SSH "clave de host" desde el disco.
Entonces esoseñalesla clave pública DH con la clave privada SSH y envía ambas claves públicas (así como la firma) al cliente.
El cliente verifica la firma y verifica que la clave pública SSH del servidor esté enknown_hosts.
Entonces usa ambosHDclaves (privada del cliente + pública del servidor) para generar la clave de cifrado compartida y desecha su par de claves DH.
El servidor también utiliza ambas claves DH (privada del servidor + pública del cliente) para generar la misma clave de cifrado compartida y también desecha su par de claves DH.
Ambos lados permiten el cifrado.
(Existen otros métodos de intercambio de claves, pero rara vez se utilizan).
El siguiente paso esautenticación de cliente. Observe que en este punto la conexión ya está cifrada, ¡aunque la clave SSH del cliente aún no se haya utilizado!
El cliente envía una "solicitud de servicio" para la autenticación del cliente.
El servidor ofrece algunos mecanismos: "contraseña", "clave pública", posiblemente otros.
Si tiene un par de claves SSH, el cliente selecciona "clave pública", envía sus claves públicas SSH y utiliza su clave privada SSH para firmar algunos datos aleatorios proporcionados por el servidor, para demostrar la propiedad de la clave.
Si no tiene un par de claves SSH, el cliente selecciona "contraseña" y envía su contraseña directamente, pero aún dentro del túnel cifrado.