Sei sulla pagina 1di 46

Conexiones seguras

SSL/TLS - SSH

Principios, herramientas y protocolos de criptografía


Yann Frauel – Semestre 2007-1
1. Secure Socket Layer /
Transport Layer Security
SSL/TLS
 SSL desarrollado por Netscape (v2, v3)
 Estandarizado por IETF como TLS
 TLS 1.0 sería SSL 3.1 (parecido a SSL 3.0 pero
incompatible)
 Versión actual TLS 1.1 (RFC 4346)
 Comunicación segura a través de Internet
➔ Confidencialidad
➔ Autenticación (del servidor)
➔ Integridad
 Corre debajo de los protocolos usuales
➔ HTTP, FTP, POP...
SSL/TLS
 Encripción simétrica
 Claves públicas para
➔ Autenticación
➔ Intercambio de claves
 PKI centralizado
➔ Autoridades de certificación
➔ Certificados X.509
 Algoritmos negociados
➔ Claves públicas: RSA, DSA, Diffie-Hellman
➔ Cifrados simétricos: RC2, RC4, IDEA, DES, 3DES, AES
➔ Funciones de hash: MD5, SHA-1
TLS 1.1

Protocolo de Protocolo
Protocolo de
negociación de datos
alertas
(handshake prot.) de aplicación
SSL/TLS

Protocolo de paquetes
(record protocol)

TCP/IP
Función seudo-aleatoria

 Función seudo-aleatoria PRF para expansión de


secreto
 A partir de un secreto compartido, genera las claves:
➔ Clave MAC cliente
➔ Clave MAC servidor
➔ Clave cifrado cliente
➔ Clave cifrado servidor
 Basada en funciones de hash
 Usa una función auxiliar P_hash
 P_hash y PRF generan un flujo de clave
Función seudo-aleatoria

Función auxiliar P_hash (secreto, semilla)

Semilla

Estado A +

HMAC_hash HMAC_hash P_hash

Secreto
Inicialmente A = Semilla
Función seudo-aleatoria
Función PRF (secreto, etiqueta, semilla)

Secreto
S1 S2

S1 P_MD5 (S1, Etiqueta + Semilla)

Etiqueta + Semilla ⊕ PRF

S2 P_SHA1 (S2, Etiqueta + Semilla)


Función seudo-aleatoria

 PRF segura si al menos MD5 o SHA1 seguro


 Requiere diferente número de iteraciones para
P_MD5 y P_SHA1 (16 vs 20 bytes)
 Etiqueta es un nombre ASCII que describe en que
ámbito se está usando la función
Protocolo de negociación (handshake protocol)

 Autenticación por claves públicas (certificados)


➔ Servidor
➔ Cliente (opcional)
 Negociación de los parámetros de la sesión
➔ Identificador de sesión
➔ Algoritmos de firma, cifrado, MAC, compresión
 Establecimiento del secreto compartido (48 bytes)
Protocolo de negociación
Servidor
Cliente

Client hello

● Versión de SSL del cliente (3.2)


● Sello de tiempo

● 28 bytes aleatorios

● ID de sesión (para reabrir sesión) o vacío

● Lista de combinaciones de algoritmos

(intercambio de clave, cifrado, MAC)


● Lista de algoritmos de compresión (incluye null)
Protocolo de negociación
Servidor
Cliente

Server hello

● Mejor versión de SSL del servidor


compatible con la versión del cliente
● Sello de tiempo

● 28 bytes aleatorios

● ID de sesión

● Combinación de algoritmos escogida

● Algoritmos de compresión escogido


Protocolo de negociación
Servidor
Cliente

Server certificate (opcional)

Certificado X.509 del servidor

Certificado X.509 de la Autoridad de Certificación 1

Certificado X.509 de la Autoridad de Certificación 2

...
Protocolo de negociación
Servidor
Cliente

Server key exchange (opcional)

Parámetros para establecer el secreto común


● RSA: clave pública temporal para cifrar el secreto

● Diffie-Hellman: p, g, gx

Firma (incluye los números aleatorios de


Client_hello y Server_hello)

Sólo si la información contenida el el certificado no es suficiente


Protocolo de negociación
Servidor
Cliente

Certificate request (opcional)

Pide al cliente que se autentique


Protocolo de negociación
Servidor
Cliente

Server hello done

El cliente verifica la validez


del certificado del servidor
Protocolo de negociación
Servidor
Cliente

Client certificate (opcional)

Certificado X.509 del cliente

Certificado X.509 de la Autoridad de Certificación 1

Certificado X.509 de la Autoridad de Certificación 2

...

Sólo si el servidor mandó un Certificate request


Protocolo de negociación
Servidor
Cliente

Client key exchange

Establecimiento del pre-secreto común


● RSA: genera 48 bytes aleatorios y los cifra

con la clave RSA (temporal o permanente)


