La primera colisión de SHA-1 mueve los cimientos de Internet

sha1 certificado

En estos días, y con la maquinaria mediática del Mobile World Congress echando humo, es fácil que noticias como esta pasen desapercibidas al grueso de la sociedad, pese a que trastocan el funcionamiento de buena parte de los servicios y tecnologías que utilizamos a diario.

SHA-1 es un algoritmo hash utilizado habitualmente en procesos de validación de identidad. Es decir, es el sistema que utilizan muchas otras herramientas para certificar que un documento, una conexión o un recurso es de verdad el correcto.

Como cualquier algoritmo de cifrado, su vigencia estará marcada bien por la capacidad de cálculo necesaria para bypasearlo con fuerza bruta (que una máquina sea capaz de probar las millones de combinaciones posibles en un tiempo razonable como para que un tercero pueda interferir en esa comunicación sin que ni el emisor ni el receptor se de cuenta), o bien mediante algún tipo de vulnerabilidad que sea explotable.

En este caso, SHA-1 es considerado teóricamente vulnerable desde 2005 (se supone que desde este año contamos con potencia de cálculo suficiente como para que alguien con muchos recursos pudiera comprometerlo), y el NIST (Instituto Nacional de Estándares Tecnológicos) lo ha considerado “deprecated” desde 2011. Pero, como no, sigue utilizándose en muchísimos entornos.

A finales de la semana pasada Google, en asociación con la Universidad CWI de Amsterdam, le pegaba la estocada definitiva (EN). Uno de los equipos de Project Zero asegura haber encontrado un método por el cual el atacante es capaz de colisionar dos hash de SHA-1.

En lenguaje humano, hablamos que por primera vez en la historia el algoritmo no puede asegurar a ciencia cierta que un recurso firmado por SHA-1 (como puede ser un PDF que envíemos a nuestro cliente, o una página web con SSL) es realmente único en el mundo. Y lo ejemplifican con dos PDFs con distinto contenido cuyo hash es idéntico.

El escenario planteado es terrorífico

Esto abre la puerta, como seguramente ya se habrá dado cuenta, a que un cibercriminal firme con un hash exactamente idéntico a una página bancaria para que cuando la víctima vaya a entrar, piense que en efecto está en la página legítima (el navegador le mostrará que está navegando por SSL y que además la información del certificado es la adecuada), cuando realmente es una página fail para robarle los credenciales. O que una agencia de inteligencia envíe en nombre de un conocido de la víctima (con su correo validado) un documento que el servidor de correo considerará legítimo (está aparentemente firmado por el emisor) y que en realidad forma parte de una campaña de phishing.

El valor de un algoritmo hash radica precisamente en que nadie sea capaz de crear una firma digital exacta a la obtenida por otro recurso utilizando el mismo algoritmo. Si un mismo conjunto de caracteres (lo que es un hash, a fin de cuentas) identifica a dos o más documentos, el sistema está roto, ya que cada documento solo debería tener un único hash, y cada hash únicamente debería identificar a un único documento.

Para colmo, SHA-1 sigue utilizándose en múltiples sistemas que son habituales en nuestro día día:

  • Digital Certificate signatures: firma de documentos, HTTPs,…
  • Email PGP/GPG signatures: Firmas de emails que certifican la identidad del emisor.
  • Software vendor signatures: Firmas de recursos en muchísimo software de ofimática (Word, Adobe…).
  • Software updates: Las actualizaciones de software que nos llegan a nuestro dispositivo tienen que ir firmadas por la entidad correcta para evitar que un tercero pueda enviar una actualización falsa que comprometa la seguridad de millones de usuarios. Y esto compete a las certificaciones de actualizaciones del propio sistema operativo (Windows, MacOS, Android, iOS), como de las aplicaciones y herramientas que tenemos instaladas en él.
  • ISO checksums: Las imágenes de sistemas operativos y/o el software también utilizan algoritmos hash para certificar que en efecto cuando queremos instalar esta versión de Linux o este juego, estamos instalando eso y no cualquier otra cosa.
  • Backup systems: Imagínese que después de un problema de seguridad tenemos que volver a una versión anterior del sistema, y no podemos certificar a ciencia cierta que ese backup es realmente el que hemos hecho con anterioridad o ha sido manipulado. Ahí entran en juego algoritmos certificadores como SHA-1.
  • Deduplication systems: Viene de la mano de lo anterior. Un documento o documentos comprimidos deben contar con un sistema que certifique que en efecto tienen lo que dicen tener.
  • GIT: Los sistemas de control de versiones como GIT, ampliamente utilizados en la industria del desarrollo, utilizan SHA-1 y otros algoritmos hash para identificar cambios y poder tener un historial exacto de cualquier modificación de código.

Cual es el estado del arte que compete a SHA-1 a día de hoy

Todas las autoridades certificadoras de TLS/SSL (HTTPs, para que nos entendamos) adscritas al CA/Browser Forum han prohibido el uso de SHA-1 desde octubre del 2016 (EN). Y afortunadamente la mayoría de entidades que utilizamos los administradores de páginas y servicios web forman parte de esta alianza.

Tanto Chrome (EN) como Firefox (EN) marcan ya como inseguros cualquier site con un TLS/SSL que haga uso de SHA-1. El caso de Internet Explorer/Edge está aún pendiente de confirmación, habida cuenta de que en principio iban a sacar una actualización gorda para Windows10 que embebía el navegador dentro de un sandbox y lo último que se (EN) es que se han echado para atrás. Safari ha movido ficha (EN) tras conocer la noticia.

A nivel de documentos, la página Shattered.io (EN) ofrece la opción de validar que en efecto no hay hashes idénticos conocidos. Y, como no, tanto en GMail como en Google Drive cualquier recurso firmado por SHA-1 será validado automáticamente, alertando en caso de encontrar una colisión.

Tanto GIT como SVN son quizás, y descontando mucho de ese software que habitualmente encontramos en intranets corporativas, a día de hoy los dos servicios masivos más afectados, ya que ambos dependen muchísimo de SHA-1. A colación de esto me pasaban hace un momento Javi por Google+ la respuesta de Linus Torvalds (EN) apagando las alarmas, habida cuenta de que como él bien dice no es lo mismo utilizar SHA-1 como medida de seguridad que simplemente para asegurar la validez de los cambios en un repositorio como GIT. En el primer escenario la migración se vuelve crítica, mientras que en el segundo es solo recomendable. Además, para aprovecharse de este bug es necesario ya no solo contar con la capacidad de cálculo necesaria (ergo, muchos recursos), sino conocer el método utilizado por el equipo de Google (aseguran que por fuerza bruta les hubiera llevado 100.000 veces más de tiempo). Cosa que harán pública en 90 días, así que tenemos hasta entonces para migrar a otro algoritmo más seguro, como puede ser SHA-256 (un SHA-2, que tampoco es la panacea pero al menos por ahora no hay colisión conocida) o SHA-3.

Así que no se sorprenda que, de pronto, algunas webs que habitualmente visita o servicios desarrollados en exclusiva para su empresa hace años, dejan de funcionar. La feroz evolución de las tecnologías que sustentan Internet no perdona a nadie, y todo aquel que a día de hoy esté utilizando algo certificado por un hash SHA-1 tiene los días contados.