Apunte de TLS/SSL/SSH (Teoría de las Comunicaciones)

De Cuba-Wiki

Plantilla:Back

TLS/SSL (RFC 4346)

Transport Layer Security (TLS) y su predecesor, Secure Sockets Layer (SSL), son protocolos de nivel de aplicación que buscan generar una conexión segura entre un cliente y el servidor.

Los datos enviados a través de este protocolo son primero comprimidos, luego se calcula un MAC (hash con clave) de los mismos para controlar su integridad y finalmente se encriptan usando un algoritmo de clave simétrica para mayor velocidad.

Inicialmente se realiza un handshake entre el cliente y el servidor para acordar los algoritmos y las claves a utilizar.

  1. El cliente envia al servidor un Hello con los algoritmos que este es capaz de utilizar.
  2. El server responde con su Hello, seleccionando los algoritmos a utilizar.
  3. Luego el server envía al cliente un Certificado con su nombre y clave pública, firmado por una autoridad superior.
  4. Al obtener la clave publica del servidor, el cliente inicia el algoritmo de Diffie-Hellman (precursor de RSA, de clave asimétrica), realizan el intercambio de claves y acuerdan un secreto entre ambos.
  5. Una vez acordado el secreto, el servidor firma con su clave privada un hash del mismo para que el cliente verifique.

En este punto el protocolo ya está acordado y se pasa a transmitir en seguro, enviando los datos encriptados. Lo primero que se hace es el envío desde el servidor de un mensaje finished con un resumen de todo lo ocurrido en el handshake para verificar.

El secreto se usa para generar un secreto maestro, del cual se generan cuatro claves: las dos claves simétricas de encriptación de los datos (ida y vuelta) y las dos claves de hashing (ida y vuelta).

Notar que el hashing se hace sobre el mensaje y una clave, lo que se denomina Message Authentication Code (MAC) o Cryptographic Hash, y agrega un nivel más de seguridad; ya que un intruso que intente modificar una parte del mensaje no puede generar el nuevo hash necesario.

SSH (RFC 4251 y otros)

Secure Shell es un protocolo de nivel de aplicación usado para transmitir datos de manera segura. Se divide en tres capas, cada una protege a la superior.

  • La capa de transporte utiliza TLS para garantizar la seguridad de todo lo que se envíe sobre ella.
  • La capa de autenticación del cliente se basa en requerir user/pass para determinar los recursos a acceder del servidor.
  • La capa de conexión permite la multiplexación de canales para transferir distintos recursos simultáneamente.