● Diffie-Hellman: genera y manda gy

Secreto principal = 48 primeros bytes de


PRF (pre-secreto, “master secret”, No. aleatorio cliente + No. aleatorio servidor)
Protocolo de negociación
Servidor
Cliente

Certificate verify (opcional)

Firma de la compilación de todos los mensajes


de negociación anteriores
Protocolo de negociación
Servidor
Cliente

Change cipher spec

Pide aplicar los nuevos parámetros negociados


Protocolo de negociación
Servidor
Cliente

Finished

Primeros 12 bytes de
PRF (secreto principal, “client finished”,
MD5(negociación) + SHA1(negociación) )

Notifica el fin de la secuencia y


permite verificar que los nuevos parámetros funcionan
Protocolo de negociación
Servidor
Cliente

Change cipher spec

Pide aplicar los nuevos parámetros negociados


Protocolo de negociación
Servidor
Cliente

Finished

Primeros 12 bytes de
PRF (secreto principal, “server finished”,
MD5(negociación) + SHA1(negociación) )
Generación de las claves

 Generar
PRF (secreto principal, “key expansion”,
No. aleatorio cliente + No. aleatorio servidor)
 Partir este flujo aleatorio en
➔ Clave MAC cliente
➔ Clave MAC servidor
➔ Clave cifrado cliente
➔ Clave cifrado servidor
Protocolo de alertas

 Manda mensajes de control


➔ Errores (advertencias o fatales)
➔ Terminación
 Paquetes comprimidos, cifrados por la capa del
protocolo de paquetes
Protocolo de datos de aplicación

 Pasa los datos de la capa superior (HTTP, FTP...) a


la capa de protocolo de paquetes para ser
comprimidos, cifrados, etc.
Protocolo de paquetes (record protocol)

 Proporciona privacidad
➔ Encripción simétrica
 Proporciona integridad
➔ MAC con clave (HMAC_MD5, HMAC_SHA1)
 Encapsula los datos de la capa superior
➔ Fragmenta en bloques menores que 16384 bytes
➔ Comprime (opcional)
➔ Calcula MAC
➔ Cifra
Protocolo de paquetes (record protocol)

Estructura de los paquetes: cifrado de flujo

➔ Tipo de contenido (alerta, negociación, aplicación)


➔ Versión del protocolo (3.2)
➔ Longitud del bloque cifrado

➔ Contenido (comprimido)
➔ MAC
Protocolo de paquetes (record protocol)

Estructura de los paquetes: cifrado de bloques

➔ Tipo de contenido (alerta, negociación, aplicación)


➔ Versión del protocolo (3.2)
➔ Longitud del bloque cifrado

➔ Vector de inicialización
➔ Contenido (comprimido)
➔ MAC
➔ Relleno (hasta múltiple del tamaño de bloque)
➔ Longitud del relleno
2. Secure Shell SSH
Protocolo SSH 2.0

 RFCs 4250-4246
 Establecer un canal seguro entre cliente y servidor
➔ Sesión de comandos remota (reemplaza telnet, rsh, rlogin)
➔ Transmisión de archivos (sftp, scp)
➔ Re-envio de puertos (Ej. X11, correo, VNC...)
 Tres capas
➔ Capa de transporte
➔ Capa de autenticación del usuario
➔ Capa de conexión
 SSH2 incompatible con SSH1 (obsoleto)
Protocolo SSH 2.0

 Confidencialidad (encripción)
 Integridad (MAC)
 Autenticación
➔ Computadora servidor
➔ Computadora cliente (opcional)
➔ Usuario
 Basado en claves públicas
Protocolo de capa de transporte

 RFC 4253
 Protocolo de bajo nivel
 Corre encima de TCP/IP (puerto 22)
 Asegura la autenticación del servidor
 Proporciona encripción, integridad y compresión
(opcional)
 Maneja el intercambio de clave inicial y las
renovaciones (recomendadas después de 1GB
transmitidos o 1 hora)
 Todos los algoritmos son negociados
Protocolo de capa de transporte
Negociación de los algoritmos
Cliente

Lista de algoritmos preferidos:


● Intercambio de clave (Diffie-Hellman, varios parámetros)
Lista de algoritmos

Lista de algoritmos

● Clave del servidor (dsa*, rsa)

● Encripción Cliente-Servidor (3des-cbc*, aes128-cbc, rc4...)


preferidos
preferidos

● Encripción Servidor-Cliente (idem)

● MAC Cliente-Servidor (hmac-sha1*, hmac-md5,...)

● MAC Servidor-Cliente (idem)

● Compresión Cliente-Servidor (none*, zlib...)

● Compresión Servidor-Cliente (idem)

*
requerido

Servidor
Protocolo de capa de transporte
Intercambio de clave (Diffie-Hellman)
Servidor
Cliente

