Como muchos de vosotros, he intentado poner contraseñas más o menos complejas a todas mis cosas. Desde volumenes cifrados, arranque de
BIOS, documentos, arranque de sistemas operativos o servicios online.
Passwords que a veces me cabrean porque me cuesta tres intentos ponerlas bien. Pero sigo con mis passwords complejas, al igual que siempre he recomendado a todo el mundo que ponga claves complejas en su vida digital e incluso he dejado artículos por aquí para la
generación de claves robustas - que son necesarias para muchas cosas.
|
Figura 1: my_p@sSw0RD! |
Esta bien, pero ni mucho menos sirve para sentirse seguro. De hecho, el pensamiento que ronda mi cabeza desde unos meses acá es que
en los servicios online, las contraseñas complejas no deberían existir. Deberían ser todas contraseñas sencillas para que el usuario estuviera feliz y contento. Algo como el
movimiento de Facebook de permitir 3 passwords distintas para hacer la vida del usuario más sencilla. Y dejadme que os explique por qué pienso así.
¿Para que sirve una password compleja en un servicio online?
Vamos a suponer un servicio online en el que heme de registrar para hacer algo. Supongamos que es un e-commerce, una nueva red social o simplemente un juego online, donde usamos una contraseña que protege nuestra cuenta ante posibles ladrones de identidad que se lleven el servicio y los datos que contiene por delante.
En todos esos esquemas, si el servidor ha hecho los deberes la contraseña compleja no nos defiende de nada (o casi nada) que no haga una contraseña sencilla como una cadena de letras y números de 8 caracteres. Estos son los deberes que el servidor podría hacer:
Deber número 1 - Permitir que se añada un segundo factor de autenticación
Si el servicio online permite poner un segundo factor de autenticación para proteger la cuenta, como Google Authenticator, un envío de SMS o el uso de Latch. Si alguien consigue la password (sencilla o compleja) no podrá usarla nunca.
Deber número 2 - Controlar el número de intentos de contraseña fallidos a una cuenta:
El servidor debe evitar que se realicen intentos al infinito de contraseñas a una cuenta - aquí un ejemplo para fortificar WordPress frente ataques de fuerza bruta -. Evitando la fuerza bruta online - con desactivaciones parciales, añadir una segunda verificación a la cuenta, bloqueo de direcciones IP temporales, etcétera, el ataque a una password de 8 caracteres o a una password compleja - aunque no sea igual de difícil en la teoría, será igual de difícil en la práctica, ya que sortear todas las barreras será un problema exactamente igual para ambas contraseñas. El resto solo "is a matter of time".
Deber número 3 - Controlar el número de intentos a nombres de usuario con misma contraseña
Al igual que se debe tener en cuenta que se debe controlar cuando se hace un ataque de fuerza bruta - o diccionario - a una contraseña, hay que tener en cuenta que el ataque se puede hacer al nombre de usuario fijando una contraseña. Este ataque os lo expliqué en el artículo de "tus passwords son suprayectivas". En ese caso, igual que se fija una contraseña sencilla, se puede fijar una contraseña que cumpla la política de complejidad y sea común siguiendo la política de de complejidad del sitio web. Es fácil.
Deber número 4 - Almacenar de forma segura las passwords
Utilizando un algoritmo de cifrado de contraseñas seguro, con su salt o con algoritmos criptográficos que hagan complejo - al menos durante un tiempo prudencial su crackeo -. ¿Por qué esto? Pues porque para que alguien se haga con las passwords debe hackear el servicio online completamente - algo que debe evitar el sitio con auditoría continúa. Al final esto puede fallar, como hemos visto, hasta en sitios como eBay.
En segundo lugar, si me obliga el sitio online a poner una password compleja que me está jodiendo la vida y luego resulta que la almacena en BASE64 o en texto claro o en MD5 sin salt, merece un castigo ejemplar. Al final, con que el tiempo que aguante el algoritmo sea el suficiente para que el servio me avise de que le han hackeado y me de tiempo a cambiarla, me valdrá.
Deber número 5 - Cifrado seguro end-to-end
Poniendo un conexión con Certificate Pinning desde las apps y de HTTPs con validación extendida, sin mezclar contenido HTTP y HTTPs y añadiendo los flags Secure a todas las cookies con una gestión segura de las. Así, tendré las medidas necesarias para saber que estoy en una conexión cifrada de forma segura o no.
¿Y el resto de ataques?
El resto de los problemas que voy a tener con mi identidad recaen en mi lado. Si la password la publico en un
post-it o
en una captura de una foto es mi problema. Si me como un troyano en mi equipo o usa la password en un equipo que no es mío controlado es cosa mía. Si me como un
ataque de red con un man in the middle en IPv4 o IPv6 porque no he visto las alertas de seguridad es mi problema. Y en todos estos casos, el problema será igual para contraseñas sencillas y contraseñas complejas.
En todos ellos, al final, si el sitio me permite poner un
segundo factor de autenticación si alguien me roba la password recibiré la alerta de que algo va mal. Al menos en soluciones como
Latch - donde te llegará la alerta - o vía
SMS donde te llegará un código que te indicará que alguien ha iniciado sesión, que en soluciones como
Google Authenticator no se recibe ninguna alerta de seguridad cuando alguien ha usado la password correctamente.
Es más, si mi cuenta tiene un
2FA, creo que el servicio online
debería premiarme y dejarme poner contraseñas sencillas y dejar las contraseñas complejas solo para aquellos usuarios que no hayan puesto el
2FA. Una
PIN de
4 números y un
Latch es
mucho más seguro para tu cuenta online que una password compleja y hace mucho más fácil la vida del usuario.
Saludos Malignos!