IT & Engineering
Los medidores de contraseñas no son para humanos
Llevamos un par de meses del nuevo año y, como siempre, la lucha contra los actores maliciosos continúa.
En Mailgun nos tomamos muy en serio la seguridad de las cuentas de usuario y, cuando una cuenta se ve comprometida, nadie se divierte. Con tantas cosas que pueden contribuir a que una cuenta se vea comprometida, dimos un paso atrás para analizar los distintos vectores de ataque que utilizan los actores maliciosos para intentar acceder a las cuentas.
En la base de todo esto se encuentra una de las primeras cosas que la gente configura al crear una cuenta: su contraseña. Una contraseña segura es fundamental para tener una buena postura de seguridad, pero inventar una puede ser una tarea tan tediosa que muchos usuarios acaban usando contraseñas simples o débiles por defecto. Para evitar que sus contraseñas se vean comprometidas, debemos guiarles en la dirección correcta.
Medidores de contraseñas
Cuando empezamos a buscar una nueva forma de mitigar los accesos no autorizados animando a los usuarios a elegir mejor al crear contraseñas, pensamos que poner un medidor de seguridad en el formulario de registro sería una buena manera de hacerlo.
A partir de ahí, analizamos un buen número de ejemplos existentes para ver qué está haciendo el sector y, dado que los medidores de contraseñas no son algo nuevo, qué se podría mejorar. Los medidores de contraseñas suelen constar de las siguientes reglas o requisitos. Tu contraseña:
- Debe tener al menos ocho caracteres
- Debe incluir al menos una letra mayúscula
- Debe incluir al menos una letra minúscula
- Debe incluir al menos un número
- Debe incluir al menos un carácter especial de un conjunto de símbolos aceptados
Las reglas anteriores son bastante estándar, pero no funcionan del todo bien.
Siempre que se habla de contraseñas, es habitual encontrar una referencia a un cómic en particular que trata este mismo tema (este aquí por si no lo conoces). Hay mucho material como este que hace un trabajo excelente a la hora de señalar a dónde queremos llegar:
Los humanos no somos buenos creando contraseñas seguras.
Aunque incluir todas las reglas anteriores en tu contraseña pueda dar la impresión de que estás guiando a la gente en la dirección correcta, no significa que vaya a ser más difícil de descifrar para los ordenadores. Esto se debe a que las personas tienen generadores aleatorios muy deficientes instalados en la cabeza. Para empezar, la gente suele usar palabras que tienen un significado especial. Además, el cerebro humano puede estar predispuesto a utilizar palabras asociadas cuando se expone a un entorno específico. El siguiente análisis de la filtración de datos de LinkedIn es un claro ejemplo:

Justificar la evaluación
Con esto en mente, ahora teníamos que responder a la pregunta de cómo íbamos a evaluar la seguridad de la contraseña que crea un usuario.
Para empezar, descubrimos que la forma más efectiva de mitigar el robo de cuentas debido a contraseñas inseguras es comprobarlas con una base de datos de credenciales expuestas cifradas. La que utilizamos nosotros proviene de https://haveibeenpwned.com

Si un usuario intenta establecer una contraseña que ya ha sido expuesta, no debería poder avanzar en el proceso. Como ventaja añadida, esperamos que esto anime al usuario a cambiar esta contraseña si la está utilizando en otros servicios.
Por lo tanto, también marcamos las contraseñas que tienen menos de diez caracteres o que incluyen cualquier información proporcionada previamente en el formulario de registro: nombre de dominio, nombre real, nombre de la empresa, etc.
Pero, ¿qué pasa si la contraseña no existe en la lista de hashes expuestos y cumple el resto de los requisitos, pero es algo tan simple como “Password0001!”?
Entropía
Otra forma de medir la seguridad de una contraseña es calcular su entropía. “La entropía de una contraseña es una medida de lo impredecible que es. [Está] basada en los conjuntos de caracteres utilizados… así como en la longitud de la contraseña” [1].
La entropía de una contraseña, que normalmente se mide en “bits”, puede calcularse hallando la entropía de cada carácter, con un logaritmo en base 2 del número de caracteres del conjunto empleado, multiplicado por el número de caracteres de la propia cadena de la contraseña.
Si tenemos en cuenta las contraseñas débiles que aún no se han filtrado ni descifrado, utilizar la entropía para mostrar un mensaje a un usuario a través del medidor de contraseñas resulta muy útil para indicarle que debería plantearse usar algo mejor.
Sin embargo, medir la seguridad de una contraseña basándose únicamente en su entropía tiene sus fallos.
Por ejemplo, tomemos la contraseña “Password01!”, que es bastante común y podría adivinarse fácilmente. Lo que vemos es que un medidor de contraseñas ingenuo dice lo contrario:

Este es un medidor de seguridad que muestra que esta contraseña es “Muy fuerte”. Sin embargo, tal cual, esta contraseña se ha visto en haveibeenpwned.com más de 400 veces:

