[Aportes indexados] SSL 128, mitos y realidades de su fortaleza

Estado
Cerrado para nuevas respuestas.

Shura

Dragón Ancestral Lvl 2
Me gustaría empezar un hilo explicativo sobre el protocolo SSL y a la vez dejar varios puntos en el aire para que podamos participar todos.

Empezaré haciendo un resumen sin entrar mucho en detalles del protocolo SSL (Secure Socket Layer) para la gente que quiera participar y no lo tenga del todo claro.

SSL.
Secure Socket Layer es un sistema de protocolos de caracter general diseñado por Nestcape Communcations, con el propósito de conseguir un canal seguro de comunicación a través de Internet. Está basado en la aplicación conjunta de Criptografía Simétrica (por su rapidez, para el cifrado de datos), Criptografía Asimétrica (de llave pública, para el intercambio de la clave simétrica), certificados digitales y firmas digitales.

La identidad del servidor web seguro (y a veces también del usuario cliente) se consigue mediante el Certificado Digital correspondiente, comprobando su validez, y de la integridad de los datos intercambiados se encarga la Firma Digital mediante funciones hash y su comprobación.

Estableciendo la comunicación.

Lo primero es que el cliente y el servidor realicen un proceso de reconocimiento mutuo y de petición de conexión, conocido como Handshake.
El protocolo comienza con el saludo del cliente al servidor, Client Hello, por el que se informa al servidor de que se deséa establecer una comunicación segura con él.
Junto con este saludo inicial, el cliente envía al servidor información de la versión de SSL que tiene implementada, de los algoritmos de cifrado que soporta, las longitudes de clave máximas que admite para cada uno de ellos y las funciones hash que puede utilizar. También se le solicita al servidor el envío de su Certificado Digital X.509, con objeto de verificar el cliente la identidad del mismo y recoger su clave pública. En este momento se asigna un identificador a la sesión y se hace constar la hora y fecha de la misma.
A continuación, el servidor SSL responde al cliente, Server Hello, enviándole su Certificado Digital (con su llave pública) e informándole de su versión de SSL, de los algoritmos y longitudes de clave que soporta. Generalmente se obtiene el conjunto de algoritmos, longitudes de clave y funciones hash soportados por ambos, eligiéndose entonces los más fuertes. Si no hay acuerdo con los algoritmos a usar se envía un mensaje de error.
Como medida adicional de seguridad, el cliente genera una clave aleatoria temporal y se la envía al servidor, que debe devolvérsela cifrada con su clave privada. El cliente la descifra con la llave pública y comprueba la coincidencia, con lo que está totalmente seguro de que el servidor es quién dice ser.
Si todo está correcto el cliente genera un número aleatorio que va a servir para calcular una clave de sesión correspondiente al algoritmo de cifrado simétrico negociado antes, conocida con el nombre de clave maestra, que es enviada al servidor de forma segura cifrándola asimétricamente con la llave pública de su Certificado Digital. Esta clave maestra se usará para generar todas las claves y números secretos utilizados en SSL. Con esto servidor y cliente se han identificado y tienen en su poder todos los componentes necesarios para empezar a transmitir información cifrada simétricamente.
Así y todo, para que empiecen las transmisiones de datos protegidos se requiere otra verificación previa, denominada Finished, consistente en que cliente y servidor se envían uno al otro una copia de todas las transacciones llevadas a cabo hasta el momento, cifrándola con la llave simétrica común. Al recibir esta copia, cada host la descifra y la compara con el registro propio de las transacciones. Si las transacciones de los dos host coinciden significa que los datos enviados y recibidos durante todo el proceso no han sido modificados por un tercero. Se termina entonces la fase Handshake.

Luego vienen otras operaciones como determinar el modo de encapsulamiento de los datos en las que no me voy a meter, y ya por fín se establece la comunicación.

Ataque a SSL.
Como vemos, toda la información que capturemos está cifrada. Si todo está en orden y usamos algoritmos de cifrado simétrico sin errores de implementación, lo único que nos queda es la fuerza bruta (no consideraremos inyecciones SQL, ni robos de cookies, etc, porque no sería un ataque contra SSL).

Aquí es dónde empezaremos la disertación e intentaremos concretar mitos y realidades.

Pero primero apunto dos consideraciones a tener en cuenta.
1.- Cifrar al doble de 64 bits no es cifrar a 128, es cifrar a 65.
2^64 * 2^1 = 2^(64+1) = 2^65.
Por esta razón, si miramos en <a href="http://www.distributed.net" class="postlink" rel="nofollow" onClick="window.open(this.href);return false;">http://www.distributed.net</a>, comprenderemos porque para romper un RC5 de 56 bits tardaron 250 días y para la de 64 casi tres años. Con la de 72 lleván ya un par y lo que les queda.

1.- Tiempo de ruptura de cifrado a 128 bits.
Vamos a poner todo a favor del atacante al cifrado asiéndo suposiciones inverosímiles, para simplificar cálculos.
* Supongamos que tenemos un Earth Simulator/5120 Nec con una potencia teórica (nunca a llegado a tanto) de 40.960 billones de operaciones por segundo.
* Supongamos que en cada operación es capaz de áplicar un número al algoritmo de cifrado y ver si es el bueno (serían cientos de operaciones).
Cifrando solo a 128 bits, que es el cifrado máximo de SSL existen:
2^128 = 340.282.366.920.938.592.532.472.206.020.233.786.982 claves posibles.

340.282.366.920.938.592.532.472.206.020.233.786.982 / 40.960.000.000.000.000 = 8.307.674.973.655.724.205.649 Segundos.
8.307.674.973.655.724.205.649 /60 = 138.461.249.560.928.736.761 Minutos
138.461.249.560.928.736.761 / 60 = 2.307.687.492.682.145.612 Horas
2.307.687.492.682.145.612 / 24 = 96.153.645.528.422.734 Días
96.153.645.528.422.734 / 365 = 263.434.645.283.350 Años.

Ahora que ya sabemos un poco de la teoría, me gustaría abrir un debate sobre los cientos de noticias que podemos leer en cualquier sitio, del estilo, por ejemplo, esta: <a href="http://www.galeon.com/maty/nautopia_old/nautopiaX.htm" class="postlink" rel="nofollow" onClick="window.open(this.href);return false;">http://www.galeon.com/maty/nautopia_old/nautopiaX.htm</a>

"Hablando de cifrado, recordemos la debilidad intrínseca del sistema implementado por MICROSOFT en sus productos (IE sin ir más lejos).
En su día aumentaron de 56 -cifrado débil- a 128 bits ¿cifrado fuerte?. Pues no, ya que realmente utiliza 80 y pocos bits. Y con los restantes, la NSA y otras agencias norteamericanas pueden romperlo fácilmente."

Escrito Por Unravel
 
Estado
Cerrado para nuevas respuestas.
Arriba