III.

Proteger tu identidad

¿Qué saben los sitios web sobre ti?

Puedes controlar la información que proporcionas a los sitios web que visitas. No deberías darles más información de la que necesitan para prestar el servicio que deseas. Si no quieres que un sitio web te envíe nada a tu domicilio, seguramente es mejor que no le facilites tu dirección solo por el hecho de que te la pida. Lo mismo ocurre con tu número de teléfono, tu nombre completo o incluso tu dirección de correo electrónico. Cuanta menos información proporciones a los sitios web, menos perderás si alguien vende esa información o accede a tu cuenta.

Ejemplo

Cuando se producen filtraciones de datos, a menudo se publican en Internet para que otros vean esa información. Si has indicado el segundo apellido de tu madre o el nombre de tu primera mascota como respuesta a una pregunta de seguridad, es posible que esa información esté ahora disponible para cualquiera que sepa usar Google. Ese tipo de preguntas de seguridad son intrínsecamente inseguras, ya que el segundo apellido de tu madre, el nombre de tu mascota o tu primera dirección suelen ser muy fáciles de averiguar.

Pero ¿qué pasa si la información filtrada es tu contraseña? ¿Has utilizado la misma en algún otro sitio? Si es así, cualquiera puede probar a introducir tu correo electrónico y tu contraseña en otros sitios web. La información filtrada suele utilizarse en otros ataques, incluso antes de hacerse pública.

Cuando se produce un ataque, las contraseñas suelen ser el primer obstáculo. En los siguientes capítulos presentaremos otros elementos que también pueden evitar que los atacantes accedan a tus cuentas. Este método de defensa en profundidad es habitual en ciberseguridad. Significa que hay varias capas protegiendo el activo que quieres mantener a salvo. Así, aunque se quebrante una capa de defensa, como tu contraseña, eso no implica que los atacantes puedan acceder libremente a tu información.

Note
Varias flechas tratando de atravesar varias capas de defensa con diferentes orificios
Varias flechas tratando de atravesar varias capas de defensa con diferentes orificios

La defensa en profundidad es un concepto que se emplea en el ámbito de la seguridad de la información. Consiste en colocar varias capas de controles de seguridad (defensa) en todos los componentes del sistema informático. Su objetivo es proporcionar redundancia en caso de que falle un control de seguridad o se explote una vulnerabilidad. Este método puede abarcar diversos aspectos relacionados con la seguridad técnica, física, del personal y de los procedimientos durante todo el ciclo de vida del sistema.

En el caso de las cuentas de Internet, la contraseña suele ser la primera capa de protección. Vamos a profundizar un poco más en el funcionamiento teórico de las contraseñas antes de familiarizarnos con otras capas que podemos usar.

Ataques de enumeración y los nombres de usuario

Los ataques de enumeración (en inglés, enumeration attacks) se utilizan para averiguar los nombres de usuario válidos. Es el primer paso para obtener las credenciales de acceso de un usuario. Este tipo de ataques se suelen centrar en las funciones de inicio de sesión y las opciones para recuperar contraseñas olvidadas. Por ejemplo, un sitio web puede filtrar involuntariamente información sobre sus usuarios si, al intentar iniciar sesión, muestra un mensaje diferente para los usuarios o direcciones existentes que para los que no existen.

Ejemplo

¿Alguna vez te has equivocado al escribir tu nombre de usuario y ha aparecido un mensaje de error como «nombre de usuario no válido» o «este usuario no existe»? Si el sitio web muestra un mensaje similar, que indica que solo es incorrecta la contraseña, el atacante puede saber que el nombre de usuario existe a partir de esa información. De esta manera, los atacantes pueden compilar enormes listas de correos electrónicos, por ejemplo, y recibir información sobre quién tiene una cuenta en el sitio que desean atacar. Por eso es recomendable que los sitios web, al intentar iniciar sesión, muestren mensajes de error que no indiquen qué datos son incorrectos, como «el nombre de usuario O la contraseña no son válidos».

