SSL
En estos tiempos que corren donde casi cualquiera "sabe" sobre el espionaje de la NSA, todos sostienen que la única manera de estar seguro es usando SSL/TSL, o lo que normalmente se conoce como "navegar la web con https://".

La triste realidad es que HTTPS no hace virtualmente nada para protegerlo de los curiosos ojos de la sopa de letras de agencias - o de cualquiera con suficiente conocimiento sobre cómo esas conexiones supuestamente "seguras" trabajan.

Es cierto que conectarse a un sitio web con SSL ciertamente podrá prevenirlo de "script kiddies" y otros oponentes más inexpertos, o de escuchas ilegales durante sus incursiones en la red, o de que intervengan de otros modos en sus asuntos. Pero de los Verdaderos Chicos Malos, ... olvídelo.

Vamos a comenzar por hacer una breve inmersión a través del mundo de SSL, con la esperanza de que sea entendible incluso para aquellos de nosotros con menos conocimiento técnico.

Después de todo, este asunto es de tal importancia que pienso que todo el mundo necesita entender realmente qué está pasando, y cómo funciona la seguridad web hoy día, sin necesidad de un doctorado en criptografía, ciencias de la computación, o ingeniería.

Nuestra historia comienza con un pequeño correo electrónico que recibí hace unos días. El mensaje era el siguiente:

Microsoft Security Advisory (2880823)

Por supuesto, la sola idea de que entre todas las compañías del mundo Microsoft estuviera aconsejándome sobre seguridad me resultó ridícula, así que no presté mucha atención. No obstante, había una vocecita en mi mente que me molestaba constantemente, así que decidí echarle un ojo y ver de que se trataba todo este alboroto... o en todo caso ver si el alboroto era justificado.

Amigo... ¡siempre es justificado!

Siguiendo el link de más arriba se puede leer:
Microsoft está anunciando un cambio de políticas para el Programa de Certificados Raíz de Microsoft. La nueva política ya no permitirá más que las Autoridades de Certificación raíz emitan certificados X.509 usando el algoritmo de hash SHA-1 para SSL y firmas de programas, después del 1 de enero del 2016. Usar SHA-1 en certificados digitales podría permitir a un atacante falsear contenido, hacer una suplantación de identidad , o llevar a cabo un ataque del tipo hombre-en-el-medio.

Microsoft recomienda que las Autoridades de Certificación no firmen más los nuevos certificados generados usando el algoritmo SHA-1 y comiencen a migrar a SHA-2. Microsoft también recomienda que los clientes reemplacen sus certificados SHA-1 con certificados SHA-2 apenas tengan la oportunidad. Por favor, vea la sección Acciones Sugeridas de este mensaje para más información.
Bien, esto es probablemente para la mayoría de las personas como tratar de leer un idioma extranjero. Incluso yo no comprendo exactamente como esos algoritmos de hash son usados con SSL. Así que comencé a investigar un poco. Lo que encontré me dejó anonadado:

MD5 considerado hoy perjudicial: Creando un malicioso certificado CA

Ahora, si piensa que el consejo de M$ estaba equivocado, eche un vistazo al enlace de arriba.

¡GUAU, impresionante, ¿no?!.

En resumen, en el año 2008 algunos muchachos inteligentes diseñaron un modo de hacerse pasar por una Autoridad de Certificación SSL, y lograron esta hazaña utilizando una debilidad en el algoritmo de hash MD5.

"¡Eureka! Esta debe ser la clave para nuestro misterio", pensé.

Así que comencé a leer... y releer... y pensar... y releer. Y entonces se hizo la luz. Parafraseado al Inspector Finch:
Repentinamente tuve este sentimiento de que todo estaba conectado. Fue como si pudiera ver la totalidad del asunto, una larga cadena de eventos extendiéndose hacia atrás hasta antes de la advertencia del hash MD5 del 2008. Sentí como si pudiera ver todo lo que ocurrió, y todo lo que iba a ocurrir. Había como establecido un patrón perfecto ante mí. Y me di cuenta de que todos nosotros somos parte y estamos atrapados en él.
"Bien, esto es extremadamente dramático" pensarán ustedes, "pero... ¡¿qué es lo que está pasando realmente?!"
System Failure
Primero, permítame definir algunos términos - espero que en un lenguaje asequible:

Certificado SSL de Sitio Web

Es un certificado digital, con una firma digital, que verifica que un sitio web sea quien dice ser. Cuando usted se conecta a un sitio web usando SSL (HTTPS), su navegador dice, "¡Papeles por favor!" El sitio remoto envía el Certificado SSL a su navegador. Su navegador entonces verifica la autenticidad de este "pasaporte". Una vez verificada, la comunicación encriptada está asegurada. El punto del Certificado SSL de Sitio Web es que bajo ninguna circunstancia alguien debería poder estar habilitado a crear un certificado firmado válido para un sitio web del cual no es propietario ni maneja. Con el fin de obtener un Certificado SSL, se debe probar de varias maneras que uno es el auténtico propietario y operador del sitio en cuestión. Así que el uso de HTTPS no es sólo para encriptar la comunicación, sino también es una forma de verificar que el sitio web al que nos estamos conectando es quien dice ser y no un impostor. Y por supuesto, ¡debes pagar por un certificado!

Certificado Raíz de la Autoridad de Certificación (CA)

Este es otro certificado digital, con una firma digital... Pero en este caso, este certificado podrá ser usado para crear y firmar digitalmente un Certificado SSL de Sitio Web común y corriente. Este es el tipo de certificados que una Autoridad de Ceritificación (CA) tiene. Estos certificados son también pasados a los desarrolladores de navegadores (Mozilla Firefox, Windows Explorer, Google Chrome, etc), para luego ser incluidos dentro de éstos. Entonces cuando su navegador recibe un Certificado SSL de Sitio Web, usará el Certificado Raíz de la Autoridad de Certificación para verificar que el Certificado SSL de Sitio Web es, en efecto, válido.

Autoridad de Certificación (CA)

Un CA es el tipo de sitio web en el cual se puede comprar un Certificado SSL de Sitio Web seguro para usar con HTTPS en un sitio web. Por ejemplo: Verisign.com, RapidSSL.com, Geotrust.com. etc, son Autoridades de Certificación. Ellos poseen los Certificados Raíz para generar y firmar Certificados SSL de Sitios Web válidos.

Será de ayuda comprender que con todos estos certificados, hay una "cadena de autoridades". Los Certificados SSL de Sitio Web son validados y autenticados usando los Certificados Raíz de una Autoridad de Certificación. Los Certificados Raíz de una Autoridad de Certificación son validados con una Autoridad de Certificación de mayor jerarquía, al estilo de una pirámide para terminar en El Gran y Único Certificado Raíz, el cual es como el dios de los certificados. De este modo, cada certificado de bajo rango es verificado hacia arriba por esta cadena de autoridades. Todo esto ocurre detrás de escena, y uno realmente no tiene idea de lo que está pasando.
Certificate Authority Validation Chain
Cada certificado de nivel bajo es validado usando un certificado del nivel inmediatamente superior.
¿Fácil no?

Ahora, ¿dónde entran en juego esos algoritmos como MD5 o SHA-1?

Todos los certificados contienen información como:
  • Dominio del sitio web (Ej: www.misitio.com)
  • Ubicación física del sitio (país, estado o provincia, etc)
  • Información del propietario del sitio (Nombre de la compañía)
  • Período de validez
Toda esta información es verificada antes de que un certificado sea emitido. Una vez verificada, un hash de los datos es generado. Este hash actúa como una firma digital para el certificado. Lo único que necesita entender en relación a los algoritmos que generan hash es que lo que supuestamente deberían hacer es esto:
  1. Datos de cualquier tamaño (30 caracteres, 3000 caracteres, 40 Megabytes, lo que sea) son pasados al algoritmo de hash
  2. El algoritmo de hash corta los datos en trozos y los procesa matemáticamente, generando una firma - o "huella digital" - de los datos.
  3. Los hash de dos piezas de datos distintas nunca deberían ser iguales - así como dos huellas digitales humanas no deberían nunca coincidir
  4. El hash generado es siempre del mismo tamaño, sin importar el tamaño de los datos de entrada (como con las huellas digitales no importa el tamaño de la persona)
