P. 1
Clase08

Clase08

4.0

|Views: 23|Likes:
Published by franx87

More info:

Published by: franx87 on Dec 01, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

09/28/2010

pdf

text

original

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 HTTP, FTP, POP...

Corre debajo de los protocolos usuales

SSL/TLS
 

Encripción simétrica Claves públicas para
➔ ➔

Autenticación Intercambio de claves Autoridades de certificación Certificados X.509 Claves públicas: RSA, DSA, Diffie-Hellman Cifrados simétricos: RC2, RC4, IDEA, DES, 3DES, AES Funciones de hash: MD5, SHA-1

PKI centralizado
➔ ➔

Algoritmos negociados
➔ ➔ ➔

TLS 1.1
Protocolo de negociación (handshake prot.) Protocolo de datos de aplicación

SSL/TLS

Protocolo de alertas

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 P_hash

HMAC_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


P_SHA1 (S2, Etiqueta + Semilla)

PRF

S2

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) Identificador de sesión Algoritmos de firma, cifrado, MAC, compresión

Negociación de los parámetros de la sesión
➔ ➔

Establecimiento del secreto compartido (48 bytes)

Protocolo de negociación
Cliente Servidor

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
Cliente Servidor

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
Cliente Servidor

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
Cliente Servidor

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
Cliente Servidor

Certificate request (opcional)

Pide al cliente que se autentique

Protocolo de negociación
Cliente Servidor

Server hello done

El cliente verifica la validez del certificado del servidor

Protocolo de negociación
Cliente Servidor

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
Cliente Servidor

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
Cliente Servidor

Certificate verify (opcional) Firma de la compilación de todos los mensajes de negociación anteriores

Protocolo de negociación
Cliente Servidor

Change cipher spec

Pide aplicar los nuevos parámetros negociados

Protocolo de negociación
Cliente Servidor

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
Cliente Servidor

Change cipher spec

Pide aplicar los nuevos parámetros negociados

Protocolo de negociación
Cliente Servidor

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 MAC con clave (HMAC_MD5, HMAC_SHA1) Fragmenta en bloques menores que 16384 bytes Comprime (opcional) Calcula MAC Cifra

Proporciona integridad

Encapsula los datos de la capa superior
➔ ➔ ➔ ➔

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...) Capa de transporte Capa de autenticación del usuario Capa de conexión

Tres capas
➔ ➔ ➔

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) ● Clave del servidor (dsa*, rsa) ● Encripción Cliente-Servidor (3des-cbc*, aes128-cbc, rc4...) ● 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)
*

Lista de algoritmos preferidos

Servidor

Lista de algoritmos preferidos

requerido

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

X = gx mod p X

Y = gy mod p K = X y mod p H=hash( KS | X | Y | K ) s = firmaKs (H) KS, Y, s

K = Y x mod p 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_REQUEST  Nombre del usuario  Nombre del servicio requerido  “publickey”  Algoritmo de clave pública usado  Clave pública del usuario

Firma (con clave del usuario)

¿Clave aceptable?  ¿Firma válida?

Servidor

SSH_MSG_USERAUTH_SUCCESS o SSH_MSG_USERAUTH_FAILURE + lista de métodos restantes

Autenticación por contraseña
Cliente

SSH_MSG_USERAUTH_REQUEST  Nombre del usuario  Nombre del servicio requerido  “password”  Contraseña en claro

Verifica par usuario/contraseña en su base de datos
Servidor

SSH_MSG_USERAUTH_SUCCESS o SSH_MSG_USERAUTH_FAILURE + lista de métodos restantes

Autenticación basada en computadora cliente
Cliente

SSH_MSG_USERAUTH_REQUEST  Nombre del usuario  Nombre del servicio requerido  “hostbased”  Algoritmo de clave pública usado  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

SSH_MSG_USERAUTH_SUCCESS o SSH_MSG_USERAUTH_FAILURE + lista de métodos restantes

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_SUCCESS o SSH_MSG_USERAUTH_FAILURE + lista de métodos restantes o SSH_MSG_USERAUTH_INFO_REQUEST

SSH_MSG_USERAUTH_INFO_RESPONSE  Número de respuestas n
 

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 Peticiones de apertura y cierre de canal Envío de entradas, salidas, señales ...

Canales multiplexados en un solo túnel cifrado
➔ ➔ ➔

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->