A menudo es cuestionada, la contraseña sigue siendo el medio de autentificación esencial para su seguridad… Y para garantizar su solidez, las recomendaciones son numerosas y a veces contradictorias: longitud, complejidad, diversidad, composición, renovación más o menos periódica… Incluso se nos obliga regularmente, según la plataforma, a incluir caracteres especiales.
Esta semana, Jimmy Rundstadler, consultor y jefe de prácticas de Davidson, examina este último criterio y su eficacia y comparte con nosotros sus reflexiones. ¡El debate está en marcha!

¿Es realmente una buena idea exigir caracteres especiales en las contraseñas?

A primera vista, quizá su reacción a esta pregunta sea similar a la mía:
Sí, es una buena idea, la mayoría de los sitios incluso nos dicen que nuestras contraseñas son más seguras si ponemos mayúscula + número + carácter especial. Además, eso es lo que seguimos escuchando, así que debe ser bueno, ¿no?“.
Pero probablemente la duda empezó a aparecer en cuanto leí el título del artículo. Esa sensación se hizo aún más fuerte a medida que se iba avanzando hasta este punto, y entonces se pudo pensar “bueno, todavía no es tan conveniente para recordar”… y eso es bueno, porque es entonces cuando se empieza a dar un ligero paso atrás, y se puede cuestionar este modelo y formarse una opinión propia…

El “a principio” que nos tranquiliza

Pero, ¿por qué empezamos con este prejuicio? ¿Por qué pensamos naturalmente que una contraseña compleja de recordar, o que al menos contiene caracteres especiales, es más segura?
En primer lugar, nuestro sentido lógico nos dice, y con razón, que simplemente hay una mayor probabilidad de adivinar un carácter si nos limitamos al alfabeto, en lugar de incluir el alfabeto de varios idiomas, los signos de puntuación, los números, las mayúsculas y minúsculas, etc.

Ejemplo: para un solo carácter, hay 26 posibilidades para el alfabeto francés en minúsculas contra 62 posibilidades (26+26+10) todavía para un solo carácter que puede ser esta vez un número o una parte del alfabeto francés en minúsculas o en mayúsculas.
A primera vista, aumentar las posibilidades de un solo personaje es una muy buena idea y así es. Sin embargo, dista mucho de ser el más eficaz y a veces puede ser contraproducente. Volveremos a ello.

Una de las ventajas de imponer la presencia de una letra mayúscula, un número o un carácter especial, es limitar la posibilidad de ataques de diccionario.

Es decir, el modus operandi que consiste en probar las contraseñas más utilizadas o los términos que componen uno o varios idiomas. Sin embargo, hay que tener cuidado de no recurrir al Leet Speak (una técnica que pretende sustituir las letras por ciertos caracteres visualmente cercanos, por ejemplo una S en el 5 o una E en el 3), lo que volvería a hacer que nuestras contraseñas fueran vulnerables a este tipo de ataques.

Lo que nos hace dudar

Volvamos al punto. He aquí una situación con la que me he podido encontrar y que seguro que te sonará.
Necesito una nueva contraseña, así que introduzco “password1234”. Pero entonces creo que es el momento de seguir las recomendaciones para “asegurarlo”. Así que borro el último carácter para añadir un carácter especial a una contraseña, que sigue siendo memorable. El resultado: “¡contraseña123!

Ahí, y probablemente ya te haya pasado, me sale una negativa: Error, “Su contraseña debe contener al menos una letra mayúscula, un número y un carácter especial”. Pues bien, me remango, me pregunto por qué han esperado a que me invente una contraseña y la introduzca antes de advertirme de las normas que se aplican específicamente a este sitio, entonces la sustituyo y opto por “¡Contraseña123!

Otra alerta roja, esta vez me dicen que “!” no es un carácter aceptado… Solté un largo suspiro, me arremangué un poco más y sustituí “!” por “?” mientras me preguntaba si esta vez sería la correcta o no. ¡Bingo, funciona! “¿Contraseña123?” cumple todos los requisitos.

Pero finalmente, pasan unos minutos y surge una pregunta: ¿es realmente más segura la “contraseña123?” que la “contraseña1234”?

Analicemos la cuestión, tomando arbitrariamente 10 posibilidades de caracteres especiales, para simplificar los cálculos y reducir un poco los órdenes de magnitud. Esto nos da :
10 caracteres especiales + 26 minúsculas + 26 mayúsculas + 10 números = 72 posibilidades para un carácter totalmente libre. En ambos casos, mi contraseña tiene 12 caracteres.

Empecemos con “password1234” :
72^12 = 19 408 409 961 765 342 806 016 posibilidades