Veamos otro ejemplo: vamos a utilizar una contraseña compuesta por cinco palabras SELECCIONADAS AL AZAR, con una longitud de entre tres y cuatro caracteres cada una; sin mayúsculas, símbolos especiales ni números:

Por si no lo distingues, las palabras son “fit”, “heat”, “scale”, “pot” y “kneel”. En términos de entropía, esta contraseña tiene un conjunto de caracteres más pequeño, pero fíjate en esto:

Aunque basándonos en la complejidad se considera una contraseña “débil”, no ha sido expuesta (al menos por lo que podemos ver en la respuesta de haveibeenpwned.com). Si tienes en cuenta el número de permutaciones y combinaciones posibles al elegir al azar cinco palabras de entre todas las de tres, cuatro y cinco letras que hay en el idioma inglés, por ejemplo, puede llegar a ser muy complejo. Veámoslo en detalle:

Pero no te lo tomes demasiado en serio: tal y como sugiere la advertencia de HaveIBeenPwned, el mero hecho de que no haya sido expuesta no significa que sea una buena contraseña. Esta es el tipo de contraseña que podrías agrupar con la del cómic que hemos mencionado antes. Junto a todas las del tipo “correcthorsebatterystaple”, que sugieren que este tipo de contraseñas son más fáciles de recordar para los humanos, al tiempo que resultan más difíciles de descifrar para los ordenadores por lo que acabamos de comentar.
En general: nada impresionante
Entonces, ¿a dónde quiero llegar con todo esto? Sabemos que los requisitos comunes no funcionan del todo bien y que la entropía presenta fallos a la hora de determinar la seguridad de una contraseña, así que, ¿qué podemos hacer?
Pues crear un medidor de contraseñas al que no le impresione nada de lo que le pongas.

Aunque nuestro pequeño y gruñón medidor parezca estar todavía en pañales en comparación con lo que podría llegar a ser más adelante, creo que es un buen punto de partida para dejar claro el mensaje.
Otro de los problemas de la mayoría de los medidores de contraseñas es el abrumador refuerzo positivo que proporcionan. Si bien un medidor de contraseñas te echará la bronca si no cumples los requisitos, en cuanto lo haces recibes respuestas muy positivas y se te dice casi explícitamente que tu contraseña es genial y que no tienes que hacer nada más para mantener tu cuenta segura. En otras palabras, no tienes de qué preocuparte, tu cuenta nunca se verá comprometida.
Los medidores de contraseñas habituales funcionan de un modo muy similar a las dos primeras curvas de campana que puedes ver en la siguiente imagen:

Normalmente, una vez que cumples los requisitos de un medidor, pasas a las zonas de “Está bien” o “Bastante buena” y la cosa se queda ahí, lo cual, en realidad, no está nada bien.

Nuestro objetivo es parecernos a la tercera curva de campana que ves arriba. En la que nos oponemos a tu elección de contraseña la mayor parte del tiempo y nos mostramos indiferentes el resto. El motivo es que hoy en día una contraseña no basta para garantizar la seguridad y, por tanto, el medidor de contraseñas no debería dejarse impresionar.
Conclusión
En resumidas cuentas, crear un buen medidor de contraseñas es complicado y puede llevar a que los usuarios creen contraseñas más débiles en lugar de otras mejores y más seguras. Además, usar recursos como haveibeenpwned.com para comprobar si hay contraseñas expuestas es mucho más fiable que inventar y utilizar tus propios algoritmos de comprobación.
Utilizar un gestor de contraseñas que pueda generarlas a partir de un conjunto de caracteres lo suficientemente grande como para alcanzar el nivel de entropía deseado es, a día de hoy, una de las mejores opciones para crear contraseñas seguras y únicas. Pero, aun así, deberías plantearte utilizar cualquiera del resto de opciones de seguridad disponibles (o todas ellas), como claves de seguridad, aplicaciones de autenticación o cualquier otro método de autenticación multifactor, más allá del simple uso de una contraseña.
Básicamente, si te preguntas si deberías implementar un medidor de contraseñas en tu web, yo diría que no, a menos que quieras utilizarlo como una especie de canal para transmitir un mensaje. En realidad, un medidor de contraseñas no es más que un adorno, porque hemos hecho que para los humanos sea casi imposible y poco práctico inventar una contraseña verdaderamente aleatoria, si es que eso es posible.
Y aunque hemos diseñado estos medidores para evaluar las contraseñas que inventamos, es mejor utilizarlos para las que puede crear un ordenador, ya que los humanos somos demasiado predecibles, incluso cuando nos esforzamos por no serlo.
Referencias:
https://xkcd.com/936/
https://whatis.techtarget.com/definition/password-entropy
http://securitynirvana.blogspot.com/2012/06/linkedin-password-infographic.html
https://haveibeenpwned.com/Passwords
https://passwordmeter.com/