En la mayoría de los casos, esta información, por sí misma, no conlleva ningún daño. No obstante, si alguien puede verificar la existencia de una cuenta en un servicio de citas o de prostitución, esa información sí puede utilizarse contra ciertas personas.

Los ataques de enumeración también se pueden emplear para planear mejor los ataques de phishing (suplantación de identidad) a determinadas personas y facilitan los ataques de fuerza bruta, al reducir el número de objetivos posibles. En breve veremos las definiciones de phishing y fuerza bruta.

Los ataques de enumeración no se limitan a los formularios de inicio de sesión: también se pueden aplicar a las funciones para cambiar contraseñas o crear cuentas. Los sistemas para crear cuentas, por ejemplo, suelen evitar que se abran cuentas duplicadas. Si un usuario intenta crear una con un correo electrónico o un nombre de usuario que ya existe, el sistema le indica que no es posible.

El siguiente paso para poder usar los datos de inicio de sesión es conocer la contraseña. Es lo que vamos a explicar a continuación.

Contraseñas

La mayoría de los sitios web que utilizas te identifican mediante la combinación de tu nombre de usuario y tu contraseña. Como los usuarios de Internet tenemos que usar decenas o incluso cientos de servicios, en general, intentamos que las contraseñas sean fáciles de recordar. El problema es que también suelen ser fáciles de adivinar para los atacantes. Si tenemos en cuenta que las contraseñas más comunes en el año 2020 fueron 123456, 123456789, qwerty y password (contraseña en inglés), entenderemos que es bastante fácil hackear innumerables cuentas con solo probar esas contraseñas en direcciones de correo electrónico elegidas al azar.

Las contraseñas más comunes del 2020

  • 123456

  • 123456789

  • qwerty

  • password

  • 1234567

  • 12345678

  • 12345

  • iloveyou

  • 111111

  • 123123

Desde hace años, al crear contraseñas, los sitios web han exigido requisitos que no eran realmente seguros, por lo que la gente ha aprendido a crear malas contraseñas. La consecuencia es que muchos usuarios eligen contraseñas difíciles de recordar, pero fáciles de descifrar por los ordenadores.

El cómic web XKCD resume muy bien la seguridad de las contraseñas.

Dos llaves de diferentes longitudes
Dos llaves de diferentes longitudes

Una buena contraseña no tiene por qué contener símbolos extraños para ser segura. Por lo general, cuanto más larga sea, mejor protegerá la cuenta. Los requisitos que obligan a incluir símbolos, caracteres en minúsculas y mayúsculas y números en las contraseñas no suelen tener en cuenta la dificultad de descifrar esas contraseñas. Esos requisitos amplían el espacio de claves o keyspace (la cantidad de combinaciones posibles de contraseñas con una longitud determinada), pero se podría conseguir una seguridad equivalente con solo exigir contraseñas más largas.

Veamos un ejemplo:

Si, para una contraseña, solo se pueden usar caracteres en minúsculas del alfabeto inglés, es decir, 26 caracteres, y la longitud de la contraseña es de 6 caracteres elegidos al azar, el espacio de claves se calcularía así:

266= 308,915,776 contraseñas posibles

Note

Nota: el símbolo ^ se suele emplear para indicar exponentes, por lo que este número también se puede expresar como 26. No es necesario que entiendas el cálculo matemático, pero si tienes curiosidad, puedes escribir 26^6 o una operación similar en casi cualquier buscador de Internet para ver a qué equivale.

Por otra parte, si la contraseña tiene 8 caracteres elegidos al azar, el espacio de claves sería el siguiente:

268= 208,827,064,576 contraseñas posibles

Como ves, el espacio de claves es mucho mayor si añadimos tan solo 2 letras a la contraseña. Veamos otro ejemplo. Si añadimos al primer cálculo los caracteres en mayúsculas, se duplica el número de caracteres que puede incluir la contraseña:

526= 19,770,609,664 contraseñas posibles