Ahora comparémosla con la contraseña que respeta las reglas del sitio, “Contraseña123?”, y para la que se necesita al menos un número (10 posibilidades), una letra mayúscula (26 posibilidades), un carácter especial (10 posibilidades) y libertad de entrada para el resto:
10+26+10+72^(12-3) = 51.998.697.814.229.038 posibilidades con 12-3 porque de los 12 caracteres, 3 tienen reglas impuestas.

Llegados a este punto, empiezo a tener serias dudas, porque al imponer estas reglas para reforzar mi contraseña, me han quitado 19.408.409.961.765.342.806.016 – 51.998.697.814.229.038 = ¡19.408.357.963.067.528.576.978 posibilidades de contraseña! ¿No era el objetivo hacerla más segura?

Sin embargo, un ataque de “fuerza bruta”, es decir, simplemente un ataque que pruebe todas las posibilidades una por una, tardará mucho menos en encontrar mi contraseña que si la hubiera elegido yo mismo, sin todas estas limitaciones. Mi sentido lógico, de nuevo con razón, me dice esta vez que cuantas más reglas de entrada se me imponen, más “filtran” mis posibilidades de entrada. En otras palabras, mi contraseña se me impone un poco más limitando mis opciones.

Lo que realmente importa

Vayamos un poco más allá en el proceso. Para ello, opto esta vez por un orden de magnitud mucho más significativo, con contraseñas compuestas sólo por uno o dos caracteres, siempre con 10 caracteres especiales permitidos.

Como recordatorio, según nuestro criterio, el número de posibilidades de un solo carácter: 26 minúsculas + 26 mayúsculas + 10 números + 10 caracteres especiales = 72 posibilidades.

Veamos ahora el número de posibilidades utilizando sólo las 26 letras minúsculas de nuestro alfabeto.

En un solo carácter, 26 posibilidades es menor que si utilizamos los caracteres especiales.

¡Ahora subamos a 2 caracteres 26^2 = 676 posibilidades!

Para 2 caracteres, si se me exige que utilice al menos un carácter especial (10 posibilidades según nuestro criterio), tenemos 2*(72*10) = 1440 posibilidades, el mismo orden de magnitud que antes, y 72^2 = 5184 posibilidades si se me deja a mi aire.

Recapitulemos:

Como podemos ver arriba, 2 elementos cambian significativamente el orden de magnitud del número de posibilidades necesarias para adivinar una contraseña: su longitud y la posibilidad de elegirla libremente. El orden de magnitud se multiplica incluso cuando se fomentan ambos. A pesar de nuestras ideas preconcebidas iniciales, imponer un carácter especial parece tener muy poco efecto.

Definitivamente, mi contraseña será mucho más difícil de adivinar si me dejan elegir libremente el tamaño y los caracteres que la componen en lugar de imponer el uso de caracteres especiales.

Los “orígenes del mal

Como puedes ver, el problema viene principalmente de imponer una regla para introducir una contraseña, como imponer una longitud máxima, o imponer el uso de caracteres especiales. Impuesta inicialmente para ayudar al usuario a diseñar una contraseña fuerte, este modelo muestra rápidamente sus límites. Cuanto más restrictivas sean estas reglas, más se limita el número de intentos necesarios para adivinarlo, ya sea con un ataque de fuerza bruta, por diccionario o por simple deducción.

Pensaremos en particular en ciertos sitios que imponen introducir sólo números sobre 6 u 8 caracteres… Hay entonces posibilidades muy fuertes de que la contraseña corresponda a una fecha vivida por el usuario. Teniendo en cuenta que los últimos caracteres corresponden generalmente a un año, conociendo la población objetivo del sitio así atacado, basta entonces con probar todas las fechas.

¿Un ejemplo? Si nuestro sitio se dirige principalmente a una población joven, digamos de 18 a 25 años, podríamos entonces imaginar que hay una gran probabilidad de que la mayoría de las contraseñas sean fechas de nacimiento: dado que estamos en 2021, las fechas tendrían así una gran probabilidad de estar entre 1995 y 2004. Si tomamos un rango amplio, 10 años teniendo cada uno unos 365 días, eso hace unas 3650 posibilidades… ¡Lo peor es que probar todas las combinaciones posibles se hace casi posible manualmente! Con un poco de imaginación y un poco de investigación en Internet o en las redes sociales, puedes incluso encontrar rápidamente todas las fechas importantes de una persona determinada (su fecha de nacimiento o la de sus familiares, la fecha de su matrimonio, la adopción de animales, etc.).

Este tipo de ataque no requiere ninguna habilidad técnica y también puede tener éxito incluso cuando nuestros datos no están directamente expuestos en la red. Mediante ingeniería social, es decir, por simple influencia psicológica o incluso manipulación, podríamos incluso dar nosotros mismos esta valiosa información.

Lo que debemos recordar es que aunque incluyamos números, mayúsculas (minúsculas/mayúsculas) y caracteres especiales, el principal punto débil de nuestras contraseñas es su corta longitud. Con las posibilidades que se ofrecen hoy en día en términos de potencia, podemos incluso, por unos pocos euros, probar millones de posibilidades de contraseña en menos de un día (cf : fuente). ¡Así que te dejo imaginar lo poco “seguras” que son tus contraseñas de 6 u 8 caracteres, incluso incluyendo al menos un carácter especial, un número y una letra mayúscula, y sobre todo lo mucho que resistirían a un ataque de fuerza bruta de tal potencia !

Por último, ¿qué hacer con esas malditas contraseñas?

Como hemos visto juntos, tener la mayor gama posible de caracteres es una ventaja, pero mucho menor que el número consecutivo de caracteres utilizados. Así que aquí están mis consejos.

Para los usuarios:

  • Elija las frases de contraseña en la medida de lo posible porque son más largas que las contraseñas y naturalmente incluyen caracteres especiales, pero son fáciles de recordar.
  • Si el número de caracteres es limitado, favorezca el uso de contraseñas complejas. Significado, que probablemente no forme parte de un diccionario, que no sea fácilmente deducible de su perfil y que, de hecho, tenga potencialmente caracteres especiales. Evite sustituir ciertas letras por números que se parezcan a ellas, como poner un 5 en lugar de una S. Esta técnica, llamada Leet Speak, es conocida desde hace tiempo por su complejidad y no dificulta mucho el acceso a tus contraseñas.
  • Potencialmente, favorece un gestor de contraseñas (como Keepass, una herramienta gratuita y de código abierto) o un enfoque de frase de contraseña pero tomando sólo la 1ª letra de cada palabra, en fonética o una mezcla de ambas teniendo en cuenta las restricciones de tamaño impuestas: ejemplo, “me gusta la pizza” puede convertirse en “J’mLaπza”.

Para los desarrolladores:

  • Por qué imponer un máximo de 6, 8 o 12 caracteres cuando sabemos que en base, el almacenamiento se hace generalmente por defecto en 255 caracteres. ¿Por qué no superar los 255 caracteres?
  • En el aspecto técnico, ¿cuándo y cómo se gestiona el cifrado de las contraseñas?
  • Permitir la introducción de contraseñas o frases de paso en cualquier idioma (utilizando una codificación permisiva) para fomentar el uso natural de caracteres especiales (acentos, apóstrofe, puntuación, alfabeto diferente, etc.). Sin embargo, tenga cuidado de no pasar por alto los ataques de inyección a sus bases de datos.
  • Limitar el número de intentos en un periodo determinado, para frenar artificialmente los ataques de fuerza bruta o de diccionario.
  • Notificar al usuario por cualquier medio cuando haya un número de intentos fallidos en su cuenta, para alertarle de una acción sospechosa y permitirle aplicar las medidas necesarias (borrar sus datos de pago, etc.).
  • Piense en medios alternativos o complementarios de entrada (por ejemplo, doble autenticación, identificación biométrica, entrada por algo distinto al teclado, etc…), medios alternativos de registro de contraseñas (por ejemplo, terceros de confianza) o incluso, por qué no, soluciones “PassWordless”.

En conclusión

Definitivamente, desde mi punto de vista, una “buena” contraseña debe ser tanto difícil de adivinar (ya sea por deducción, fuerza bruta, diccionario, etc.) como extremadamente sencilla de recordar. Por lo tanto, tendremos cuidado de privilegiar una frase de paso (o una contraseña larga) en lugar de una contraseña que contenga caracteres absolutamente especiales. Lo mejor es mezclar los 2, sin que se imponga.

Y en su opinión, ¿cree que la contraseña, esa cosa tan poco favorecida, todavía tiene un futuro brillante por delante ante las nuevas y mayores necesidades en términos de seguridad, rendimiento y experiencia del usuario? Están surgiendo muchas soluciones, como la identificación adaptativa o autogestionada a través de blockchain, así como la biometría, para permitir una autenticación cada vez más fiable en todos nuestros servicios.

Jimmy RUNDSTADLER
Agilista, artesano/desarrollador de software y formador ocasional

“Siempre me ha apasionado la informática, el progreso científico y tecnológico, y desde el principio de mi carrera me han fascinado los movimientos Agile, Lean y Software Craftsmanship. Me incorporé a Davidson con el objetivo de poner mis conocimientos y habilidades al servicio de las empresas, y más concretamente en el ámbito de la transformación técnica y organizativa.

Mi leitmotiv es aprender un poco más cada día, pero también y sobre todo transmitir y compartir lo que he aprendido. Por eso, en el día a día, más allá de mi actividad como consultor de desarrollo de software, dirijo regularmente talleres y sesiones de iniciación o formación para profesionales.”