Qué es un hash de contraseña: Conceptos básicos de criptografía

Una introducción a las funciones hash y cómo protegen tus contraseñas.

Basics in Cryptography: What is a password hash?

Mientras las filtraciones de datos siguen dominando el ciclo de noticias tecnológicas, a menudo oímos que se han expuesto correos electrónicos y contraseñas. Pero, ¿qué es una contraseña cifrada? ¿En qué se diferencia de una contraseña no cifrada y qué tiene que ver la "sal"? Profundicemos en estos y otros temas en la guía de criptografía de hoy.


¿Qué es una contraseña?

Las contraseñas se han convertido en un pilar en el mundo de la tecnología y también en el habla cotidiana. Desde su cuenta de correo electrónico hasta los libros de cuentos infantiles sobre tesoros enterrados, la solicitud de una contraseña se ha convertido en algo tan habitual que apenas pensamos en lo que es realmente una contraseña, por no hablar de un hash de contraseña.

El NIST define técnicamente las contraseñas como “una cadena de caracteres (letras, números y otros símbolos) que se utiliza para autenticar una identidad, verificar la autorización de acceso o derivar claves criptográficas”. Todos sabemos perfectamente cómo introducir una contraseña para acceder a nuestros sitios web y cuentas favoritas, pero la práctica de mantener estas credenciales almacenadas de forma segura puede ser un poco más complicada.

Como usuarios, es crucial no reutilizar nunca las contraseñas, elegir siempre contraseñas seguras y asegurarse de cambiarlas de vez en cuando. Una forma de crear y utilizar contraseñas únicas y seguras para todas tus cuentas es utilizar un gestor de contraseñas. Al integrar un gestor de contraseñas en tus prácticas de higiene de la privacidad, ya estás más seguro que el gran número de usuarios de Internet que aún no han dado este paso esencial.

Por desgracia, no puede protegerse al 100%, ya que sus credenciales de inicio de sesión son gestionadas por los servicios a los que se suscribe. Aquí es donde entran en juego las filtraciones de datos. Nos hemos familiarizado con artículos de noticias que dicen algo parecido a “la filtración incluye nombres de usuario, fechas de nacimiento, direcciones de correo electrónico, números de teléfono y hashes de contraseñas”. Aunque la mayoría de estos términos son fáciles de entender, el último puede ser fuente de confusión. Para aclararlo, echemos un vistazo a cómo las empresas y los servicios en línea manejan realmente los datos que usted envía al crear una nueva cuenta.

El problema de almacenar las contraseñas de forma segura.

Imagínese que usted es un foro en línea en expansión y que cada vez más gente se apresura a registrarse en su servicio, por lo que necesita determinar una forma segura de mantener a salvo la información de inicio de sesión de sus usuarios. Después de todo, si alguien roba su información de acceso, vas a tener usuarios descontentos.

Para entenderlo mejor, veamos qué ocurre exactamente cuando intentas iniciar sesión en tu sitio web favorito. En primer lugar, visitas la página de inicio de sesión en tu navegador y se te pide que introduzcas un nombre de usuario/dirección de correo electrónico y una contraseña. Introduces esta información y haces clic en “Iniciar sesión”. Lo que ocurre a continuación se complica un poco.

Al elegir tu contraseña, (con suerte) no se almacena en texto plano en el servicio en cuestión. Si los servicios almacenaran tus contraseñas en texto claro, correrías el riesgo de exponer tus credenciales de inicio de sesión en caso de que el servicio se viera comprometido. En lugar de eso, la contraseña que has elegido debe ser hash y el hash debe ser almacenado en una base de datos segura operada por el servicio. Cuando vayas a iniciar sesión en la nueva cuenta, la dirección de correo electrónico que envíes y el hash de tu contraseña se compararán con la información almacenada en la base de datos. Como coinciden, ¡voilá!, ya tienes acceso a la cuenta. Sin embargo, alguien que piratee el servicio sólo obtendrá hashes con los que no podrá hacer nada y no podrá acceder a tu cuenta.

En Tuta utilizamos Argon2 para obtener la clave que desbloquea tus datos cifrados (clave de contraseña). Cuando cambiamos de bycrypt a argon2 también aumentamos la longitud de las claves generadas a 256 bits haciéndolas también post-cuánticas seguras. La clave de la contraseña no se utiliza para autenticarte con el servidor de Tuta, en su lugar la hashificamos utilizando SHA256 para convertirla en el verificador de la contraseña, que se transmite al servidor y se hashifica de nuevo antes de ser almacenada en la base de datos. Para más detalles sobre cómo la contraseña está asegurada en Tuta comprobar aquí

