Una introducción de arriba hacia abajo a SSH y cómo permite el intercambio seguro de datos

Este artículo adoptará un enfoque de alto nivel y de arriba hacia abajo para explicar cómo funciona SSH y cómo se usa para comunicarse de forma segura con computadoras remotas.

En primer lugar, veremos cómo una sesión SSH es realmente 'segura' y cómo las computadoras establecen y configuran una sesión SSH. También veremos los beneficios de usar SSH.

Nota: Esto está pensado como notas futuras para mí, ¡pero espero que también aprendas algo de él!

¿Qué es SSH?

SSH es la abreviatura de "shell seguro". Es un protocolo para compartir datos entre dos computadoras a través de Internet.

Un protocolo es esencialmente un conjunto de reglas que definen el lenguaje que las computadoras pueden usar para comunicarse.

Normalmente, las dos computadoras involucradas son su computadora (el "cliente") y un servidor remoto (el "host").

¿Por qué nos importa?

Comunicaciones seguras entre computadoras

Siempre que dos computadoras se comuniquen a través de Internet, queremos estar seguros de que nuestros mensajes no pueden ser interceptados y comprendidos por nadie que los escuche.

Imagine enviar sus datos bancarios a través de Internet para comprar algo en línea. Si sus mensajes no estaban encriptados, entonces cualquier computadora que estuviera escuchando o cualquier computadora que recibió los mensajes para transmitirlos puede ver su número de cuenta y su contraseña. ¡Eso no es bueno!

Creo que este es un concepto importante de entender para cualquiera que aspire a trabajar con tecnologías web.

Acceso seguro a computadoras remotas

Usar SSH para verificar la autenticación es una forma más segura de autenticación que usar una contraseña. Exploraremos cómo funciona esto a continuación.

¿Cómo es SSH seguro?

SSH es una forma segura de enviar comunicaciones entre dos computadoras.

Por "seguro", me refiero a una forma de codificar los mensajes en una computadora cliente de modo que la única otra computadora que puede decodificar los mensajes y comprenderlos es el host. Esta codificación / decodificación se llama cifrado, por lo que lo que realmente queremos decir aquí es que SSH es seguro porque utiliza un canal de comunicación cifrado.

¿Cómo se establece una sesión SSH?

Hay varios procesos que deben suceder entre dos computadoras para que comience una sesión SSH.

  1. Primero, necesitamos una forma de configurar un método seguro para intercambiar mensajes entre las computadoras. Necesitamos configurar un canal encriptado.
  2. Necesitamos una forma de comprobar que los datos recibidos por el host no hayan sido manipulados. Esto se llama verificación y aquí estamos verificando la integridad de los datos que nos envía el cliente.
  3. Verificación (nuevamente). Necesitamos una forma de comprobar que la computadora con la que nos estamos comunicando no es un impostor. Esta es otra forma de verificación, pero aquí estamos verificando la identidad de la computadora.

Después de estos tres pasos, ahora podemos comunicarnos de forma segura con una computadora remota.

Después de estos pasos, podemos compartir datos 'secretos' de forma segura y también podemos verificar si un cliente tiene permiso para acceder a un host de una manera más segura que usando una contraseña. Este proceso se denomina autenticación mediante cifrado asimétrico.

Cada una de estas secciones a continuación entrará en más detalles sobre estos pasos.

Configurar un canal encriptado

Una parte fundamental del protocolo SSH es que es seguro (¡está incluso en el nombre!), Lo que significa que toda la información que se envía mediante SSH está encriptada.

¿Cómo se cifra esta información?

Básicamente, encriptar solo significa 'mezclar las letras' usando algunas matemáticas inteligentes. Ambas computadoras deben tener unforma de cifrar la información para que solo la otra computadora pueda descifrar la información y comprenderla.

¿Como funciona esto?

Ambas computadoras tienen una versión idéntica de una clave simétrica. La clave simétrica es solo una cadena de letras almacenadas en algún lugar de las computadoras. Las computadoras pueden usar las claves simétricas para encriptar y también desencriptar los mensajes que se les envíen.

El uso de este enfoque de clave simétrica se denomina cifrado simétrico. La parte 'simétrica' proviene del hecho de que la clave simétrica en cada computadora es idéntica. Este enfoque funciona realmente bien ... pero solo funciona mientras ninguna otra computadora tenga acceso a la clave simétrica.

Un problema

¿Cómo saben ambas computadoras cuál es la clave simétrica?

Una computadora podría crearlo y enviarlo en un mensaje a través de Internet. Pero los mensajes no estarían cifrados todavía, por lo que cualquiera que interceptara los mensajes tendría instantáneamente la clave simétrica ... y podría descifrar todas las comunicaciones futuras. ¡Eso es malo!

Esto a veces se denomina problema de "intercambio de claves". Está claro que necesitamos agregar otro paso en el proceso antes de que podamos usar claves simétricas.

Una solución

Una solución al problema de 'intercambio de claves' anterior es que ambas computadoras comparten información pública entre sí (es 'pública', lo que significa que no les importa si alguien la intercepta) y combinan esto con alguna información en su propia computadora para crear de forma independiente claves simétricas idénticas .

Estas claves simétricas se pueden utilizar en el cifrado simétrico de la forma descrita anteriormente.

Como funciona esto

Ambas computadoras tienen cada una su propia clave privada y clave pública. Juntos forman un par de claves . Las computadoras comparten sus claves públicas entre sí a través de Internet. Entonces, en este punto del proceso, cada computadora sabe

  • su propia clave privada,
  • su propia clave pública,
  • y la clave pública de la otra computadora.

Generando claves simétricas

Luego, ambas computadoras usan estas 3 piezas de información para generar de forma independiente una clave simétrica idéntica .

Cada computadora utiliza un algoritmo matemático que utiliza las 3 entradas mencionadas anteriormente. Este algoritmo es parte del algoritmo de intercambio de claves Diffie-Hellman. El algoritmo que se ejecutará en cada computadora es algo como esto:

Hostpub_2 = other computer's public keypub_1 = my public keypri_1 = my private key
f(pub_2, pub_1, pri_1) = abcdefg // Symmetric Key
Client:f(pub_1, pub_2, pri_2) = abcdefg // Symmetric Key

Lo importante aquí es que las computadoras solo han compartido información pública a través de Internet, ¡ pero aún han podido crear claves simétricas!

El enfoque de utilizar pares de claves y compartir información pública para generar claves simétricas idénticas se denomina cifrado asimétrico . Se llama "asimétrico" porque ambas computadoras comienzan con sus propios pares de claves diferentes.

Hasta ahora: hemos visto cómo usar el cifrado asimétrico para generar de forma independiente claves simétricas idénticas en ambas computadoras de forma segura (resolviendo el problema del intercambio de claves) y luego intercambiar información de forma segura entre computadoras utilizando claves simétricas para el cifrado y el descifrado.

Verificación

Para que podamos comunicarnos de forma segura. Pero la siguiente parte del proceso de establecer una sesión SSH es verificar que los datos no hayan sido manipulados a medida que se transmitieron y que la otra computadora es realmente quien dice ser.

¿Porqué necesitamos esto?

Otra computadora podría hacerse pasar por una de las computadoras e iniciar el intercambio de claves anterior. Entonces, ¿cómo de forma segura a averiguar que el mensaje es en realidad de otro equipo y no de un impostor?

Hashing

Tenemos que usar una función hash . Esta es solo una función matemática que toma entradas y produce una cadena de un tamaño fijo.

La característica importante de esta función es que es virtualmente imposible averiguar cuáles eran las entradas simplemente usando las salidas.

Después de que un cliente y un host hayan generado sus claves simétricas, el cliente utilizará una función hash para generar un HMAC. Esto solo significa "código de autenticación de mensajes basado en hash". Esta es solo otra cadena de caracteres / números. El cliente enviará este HMAC al servidor para su verificación.

Los ingredientes de la función hash son

  • La clave simétrica en el cliente.
  • El número de secuencia del paquete (cada mensaje que se envía está contenido en un 'paquete' de información)
  • El contenido del mensaje (¡cifrado!)

Un ejemplo con datos falsos:

symm_key = abcdefgpkge_no = 13encr_message = encrypted_password
Hash(symm_key, pkge_no, encr_message) = *HMAC* // Hashed value

¿Cómo usa el anfitrión esta información?

Cuando el host recibe el HMAC, puede usar la misma función hash con estos tres ingredientes:

  • su propia copia de la clave simétrica (¡idéntica!),
  • el número de secuencia del paquete,
  • y el mensaje cifrado.

Si el valor hash que calcula es el mismo que el HMAC que recibió del cliente, entonces hemos verificado que la computadora que se conecta es la misma que la computadora que tiene la clave simétrica.

Recuerde que solo el host y el cliente saben cuál es la clave simétrica y ninguna otra computadora lo sabe.

Así que aquí no importa que el host no conozca el contenido decodificado del mensaje cifrado, ¡el host aún ha verificado la identidad de la computadora que se conecta!

La belleza de este enfoque es que no solo hemos verificado la identidad del cliente y nos hemos asegurado de que los datos no hayan sido manipulados, sino que lo hemos hecho de forma segura ( sin compartir ninguna información privada) .

Resumen: utilizamos una función hash en el cliente y luego en el host para verificar la integridad de los datos y verificar la identidad del cliente.

Autenticación

La parte final de la comunicación segura con computadoras remotas es:

incluso si hemos generado claves simétricas con la computadora de conexión y

incluso si estamos usando las claves simétricas para comunicarnos de forma segura y

incluso si la computadora que se conecta es realmente el cliente que esperamos y no un impostor,

entonces hemos configurado una sesión SSH ... pero ¿la computadora que se conecta tiene permiso para acceder al contenido del host?

Esto se llama 'autenticación': el acto de verificar permisos y derechos de acceso.

Hay dos formas de verificar la autenticación:

1 — Usando una contraseña

El cliente puede enviar al anfitrión un mensaje (encriptado) que contiene una contraseña. El anfitrión puede descifrar el mensaje y verificar la contraseña en una base de datos para verificar si el cliente tiene permiso para acceder al 'usuario' especificado (área de la computadora). Trabajo hecho.

2 - Uso de pares de claves y cifrado asimétrico

Anteriormente, vimos cómo el cifrado asimétrico puede usar dos pares de claves para generar de forma segura claves simétricas idénticas tanto en el cliente como en el host. Con ideas similares, el cliente puede iniciar sesión sin contraseña .

Este es un enfoque de muy alto nivel sobre cómo funciona el proceso:

Configuración:

En el cliente, diríjase a la terminal y use un comando para generar una clave pública y una clave privada (debajo de la superficie usa 'RSA', un algoritmo matemático) en el cliente. Copie la clave pública (¡NO la clave privada!) En el portapapeles.

Repito: Copie la clave PÚBLICANO LA LLAVE PRIVADA !) Al portapapeles.

Luego, en la terminal del cliente, use una contraseña para iniciar sesión de forma remota en el host. Pegue la clave pública del cliente en la carpeta correspondiente del host junto con cualquier otra clave pública.

Ahora, el anfitrión tiene

  • Es su propio par de claves públicas / privadas
  • La clave pública del cliente

Si observa la sección anterior sobre el algoritmo de intercambio de claves, puede ver cómo el host tiene todos los ingredientes que necesita para generar una clave simétrica.

Desafiante:

Cuando el cliente quiere conectarse, el host puede usar emitir un 'desafío' enviando un mensaje que ha sido encriptado (con la clave simétrica del host) y decir: '¡Solo te autorizaré el acceso si puedes descifrar este mensaje!'.

El cliente entonces tiene

  • su propia clave pública y privada
  • la clave pública del anfitrión
  • el mensaje encriptado

Así que ahora el cliente tiene todo lo necesario para generar una clave simétrica (idéntica)… ¡y descifrar el mensaje! Puede descifrar el mensaje y enviar la confirmación de que ha "tenido éxito" en el desafío al host.

El anfitrión está satisfecho de que el cliente que se conecta está autorizado y concede permiso de acceso.

¿Por qué molestarse en utilizar el segundo enfoque?

Esto se considera más seguro que simplemente usar una contraseña porque un bot puede usar un enfoque de 'fuerza bruta' para seguir usando muchas combinaciones para adivinar su contraseña, pero no tendrán los pares de claves correctos para que el segundo enfoque funcione.

Otras lecturas:

Tutorial de SSH para principiantes: cómo funciona SSH

SSH, o Secure Shell, es un protocolo de administración remota que permite a los usuarios controlar y modificar sus servidores remotos… www.hostinger.com

//www.udemy.com/the-complete-junior-to-senior-web-developer-roadmap/

Conclusión

SSH es una herramienta importante que se utiliza para controlar de forma remota otras computadoras.

SSH es seguro porque ambas computadoras pueden cifrar y descifrar mensajes utilizando claves simétricas idénticas (conocido como "cifrado simétrico").

Los pasos principales para iniciar una sesión SSH son:

  1. Configuración de un canal cifrado. Usar cifrado asimétrico para resolver el problema del intercambio de claves que genera de forma independiente claves simétricas idénticas en ambas computadoras sin compartir información privada
  2. Verificación: uso de hash en ambas computadoras para verificar la identidad de la computadora que se conecta
  3. Verificación (nuevamente). El uso de hash en ambas computadoras para verificar la integridad de los datos no se ha visto comprometido en la transmisión.

Luego, podemos usar SSH para enviar datos de forma segura entre las computadoras. Un caso de uso importante de esto es la autenticación. Aunque puede utilizar una contraseña, el uso de cifrado asimétrico para comprobar que el "cliente" que se conecta tiene permiso para acceder al "host" se considera más seguro.

Si está interesado en subir de nivel su SSH, le recomiendo seriamente este curso. ¡Me pareció muy útil perfeccionar algunas de mis habilidades! ( descargo de responsabilidad: no tengo enlaces ni vínculos con el autor o la plataforma. Tomé el curso hace un tiempo y lo encontré realmente bueno).

¡Gracias por leer!