¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Contraseñas y hashes: cómo se guardan

Después de esta lección: Puedo explicar por qué una contraseña se guarda como un hash.

Lección de 45 min6 comandosLaboratorio de escalada de privilegios en Linux: un binario setuid, una regla sudo, cron

¿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

PalabraQué significa
Hashuna huella de un texto que no se puede deshacer
Salun texto al azar que se añade a la contraseña antes del hash
Fuerza brutaprobar todas las claves posibles hasta acertar
Ataque de diccionarioprobar las claves más usadas de una lista
Cifraresconder 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 guardaSi roban la base de datosCómo se comprueba la clave
Texto claroSe leen todas las clavesSe compara el texto
HashSolo se ven huellasSe 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

Comando
printf 'password' | sha256sum

Se 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

Comando
printf 'abc' | sha256sum

Se 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

Comando
printf 'abc' | md5sum

Se 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

ClaveCuántas posiblesCómo sale
PIN de 4 cifras10.00010 por 10 por 10 por 10
PIN de 6 cifras1.000.000Seis cifras, diez opciones cada una
8 letras minúsculasUnas 209.000 millones26 opciones, ocho veces
8 letras y cifrasUnos 218 billones62 opciones, ocho veces

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cuenta los PIN de 4 cifras

Comando
seq 0 9999 | wc -l

Se 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

UsuarioClaveSalHash (valores inventados y cortos)
Martaveranok4a91c
Hugoveranop75e03
Sin salveranoningunad2f8 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

Comando
stat -c '%a %U' /etc/shadow

Se 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

Comando
sudo grep -c '^intern:' /etc/shadow

Se 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?

Sobre este laboratorio y su código: Laboratorio de escalada de privilegios en Linux: un binario setuid, una regla sudo, cron

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.