Eine Visualisierung des Umgangs mit Passwörtern und Verschlüsselungscodes. Eine Visualisierung des Umgangs mit Passwörtern und Verschlüsselungscodes.

Entonces, ¿qué es lo que hace que almacenar un hash sea más seguro que almacenar una contraseña en texto plano? La respuesta es una simple protección adicional en caso de violación.

¿Qué es el hash de contraseñas?

El hash de contraseñas es el proceso de tomar una contraseña creada por un usuario y ejecutarla a través de un algoritmo hash para desordenar los bits y crear una representación única de la contraseña elegida. Si no se conoce la contraseña, lo ideal es que no sea posible replicar exactamente el mismo hash.

Hay muchos tipos de algoritmos hash, pero todos realizan una función similar. Toman una contraseña de texto plano que se considera una cadena de datos con una longitud arbitraria (piense en las diferentes longitudes de sus contraseñas), esta cadena se convierte en bits de datos que se codifican de forma determinista (lo que significa que la misma contraseña siempre dará como resultado el mismo hash) de acuerdo con la función hash que se utiliza. Este hash se almacena en una base de datos segura.

Es importante recordar que el hash no es lo mismo que el cifrado. No existe ninguna clave que permita descifrar un hash. El hashing es una vía unidireccional destinada a pasar únicamente de texto plano a hash. Para los que tengan inclinaciones culinarias, tomemos como ejemplo la patata. La patata pelada es nuestro texto plano, una vez que la hemos convertido en un delicioso plato de patatas fritas, éste es nuestro hash. Al igual que no puedes transformar el hashbrown en la patata original, tampoco puedes transformar un hash en la contraseña original.

Hashing-Funktionen sind eine Einbahnstraße Hashing-Funktionen sind eine Einbahnstraße

Una función hash es unidireccional. A diferencia del cifrado, no se generan claves para devolver un hash al texto plano original.

Cuando alguien habla de descifrar contraseñas, no está “descifrando” nada, sino creando su propia lista de hashes basada en contraseñas de uso común y comparando después sus resultados conocidos con información filtrada en filtraciones de datos. Esto se convierte en una cuestión de referencias cruzadas y no requiere profundos conocimientos de criptoanálisis, sólo lógica básica.

¿Qué es un hash de contraseña salado?

Antes hemos hablado del salado de hashes. El salado es un proceso en el que se añaden datos aleatorios a una entrada antes de que sea procesada por un algoritmo hash. Como la sal es única para cada contraseña, esto protege contra ataques que pretenden utilizar hashes precalculados porque, incluso si los valores de la sal se incluyeran en una violación de datos, el atacante tendría que precalcular valores para cada sal individual, lo que hace que el ataque sea mucho más costoso. Además, si las contraseñas no se salan, si tú y yo utilizamos la misma contraseña, los hashes aparecerán iguales en la base de datos debido a la naturaleza determinista de los algoritmos de hashing de contraseñas. Si les añadimos sal, obtenemos resultados finales diferentes, lo que impide que los piratas informáticos detecten rápidamente cuentas con contraseñas idénticas.

Ein Beispiel für den Unterschied zwischen gehashten Kennwörtern mit und ohne Salting. Ein Beispiel für den Unterschied zwischen gehashten Kennwörtern mit und ohne Salting.

El salado no sólo hace que la comida sepa mejor, sino que también refuerza los hash de las contraseñas.

Las sales criptográficas pueden derivarse de elementos como el nombre de usuario u otros identificadores únicos específicos de cada cuenta. El elemento de unicidad es clave aquí porque hace que el uso de ataques de tablas precalculadas exija muchos más recursos de lo que sería razonable.

Problemas y tipos de ataques

Por supuesto, el hashing no es perfecto, pero hay una serie de ataques conocidos que se tienen en cuenta cuando los criptógrafos crean estas funciones.

Ataques de cumpleaños

Todos los algoritmos de hashing de contraseñas son vulnerables a un ataque conocido como ataque de cumpleaños. Éstos se aprovechan de un problema matemático de probabilidad conocido como el problema del cumpleaños. Aquí encontrará una descripción más precisa de las matemáticas que subyacen a este problema. Afortunadamente, estos ataques no se consideran más rápidos que un ataque de fuerza bruta.