Evidentemente, el espacio de claves en este caso es mucho mayor que el inicial. Sin embargo, sigue estando muy lejos del espacio de claves de la segunda contraseña, que solo incluía minúsculas, pero era un poco más larga. Y ¿qué ocurre si añadimos algunos símbolos, como !, ", #, ¤, %, &, /, (, ) y =? Entonces, dispondremos de 62 caracteres.

626= 56,800,235,584 contraseñas posibles

Por tanto, si añadimos estos 10 caracteres al conjunto de caracteres permitidos, el espacio de claves disponible es casi cuatro veces mayor. Al mismo tiempo, la contraseña es mucho más difícil de recordar. Y, aun así, este espacio de claves sigue siendo claramente más pequeño que con la contraseña del ejemplo de los 8 caracteres.

Por otra parte, las contraseñas totalmente aleatorias resisten mucho mejor otros tipos de ataques, como los de diccionario. Los ataques de diccionario (del inglés dictionary attacks) se aprovechan del hecho de que los usuarios intentan crear contraseñas fáciles de recordar utilizando palabras, nombres o sus variaciones. El Nuevo diccionario histórico del español, en el que la Real Academia Española recoge todas las palabras que han existido en castellano, contiene unos 356 000 registros, por lo que, si utilizas una contraseña con una sola palabra, es como si estuvieras usando un espacio de claves formado por 356 000 combinaciones. A menudo, no empleamos las palabras originales, sino que las modificamos de manera que aún podamos recordarlas.

Ejemplo

Para llevar este ejemplo aún más lejos, veamos qué tamaño tendría el espacio de claves si solamente usáramos palabras reales del castellano. Supongamos que elegimos al azar tres palabras del diccionario y creamos una contraseña con esa combinación. El cálculo sería:

356 000^3 = 45 118 016 000 000 000

Una contraseña como esta es mucho más sencilla de recordar y, si solo nos preocupan los ataques de fuerza bruta, también es mucho más difícil de descifrar. Pero hay motivos por los que el espacio de claves puede no ser tan grande como parecería en un principio. La mayoría de los hablantes de español tienen un vocabulario de unas 3000 palabras como mucho, y las contraseñas elegidas de este modo lo reflejan. Además, a la gente se le da muy mal elegir elementos al azar. Lo que nos parece una combinación aleatoria de palabras puede depender en gran medida del contexto, nuestros pensamientos o las palabras seleccionadas previamente. Si utilizas una contraseña formada solamente por palabras, deberías usar un generador en lugar de confiar en la capacidad de aleatoriedad del ser humano.

Aquí puedes consultar más información sobre este método.

Una forma habitual de hacer que las palabras del diccionario sean más difíciles de identificar es sustituir algunas letras o añadir un número a la palabra para crear una contraseña. Pero, desgraciadamente, estas modificaciones suelen ser fáciles de entender y a un ordenador le resulta muy sencillo probar todas las variaciones previsibles. Si realizas sustituciones sencillas, como cambiar la letra o por el número 0, solo harás que la contraseña sea más difícil de recordar, pero al ordenador le costará prácticamente lo mismo adivinarla. Estas sustituciones tan sencillas no amplían de forma sustancial el espacio de claves. Tampoco es muy útil añadir un número o el año actual al principio o al final de la palabra. Los programas que descifran contraseñas y la gente que los desarrolla ya conocen todos estos trucos y los tienen en cuenta.

Entropía

La seguridad de una contraseña no suele depender solamente del espacio de claves posibles. La entropía es otro concepto de ciberseguridad: una forma de medir la supuesta dificultad de descifrar la contraseña en condiciones reales. La entropía se calcula tomando el logaritmo en base 2 (log2) del espacio de claves. No te preocupes por los cálculos matemáticos, ya que no es necesario que los hagas. Pero, si quieres, puedes escribir la fórmula en casi cualquier buscador para ver el resultado. Por ejemplo, prueba a escribir log2(26^8) en www.google.com.

Entonces, ¿qué implica la entropía en la práctica? A partir del resultado del cálculo de la entropía, se puede medir cómo de segura es una contraseña siguiendo esta guía:

<28 bits = muy débil; podría servir para que no la adivinen tus familiares.

28-35 bits = débil; debería impedir que acceda la mayoría de la gente y, a menudo, es suficiente para las contraseñas de inicio de sesión de los ordenadores.

36-59 bits = razonable; la contraseña es lo suficientemente segura para usarse en redes y empresas.

60-127 bits = segura; puede servir para proteger información financiera.

≥128 bits = muy segura; este nivel de seguridad suele ser innecesario.

Note

En el ejemplo anterior, la entropía de una contraseña de 8 caracteres sería:

log2(26^8) = 37,6 bits

Una contraseña de 6 caracteres tendría una entropía de:

log2(26^6) = 28,2 bits

Así pues, la entropía de los 8 caracteres aleatorios (37 bits) entra por poco en la categoría de razonable. Una contraseña de 15 caracteres (70 bits) sería segura, pero aún no está en la categoría de muy segura. Son cálculos exponenciales, por lo que, con solo crear una contraseña un poco más larga, puedes aumentar muchísimo la dificultad de descifrarla.

La entropía es útil, pero no es totalmente determinante: las contraseñas de 8 caracteres aún son bastante poco seguras. En la siguiente sección veremos por qué.

Cómo se descifran las contraseñas

Para saber cómo se descifran las contraseñas, primero debemos entender cómo se protegen.

Las contraseñas suelen almacenarse en una base de datos, cifradas con un algoritmo hash unidireccional. Un algoritmo hash (en inglés, hash algorithm) es una clave de cifrado que se utiliza para transformar una contraseña de texto en claro (el texto original y legible) en un texto codificado. Solo funciona en una dirección. Los textos cifrados con un algoritmo hash seguro no se pueden revertir, aunque se conozca el algoritmo. El resultado de procesar una contraseña con un algoritmo hash se denomina hash. Un hash es una cadena (una secuencia) de caracteres formada por letras y números, que representa la versión codificada del texto original que se ha introducido.

Note

Un hash no es exactamente un cifrado. El cifrado —que a veces se llama también encriptado, del inglés encryption— es un proceso bidireccional que se puede revertir, mientras que el procedimiento del hash es unidireccional. Si el algoritmo hash funciona como debe, el valor obtenido no se podrá revertir.

Puedes obtener más información sobre las funciones hash criptográficas en Wikipedia.

Veamos un ejemplo de un algoritmo hash muy conocido, que ahora se considera poco seguro: MD5. Utilizando MD5, si se hace un hash del texto «contraseña», se obtiene el siguiente resultado: «484ac397cb407ab7aad776f0663f8c85».

Con solo un pequeño cambio en el texto original, el valor hash resultante es totalmente distinto. Esa es otra de las ventajas que ofrecen los hashes: no se puede estimar cuál será el hash en función del texto introducido.

Por ejemplo, el hash MD5 de «contrasela» es «995255ab42a033998029accabc46d61b», que no tiene nada que ver con el hash de «contraseña».

Cuando un usuario inicia sesión, se obtiene el hash del texto en claro de su contraseña y se compara con el valor del hash (la versión codificada de la contraseña del usuario) almacenado en la base de datos. Si coinciden, el usuario puede iniciar sesión.

Con todas estas medidas de protección —contraseñas de texto en claro convertidas en códigos impredecibles mediante un algoritmo irreversible—, ¿cómo es posible hackear las contraseñas? ¿Qué hace que los algoritmos hash más antiguos, como el MD5, sean vulnerables?

Note

Los valores hash (las versiones codificadas de las contraseñas originales) se pueden calcular y registrar en una inmensa lista de contraseñas. Esos archivos se llaman tablas arcoíris (del inglés rainbow tables) y se encuentran fácilmente en Internet. Por ejemplo, es fácil encontrar archivos que recopilan todos los hashes creados mediante el algoritmo MD5 a partir de cualquier contraseña de hasta 10 caracteres que contenga cualquier combinación de letras minúsculas del inglés y números (abcdefghijklmnopqrstuvwxyz0123456789).