Hash Fingerprint
Bien, prosigamos. Existe algo llamado "colisión de hash". Esto ocurre cuando 2 hash son idénticos pero generados a partir de diferentes datos. Es como si usted y su vecino de pronto tuvieran las mismas huellas digitales. ¡Ups!

Ahora piense acerca de esto por unos minutos... Si la policía estuviera usando esos hash, o huellas digitales, para verificar su identidad, ellos podrían confundirlo con su vecino - o a su vecino con usted - si usted "tiene la misma huella digital". Si no hacen otros chequeos, y sólo confían en las huellas digitales, podrían muy bien "autentificar" su identidad de un modo completamente equivocado. ¡Gran UPS!

Esto es lo que pasa con el ataque SSL/MD5 señalado en el enlace de arriba.

Estos muchachos sabelotodo fueron capaces de comprar cuidadosamente un Certificado SSL de Sitio Web valido a través de RapidSSL en el año 2008. Luego crearon su propio Certificado Raíz de Autoridad de Certificación de modo tal que el hash (la huella digital) de su Certificado SSL de Sitio Web válido comprado fuera idéntico al hash del FALSO Certificado Raíz de Autoridad de Certificación que ellos crearon de la nada.

En consecuencia, debido a que RapidSSL sencillamente ha dicho "muchachos, ¡esta huella digital del Certificado de Sitio Web es válida!", y a que esta "huella" fue exactamente la misma que la huella del FALSO Certificado Raíz, este FALSO Certificado Raíz se convirtió en válido.

Ahora, recordemos que un Certificado Raíz de CA - en tanto que tiene un "hash/huella digital" válido que dentro de la "cadena de autoridades" - puede ser usado para generar un Certificado SSL de Sitio Web para cualquier sitio web en el mundo... Y ni usted, ni RapidSSL, ni su navegador podrán saber nunca que algo está mal.

Pero ¿cuál es el problema? Para empezar, considere un ataque del tipo hombre-en-el-medio.
Man in the middle attack
© x-services.nl
Usted querrá entrar a https://www.gmail.com. Pero unos "hackers" han usado algún tipo de truco para insertar su servidor entre usted y Gmail. Normalmente, ¡esto no sería posible porque usted está usando HTTPS! ¡Usted está SEGURO! ...

¡EQUIVOCADO!

Como cualquiera sabe hoy día, uno se conecta a gmail.com a través de HTTPS. Pero en realidad, lo que está pasando es esto:
  1. Usted trata de conectarse a https://www.gmail.com
  2. El atacante desvía su intento (quizá usando alguna técnica como "envenenamiento de cache de DNS") a un servidor que es falso.
  3. Debido a que el Servidor del Atacante contiene un Certificado SSL de Sitio Web válido fraudulentamente generado usando el truco señalado arriba, su navegador no percibirá el fraude. Todo parecerá ser legal.
  4. Usted comienza a escribir un correo electrónico, pero todos sus datos están en realidad viajando encriptados hacia el Servidor del Atacante, donde son desencriptados y almacenados o modificados, y luego desde el Servidor del atacante son enviados al verdadero https://www.gmail.com (usando el auténtico certificado SSL válido de Gmail).
  5. ¡Y usted no tiene ni la menor idea de que su comunicación "segura" no es tan segura!
En otras palabras, el uso de SSL/HTTPS implica que la conexión entre su navegador y el servidor destino al que intenta conectarse, supuestamente, está encriptada. Pero debido al hecho de que ciertos tipos de certificados SSL (los cuales participan en el proceso de encriptación) pueden ser falsificados, un atacante podría montar un servidor falso que simule ser el verdadero servidor destino, y colocarse a sí mismo en el medio de la conexión. Cuando se llevan a cabo este tipo de maniobras, el atacante tiene control sobre la conexión y los datos, y puede así desencriptar sus datos, manipularlos, y/o pasarlos al servidor destinatario real.

