contrasenas-fuertes

Hablemos de contraseñas fuertes, ¿lo tenemos claro?

Durante el desarrollo de servicios y aplicaciones nos topamos con el dichoso asunto de gestionar contraseñas de usuario. Queremos que el acceso y uso de nuestra solución sea sencillo sin descuidar la seguridad de la información, es el eterno dilema de usabilidad vs seguridad…

Definir una buena política de contraseñas es vital, pero habitualmente el usuario no lo ve como algo positivo. Todos queremos que nuestra contraseña sea sencilla y rápida de escribir, pero no nos sienta nada bien descubrir un día que alguien ha entrado en nuestra cuenta y nos ha hecho la puñeta…

Contraseñas débiles y contraseñas fuertes, ¿cuál es la diferencia?

Entendemos por contraseña débil aquella que no es complicada de averiguar, aquella que podemos deducir o la que conlleva poco esfuerzo para obtener mediante un ataque de fuerza bruta.

Mira, por ejemplo, las 7 contraseñas más utilizadas en el año 2.014.

  • 123456
  • password
  • 12345
  • 12345678
  • qwerty
  • 1234567890
  • 1234

¿Usarías una contraseña así? Es como dejar las llaves de casa puestas en la cerradura. Es probable que mucha gente pase de largo y no las vea, pero si algún vecino quiere entrar, no lo va a tener muy complicado…

Por el contrario, decimos que una contraseña es fuerte cuando cumple todo lo contrario. Si utilizamos ejemplos aleatorios sin significado claro, únicamente dejaremos al atacante el factor de la fuerza bruta. Eso si, será importante que la contraseña sea relativamente larga para complicar la vida.

common-passwords

Contraseñas débiles habituales

¿Cómo creo una contraseña fuerte?

Se recomienda mezclar letras, números, caracteres “extraños”… con el objetivo de que el abanico de símbolos sea grande y los ataques de fuerza bruta no obtengan resultado en poco tiempo. Algunas ideas son:

  • Letras en mayúscula y minúscula: De la a a la z y de la A a la Z.
  • Números: del 0 al 9.
  • Símbolos: $ # & % @ ! ? ¿ ^ * ` ‘ ” ~ = + – _ / | > < ] [ ) ( } {
  • Signos de puntuación: . , ; :

Esto siempre debe ir acompañado por una longitud mínima de 8 caracteres.

¿De verdad esto es efectivo?

Para que te hagas una idea, veamos unos ejemplos del tiempo (ojo, es una estimación) que se necesitaría para obtener tu contraseña mediante fuerza bruta si esta fuera…

  • Longitud 6 sólo caracteres de la ‘a’ a la ‘z’, algo como ‘batman’: menos de 6 minutos.
  • Longitud 6 caracteres de la ‘a’ a la ‘Z’, algo como ‘BatMan’: menos de 6 horas.
  • Longitud 6 caracteres de la ‘a’ a la ‘Z’ y signos de puntuación, algo como ‘BatMa;’: menos de 9 horas.
  • Longitud 6 caracteres de la ‘a’ a la ‘Z’, signos de puntuación y símbolos, algo como ‘B@tMa;’: menos de 8 días.

Sin embargo, ampliando el último ejemplo a 8 caracteres, necesitaríamos un poco menos de 216 años para obtenerla, eso ya tiene otra pinta, ¿no? Pero cuidado, lo ideal es que tu contraseña fuerte sea lo más aleatoria posible, de lo contrario se podría obtener de forma sencilla mediante el uso de diccionarios con las variaciones habituales. Por ejemplo, algo como cambiar la ‘a’ por ‘@’, la ‘s’ por ‘$’ y la ‘o’ por el cero, la ‘i’ por ‘1’… es más habitual de lo que piensas así que tampoco es buena idea seguir ese patrón.

strong-passwords

Parezco una contraseña fuerte, pero no lo soy

¿Por qué es importante que mi contraseña sea fuerte?

Si te pones a pensar, es probable que ninguno de tus amigos o vecinos se pongan a hacer ataques de fuerza bruta a tus contraseñas a menos que seas un objetivo interesante tipo presidente de alguna compañía…

El problema es que tus contraseñas pueden (ahora explicaré lo de “pueden”) estar en los servidores de los servicios que visitas y podrían terminar de forma pública si se produce un incidente de seguridad. En ese momento, tu cuenta puede tener valor para alguien…

Cada cierto tiempo nos encontramos con noticias sobre portales web que han sido reventados y de los que se han publicado usuarios y contraseñas. Puedes ver algunos casos muy sonados aquí, aquí o aquí.

Si eres desarrollador, no querrás aparecer en esos enlaces…

A la hora de gestionar las contraseñas, nos encontramos frecuentemente con webs o servicios que las almacenan en texto plano. Un grave error, sobre todo teniendo en cuenta que la mayoría de usuarios reutilizan sus claves para un amplio abanico de portales.

Si eres de los que utiliza “123456” para tus cuentas de correo, portales de compra, redes sociales,… una vez que alguien lo sepa, puede acceder a todas sin mayor esfuerzo.

Como desarrolladores, está en nuestra parte proteger esa información para que (al menos) no sea por nuestra culpa que sus cuentas se ven comprometidas.

Por eso antes decía que las contraseñas “pueden” estar, el caso es que no necesitamos almacenar contraseñas en nuestra base de datos para saber si un usuario tiene o no permiso para acceder a su cuenta.

¿Quieres saber cómo? En mi próximo post te contaré cómo gestionar y almacenar (o no :D) las contraseñas de tus servicios, veremos las técnicas que se utilizan hoy en día y echaremos un vistazo a cómo ha cambiado la forma en la que trabajar con ellas. ¿Te lo vas a perder?

Como siempre te digo, si ves algún error, no estás de acuerdo con lo que cuento o quieres hacer alguna aportación, no dudes en pasarte por los comentarios.

Cristóbal Espinosa

Information Security Officer en Dive.

Ingeniero en Informática, Máster en Seguridad de la Información y CISA (con eCPTP e ISO 27.001 Lead Auditor en proceso).

He sido galardonado con el premio Microsoft Imagine Cup 2.007 en la categoría Software Design y como Microsoft Active Professional en 2.010. También con el diploma honorífico de la Universidad de Granada y el X premio Granada Joven.

Siempre con ganas de emprender, de inventar y de arrancar proyectos, sobre todo si es con amigos como la web que estás visitando.

Quiero contar lo que hago en el trabajo, lo que aprendo de los compañeros y cualquier cosa que te pueda ayudar a solucionar ese problema, a mejorar un proceso o a interesarte por la seguridad.

Si quieres saber más o contactar, puedes ver mi perfil en LinkedIn.

Latest posts by Cristóbal Espinosa (see all)