X = gx mod p Y = gy mod p
X K = X y mod p
H=hash( KS | X | Y | K )
s = firmaKs (H)
K = Y x mod p KS, Y, s
H=hash( KS | X | Y | K )
VerificaKs (H,s)
Opcional: verifica validez de KS , clave pública del servidor
(base de datos local o certificado)
Protocolo de capa de transporte
Intercambio de clave (Diffie-Hellman)

 Firma con KS autentica servidor (≠ D-H original)


 H = identificador de sesión (usado para aut. usuario)
 K = secreto compartido, usado para derivar las
claves simétricas y Vectores de Inicialización (a
través de un hash con H y constantes)
 No verificar la validez de KS es más cómodo pero
posibilidad de ataque del Hombre-en-el-Medio
➔ Solución intermedia: aceptar 1ra vez y memorizar KS en
una base de datos local
Protocolo de capa de transporte

Paquetes binarios

● Longitud del paquete


● Longitud del relleno

● Datos (eventualmente comprimidos)

● Relleno aleatorio (hasta múltiple

del tamaño de bloque, min. 4 B)

MAC

MAC = MAC ( Clave, Número de secuencia, Paquete no cifrado )


Protocolo de autenticación del usuario

 Definido en el RFC 4252


 Corre encima de la capa de transporte
 Varios métodos posibles
➔ Clave pública (requerida): RSA, DSA
➔ Contraseña
➔ Basado en computadora cliente
➔ Interactivo
➔ ...
 El servidor puede escoger cuales métodos admite
Autenticación por clave pública
Cliente

SSH_MSG_USERAUTH_SUCCESS

SSH_MSG_USERAUTH_FAILURE
+ lista de métodos restantes
 SSH_MSG_USERAUTH_REQUEST
 Nombre del usuario

 Nombre del servicio requerido

 “publickey”

o
 Algoritmo de clave pública usado

 Clave pública del usuario

Firma (con clave del usuario)

 ¿Clave aceptable?
 ¿Firma válida?

Servidor
Autenticación por contraseña
Cliente

SSH_MSG_USERAUTH_SUCCESS

SSH_MSG_USERAUTH_FAILURE
+ lista de métodos restantes
 SSH_MSG_USERAUTH_REQUEST
 Nombre del usuario

 Nombre del servicio requerido

o
 “password”

 Contraseña en claro

Verifica par
usuario/contraseña
en su base de datos
Servidor
Autenticación basada en computadora cliente
Cliente

SSH_MSG_USERAUTH_SUCCESS

SSH_MSG_USERAUTH_FAILURE
 SSH_MSG_USERAUTH_REQUEST

+ lista de métodos restantes


 Nombre del usuario

 Nombre del servicio requerido

 “hostbased”

 Algoritmo de clave pública usado

o
 Clave pública de la computadora cliente

 Nombre de la computadora cliente

 Nombre del usuario en la compu cliente

Firma (con clave de la compu cliente)

 ¿Clave pertenece a la comput cliente?


 ¿Firma válida?

 ¿Usuario autorizado? (opcional)

Servidor
Autenticación interactiva

 Definida en el RFC 4256


 El servidor pide datos y el usuario contesta usando
el teclado
 Permite extender los métodos de identificación sin
modificar el programa cliente
➔ Ej.1: Reto-respuesta
➔ Ej. 2: Contraseña de uso único
➔ ...
Autenticación interactiva
Cliente

 SSH_MSG_USERAUTH_REQUEST
 Nombre del usuario

 Nombre del servicio requerido

 “keyboard-interactive”

 Métodos preferidos (opcional)

Servidor
Autenticación interactiva
Cliente  Despliega “Nombre de la petición”
 Despliega “Instrucciones”

 Despliega “Prompt ” y captura “Respuesta ”


1 1
 ...

 Despliega “Prompt ” y captura “Respuesta ”


n n

 SSH_MSG_USERAUTH_INFO_REQUEST
 Nombre de la petición

 Instrucciones

 Número de prompts n

 Prompt1
 Echo
1
...
 Promptn
 Echo
n

Servidor
Autenticación interactiva
Cliente

SSH_MSG_USERAUTH_INFO_REQUEST
SSH_MSG_USERAUTH_SUCCESS

SSH_MSG_USERAUTH_FAILURE
+ lista de métodos restantes
 SSH_MSG_USERAUTH_INFO_RESPONSE
 Número de respuestas n

o
 Respuesta1
...
 Respuestan

Verifica las respuestas

Servidor
Protocolo de conexión

 Definido en el RFC 4254


 Corre encima de la capa de autenticación del usuario
 Proporciona
➔ Ejecución de comandos
➔ Sesiones interactivas
➔ Re-envío de puertos
 Canales multiplexados en un solo túnel cifrado
➔ Peticiones de apertura y cierre de canal
➔ Envío de entradas, salidas, señales
➔ ...

Potrebbero piacerti anche