miércoles, 4 de enero de 2017

Mejor tenerla larga (La contraseña)

Hoy me he cruzado con una tira cómica de XKCD bastante mítica que hablaba de la seguridad en las contraseñas, y he pensado ilustrar vuestra seguridad online con un nuevo post que salve vuestros datos de los hackers malvados.

Tira cómica de XKCD


Corrían los primeros años en un medio naciente como era Internet, sólo había un montón de webs que intentaban hacerse con usuarios, así que querían que te registrases. Tú lo hacías utilizando contraseñas fáciles de recordar, porque nadie compraba en internet y no tenías datos que te importase perder, seguro que usaste “12345” al menos un par de veces. Ahora la cosa ha cambiado, accedemos al banco, a cuentas en las que nuestra identidad se da por supuesta, tramitamos becas y realizamos todo tipo de gestiones importantes, así que podemos preguntarnos: ¿Qué seguridad tiene mi contraseña? Vamos al tajo.

Hash
Ya hablé de los hash brevemente en el post sobre la criptomoneda, pero os concederé un recordatorio rápido: El hash calculado sobre un texto cualquiera produce otro texto distinto con longitud constante, de forma que es fácil calcular el Hash desde texto original pero es MUY difícil calcular el texto original desde un hash. Un ejemplo calculado con esta web lo tenéis en la imagen, arriba está el texto original y abajo las conversiones mediante distintos algoritmos de cálculo Hash. He subrayado el texto original y los algoritmos más conocidos y utilizados.

Algoritmos de Hash


La primera medida de seguridad no la implementaréis vosotros, sino la web en la que os registráis. Cuando tú te registras e introduces tu contraseña, se calcula su hash y ese es el valor que se almacena. Cuando tú metes tu contraseña, se calcula su hash y se comprueba que son iguales. Una página web NUNCA debería almacenar una contraseña en texto legible, porque si les roban los datos (y no es tan difícil como se cree) vuestra contraseña estará disponible para el ladrón. Adicionalmente, seguramente uséis la misma clave para más cosas. Por eso si una web os envía en un correo vuestra contraseña en texto plano, NO ES SEGURA, porque cualquier administrador de la base de datos o cualquier hacker que obtenga el fichero de claves podría leerla.
Por ejemplo, hace cerca de un año, una conocida web de componentes de PC (que ya ha solucionado el problema) me envió mi propia contraseña en texto plano por email tras registrarme. Vi el problema de seguridad y se lo notifiqué mediante un e-mail. Tras eso, ellos me respondieron asegurándome que su sistema de seguridad era robusto e inexpugnable y que no debía preocuparme por ello, así que solicité el borrado de mi información de sus bases de datos, ya que mi clave no debería ser de dominio público.

¿Y yo qué puedo hacer?
No te afijas, voz cursiva, la mayor parte de las webs hoy en día “Hashean” las contraseñas entrantes, así que tienes que preocuparte de tus propios asuntos, mejor dicho, de que tus contraseñas sean seguras. Para que una contraseña tenga mucha seguridad importa mucho el desorden, o lo que más técnicamente se llama entropía. La cantidad de entropía es un componente de aleatoriedad, a mayor entropía, más complicado será hallar vuestra contraseña. La entropía es un número que puede ser muy grande, por ello la vamos a calcular en bits. Puedes imaginar que es más complicado adivinar palabras infrecuentes y largas que palabras largas y frecuentes, pero ¿Es mejor una palabra infrecuente con números y símbolos de puntuación o varias palabras frecuentes? Pondré dos ejemplos que lo ilustren.

Palabra complicada
Tomamos una palabra ‘rara’ y moderadamente larga: “infierno”. Tiene unos 13 bits de entropía, y el tiempo estimado para averiguarla por una mezcla de inteligencia artificial y fuerza bruta sería de 0.046 segundos. Sustituyamos una de sus letras por mayúsculas: “infieRno”. Su entropía subiría a 14 bits. Realicemos unas pocas transformaciones corrientes, como son sustituir letras por números: “1nf13Rno”, ya tenemos una entropía de 15, y un tiempo para descifrarlo de 0.911 segundos. Vamos a añadir un signo de exclamación y un número al final: “1nf13Rno!4”. Con esto, el tiempo estimado en obtener tu contraseña serían 58 minutos, además la contraseña es irrecordable.

Varias palabras simples
Imagina ahora que juntas palabras de entropía baja, fáciles de recordar, por ejemplo: “MiraQueContraseñaMasSegura”. Esta contraseña es fácil de recordar, ¿Verdad? Pues la dificultad para el ordenador crece. De hecho el tiempo de descifrado alcanza los 14.112 años, una cifra respetable para cualquier hacker.

Está claro que lo más seguro sería mezclar ambas técnicas y escribir contraseñas kilométricas ilegibles e irrecordables, sin embargo mucha gente y muchas empresas confunden complejidad con seguridad. Ilustremos esto con mi empresa, donde en una de las cuentas de aplicaciones seguras corporativas te piden una contraseña de entre 6 y 12 caracteres con mayúsculas, minúsculas y símbolos de puntuación. Un ejemplo de esta “contraseña segura” sería la ya mencionada “1nf13Rno!4”, la que hemos visto que alcanza una seguridad efímera de una hora ante ataques.

Ejemplo de contraseña muy segura


Aquí termina esta entrada donde añado, como curiosidad, la web que he utilizado para calcular la entropía, los tiempos y las complejidades de cada contraseña. Adicionalmente diré que, aunque es totalmente cierto que cuanto más larga sea la contraseña más difícil  es de descifrar, la mayoría de estándares de seguridad establecen que debería tener algún número y signo de puntuación. Todo el mundo se salta los estándares, pero un ejemplo de contraseña larga y fácil de recordar la tenéis en la imagen de arriba, y no es complicado pensar otras válidas como "Somos4EnCasa+ElPerro" Así que ya sabéis, en este caso el tamaño sí que importa ¿La tenéis lo bastante larga?

No hay comentarios: