← Volver a proyectos

Proyecto personal
Password Checker — robustez y filtraciones
CLI en Python sin dependencias y aplicación web bilingüe: entropía efectiva, detección de patrones débiles y comprobación de filtraciones por k-anonimato, donde solo 5 caracteres del hash salen del dispositivo
Contexto
Reconstruí este proyecto desde cero para mostrar un enfoque defensivo y respetuoso con la privacidad de un problema clásico: ¿qué tan robusta es realmente una contraseña y se ha filtrado ya? Las fórmulas basadas en el número de caracteres sobrestiman las contraseñas humanas, y la mayoría de los verificadores en línea piden que se les confíe la propia contraseña. Password Checker estima lo que un atacante probaría primero y consulta Have I Been Pwned sin enviar nunca la contraseña.
Lo que construí
- Una CLI en Python (solo biblioteca estándar): entrada oculta, informe legible o JSON, códigos de salida útiles en scripts y CI
- Entropía efectiva: palabras comunes (incluido leet speak, como P@ssw0rd), recorridos de teclado AZERTY/QWERTY, secuencias y repeticiones se evalúan como los adivinaría un atacante
- Umbrales basados en la CNIL francesa (2022) y NIST SP 800-63B-4
- Comprobación de filtraciones con la API Pwned Passwords (k-anonimato): SHA-1 calculado localmente, solo se envía el prefijo de 5 caracteres, con relleno activado
- Una interfaz web bilingüe (EN/FR) en GitHub Pages: port del motor a TypeScript, mapa de patrones que nunca revela un carácter y el hash SHA-1 dibujado como 5 celdas enviadas y 35 conservadas
Decisiones de seguridad
- La contraseña nunca se muestra, registra ni almacena; las pruebas verifican que no aparece en ninguna salida
- Sin opción --password: se filtraría en el historial de la terminal y en los argumentos del proceso
- Web: política de seguridad de contenido estricta con un único destino (api.pwnedpasswords.com), sin analítica, sin scripts ni fuentes de terceros, sin cookies enviadas
- Comprobación de filtraciones solo al hacer clic: comprobar en cada pulsación enviaría el prefijo de cada contraseña parcial
- Repositorio reforzado: rama main protegida (PR y CI en verde obligatorios), escaneo de secretos con bloqueo de push, Dependabot, notificación privada de vulnerabilidades, análisis Gitleaks de todo el historial
Calidad de ingeniería
77
Pruebas Python
48
Pruebas TypeScript
22
Casos de prueba compartidos
ambos motores deben dar resultados idénticos
5 tareas
Matriz CI
Windows + Linux, Python 3.11/3.14, Node 24
0
Dependencias de ejecución
Enlaces
Capturas de pantalla