¡Es una maravilla! ¿No?

Pero espere... Usted dirá: "¿No es entonces bueno que Microsoft recomiende cambiar a la función hash SHA-2 si SHA-1 contiene el mismo peligro potencial que fue descubierto en el 2008 con MD5?"

¡Una excelente pregunta! Desafortunadamente sí y no. Incluso si usted como propietario de un sitio web cambiara su Certificado SSL firmado con SHA-1 a un nuevo certificado firmado con SHA-2, aún no estaría seguro.

¿Por qué?

Porque sólo basta con que una Autoridad de Certificación use un algoritmo de hash "débil" para que cualquiera con no muy buenas intenciones pueda generar un falso Certificado Raíz. Una vez que lo tienen, pueden generar tantos Certificados SSL de Sitio Web como quieran - usando el algoritmo que les plazca - incluyendo un certificado, que aunque sea falso, tiene validez y puede usarse para hacerse pasar por su sitio web "seguro".

En otras palabras, la debilidad en el algoritmo que generar el hash es sólo la punta del iceberg. Debido a la "cadena jerárquica de autoridades" en el sistema de certificados, si alguien se las arregla para crear un falso Certificado Raíz, es más o menos dios en términos de crear un falso Certificado SSL de Sitio Web.

Entonces, para que las palabras de Microsoft tuvieran algún efecto, no debería existir ninguna Autoridad de Certificación (los creadores de Certificados SSL de Sitio Web) en el mundo que use SHA-1. Para que la "seguridad" en generar sea más "segura", todo el mundo debería actualizar sus algoritmos YA. Pero esto no va a pasar.

Ahora, como si esto no fuera suficientemente malo, piense en todo el espionaje de la NSA. Piense en cuantas personas dicen: "¡No hombre, yo sólo navego usando HTTPS, estoy totalmente seguro!".

¿Realmente lo cree?

Yo no. ¿Sabe por qué? Bien, usted debería, ... por ahora... ¡Pero hay más!
Big Brother, NSA-Hauptquartier
Hogar del Gran Hermano, cuartel central de la NSA
Adivine quién inventó el algoritmo hash SHA-1 en 1995...

La NSA.

Adivine quién inventó el algoritmo hash SHA-2 en 2001...

La NSA.

Así que, ¿por qué deberían todas las Autoridades de Certificación cambiarse del algoritmo SHA-1 de la NSA al algoritmo SHA-2 de la NSA? ¿Por qué?, ¡porque la NSA lo creo del modo que lo hizo por una sencilla razón!

SHA-1 ya ha sido teóricamente vulnerada, y hay algunos indicios de que SHA-2 no es tan súper-ultra-segura como todo el mundo piensa.

Imagine que usted es la NSA. Usted quiere espiar a todo el mundo... a todas las abuelas, al gato de la abuela, y a los ratones que están siendo digeridos dentro de las entrañas del gato de la abuela. SSL es algo liado... puede llegar a utilizar una encriptación bastante engorrosa. ¡Pues diablos, no importa! Sólo comprometa la "cadena de autoridades de certificación" falsificando un Certificado Raíz, y "hasta la vista, baby", ¡usted puede interceptar y llevar a cabo ataques del tipo hombre-en-el-medio con quien le dé la gana, use SSL o no!

¿Sitios Web montados sobre SSL? No hay problema.

¿Sistemas de e-mail montados sobre SSL? No hay problema.

Lo he dicho antes, y lo diré de nuevo: Nunca hubo seguridad o privacidad en Internet, no hay seguridad y privacidad en Internet en la actualidad, y es muy probable que no la haya jamás. No a menos que se haga un GRAN cambio...

¿Sabe usted acaso por qué todo esto (y mucho, mucho más...) es posible?

Por que al igual que usted, yo tampoco tenía conocimiento de los "agujeros" de seguridad de SSL. Tomar conciencia de esto y de muchos otros asuntos - tecnológicos, políticos, psicológicos, sociales, etc. - es absolutamente esencial.

De lo contrario, francamente, estamos jodidos.