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^5 resultados 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:

  1. El cliente calcula el SHA-1 de la contraseña y envía solo los cinco primeros caracteres del resultado.

  2. El servicio devuelve todos los sufijos conocidos que comparten ese prefijo, con su número de apariciones.

  3. 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 /etc/shadow, el análisis de los parámetros de yescrypt y la migración de hashes heredados se explican en la guía de administración de usuarios y grupos. La auditoría de contraseñas contra esos hashes, con fines defensivos, se realiza con las herramientas de la guía de John the Ripper.

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

Entropía y tiempo de ataque

Cuantificar la fortaleza de un secreto

2

La sal y el almacenamiento

Comprender por qué el hash debe llevar sal

3

Distinguir ataques en un registro

Detectar fuerza bruta, pulverización y relleno de credenciales

4

Evaluar una política de contraseñas

Contrastar puntuación, composición y contraseñas filtradas

5

Limpieza del entorno

Revertir los cambios realizados

8.1. Ejercicio 1. Entropía y tiempo de ataque

Realice los siguientes pasos:

  1. 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.py

    Añ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)}")
  2. Ejecútelo con la velocidad por defecto. Compruebe que los resultados coinciden con la tabla de la sección 2.

  3. 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.

  4. 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:

  1. Instale el paquete whois, que proporciona mkpasswd. Calcule dos veces el SHA-256 de la misma contraseña y compare los resultados.

  2. Genere dos veces el hash yescrypt de la misma contraseña con mkpasswd y compare. Explique por qué ahora los resultados difieren y qué consecuencia tiene para un atacante que robe la base de datos.

  3. 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...
  4. 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:

  1. 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
  2. Escriba una orden awk que 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.

  3. 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?

  4. 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:

  1. Instale libpwquality-tools y puntúe estas contraseñas con pwscore: Verano2026!, password, qwerty123456, correct horse battery staple y Tr3s-Gatos.Saltan_Muros. Anote cuáles rechaza y cuáles puntúa alto.

  2. 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
    }
  3. 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.

  4. 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

  1. Elimine el directorio de trabajo y la función definida en la sesión.

9. Referencias

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.