La fuerza de una contraseña (en inglés, password strength) es el número de intentos que necesita alguien que no la conoce para dar con ella. No se mide en símbolos raros ni en mayúsculas, sino en cuántas contraseñas posibles hay que probar, y ese número depende sobre todo de dos cosas: la longitud y, por encima de ella, si se eligió al azar o la eligió una persona. La figura de esta página hace la cuenta para tres atacantes distintos, y el resultado se sale de lo intuitivo en las dos direcciones.
La cuenta básica es una multiplicación. Una contraseña de ocho caracteres elegidos al azar entre las 62 letras y cifras del teclado tiene 62 posibilidades para el primero, 62 para el segundo, y así hasta el octavo: 62 elevado a 8, unos 218 billones. Se suele expresar en bits de entropía (entropy), que es el número de preguntas de sí o no que harían falta para acertarla, y que en este caso son 48. Cada bit más duplica el trabajo del atacante.
Lo que de verdad importa es lo deprisa que puede probar. Contra una página web que frena los intentos fallidos, el atacante va muy despacio, y la figura supone diez por segundo. Pero cuando una empresa sufre una filtración y se roba su base de datos, el atacante se lleva las contraseñas a su propio ordenador y ya no hay freno. Ahí depende de cómo estuvieran guardadas. Las empresas serias no guardan la contraseña sino su huella, calculada con una función hash, y para comprobar cada intento el atacante tiene que calcular la huella y compararla. Con un algoritmo rápido y antiguo como MD5, una sola tarjeta gráfica de consumo, la RTX 4090 de 2022, calcula 164.100 millones por segundo según las pruebas publicadas con el programa hashcat. Con bcrypt, un algoritmo diseñado a propósito para ser lento, la misma tarjeta se queda en 184.000.
La figura enseña primero lo que da la longitud. Con 62 caracteres y MD5, ocho caracteres al azar caen en unos veinte minutos; doce, en más de 600 años. Cada carácter más multiplica el tiempo por 62, mientras que pasar de 62 símbolos a los 95 del teclado completo solo lo multiplica por uno y medio en cada posición. Una contraseña larga de minúsculas le gana a una corta llena de signos. Las palabras al azar funcionan igual: una lista de 7.776 palabras, el tamaño que usa el método Diceware porque se elige cada palabra tirando cinco dados, da casi trece bits por palabra, y cinco palabras al azar dan 64 bits, más que diez caracteres de letras y cifras y mucho más fáciles de recordar. Es lo que dibujó Randall Munroe en 2011 en una tira de xkcd que se hizo famosa entre los informáticos, con la frase de cuatro palabras «correct horse battery staple».
Pero la figura enseña después lo que no da la cuenta. Todas esas cifras suponen que la contraseña se eligió al azar, y las personas no eligen al azar. Robert Morris y Ken Thompson, que diseñaron el sistema de contraseñas de Unix, publicaron en 1979 que de 3.289 contraseñas reales de su sistema, el 86 % se podía adivinar con poco esfuerzo: eran palabras del diccionario, nombres o cadenas cortas. Treinta y tres años después, Joseph Bonneau analizó las de casi setenta millones de usuarios de Yahoo, en un estudio anonimizado hecho con la empresa, y calculó que frente a un atacante con un buen diccionario valen tanto como una cadena aleatoria de unos 20 bits. Tanto daba la edad, el país o que la cuenta tuviera una tarjeta de pago asociada: todos los grupos elegían igual de mal.
Por eso la tercera pestaña de la figura desconfía. Un atacante no empieza por «aaaa» y sigue en orden, sino por las contraseñas filtradas más repetidas, después por palabras con variaciones y, al final, por la fuerza bruta. «Barcelona2024!» tiene catorce caracteres y los cuatro tipos de símbolo, y la cuenta ingenua le da noventa bits, pero es una palabra conocida con mayúscula al principio, un año y un signo al final, el patrón que las reglas de las empresas empujaron a todo el mundo a usar y que los programas de ataque prueban de los primeros. La cifra que da la figura para una contraseña escrita a mano es un techo, nunca una garantía.
Esa experiencia cambió las normas oficiales. En 2017, el Instituto Nacional de Estándares y Tecnología de Estados Unidos (NIST) publicó una revisión de su guía de autenticación, la SP 800-63B, que es la referencia de muchas empresas y administraciones. Pidió permitir contraseñas de al menos 64 caracteres, comprobar cada contraseña nueva contra las listas de contraseñas filtradas y rechazar las que aparezcan, y dejó de recomendar dos costumbres: las reglas de composición del tipo «una mayúscula, una cifra y un símbolo», que producían precisamente «Barcelona2024!», y la obligación de cambiar la contraseña cada pocos meses, que llevaba a la gente a pasar de «Barcelona2024!» a «Barcelona2025!».
Para quien no programa, la lección práctica cabe en tres consejos. Usar un gestor de contraseñas (password manager), que genera y recuerda una distinta y aleatoria para cada servicio, de modo que una filtración en uno no abra los demás. Es la regla que más protege. Para la única que hay que recordar, la del propio gestor o la del ordenador, una frase de cinco o seis palabras elegidas al azar, no una cita célebre. Y activar la verificación en dos pasos (two-factor authentication) en el correo y en el banco, porque así una contraseña adivinada o robada deja de bastar por sí sola.
Para quien programa, la lección es la de las barras. La diferencia entre la naranja y la del medio no la pone el usuario, sino quien guarda la base de datos. Pasar de MD5 a bcrypt, o a sus sucesores scrypt y Argon2, multiplica el trabajo del atacante por casi un millón sin que el usuario note nada, y es la única mejora de la figura que no depende de convencer a nadie.
La función hash criptográfica – La clave pública – El cifrado de César y el de Vigenère – Las expresiones regulares – El sistema de nombres de dominio – Copia de seguridad
Fuentes
- Robert Morris y Ken ThompsonPassword security: a case historyCommunications of the ACM 22 (11)1979enlace
- Joseph BonneauThe Science of Guessing: Analyzing an Anonymized Corpus of 70 Million Passwords2012 IEEE Symposium on Security and Privacy2012enlace
- Paul A. Grassi, James L. Fenton, Elaine M. Newton y otrosDigital Identity Guidelines: Authentication and Lifecycle Management (NIST SP 800-63B)National Institute of Standards and Technology2017enlace
- Chick3nmanhashcat v6.2.6 benchmark on the Nvidia RTX 4090GitHub Gist2022enlace
- Randall MunroePassword Strength (xkcd 936)xkcd2011enlace