Autor

Alejandro Alcalde

Data Scientist and Computer Scientist. Creator of this blog.

Más artículos de Alejandro Alcalde | Porfolio

Changelog

Speedy ha cambiado:


Cuando algún sitio web que usamos frecuentemente es hackeado, comprometiendo las contraseñas de los usuarios, probablemente pensemos en la seguridad online. pero ¿qué quiere decir realmente que un sitio es hackeado?, ¿y cómo podemos protegernos? A continuación se explica cómo se almacenan tus contraseñas en internet, y cómo te afecta cuando la web que usas se ve comprometida.

Existen numerosas formas de almacenar contraseñas, algunas más seguras que otras. Veamos algunos de los métodos más populares, y cómo afectan a la seguridad de tus datos.

Método uno: Contraseñas en texto plano

Cómo funciona: La forma más sencilla para una web de almacenar tu contraseña es en texto plano. Lo que significa que en algún lugar de sus servidores, existe una base de datos con tu usuario y contraseña escrita en un formato legible para los humanos (Si tu contraseña es testing123, se almacena en la base de datos como testing123). Cuando introduces tus credenciales en el sitio, se comprueban con la base de datos para ver si coinciden. Este es claramente el peor método de todos, en términos de seguridad. La gran mayoría de sitios con reputación no usan este método, ya que si alguien compromete esta base de datos, las contraseñas de todo el mundo serán comprometidas inmediatamente.

¿Importa la seguridad de mi contraseña? Depende del ataque que se realice. Si la base de datos queda comprometida, no importa cual sea la longitud de tu contraseña o cómo de segura sea: si está almacenada en texto plano, tu contraseña será accesible para todo el mundo sin ningún trabajo. Por el contrario, si se pretende robar la contraseña por fuerza bruta o algún otro ataque, la fortaleza de tu contraseña será tu única salvaguarda, ¡por eso siempre debes escoger contraseñas seguras! También importa en términos de ocultarla de amigos y conocidos, que pueden intentar adivinarla, pero, como ya hemos dicho, no hay nada que hacer en el caso de que el sitio se vea comprometido.

Método dos: Cifrado de contraseña básico

Cómo funciona: Para añadir más protección a la contraseña de la que proporciona el texto plano, la mayoría de los sítios cifran la contraseña antes de almacenarla en sus servidores. El cifrado, para aquellos que no lo sepan, usa una clave especial para convertir la contraseña a una cadena de texto aleatoria. Alguien que disponga estas cadenas aleatorias de texto, no será capaz de loggearse en tu cuenta a no ser que sepa la clave, la cual podría usar para descifrar la contraseña.

El problema es que a menudo la clave se almacena en el mismo servidor en el que se encuentran las contraseñas, por lo que si el servidor se compromete, no hay gran trabajo que realizar para descifrar todas las contraseñas, con lo cual este método sigue siendo tremendamente inseguro.

¿Importa la seguridad de mi contraseña? No. Ya que es fácil descifrar la contraseña conociendo la clave, no importa cómo de segura sea tu contraseña. De nuevo: hablamos en términos de que el sitio se vea comprometido; si tienes un amigo o familiar cotilla hurgando en tus cosas, una contraseña segura puede ayudar a evitar que la adivinen.

Método tres: Contraseñas con Hash

Cómo funciona: Un hash es similar al cifrado en el sentido en que también cambia la contraseña por una cadena de texto larga, formada por letras y números. Sin embargo, a diferencia del cifrado, el hash es una calle de un solo sentido: si se dispone del hash, no es posible ejecutar el algoritmo inverso para obtener la contraseña original. Lo que significa que se tendrán que obtener los hashes e intentar diferentes combinaciones de contraseñas para ver cual de ellas coincide.

Aun así, hay un inconveniente en este método. Aunque no se puede descodificar un hash a su contraseña original, se pueden intentar contraseñas diferentes hasta que alguna coincida con el hash que se robó de la base de datos. Los ordenadores pueden hacer esto muy muy rápido, y con la ayuda de una cosa llamada rainbow tables (tablas de arco iris) — que es esencialmente una lista de miles de millones de hashes diferentes y sus correspondientes contraseñas — se puede mirar fácilmente el hash que tenemos y ver si ya ha sido descubierta la contraseña. Puedes probrar escribiendo e38ad214943daad1d64c102faec29de4afe9da3d en google. Rápidamente vemos que es el hash SHA-1 para ‘password1′. Para más información sobre cómo funcionan las rainbow tables puedes visitar este artículo de Jeff Atwood.

