Podcast de Redes de Eduardo Collado
Algoritmos de cifrado en SSH
El otro día mirando los algoritmos de cifrado en SSH cayó en mi mano un artículo que empezaba con la siguiente frase:
¿Qué es peor que una clave privada insegura? Una clave pública insegura.
Me parece una frase maravillosa y me pareció un tema muy bueno, lo suficiente como para dedicarle un largo rato de estudio al tema.
Como administradores de sistemas sabemos qué es SSH, o como mínimo si no sabemos qué es sabemos para qué sirve y cómo usarlo.
Sabemos que SSH significa “SHell Segura“, Shell es el interprete de comandos, donde escribimos, pero aquí ¿qué significa segura?
Cuando hablamos de “segura” en ssh nos estamos refiriendo a una combinación de hash, cifrado simétrico y cifrado asimétrico.
Así pues ya sabemos lo que es SSH, y lo utilizaremos para conectar clientes y servidores.
SSH se basa en la Infraestructura de clave pública, conocida por sus siglas en inglés PKI (Public Key Infrastructure)
Infraestructura de clave pública:CA: Autoridad de CertificaciónVA: Autoridad de ValidaciónRA: Autoridad de Registro
A día de hoy los algoritmos criptográficos asimétricos más utilizados en el mundo PKI son RSA, DSA, ECDSA y EdDSA.
Vamos a ver cada uno de ellos y vamos a ver cuando nos interesa usar uno u otro.
Aunque lo primero será saber cómo SSH establece la conexión segura y esto lo hace en la negociación y conexión y posteriormente continuará con la autenticación.
Neogicación y autenticación de SSH
En SSH se podrá establecer la negociación y la conexión siempre y cuando se cumplan una serie de requisitos:
Las versiones de SSH tienen que ser las mismas, aunque lo normal sería que se utiilizara SSH versión 2.0.
Una vez negociada la versión de SSH las máquinas involucradas tendrán que negociar una clave simétrica para cifrar la conexión.
La clave simétrica para cifrar la conexión no es lo mismo que las claves utilizadas para la autenticación, sino que se genera una clave compartida a través del intercambio de claves de Diffie-Helman.
Se utilizan las claves públicas del cliente y la privada del servidor para generar la clave compartida, de esta forma el cliente ya ha autenticado al servidor.
En cuanto a la autenticación se desarrolla una vez que el canal es confiable, en el punto en el que el cliente ha autenticado al servidor, pero el servidor aún no ha autenticado al cliente
Normalmente se utiliza la autenticación de clave pública y esto implica una clave pública y una privada. La gracia es que cualquiera de las dos se puede utilizar para encriptar un mensaje, pero se tiene que desencriptar con la otra.
Lo normal es que si A encripta un mensaje con la llave pública de B, el mensaje sólo lo podrá desencriptar B con su llave privada.
Es con este método con el que se autentica la identidad. Esto tiene el problema de la gestión de llaves, si una llave se distribuye erróneamente: entonces se podrá comprometer dicha llave.
El procedimiento es bastante simple:
* El cliente inicia la conexión SSH.* El servidor envía un mensaje aleatório.* El cliente devuelve ese mensaje encriptado.* Si el servidor lo recibe correctamente entonces se produce la autenticación.