El error de la complejidad del password

Password_icon_by_sethness1Admitidlo, los passwords son como el seguro del coche: no nos gustan, resulta difíciles de recordar, pero hemos de admitir que son necesarios.

Durante años, los administradores de sistemas (entre los que hasta hace poco me incluía) nos “castigaban” haciéndonos cambiar la contraseña cada cierto tiempo, obligándonos a utilizar caracteres en mayúsculas, minúsculas, números y caracteres especiales para dar como resultado una cadena sin sentido que debíamos memorizar… y olvidar cada pocas semanas como mínimo.

Y todo eso en pro de garantizar la seguridad de la información; aunque, claro, siempre estaba el que se apuntaba la contraseña en un Post-it pegado al monitor, la escribía en su agenda, o directamente la garabateaba en el teclado.

password_tecladoLas políticas de seguridad de muchas aplicaciones y sistemas operativos de servidor vienen configuradas precisamente para eso: la complejidad de la contraseña. Incluso algunas aplicaciones mostrarán la “resistencia” del password elegido en función del uso de caracteres especiales y/o combinaciones de letras y números.

Pero eso ¿es una buena medida de la seguridad de un password?
Rotundamente NO.

Y algo más: si en la foto que teneis a la izquierda, en lugar de aparecer claramente escrito “usuario” y “password” apareciese únicamente ^3Rm!*l87 … ¡veríais claramente que se trata de un password!

¿A que ya no es tan seguro?

Bien, vamos a analizar algunos escenarios bastante comunes

El proveedor de internet

La primera conexión que tuve era de un proveedor que aún sigue existiendo, y que podemos poner en la lista de los tres más utilizados en España.

En el kit de bienvenida que enviaban por correo, aparte del contrato, un CD con Internet Explorer 5 y una minúscula alfombrilla redonda de color indefinido que no resultaba útil ni como posa vasos, venía un sobre cerrado con mi usuario y contraseña.
El usuario era (por supuesto) el número de teléfono de mi casa, y la contraseña de 8 caracteres era una definida por defecto que tendría que cambiar en mi primera conexión.

La política definida era una combinación de caracteres en mayúsculas y números, en un patrón X9X99X99.
Si obviamos los caracteres especiales, la Ñ y la Ç, vemos que tendremos las veintiséis letras del alfabeto inglés, y los números del 0 al 9.

Un simple cálculo nos da que existen 1.757.600.000 combinaciones distintas. No está mal, pero si hubiesen permitido el uso de mayúsculas y minúsculas manteniendo el mismo patrón, alcanzaríamos las 14.060.800.000 combinaciones. Ocho mil veces más.
¡Esperad! si ahora permitimos la combinación de mayúsculas, minúsculas y números en cualquier patrón, la situación cambiar aún más, alcanzando las 218.340.105.584.896, unos 124 millones de veces el número de combinaciones iniciales.

passwd_table

El mayorista de hardware

ASCIIEste fue mi primer empleo: un mayorista de hardware que fabricaba sus equipos para la venta en una red de establecimientos propios en todo el país, y que además distribuía y ensamblaba servidores de una reconocida marca.

Aquí la política para los passwords era más compleja: de 8 a 12 caracteres, combinaciones de números, mayúsculas y minúsculas, y el uso obligatorio de un caracter especial en la contraseña.

Para ilustrar este caso, supondremos que la contraseña es de 10 caracteres. Si tenéis interés en calcular el resto de longitudes, podeis hacerlo vosotros mismos… si tenéis ganas, insisto

Los caracteres ASCII imprimibles más comunes son los que veis en la imagen.
Bien, sin las restricciones impuestas obtendríamos 10^96 combinaciones distintas, pero si tenemos en cuenta que un carácter debía ser especial y que podía estar en cualquier lado el número de combinaciones se reduce, dado que 9 de los 10 caracteres tenían que ser letras o números (62 posibilidades) y uno de ellos sería un carácter especial (34 en la lista) que se localizaría en una de las 10 posiciones posibles, con lo cual las posibilidades bajarían hasta 9^62 * 340

El ratio de posibilidades entre uno y otro es de 2,0206239567060432655309681878599e+34

Nada desdeñable.

El delincuente

antifazY llegamos a la parte interesante.

Cuando alguien quiere acceder a un sistema, lo primero que hará será ejecutar un ataque de Fuerza bruta.
Con tantas combinaciones, no suele ser la mejor opción. Ni siquiera para averiguar la clave de un archivo comprimido que tenga contraseña, salvo que esta sea muy simple (4-5 caracteres alfanuméricos).

Por tanto, el atacante del sistema empleará otra técnica: hacerse con el archivo o tabla de passwords.
Cualquier sistema actual decente, tendrá cifrados los passwords usando algoritmos de encriptación.

¿Qué opciones tendrá el atacante? Simplemente, tendrá que generar un diccionario y probar. Estos ataques consisten en listas de palabras, cifradas y sin cifrar, que cotejará con la lista encriptada.
Si bien generar esos diccionarios conlleva un esfuerzo considerable, existen comunidades en la red en las cuales se ofrecen (y venden) diccionarios, personalizados incluso por las palabras más comunes en un idioma y sus posibles combinaciones.

La solución

Aunque parezca increíble, los mejores resultados no se obtienen empleando las políticas descritas anteriormente. La solución es… nuestra forma de hablar.

Si establecemos como política de seguridad un límite mínimo de caracteres de 20, y empleamos como contraseñas frases comunes como “¡Hace demasiado calor! Voy al bar a tomar una cerveza ¿Te vienes? Estaremos hasta las 20:00″

Como podemos ver, la frase tiene 91 caracteres, incluyendo 5 especiales. Eso nos da 1,1694284705327547881183834608824e+188 combinaciones posibles para un ataque de fuerza bruta.

Demasiado para cualquier atacante. Pero lo mejor de todo es que tenemos una contraseña fácil de recordar, muy pesada, segura… y que no parece una contraseña.

Como podemos ver, la seguridad muchas veces no procede de la complejidad de un procedimiento.