¿Importa la seguridad de mi contraseña? En este caso sí. Las rainbow tables están hechas de contraseñas que ya han sido rotas, lo que significa que las contraseñas débiles tienen más probabilidades de encontrarse en ellas. Su mayor debilidad, sin embargo, no es la complejidad, sino la longitud. Es mejor usar contraseñas largas (como el famoso comic de XKCD llamado “correct horse battery staple”) en lugar de una corta y compleja (como kj$fsDl#).

Método cuatro: Contraseñas con Hash y una pizca de sal (Salt)

El término que normalmente se usa es salt, en lugar de su traducción, sal, sin embargo, voy a usar los dos terminos, salt y sal, para que la traducción quede comprensible

Cómo funciona: Echar sal a un hash significa añadir una cadena de caracteres aleatoria — llamada “salt” — al principio o al final de la contraseña antes de crear el hash. Se usa un salt distinto para cada contraseña, e incluso si el salt se almacena en el mismo servidor, se hará realmente dificil encontrar estos hashes “salteados” en los rainbow tables, ya que cada uno es largo, complejo y único. LinkedIn es conocido por no usar hashes salteados, de haberlos usado sus usuarios habrían estado más seguros cuando los hackearon.

¿Importa la seguridad de mi contraseña? Indudablemente. Sin embargo, desafortunadamente hemos llegado a un punto en el cual los ordenadores tienen una gran capacidad de computación y pueden conseguirlo por fuerza bruta, incluso con contraseñas con salt. Puede llevar mucho tiempo — más que usar rainbow tables — pero aún así es factible. Lo cual significa que la seguridad de la contraseña cuenta, a más longitud y mayor complejidad, más tiempo llevará crackearla.

Método cinco: Hashes lentos (Slow Hashes)

Cómo funciona: Ahora mismo, los expertos en seguridad están apostando por los hashes lentos como la mejor opción para almacenar contraseñas. Funciones de hashes como MD5, SHA-1, y SHA-256 son relativamente rápidos: si introducimos una contraseña, nos devolverá el resultado hasheado rápidamente. En un ataque de fuerza bruta, el tiempo es el factor más importante. Usando hashes lentos — como el algoritmo bcrypt — los ataques de fuerza bruta tardarán mucho más, ya que cada contraseña necesita más tiempo para computarse.

¿Importa la seguridad de mi contraseña? De nuevo, las contraseñas seguras son más difíciles de romper por fuerza bruta, por lo tanto para este método sí que es muy importante. Teniendo una contraseña segura tardará mucho, mucho tiempo en descubrirse.

¿Cómo evitar que tu contraseña sea filtrada?

Entonces, ¿qué significa todo esto para el usuario? Esto es lo que deberías aprender de toda esta información:

  1. No usar servicios con mala seguridad: Aunque no podemos controlar cómo una compañía almacena nuestras contraseñas, podemos controlar con qué servicios darnos de alta. Nunca deberíamos darnos de alta con servicios que usan texto plano o cifrado para almacenar las contraseñas, ya que son mucho más vulnerables. Una buena manera de averiguar lo que utilizan, de acuerdo al servicio web CloudFlare, es hacer click en el enlace “no recuerdo mi contraseña”. Si nos envía la contraseña en un email, significa que pueden acceder a la contraseña en sí, por lo tanto no está hasheada — y probablemente esté usando alguno de los métodos más débiles. Por supuesto, siempre se puede enviarles un correo y preguntarles, o mirar su FAQ para ver si proporcionan esa información.
  2. Usar contraseñas seguras: Como hemos mostrado más arriba, una contraseña más segura es menos susceptible de que alguien la descifre rápidamente. La longitud es más importante que la complejidad. Recuerda: cualquier contraseña es crackeable, lo que queremos es que lleve el mayor tiempo posible.
  3. Cambiar de contraseña siempre que un sitio sea comprometido: Incluso si nuestra contraseña es segura, no significa que sea invulnerable — solo significa que llevará más tiempo romperla. Aquellos con contraseñas débiles puede que ya tengan sus cuentas comprometidas incluso antes de darse cuenta de que una filtración se ha producido, pero si la contraseña necesita de días para ser crackeada, aún tenemos tiempo para cambiarla haciendo así que la contraseña antigua no sirva para nada.
  4. Usar distintas contraseñas para cada sitio: Si se usan contraseñas distintas para cada cuenta que tengamos y alguna de ellas se compromete, el resto de cuentas estará a salvo. Si usamos la misma contraseña para todos los sitios, una vulnerabilidad en cualquiera de ellos puede significar un mundo de problemas para ti.
  5. Cumplir escrupulosamente el punto 4 si no estamos seguros sobre la seguridad del sitio: Si no sabemos cómo de seguro es un sitio, el punto 4 juega un papel crucial, es decir, debemos asegurarnos de que la contraseña que usemos en él no la usamos en ningún otro sitio.

Más cosas sobre seguridad

Dejando aparte la traducción de este artículo de LifeHacker me gustaría hablaros del tema de la seguridad en la web, del cual aprendí bastante al hacer un curso de desarrollo de aplicaciones web en udacity, que impartía Steve Huffman, el creador de reddit.

A lo largo del curso hay un tema dedicado al registro de usuarios donde se usan muchos de estos métodos, sobre todo el hash con salt usando SHA-256. También se habla de bcrypt, que básicamente es igual que el anterior, pero recibe como parámetro un número, que será el tiempo que la función de cifrado estará sin hacer nada, para conseguir así el objetivo de que no sea posible descifrar las contraseñas tan rápido. Os dejo unos vídeos sobre el tema y recomiendo que hagáis el curso.

Bcrypt

Rainbow Tables

Crear Salts

Hashear Salts

Validar Salts

Validar Salts (Solución)

¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.

Quizá también te interese leer...