Las tablas arcoíris se crean aplicando algoritmos hash a diccionarios de contraseñas (listas de palabras reales del diccionario y contraseñas frecuentes) disponibles en Internet. Los hashes resultantes se asocian a las contraseñas de texto en claro correspondientes y se utilizan para hackear las cuentas de los usuarios.

Un salero
Un salero

Una pizca de sal

¿Esto significa que los hashes, básicamente, ya no sirven para crear contraseñas? De ninguna manera. Los programadores pueden emplear varias técnicas muy ingeniosas para que sea más difícil encontrar el hash de una contraseña. Las funciones hash se suelen aplicar muchas veces, para que las contraseñas tarden más tiempo en verificarse y así ralentizar los ataques de fuerza bruta.

Otra forma en que los programadores protegen las contraseñas de sus usuarios es utilizar una técnica conocida como salting. Con ella, cuando el usuario introduce la contraseña, y antes de que se aplique el algoritmo hash, se añade al texto en claro un valor especial llamado salt (sal en inglés), para evitar que se usen tablas de hashes ya calculados (tablas arcoíris). Al aplicar la sal, ese valor hace que no sirvan dichas tablas. Es una forma muy sencilla de impedir este tipo de ataques.

Por ejemplo, utilizando el algoritmo hash MD5, si añadimos una sal elegida al azar, como «xhsr2d», al texto en claro «contraseña», obtenemos el resultado de la operación MD5(“xhsr2dcontraseña”), que es «a5137a1fb0c57aad857f3a72ea99396d». Este resultado no tiene nada que ver con el hash original de «contraseña» generado mediante MD5, que hemos visto arriba y que cualquier hacker podría encontrar en una tabla arcoíris de Internet. Al añadir sal a la contraseña, aunque tuviéramos una tabla arcoíris con los hashes de todas las contraseñas que se pueden formar con las letras minúsculas y 10 caracteres como máximo, no podríamos averiguar el valor original de ese hash, con lo que evitamos que puedan usarse hashes precalculados.

La técnica de salting, en la práctica, obliga a los hackers a atacar por fuerza bruta cada una de las contraseñas para poder registrar en una base de datos sus hashes codificados.

Aplicar la fuerza bruta (del inglés brute forcing) a las contraseñas significa utilizar la potencia que ofrecen los ordenadores para probar diferentes hashes mediante programas informáticos, hasta identificar la contraseña con la que coinciden. Las funciones hash se basan en lo difícil que es crear dos mensajes distintos que produzcan el mismo valor hash. Esto se denomina colisión. Si una función hash se puede forzar para que genere los mismos valores a partir de diferentes datos, se considera que está rota.

Note

Atacar contraseñas por fuerza bruta puede ser muy complicado. Con los ordenadores actuales, se pueden calcular miles de hashes por segundo. Las tarjetas gráficas son un tipo de hardware especializado al que se le da muy bien calcular hashes. En algunos casos, pueden llegar a resolver miles de millones de hashes por segundo.

Sin embargo, una contraseña larga, de 15 caracteres en minúscula, puede tener 1 677 259 342 285 725 925 376 variaciones, y calcular esa cantidad de hashes a una velocidad de mil millones de hashes por segundo llevaría algo más de 50 000 años. En cambio, si la longitud de la contraseña es de 8 caracteres, ese cálculo solo requiere unos tres minutos y medio.

Los usuarios de los servicios de Internet, por lo general, no pueden comprobar que los desarrolladores del servicio hayan aplicado las medidas de prevención disponibles. Por eso, lo mejor es presuponer que alguien puede utilizar tablas arcoíris para averiguar tus contraseñas. En la práctica, esto implica que debes optar por contraseñas largas, ya que, con ellas, las tablas arcoíris no sirven de mucho. Piensa en el ejemplo anterior: si añades 7 caracteres a tu contraseña, puedes ponérselo muchísimo más difícil a los hackers.

Next section
IV. Cómo hacer que tus contraseñas sean seguras