Comprobador de seguridad de contraseñas
Análisis en tiempo real con el motor zxcvbn: los diccionarios de contraseñas comunes, secuencias de teclado, secuencias, repeticiones y fechas te restan puntos — una medida de seguridad mucho más real que contar las clases de mayúsculas/minúsculas/dígitos/símbolos. Todo se ejecuta localmente; tu contraseña nunca abandona el navegador.
- Motor
- zxcvbn
- Puntuación
- Escala de 0 a 4
- Privacidad
- Nunca se sube
- Diccionario
- Incluye contraseñas comunes
Configuración avanzada de política
Separados por comas o saltos de línea, sin distinción de mayúsculas y minúsculas. zxcvbn captura automáticamente variaciones de mayúsculas/minúsculas, sustituciones leet (ej. Pa$$w0rd) e inversiones.
Comparar dos contraseñas
POR QUÉ IMPORTA
Por qué “mayúscula + minúscula + dígito + símbolo” no es seguridad
P@ssw0rd! cumple las cuatro casillas de caracteres y sigue apareciendo en las listas de filtraciones reales. La fortaleza se basa en la capacidad de ser adivinada, no en una suma aritmética de clases de caracteres.
Coincidencia de contraseñas débiles
Un diccionario incorporado de contraseñas y palabras comunes penaliza fuertemente — password, 123456 y P@ssw0rd se califican correctamente como muy débiles.
Detección de patrones
Recorridos por teclado, secuencias directas, repeticiones, fechas y palabras comunes reducen el espacio de adivinación efectivo.
Entropía efectiva, no teórica
La puntuación estima las adivinanzas reales por las estructuras encontradas — no el tamaño del conjunto de caracteres multiplicado por la longitud.
Dos escenarios de ataque
Estimaciones separadas para descifrado GPU fuera de línea y adivinación en línea con límite de velocidad desarrollan la intuición sobre el costo para el atacante.
Lista negra y política personalizada
Establece requisitos de longitud mínima y clases; añade nombres de empresas o nombres en clave de proyectos para cumplir las reglas corporativas de contraseñas.
Completamente local
Tu contraseña nunca sale del navegador ni entra en un servidor; los ajustes solo se guardan en tu localStorage.
Entendiendo la fortaleza de las contraseñas
Cómo funciona la puntuación, qué significan los tiempos de descifrado y qué hace realmente una buena contraseña.
¿Cómo se calcula la puntuación de 0 a 4 de zxcvbn?
zxcvbn primero divide la contraseña en fragmentos: palabras de diccionario (contraseñas comunes, palabras en inglés), recorridos por teclado, secuencias, repeticiones, fechas y fragmentos de fuerza bruta.
Estima las adivinanzas por fragmento, las combina en un recuento total de adivinanzas y lo mapea a una puntuación de 0 a 4. Las transformaciones comunes se contabilizan automáticamente — inversión de mayúsculas y minúsculas, sustituciones leet (@→a, 0→o), sufijos de años — por lo que P@ssw0rd obtiene una puntuación baja a pesar de su variedad de caracteres.
¿Cuál es la diferencia entre entropía efectiva y tamaño del conjunto de caracteres?
El tamaño del conjunto de caracteres multiplica el tamaño del alfabeto por la longitud — un límite teórico que asume que cada carácter es completamente aleatorio, lo que prácticamente no ocurre en las contraseñas reales.
La entropía efectiva (el recuento de bits que se muestra aquí) es el espacio de adivinación real que zxcvbn estima después de encontrar palabras de diccionario y patrones. Con la misma longitud, iloveyou2024 tiene mucha menos entropía efectiva que una cadena aleatoria.
¿Cómo se estiman los tiempos de descifrado — son fiables?
Tiempo de descifrado = intentos estimados ÷ intentos por segundo. Se muestran dos velocidades: ~10 mil millones/segundo para un granjero de GPU offline (el atacante tiene el hash) y ~100/hora para un inicio de sesión online con límite de velocidad.
Tratalas como órdenes de magnitud, no como predicciones: la velocidad real depende del algoritmo hash (bcrypt/Argon2 son órdenes de magnitud más lentos que MD5), el hardware y la calidad del diccionario. Una diferencia de 10× no cambia nada; una diferencia de un millón de veces sí.
¿Qué hace realmente que una contraseña sea buena?
Dos opciones sólidas: una cadena aleatoria de más de 16 caracteres de un gestor de contraseñas, única por sitio; o una frase de contraseña de más de 4 palabras sin relación (como correct-horse-battery-staple) — larga y sin sentido.
Cualquiera que elijas, acompáñala de autenticación multifactor (MFA) y nunca reutilices la misma contraseña entre sitios.
Mi sitio requiere mayúsculas/minúsculas/dígitos/símbolos — ¿por qué tiene una puntuación baja?
La política corporativa (longitud, clases de caracteres) es un mínimo de cumplimiento: responde «¿cumplen?». La puntuación de zxcvbn responde «¿puede ser adivinada?». Ambas son independientes.
Agregar un signo de exclamación y un año a una palabra común (contraseña!2024) pasa la mayoría de las comprobaciones de política, pero falla ante un ataque de diccionario en segundos.
¿Mi contraseña se sube a algún lado?
No. Todo se ejecuta en tu navegador mediante JavaScript — no hay ninguna solicitud de red que envíe la contraseña, y también funciona sin conexión. Solo tu política personalizada (reglas de longitud, lista bloqueada) se almacena localmente; nunca contiene una contraseña.
Comprobación de seguridad de contraseñas en código
Para agregar comprobaciones de fortaleza en tiempo real a tu propio formulario de registro o cambio de contraseña, usa un puerto de zxcvbn para tu idioma:
<!-- CDN -->
<script src="https://unpkg.com/[email protected]/dist/zxcvbn.js"></script>
<script>
const res = zxcvbn('P@ssw0rd!');
console.log(res.score, res.crack_times_display);
</script>
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';
const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
composer require bjeavons/zxcvbn-php
<?php
require __DIR__ . '/vendor/autoload.php';
use ZxcvbnPhp\Zxcvbn;
$zxcvbn = new Zxcvbn();
$res = $zxcvbn->passwordStrength('P@ssw0rd!');
echo $res['score'];
pip install zxcvbn
from zxcvbn import zxcvbn
res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
go get github.com/nbutton23/zxcvbn-go
package main
import (
"fmt"
zxcvbn "github.com/nbutton23/zxcvbn-go"
)
func main() {
res := zxcvbn.PasswordStrength("P@ssw0rd!", nil)
fmt.Println(res.Score, res.Guesses)
}
# Add dependency
cargo add zxcvbn
use zxcvbn::zxcvbn;
fn main() {
match zxcvbn("P@ssw0rd!", &[]) {
Ok(estimate) => {
println!("score: {}", estimate.score()); // 0..4
if let Some(times) = estimate.crack_times() {
println!("offline: {:?}", times.offline_slow_hashing_1e4_per_second());
}
}
Err(err) => eprintln!("zxcvbn error: {err}"),
}
}
Las puntuaciones y estimaciones de patrones pueden diferir ligeramente de esta página según las versiones de la biblioteca, pero los principios son los mismos. Para comprobaciones en el servidor, también establece un límite de longitud y limitación de velocidad para que entradas demasiado grandes no agoten la CPU.
Preguntas frecuentes
¿Cómo funciona este comprobador de fortaleza de contraseñas?
Utiliza zxcvbn, el algoritmo de código abierto de Dropbox: la contraseña se compara con diccionarios de contraseñas comunes, listas de palabras en inglés, patrones de teclado, secuencias, fechas y patrones repetidos. El número promedio estimado de intentos que necesita un atacante se asigna a una puntuación de 0 a 4 y estimaciones de tiempo de descifrado.
P@ssw0rd parece compleja — ¿por qué es «muy débil»?
Es una de las contraseñas débiles más icónicas en los corpus de filtraciones. Aparece directamente en los diccionarios de zxcvbn, y la capitalización más las sustituciones de tipo leet (a→@, o→0) se reconocen automáticamente. Caracteres variados con una estructura completamente predecible es exactamente lo que primero intentan los diccionarios de atacantes basados en reglas.
¿Cuánto tiempo debe tener una contraseña?
Cuando se genera aleatoriamente, más de 12 caracteres generalmente derrota los ataques online, mientras que más de 16 resiste los descifrados offline con GPU durante muchos años. La longitud importa más que la complejidad de los caracteres: una cadena aleatoria de 20 caracteres en minúsculas supera una de 10 caracteres con las cuatro clases.
¿Por qué separar los tiempos de descifrado offline y online?
Los escenarios de ataque son diferentes: después de una filtración de base de datos, un atacante puede intentar hashes localmente en GPUs a miles de millones de intentos por segundo; contra un inicio de sesión en vivo, la limitación de velocidad permite solo unos pocos intentos por segundo. La misma contraseña puede sobrevivir un billón de veces más en un escenario que en el otro — por eso se muestran ambos.
¿Se almacenan mis entradas en algún lugar?
No. Tu contraseña solo reside en la memoria de tu navegador y desaparece al actualizar la página. Solo tus configuraciones de política personalizada (reglas de longitud, lista bloqueada) se guardan en el almacenamiento local — nunca contienen una contraseña.