Si a cualquiera de nosotros nos preguntaran por las medidas de seguridad que utilizamos para acceder a las cuentas que tenemos abiertas en ciertas aplicaciones, la inmensa mayoría respondería: “tengo una contraseña”.
El uso de contraseñas se ha convertido en la última barrera que los ciberdelincuentes deben superar para acceder a nuestros servicios, ordenadores, cuentas de correo, redes sociales o aplicaciones software. Cuando este muro es derribado, todo lo que somos digitalmente queda expuesto a terceros. Por eso su solidez resulta fundamental, y más aún si tenemos en cuenta que, por ejemplo, dentro de nuestros dispositivos móviles dejamos abiertas las conexiones a un considerable número de aplicaciones que utilizamos a diario.
Las contraseñas son un mecanismo clave, y nunca mejor dicho, de nuestra interacción con el mundo digital. Sin embargo, en ocasiones esas contraseñas quedan al descubierto con el consiguiente riesgo para los usuarios y las organizaciones. Pero ¿cómo conseguiría un delincuente hacerse con nuestras contraseñas?
Existen múltiples formas de robar la contraseña de acceso a un servicio telemático: a partir de la fuerza bruta (probando combinaciones de caracteres), utilizando diccionarios de palabras más habituales o incorporando técnicas de ingeniería social como el phishing o el shoulder surfing. Sea cual sea la táctica utilizada es importante recordar que como usuarios debemos tratar de protegernos con contraseñas que al menos sean robustas. Ahora bien, ¿alguien podría decir cuándo una contraseña es robusta? Antes de responder a la pregunta existe una serie de cuestiones técnicas que debemos conocer respecto a cómo se gestionan las contraseñas cuando accedemos a un servicio.
Cómo se guardan las contraseñas
De forma habitual, las contraseñas son el último desafío que nos lanza un servicio antes de acceder a él: la respuesta a una pregunta que solo nosotros conocemos y que somos capaces de dar correctamente. Estas respuestas, o contraseñas, habitualmente son custodiadas por los proveedores del servicio (sea este una red social, una aplicación en la nube o el propio sistema operativo de nuestros equipos de sobremesa) bajo ficheros con estrictos controles de acceso. Así pues, cuando tratamos de acceder a un servicio, el proveedor consulta nuestro identificador de usuario y la contraseña que tenemos definida. Si ambas coinciden nos permitirá acceder, mientras que si la respuesta es incorrecta rechazará nuestra conexión.
El problema de las contraseñas en texto claro
El mecanismo parece robusto, ¿verdad? Pues a veces no lo es tanto. Y no lo es, entre otras cosas, porque los controles que el proveedor del servicio aplica al fichero de contraseñas no siempre son suficientes. Un estudio realizado por Verizon muestra que un 81% de los incidentes de seguridad que se producen tienen su base en el robo de contraseñas o en contraseñas demasiado sencillas. Recientemente descubríamos como Facebook, Google o incluso Twitter guardaban las contraseñas de algunos (un número con varios ceros) de sus usuarios en un fichero en texto plano. Una práctica completamente desaconsejada y que es fuente de enormes problemas puesto deja la información en un formato perfectamente legible para cualquier que logre acceder al fichero.
Existen soluciones evidentes a este problema. Una forma habitual es guardar en el fichero unas claves alternativas que se correspondan con cada contraseña de usuario, pero que, sin embargo, no recojan sus valores reales.
El hash de una contraseña es una transformación de un elemento de partida en una salida cuya correspondencia es unívoca (lo que se conoce como un hash sin colisiones). De esta forma, si alguien accede al fichero de contraseñas solo recuperará un conjunto de valores carentes de sentido que le resultarán difícil de traducir a la contraseña original que solo es conocida por su propietario.
Cracking de contraseñas
Y decimos que le resultará difícil, porque realmente no es imposible. El cracking de contraseñas es una técnica utilizada por los delincuentes para recuperar los valores reales de respuesta al desafío que implica traducir esos ficheros cifrados. Una vez conseguidos los ficheros, normalmente los delincuentes tratan de deducir cual es la correspondencia entre diferentes contraseñas y los valores registrados. Y aquí es donde el algoritmo de hashing muestra su importancia.
Históricamente muchos algoritmos de hashing han sido utilizado para diferentes funciones de cifrado. Entre los más conocidos se encuentran MD5 y SHA. El primero fue abandonado después de comprobar que presentaba problemas de colisión, es decir, dos entradas diferentes generaban la misma salida, o lo que es lo mismo, dos contraseñas podrían llegar a tener el mismo hash, con el consiguiente problema de seguridad. En la actualidad, SHA-3 es uno de los más utilizados. Aprobado por la Agencia de Seguridad Nacional Norteamericana (NSA) tras la convocatoria de un concurso a nivel mundial en 2012, el algoritmo genera claves-hash robustas que se utilizan para conservar las contraseñas de acceso a muchos sistemas.
El número de caracteres es relevante
Ahora bien, la perseverancia de los delincuentes resulta inquebrantable. Si un delincuente consigue acceder al fichero que conserva las claves-hash de los usuarios, con toda seguridad intentará hacer el camino a la inversa y tratará de obtener las contraseñas que correspondan a cada una de las claves disponibles, aunque sea utilizando la fuerza bruta.
Para poner algunas dificultades a esta técnica podemos incrementar el tamaño de la contraseña o el conjunto de caracteres del vocabulario. Cuanto mayor sea el espacio de búsqueda mayor será la dificultad de encontrar la contraseña correcta. Algunos estudios matemáticos indican que la complejidad se hace exponencial a medida que crece el tamaño de una contraseña; mucho más que las posibilidades que aporta la variedad de caracteres posibles del vocabulario. Por ejemplo, una contraseña de 16 caracteres numéricos tiene una complejidad similar a una contraseña de 8 caracteres ASCII (elegidos entre los 94 que habitualmente utilizamos). Así pues, una de las principales recomendaciones a la hora de establecer una contraseña es hacerla lo más larga posible.
Diccionarios y “Rainbow Tables”
Otra de las recomendaciones es no utilizar secuencias de caracteres que puedan quedar recogidas en algún diccionario. Los delincuentes suelen hacer uso de estas bases de datos para probar transformaciones que conduzcan a claves-hash válidas. Incluso técnicas basadas en rainbow tables o, lo que es lo mismo, el encadenamiento de secuencias de claves-hash parciales para acortar su proceso de búsqueda.
Para este tipo de situaciones, sin embargo, también los expertos han propuesto algunas soluciones. Es lo que se conoce como el “salt” (sal, sí, el condimento). Básicamente el “salt” añade esa pizca de aditamento al algoritmo que hace que se generen claves-hash diferentes por cada “salt” que se concatena al texto original. Con ello se consigue evitar el problema de que alguien se proponga crear un único vademécum de claves asociadas a un algoritmo específico. Al mismo tiempo, se añade complejidad a la computación en el cálculo de los posibles valores.
Complejidad temporal
Y de nuevo surge una pregunta, ¿cuánto tiempo se tardaría en establecer la correspondencia entre una clave-hash y una contraseña? La respuesta para muchos es seguramente conocida. Solo diremos que si dispusiéramos del ordenador más potente de la actualidad y nuestra contraseña tuviera una longitud de 94 caracteres, el tiempo transcurrido desde el origen del Universo hasta hoy no sería suficiente para encontrar la clave hash correcta.
Pero desafortunadamente ni utilizamos contraseñas de 94 caracteres ni los delincuentes emplean solo la fuerza bruta. Estudios recientes muestran que aún persisten innumerables usuarios que utilizan contraseñas demasiado obvias o que aparecen en diccionarios habitualmente empleados por los delincuentes. Solo a modo de ejemplo, en Reino Unido existen más 23 millones de cuentas que utilizan “123456” como contraseña.
Alternativas a las contraseñas
Ciertas voces del mercado comienzan a elevarse sobre la idoneidad de seguir utilizando contraseñas frente a otros mecanismos que consideran más robustos. Tal es el caso de la FIDO Alliance que pugna por el uso de recursos como el reconocimiento facial, la voz, la huella dactilar o el uso de claves almacenadas en dispositivos físicos externos. Ciertos investigadores han evaluado el impacto que estos nuevos mecanismos de autenticación tienen en términos de usabilidad, seguridad y complejidad de instalación para, al final, concluir que los costes de implantarlos de forma masiva podrían ser nada despreciables. Por eso muchos propugnan el uso de gestores de contraseñas, herramientas que almacenan nuestras contraseñas y que solo recuperan cuando son estrictamente necesarias. En el mercado existe un buen número de ellas, unas públicas y de uso gratuito, y otras evidentemente de pago.
Recomendaciones
Llegados a este punto, algunos pensarán que este problema puede atenuarse limitando el número de intentos que un usuario tiene para proporcionar la contraseña correcta. Una vez errado tres veces el sistema bloquearía el servicio, por ejemplo.
Sin embargo, la inteligencia de los delincuentes no para de maquinar caminos alternativos. Y si no, pensemos en la incomodidad que genera este tipo de situaciones que a menudo nos obligan a reinicializar nuestras contraseñas cambiándolas por otras diferentes, o lo que es incluso peor, la posibilidad de que tal inicialización esté forzada por el propio delincuente para capturar nuestras nuevas contraseñas (empleando otros mecanismos) justo en el momento en el que estamos definiéndolas.
¿Quiere esto decir que debemos actuar de modo paranoico cuando utilicemos nuestras contraseñas? Posiblemente debiéramos responder que sí, al menos para no minimizar su importancia. Las contraseñas son fundamentales en nuestras actividades diarias, y debemos velar por ellas. Como hemos visto, los delincuentes las buscan constantemente. Y es nuestra responsabilidad dificultar que puedan encontrarlas.
Las recomendaciones que podemos dar para robustecer una contraseña resultan variadas, desde implementar mecanismos multi-factor, es decir, pedir un segundo nivel de autenticación, aplicando “lo que se tiene” o “lo que se es”, hasta fortalecer la contraseña aumentando su complejidad (en tamaño y caracteres, por ejemplo). A partir de ahí, adicionalmente, será importante que dispongamos de gestores de contraseñas, servicios que nos proporcionen indicadores de alarmas en caso de posibles riesgos o que periódicamente y de forma segura la reinicialicemos. Si tenemos en cuenta estas recomendaciones quizás evitemos algunos problemas o al menos se lo estaremos poniendo más difícil a quienes tratan de acceder donde no deben.