Ataques de colisión

Un ataque de colisión se produce cuando dos contraseñas diferentes (cadenas de texto plano) se ejecutan a través de un algoritmo hash y devuelven un hash coincidente. Esto es problemático porque significa que una contraseña incorrecta, combinada con el nombre de usuario correcto, podría resultar en un inicio de sesión exitoso.

Si se descubre que un ataque de colisión es más rápido y eficiente que un ataque de cumpleaños, la función hash de la contraseña puede considerarse rota y debe ser reemplazada por un algoritmo más resistente.

Ataques de fuerza bruta

Los ataques de fuerza bruta son una vulnerabilidad potencial para cualquier criptosistema. Dada una cantidad infinita de tiempo y una cantidad infinita de potencia de cálculo, se puede descubrir un hash. Debido a este hecho, se consideran una prueba de fuego para la gravedad de otras vulnerabilidades. Si se determina que un ataque es más rápido que una fuerza bruta, el algoritmo en cuestión debe ser parcheado o abandonado.

Funciones hash populares

Se han desarrollado varios algoritmos de hash para contraseñas y cada uno de ellos tiene sus propios puntos fuertes y débiles. Por desgracia, se ha demostrado que algunos de los algoritmos hash más populares son vulnerables, pero siguen utilizándose con regularidad (como se explica en este vídeo de YouTube) y a menudo se encuentran en conjuntos de datos de infracciones.

  1. MD5 : Aunque se considera un algoritmo obsoleto, esta función hash sigue estando presente cuando se hacen públicos nuevos conjuntos de datos de filtraciones. MD5 fue desarrollado por el profesor del MIT Ronald Rivest en 1991 como sustituto de MD4. Produce un hash de 128 bits, pero rápidamente se demostró que era susceptible a ataques de colisión. En 2013, los investigadores pudieron demostrar que el algoritmo ya no era seguro y debía ser sustituido. Por desgracia, los hashes MD5 siguen apareciendo en filtraciones de datos, lo que significa que tus datos pueden quedar expuestos sin que tengas culpa de ello.
  2. SHA : El sustituto recomendado para MD5 fue la familia de funciones hash Secure Hash Algorithms. SHA-1 se introdujo en 1995 tras su desarrollo por la NSA y genera hashes de 160 bits. En 2005 se consideró que el algoritmo era inseguro frente a los actores de amenazas avanzadas, lo que suponía una amenaza particular para los casos en los que se utilizaba para crear firmas digitales para verificar la autenticidad. SHA-2 se publicó antes, en 2001, y sustituyó oficialmente a su predecesor en 2011, cuando el NIST introdujo nuevos requisitos mínimos de seguridad. Por desgracia, su despliegue se vio ralentizado por la falta de compatibilidad con versiones anteriores. Más recientemente, SHA-3 se publicó en 2015 con una estructura totalmente diferente a las iteraciones anteriores, que eran similares a MD5. Tanto SHA-2 como -3 admiten las mismas longitudes hash de 256 a 512 bits dependiendo de la configuración elegida.
  3. bcrypt : Introducido en 1999, bcrypt es un algoritmo de hash de contraseñas que introdujo salting por defecto, además de ser adaptativo. Esto significa que, con el tiempo, puede seguir resistiendo ataques de fuerza bruta. Bcrypt se basa en el cifrado Blowfish, desarrollado por Bruce Schneier.
  4. Argon2 : Argon2 ha sido el ganador de la Password Hashing Competition 2015. No solo es resistente a los canales laterales, sino también a la memoria, lo que lo hace más resistente a los ataques de fuerza bruta que bcrypt.

En Tuta estamos liderando el camino hacia la seguridad y la privacidad. Nuestro cambio a Argon2 nos ha convertido en el primer proveedor de correo electrónico que utiliza la forma más potente de derivación de claves disponible en la actualidad. Al poner la criptografía y la seguridad en primer lugar, estamos construyendo una privacidad en la que se puede confiar. En combinación con nuestra arquitectura de conocimiento cero, no tenemos acceso a las claves necesarias para descifrar o ver los datos. Su privacidad está en la palma de su mano.

Recupere el control de sus datos hoy mismo cambiando a Tuta y activando la privacidad.