¿Por qué una web no guarda tu contraseña?
Un hash es una huella que se calcula a partir de una contraseña y que no se puede deshacer. Una web bien hecha guarda esa huella y no tu contraseña.
Así, si alguien roba la base de datos, no lee las claves de nadie. En esta lección verás cómo funciona un hash y por qué la sal y una clave larga lo hacen más seguro.
Al terminar esta lección
Nota
Puedo explicar por qué una contraseña se guarda como un hash.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Hash | una huella de un texto que no se puede deshacer |
| Sal | un texto al azar que se añade a la contraseña antes del hash |
| Fuerza bruta | probar todas las claves posibles hasta acertar |
| Ataque de diccionario | probar las claves más usadas de una lista |
| Cifrar | esconder un texto de modo que una clave lo recupere |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La regla de este laboratorio
Advertencia
Trabaja solo en tu máquina privada, con sus cuentas de práctica. Nunca pruebes contraseñas en una cuenta que no sea tuya: es un delito. Aprendemos cómo se guardan las claves para guardarlas bien nosotros.
Guardar la contraseña tal cual es un error
Imagina que una web guarda las claves en texto claro. Si roban la base de datos, el ladrón lee todas. Y mucha gente repite la misma clave en varias webs.
Con un hash, la web guarda solo la huella. Cuando entras, calcula la huella de lo que escribes y la compara con la guardada.
Ejemplo resuelto: dos formas de guardar
| Cómo se guarda | Si roban la base de datos | Cómo se comprueba la clave |
|---|---|---|
| Texto claro | Se leen todas las claves | Se compara el texto |
| Hash | Solo se ven huellas | Se compara la huella |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra superior y espera a que la máquina diga que está en marcha. Cada botón Ejecutar escribe su comando en el terminal de la máquina.
Un hash siempre da la misma huella
Un texto da siempre el mismo hash. Un cambio mínimo en el texto cambia el hash por completo. Y desde el hash no se puede recuperar el texto.
La máquina tiene un programa, sha256sum, que calcula un hash. El printf envía el texto sin un salto de línea al final.
Calcula el hash de la palabra password
printf 'password' | sha256sumSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Calcula el hash de abc
printf 'abc' | sha256sumSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Calcula un hash más corto de abc
printf 'abc' | md5sumSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
La fuerza bruta prueba todas las claves
Un atacante que roba hashes no los deshace. Prueba muchas claves, calcula su hash y busca uno igual. Eso es la fuerza bruta.
Cuantas más claves posibles, más tarda. Una clave más larga y con más tipos de carácter multiplica las posibilidades.
Ejemplo resuelto: cuántas claves posibles hay
| Clave | Cuántas posibles | Cómo sale |
|---|---|---|
| PIN de 4 cifras | 10.000 | 10 por 10 por 10 por 10 |
| PIN de 6 cifras | 1.000.000 | Seis cifras, diez opciones cada una |
| 8 letras minúsculas | Unas 209.000 millones | 26 opciones, ocho veces |
| 8 letras y cifras | Unos 218 billones | 62 opciones, ocho veces |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cuenta los PIN de 4 cifras
seq 0 9999 | wc -lSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que cifrar y hacer un hash son lo mismo. Cifrar se puede deshacer con una clave. Un hash no se puede deshacer. Para guardar contraseñas se usa un hash, porque la web nunca necesita volver a leer la clave.
La sal hace distintos dos hashes iguales
Dos personas con la misma contraseña tendrían el mismo hash. El atacante podría preparar una lista de hashes de claves comunes y buscarlas.
La sal lo evita. Es un texto al azar, distinto para cada usuario, que se añade a la clave antes de calcular el hash. La web guarda la sal junto al hash.
Ejemplo resuelto: la misma clave con dos sales
| Usuario | Clave | Sal | Hash (valores inventados y cortos) |
|---|---|---|---|
| Marta | verano | k4 | a91c |
| Hugo | verano | p7 | 5e03 |
| Sin sal | verano | ninguna | d2f8 para los dos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Linux guarda los hashes en un archivo protegido
En Linux, los hashes de las cuentas están en un archivo de claves que solo puede leer root. Cualquier otro usuario recibe un permiso denegado.
Mira sus permisos y comprueba que tu máquina tiene una cuenta de práctica, intern. El primer número del resultado es el permiso en forma numérica.
Mira los permisos del archivo de claves
stat -c '%a %U' /etc/shadowSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cuenta las líneas de la cuenta intern
sudo grep -c '^intern:' /etc/shadowSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: cuántas claves caben
Una clave de 6 letras minúsculas tiene 26 elevado a 6 posibilidades. Calcúlalo en la máquina con python3 -c "print(26**6)".
Después calcula las de 6 caracteres entre letras y cifras, que son 62 elevado a 6. ¿Cuántas veces más claves hay?