Tipo: Nota técnica (práctica de especialización en ciberseguridad) Tema: Fuerza bruta · diccionario · rainbow tables · mecanismo shadow password (SHA-512) Enfoque: teoría + práctica verificable, sin datos reales.
Aviso legal: el contenido es puramente técnico-educativo, orientado a entender por qué el almacenamiento seguro de credenciales es una responsabilidad del desarrollador y del administrador. Los ejemplos usan contraseñas de laboratorio.
Cuando una aplicación almacena contraseñas con un hash criptográfico sin aplicar sal, todos los ataques clásicos son viables con el hardware moderno:
Prueba sistemática de todas las combinaciones posibles hasta dar con la credencial original. - Viable en SHA-256 sin sal: sí, con una GPU moderna se pueden probar miles de millones de combinaciones por segundo. - Ejemplo de la práctica: un hash SHA-256 se puede descifrar en cuestión de días con una GPU de alta gama.
Es un caso especial de fuerza bruta que usa listas precompiladas de contraseñas comunes (ej. rockyou.txt con ~14M de entradas).
- Contraseña típica (mypassword, 123456, etc.) → presente en el diccionario → descifrado en segundos.
- Menos costoso computacionalmente, pero dependiente del "mundo real" de las contraseñas de las personas.
Se precomputa una tabla que asocia hashes con sus contraseñas; luego, un hash robado se "busca" en la tabla en vez de recomputar. - Una vez generada la tabla (1 sola vez), el ataque es búsqueda instantánea. - Ejemplo de la práctica: un hash robado coincide con la entrada preexistente de una contraseña común en segundos.
Sí, en SHA-256 sin sal. Sin un valor aleatorio único por usuario, un solo hash compromise expone contraseñas comunes de forma inmediata y las no-comunes en horas/días, dependiendo del hardware. La única mitigación real son las sales únicas (RFC 8018) — lo que justifica el siguiente apartado.
Linux separa la identidad de la credencial para que la contraseña NO sea legible por cualquiera:
| Archivo | Contenido | Permisos | Público |
|---|---|---|---|
/etc/passwd |
Nombres de usuario, UID, GID, shell | -rw-r--r-- |
Sí (cosas básicas de identidad) |
/etc/shadow |
Hases de contraseña + metadatos | -rw-r----- |
No (solo root y grupo shadow) |
| Técnica | Función |
|---|---|
| Sal (salt) | Valor aleatorio único por contraseña → hashes idénticos producen valores distintos; invalida rainbow tables |
| Algoritmo robusto | SHA-512 ($6$) en vez de DES obsoleto; algoritmos lentos encarecen el brute force |
| Permisos | /etc/shadow con 640, solo root/grupo shadow |
| Caducidad | last_change, max_age, warning controlan vigencia y avisos |
uocstudent)sudo useradd -m uocstudent
echo "uocstudent:mypassword" | sudo chpasswd --crypt-method SHA512
Estructura de la entrada en /etc/shadow:
uocstudent:$6$d1e8f3a2$...:19909:0:90:7:::
| Campo | Significado |
|---|---|
$6$ |
Algoritmo SHA-512 |
d1e8f3a2 |
Sal (única por usuario) |
19909 |
Días desde 1970 del último cambio |
0 |
Mínimo de días entre cambios |
90 |
Máxima vigencia (caduca) |
7 |
Días de aviso previo |
/etc/passwd público (funciones básicas: ls, id) y /etc/shadow restringido → principio de mínimo privilegio./etc/shadow y sal por usuario son el estándar a replicar en cualquier app./etc/passwd vs /etc/shadow) es la primera señal de posture de seguridad.Nota técnica de laboratorio; contraseñas de ejemplo, sin datos reales.