Nerea lleva la web de una cooperativa vecinal, gestionada por voluntarios, y hace unos meses le tocó gestionar el marrón de un aviso: un foro antiguo que usaban para las asambleas había sufrido una fuga años atrás, y alguien le pasó el volcado —usuarios, hashes, y una lista aparte con contraseñas que ya se habían crackeado en su día— para avisar a quien siguiera reutilizando alguna. De paso, decidió meter un medidor de fortaleza en el formulario de alta del nuevo sitio de la cooperativa, para que nadie repitiera el patrón.
El bug: la complejidad no es fortaleza
El primer medidor que montó era el típico: puntos por longitud, puntos si hay mayúscula, puntos si hay número, puntos si hay símbolo. Con ese criterio, Cooperativa2024! sacaba nota de «fuerte». Y esa misma contraseña, o variaciones casi idénticas, aparecía repetida decenas de veces en la lista de la fuga que tenía delante. El medidor premiaba justo el patrón que un atacante prueba primero: nombre de la entidad más el año más un símbolo de relleno al final.
Depurar con la lista de verdad
Para arreglarlo de verdad hacía falta probar el medidor contra casos reales, no contra ejemplos de manual. Pegó un extracto de la lista filtrada en el editor de Elffuss Code para que la IA local viera qué patrones colaban como «fuerte» y cuáles no. Esa lista es exactamente el tipo de dato que jamás subiría a un servicio en la nube: son contraseñas reales de gente real, aunque hayan cambiado de fuente, y el prompt con ellas dentro tampoco. Como el modelo corre en la GPU de su propio portátil, ese extracto no salió del disco en ningún momento.
La IA local no propuso una fórmula mágica, propuso cambiar el enfoque: primero comprobar contra una lista de contraseñas comunes y solo si pasa ese filtro, puntuar patrones —secuencias de teclado, fechas, palabras del dominio (el nombre de la cooperativa, el barrio, el año en curso)—. Para no bloquear la escritura mientras se compara contra miles de entradas, sugirió mover la comprobación a un Web Worker con las entradas en un Set, así la búsqueda es de coste constante y el hilo principal sigue respondiendo mientras se teclea.
Una contraseña puede tener mayúscula, número y símbolo y seguir siendo la primera que probaría cualquiera. La fortaleza no se mide en tipos de carácter, se mide en si ya está en alguna lista.
Con el filtro puesto, Cooperativa2024! pasó a marcarse como débil al instante, y el formulario empezó a sugerir alternativas que no siguieran ese patrón. Lo que se lleva Nerea del caso no es el Web Worker, que es de manual: es que para depurar un componente de seguridad con datos de una fuga real, la única IA con la que puede trabajar tranquila es una que no vea esos datos salir de su máquina.
Si alguna vez tienes que probar algo así con datos que no puedes subir a ningún sitio, abre Elffuss Code: corre entero en tu navegador y ni tu código ni tus prompts salen de tu ordenador.
Abrir Code →