1. Contraseñas, frases de paso y PIN
El factor de conocimiento exige al usuario demostrar que sabe algo que solo él debería conocer. Es el factor más antiguo, el más extendido y, con diferencia, el más atacado: bastan un teclado y una lista de candidatos para intentar romperlo, y no requiere acceso físico al usuario.
-
Contraseña: secuencia de caracteres, habitualmente corta, que el usuario memoriza.
-
Frase de paso (passphrase): secuencia larga de palabras. Es más fácil de recordar y más difícil de adivinar que una contraseña corta con símbolos, porque su seguridad procede de la longitud.
-
PIN: secuencia corta de dígitos. Su seguridad no depende de su complejidad, sino del contador de intentos del dispositivo que lo verifica, como se explica en la sección 6.
-
Preguntas de seguridad: respuestas a datos personales que supuestamente solo conoce el usuario. Es un mecanismo desaconsejado, como se justifica más adelante.
|
Contraseña y hash no son lo mismo La contraseña es el secreto que conoce el usuario. El sistema no debe almacenarla ni poder recuperarla: guarda únicamente un hash unidireccional con sal, derivado de ella con una función diseñada para ser lenta. La diferencia entre cifrar y calcular un hash se estudia en la guía de administración de usuarios y grupos. |
2. Fortaleza: entropía y longitud
La entropía mide en bits la incertidumbre de un secreto, es decir, el esfuerzo medio que costaría adivinarlo. Si cada carácter se elige al azar de un alfabeto de N símbolos y la contraseña tiene L caracteres, la entropía es:
H = L × log2(N)
Cada bit adicional duplica el número de intentos necesarios. Para traducir la entropía a tiempo hay que fijar la velocidad del atacante, que depende sobre todo de cómo se almacenó la contraseña. La siguiente tabla supone un ataque desconectado, es decir, con una copia de los hashes, a diez mil millones de intentos por segundo, orden de magnitud de unas pocas tarjetas gráficas contra un hash rápido y sin protección.
| Secreto | Alfabeto | Entropía | Tiempo medio de ataque |
|---|---|---|---|
8 caracteres minúsculos |
26 |
37,6 bits |
Unos 10 segundos |
8 caracteres, todo el teclado |
94 |
52,4 bits |
Unos 3,5 días |
4 palabras de un diccionario de 7776 |
7776 |
51,7 bits |
Unos 2 días |
12 caracteres, todo el teclado |
94 |
78,7 bits |
Unos 750 000 años |
6 palabras de un diccionario de 7776 |
7776 |
77,5 bits |
Unos 350 000 años |
Tres conclusiones se deducen de la tabla:
-
La longitud pesa más que la complejidad. Pasar de 8 a 12 caracteres añade 26 bits, mientras que ampliar el alfabeto de minúsculas a todo el teclado en 8 caracteres añade solo 15.
-
Una frase de paso aleatoria compite con una contraseña compleja. El método Diceware elige cada palabra tirando cinco veces un dado, que producen
6^5resultados distintos, uno por cada una de las 7776 palabras de la lista, y aporta unos 12,9 bits por palabra. Seis palabras suman 77,5 bits, prácticamente lo mismo que una contraseña de doce caracteres de todo el teclado, y además se recuerdan. -
La fórmula solo vale para secretos aleatorios. Una persona no elige al azar:
Verano2026!cumple cualquier regla de composición y está lejos de sus 94 símbolos teóricos, porque sigue un patrón que los atacantes conocen. La entropía real de una contraseña humana es muy inferior a la teórica.
|
Contra un almacenamiento bien diseñado, con una función de derivación lenta y con uso intensivo de memoria, la velocidad del atacante cae varios órdenes de magnitud, y los mismos secretos resisten mucho más tiempo. De ahí la importancia de la sección 4. |
|
Con los conceptos explicados en esta sección, ya puede realizar el Ejercicio 1. Entropía y tiempo de ataque. |
3. Políticas de contraseñas recomendadas
Durante años, las políticas habituales exigían mezclar mayúsculas, minúsculas, dígitos y símbolos, y renovar la contraseña cada 60 o 90 días. La investigación demostró que estas reglas empeoran la seguridad: los usuarios responden con patrones predecibles, como Verano2026!, y con variaciones mínimas en cada renovación. Las directrices actuales de NIST, en su norma SP 800-63B-4, las prohíben expresamente.
| Requisito | Directriz NIST SP 800-63B-4 | Justificación |
|---|---|---|
Longitud mínima |
15 caracteres si la contraseña es el único factor; 8 si se usa solo dentro de una autenticación multifactor |
La longitud es lo que aporta resistencia |
Longitud máxima admitida |
Al menos 64 caracteres |
Permite frases de paso y contraseñas de un gestor |
Reglas de composición |
Prohibidas, como exigir mezclas de tipos de carácter |
Producen patrones previsibles |
Caducidad periódica |
Prohibida; solo se cambia ante indicios de compromiso |
Provoca variaciones triviales de la anterior |
Lista de bloqueo |
Obligatorio rechazar contraseñas habituales, previsibles o ya filtradas |
Es la defensa eficaz contra diccionarios y reutilización |
Pegado y gestores |
Obligatorio permitir gestores y autocompletado; recomendado permitir pegar |
Facilita contraseñas largas y únicas |
Pistas y preguntas |
Prohibidas las pistas visibles sin autenticar y las preguntas de conocimiento |
Sus respuestas se pueden averiguar |
Limitación de intentos |
Nunca más de 100 fallos consecutivos sobre un autenticador antes de bloquearlo |
Frena los ataques en línea |
|
Cuando las normas se contradicen Las guías de configuración como el CIS Benchmark mantienen controles de composición, de caducidad y de historial, por razones de cumplimiento normativo y de compatibilidad. Ante una discrepancia, el criterio profesional consiste en aplicar el control exigido por el marco al que la organización debe adecuarse y documentar la excepción respecto a la directriz de NIST. Los valores del CIS para PAM se desarrollan en la guía de PAM. |
3.1. Comprobación contra contraseñas filtradas
La lista de bloqueo exigida por NIST se alimenta de contraseñas aparecidas en brechas anteriores, y la norma pide comparar la contraseña completa, no fragmentos ni palabras sueltas que contenga. El servicio Have I Been Pwned ofrece una interfaz que lo permite sin revelar la contraseña, mediante k-anonimato:
-
El cliente calcula el SHA-1 de la contraseña y envía solo los cinco primeros caracteres del resultado.
-
El servicio devuelve todos los sufijos conocidos que comparten ese prefijo, con su número de apariciones.
-
El cliente busca localmente su sufijo en la lista recibida.
El servidor nunca conoce la contraseña ni su hash completo. Es el mecanismo que utilizan los gestores de contraseñas y muchos sistemas de alta de usuarios, y se practica en el Ejercicio 4.
3.2. Recuperación y contraseñas iniciales
Los puntos más débiles de la política suelen ser los procesos que la rodean:
-
Contraseñas iniciales y temporales: deben ser aleatorias, de un solo uso o de corta duración, y entregarse por un canal distinto del que se usa para identificar al usuario.
-
Recuperación de la cuenta: es un segundo camino hacia la cuenta y debe tener, como mínimo, la misma robustez que la autenticación normal. Si se resuelve con un correo o una llamada al soporte técnico, el atacante dirigirá allí sus esfuerzos.
-
Detección de reutilización: una contraseña corporativa utilizada en un servicio externo que sufre una brecha pasa a ser conocida por los atacantes.
4. Almacenamiento seguro de contraseñas
La seguridad de las contraseñas no depende solo de los usuarios, sino de cómo las guarda el servicio. Una base de datos de credenciales mal protegida convierte una brecha en un compromiso masivo e inmediato de cuentas.
El procedimiento correcto combina tres elementos:
-
Una función de derivación de claves lenta y con consumo de memoria. Obliga al atacante a gastar tiempo y memoria por cada intento, lo que anula buena parte de la ventaja de las tarjetas gráficas.
-
Una sal aleatoria única por contraseña. Evita que dos usuarios con la misma contraseña tengan el mismo hash y hace inútiles las tablas precalculadas. NIST SP 800-63B-4 exige al menos 32 bits de sal y guardarla junto al hash.
-
Un parámetro de coste ajustable, que se incrementa conforme mejora el hardware de los atacantes.
| Algoritmo | Uso intensivo de memoria | Estado |
|---|---|---|
MD5, SHA-1, SHA-256 sin derivación |
No |
Inadecuados: demasiado rápidos |
PBKDF2 |
No |
Aceptable con muchas iteraciones; exigido en algunos marcos de cumplimiento |
bcrypt |
Limitado |
Seguro y muy extendido; con límite de 72 bytes de entrada |
scrypt |
Sí |
Seguro |
yescrypt |
Sí |
Por defecto en Debian 11 y posteriores y en Ubuntu 22.04 y posteriores |
Argon2id |
Sí |
Recomendación actual de OWASP para nuevos desarrollos |
Un refuerzo adicional es la pimienta: un secreto común a todas las contraseñas, guardado fuera de la base de datos, por ejemplo en un módulo de seguridad de hardware. NIST SP 800-63B-4 la recomienda como una iteración adicional con una clave que solo conoce el verificador y que debe almacenarse por separado. Si el atacante solo roba la base de datos, no puede ni siquiera iniciar el ataque.
|
Los formatos de |
|
Con los conceptos explicados en esta sección, ya puede realizar el Ejercicio 2. La sal y el almacenamiento. |
5. Ataques contra contraseñas y defensas
MITRE ATT&CK agrupa estos ataques en la técnica Brute Force (T1110), con cuatro subtécnicas que se diferencian en cuántas cuentas atacan y con qué candidatos.
| Ataque | Cómo funciona | Señal característica | Defensa principal |
|---|---|---|---|
Fuerza bruta en línea, T1110.001 |
Muchas contraseñas contra una cuenta |
Una IP con decenas de fallos sobre un usuario |
Limitación de intentos y bloqueo temporal |
Pulverización, T1110.003 |
Una o pocas contraseñas habituales contra muchas cuentas |
Una IP con pocos fallos sobre muchos usuarios distintos |
Lista de bloqueo, MFA, alerta por usuarios distintos por origen |
Relleno de credenciales, T1110.004 |
Pares usuario y contraseña filtrados de otros servicios |
Muchos orígenes con pocos intentos sobre cuentas reales |
MFA, detección de credenciales filtradas, limitación por cuenta |
Descifrado desconectado, T1110.002 |
Probar candidatos contra hashes robados, sin tocar el servicio |
Ninguna: ocurre fuera de la organización |
Almacenamiento lento con sal; contraseñas largas |
Phishing y keylogging |
El usuario entrega la contraseña o se captura al teclearla |
Accesos desde orígenes nuevos con la contraseña correcta |
Factores resistentes al phishing, formación |
Reutilización |
La contraseña de un servicio comprometido sirve en otro |
Accesos correctos desde infraestructura ajena |
Contraseñas únicas, gestor de contraseñas |
La diferencia entre los tres ataques en línea se aprecia en dos recuentos de los registros: cuántos usuarios distintos recibe cada origen y desde cuántos orígenes distintos se ataca cada usuario.
-
Muchos fallos sobre un usuario desde una IP: fuerza bruta.
-
Pocos fallos por usuario, muchos usuarios y una IP: pulverización, diseñada para eludir los bloqueos por cuenta.
-
Pocos fallos por origen y muchos orígenes para cada cuenta: relleno de credenciales, típico de una red de equipos comprometidos.
Esta distinción importa porque las defensas se complementan: un bloqueo por cuenta frena la fuerza bruta pero no la pulverización, y un bloqueo por IP no detiene a una red distribuida. La detección práctica a partir de los registros se realiza en el Ejercicio 3.
5.1. Medidas de defensa en Linux
-
Bloqueo por cuenta con
pam_faillock, que registra fallos y bloquea temporalmente la cuenta, como se configura en la guía de PAM. Es la medida que materializa el límite de intentos de NIST, que fija un máximo de 100 fallos consecutivos sobre un mismo autenticador. -
Bloqueo por origen con Fail2ban, que añade reglas de cortafuegos a las direcciones que acumulan fallos, como se estudia en la guía de Fail2ban.
-
Eliminar la autenticación por contraseña en servicios expuestos, sustituyéndola por claves públicas, como se desarrolla en la guía de SSH.
-
Segundo factor, que convierte una contraseña robada en insuficiente. Es el tema del capítulo de autenticación multifactor.
6. PIN y preguntas de seguridad
6.1. El PIN y el contador de intentos
Un PIN de cuatro dígitos tiene solo 10 000 combinaciones, entropía despreciable para un ataque desconectado. Aun así, es un mecanismo seguro en su contexto, porque el PIN nunca se compara fuera del dispositivo: lo verifica una tarjeta inteligente, un módulo TPM o el procesador seguro de un teléfono, que cuentan los intentos fallidos y se bloquean tras unos pocos. El atacante no puede probar las 10 000 combinaciones porque el dispositivo se lo impide.
La consecuencia es una regla de diseño: un PIN solo es adecuado cuando la verificación está ligada a un dispositivo con límite de intentos. En un servidor remoto sin ese límite, un PIN equivale a una contraseña débil.
6.2. Preguntas de seguridad
Preguntas como «nombre de tu primera mascota» o «ciudad de nacimiento» presentan tres defectos:
-
Sus respuestas se pueden averiguar en redes sociales o registros públicos.
-
Tienen poca entropía y un espacio de respuestas pequeño.
-
No se pueden cambiar si se filtran, y se reutilizan entre servicios.
NIST prohíbe expresamente utilizarlas como método de autenticación, tanto al elegir la contraseña como para recuperarla. Si por compatibilidad no es posible eliminarlas, la respuesta debe tratarse como una contraseña: generada al azar y guardada en un gestor, no real.
7. Gestores de contraseñas
Un gestor de contraseñas almacena las credenciales en una cámara cifrada que se desbloquea con una única contraseña maestra. Es la herramienta que hace viable una política de contraseñas largas, aleatorias y distintas para cada servicio.
-
Ventajas: elimina la reutilización, permite contraseñas imposibles de memorizar y, al rellenar solo en el dominio guardado, frena el phishing clásico, porque no ofrece la credencial en una web falsa.
-
Riesgos: la contraseña maestra concentra todo el riesgo y debe ser una frase de paso larga; un equipo con malware puede capturar la sesión desbloqueada; y la sincronización en la nube expone las cámaras cifradas a una brecha del proveedor, por lo que su protección depende de la robustez de la contraseña maestra y de la derivación de claves.
-
Recomendaciones: frase de paso larga y única como contraseña maestra, segundo factor en la propia cámara, y copia de recuperación custodiada fuera de línea.
La guía de gestores de contraseñas compara las opciones disponibles y propone actividades de análisis de amenazas.
8. Ejercicios prácticos
Los ejercicios están diseñados para realizarse en orden sobre una máquina virtual Ubuntu o Debian de pruebas con acceso a Internet. Todos los archivos se crean en ~/lab_conocimiento. El último ejercicio elimina todo lo creado.
| Nº | Ejercicio | Competencia que desarrolla |
|---|---|---|
1 |
Cuantificar la fortaleza de un secreto |
|
2 |
Comprender por qué el hash debe llevar sal |
|
3 |
Detectar fuerza bruta, pulverización y relleno de credenciales |
|
4 |
Contrastar puntuación, composición y contraseñas filtradas |
|
5 |
Revertir los cambios realizados |
8.1. Ejercicio 1. Entropía y tiempo de ataque
Realice los siguientes pasos:
-
Cree el directorio de trabajo y el script
entropia.py, que calcula la entropía y el tiempo medio de ataque a una velocidad dada:# Crea el directorio de trabajo del capítulo mkdir -p ~/lab_conocimiento # Entra en él, para que el script quede dentro cd ~/lab_conocimiento # Abre el editor para escribir el script sudo nano entropia.pyAñada el siguiente contenido al archivo.
import math, sys def tiempo_legible(segundos): for nombre, unidad in (("años", 31557600), ("días", 86400), ("horas", 3600), ("minutos", 60)): if segundos >= unidad: return f"{segundos / unidad:,.1f} {nombre}" return f"{segundos:,.1f} segundos" velocidad = float(sys.argv[1]) if len(sys.argv) > 1 else 1e10 casos = [("8 caracteres minúsculos", 26, 8), ("8 caracteres, teclado completo", 94, 8), ("12 caracteres, teclado completo", 94, 12), ("4 palabras Diceware", 7776, 4), ("6 palabras Diceware", 7776, 6)] print(f"Velocidad del atacante: {velocidad:.0e} intentos por segundo") for nombre, alfabeto, longitud in casos: bits = longitud * math.log2(alfabeto) medio = (2 ** bits) / 2 / velocidad print(f"{nombre:34s} {bits:6.1f} bits {tiempo_legible(medio)}") -
Ejecútelo con la velocidad por defecto. Compruebe que los resultados coinciden con la tabla de la sección 2.
-
Vuelva a ejecutarlo con una velocidad de
1e4, orden de magnitud de un ataque contra un algoritmo lento y con uso intensivo de memoria. Razone qué efecto tiene el almacenamiento sobre la seguridad de una misma contraseña. -
Calcule la entropía de una contraseña generada por usted con ocho palabras Diceware y de otra de ocho caracteres sacada de un patrón conocido, como su nombre y año. Explique por qué la fórmula no se aplica a la segunda.
8.2. Ejercicio 2. La sal y el almacenamiento
Realice los siguientes pasos:
-
Instale el paquete
whois, que proporcionamkpasswd. Calcule dos veces el SHA-256 de la misma contraseña y compare los resultados. -
Genere dos veces el hash yescrypt de la misma contraseña con
mkpasswdy compare. Explique por qué ahora los resultados difieren y qué consecuencia tiene para un atacante que robe la base de datos. -
Identifique el algoritmo de cada uno de estos hashes a partir de su prefijo, y señale los que deben migrarse:
$y$j9T$Kq2W... $6$rounds$aB3... $1$saltsalt$LgRcbC... $2b$12$q9K... -
Compare el tiempo de calcular un SHA-256 con el de un hash yescrypt para ver el coste deliberado.
8.3. Ejercicio 3. Distinguir ataques en un registro
Realice los siguientes pasos:
-
Genere el registro de muestra
auth_muestra.log, que contiene tres ataques distintos más un acceso correcto posterior:cd ~/lab_conocimiento awk 'BEGIN{ for(i=1;i<=40;i++) printf "Oct 19 09:%02d:%02d srv01 sshd[1000]: Failed password for root from 203.0.113.45 port %d ssh2\n", int(i/4), (i*7)%60, 40000+i split("admin test oracle ubuntu user guest postgres git www-data ftp backup operador",u," ") for(i=1;i<=12;i++) printf "Oct 19 10:%02d:%02d srv01 sshd[2000]: Failed password for invalid user %s from 198.51.100.23 port %d ssh2\n", i, 10+i, u[i], 50000+i split("maria juan lucia",c," ") for(i=1;i<=8;i++) for(j=1;j<=3;j++) printf "Oct 19 11:%02d:%02d srv01 sshd[3000]: Failed password for %s from 192.0.2.%d port %d ssh2\n", i, j*13, c[j], 10+i, 60000+i*j printf "Oct 19 11:30:00 srv01 sshd[3999]: Accepted password for maria from 192.0.2.99 port 61000 ssh2\n" }' > auth_muestra.log wc -l auth_muestra.log -
Escriba una orden
awkque calcule, por cada dirección de origen, el número de fallos y de usuarios distintos, y, por cada usuario, desde cuántos orígenes se le ataca. A partir de esos recuentos, clasifique cada origen como fuerza bruta, pulverización o relleno de credenciales. -
Responda: ¿qué bloqueo habría detenido cada ataque, el basado en fallos por cuenta o el basado en fallos por dirección IP? ¿Qué indicaría el acceso correcto final de
maria? -
Ajuste los umbrales del script y razone qué falsos positivos y falsos negativos aparecen con una red corporativa detrás de una sola dirección pública.
8.4. Ejercicio 4. Evaluar una política de contraseñas
Realice los siguientes pasos:
-
Instale
libpwquality-toolsy puntúe estas contraseñas conpwscore:Verano2026!,password,qwerty123456,correct horse battery stapleyTr3s-Gatos.Saltan_Muros. Anote cuáles rechaza y cuáles puntúa alto. -
Escriba la función de Bash
filtrada, que consulta el servicio de contraseñas comprometidas mediante k-anonimato y muestra el número de apariciones de la contraseña recibida:filtrada() { local h pre suf h=$(printf '%s' "$1" | sha1sum | cut -d' ' -f1 | tr 'a-f' 'A-F') pre=${h:0:5}; suf=${h:5} curl -s -m 15 "https://api.pwnedpasswords.com/range/$pre" | tr -d '\r' | grep -i "^$suf" | cut -d: -f2 | grep . || echo 0 } -
Compruebe con la función las mismas cinco contraseñas. Compare los resultados con las puntuaciones del paso 1 y concluya qué defecto tiene una política basada únicamente en reglas de composición.
-
Redacte en cinco líneas la política de contraseñas que propondría para una empresa, indicando longitud, listas de bloqueo, caducidad, bloqueo por intentos y tratamiento de las preguntas de seguridad, y justifique cada decisión con la norma de la sección 3.
8.5. Ejercicio 5. Limpieza del entorno
-
Elimine el directorio de trabajo y la función definida en la sesión.
10. Licencia
Licencia CC BY-NC-ND 4.0
Esta página forma parte del curso Bastionado de Redes y Sistemas © 2026 de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.
Esta licencia exige que quienes reutilicen el material otorguen el debido crédito al autor. Permite copiar y redistribuir el material en cualquier medio o formato, únicamente en su forma original, y solo para fines no comerciales.