Contraseñas
Se recomienda leer el capítulo Hash criptográfico antes de seguir con este.
Lo que aprenderás
- Cuando “protegido con contraseña” significa que algo está cifrado y cuando no significa eso
- Cómo se vence a las contraseñas
- Cuáles prácticas puedes usar para minimizar riesgos con tus contraseñas
- Cómo generar claves criptográficas a partir de contraseñas
Cuando “protegido con contraseña” no significa cifrado
Todas las contraseñas se usan para obtener acceso. Las contraseñas de cuenta se usan para otorgar acceso a cuentas en línea. Sin embargo, es raro que la información en dichas cuentas esté cifrada con una clave que el usuario controla, y es probable que la información no esté cifrada en absoluto. Es decir, la información suele ser legible para el proveedor (por ejemplo, Google y Dropbox). Otras contraseñas se usan para desbloquear un archivo o documento cifrado, y nos referiremos a ellas como contraseñas de cifrado. Usar una contraseña para tu cuenta es como decirle tu nombre a un guardia para que lo verifique en una lista de huéspedes aprobados, mientras que el uso de una contraseña de cifrado equivale más a usar una llave para cerrar una caja de seguridad. En el primer caso, depende del guardia (una metáfora para tu proveedor de internet) darte acceso. En el segundo, la caja de seguridad representa el texto cifrado, y el contenido de la caja es el texto en claro; obtener acceso al texto en claro es imposible (o al menos impráctico) sin la llave o la contraseña. De hecho, algunas veces las claves criptográficas se generan a partir de una contraseña, como se describe a continuación.
Ahora bien, aunque tu información no queda cifrada con una contraseña de cuenta, de todas formas, deberías minimizar la cantidad de personas que pueden tener acceso a tu información. Pero para entender por qué recomendamos ciertas prácticas, es necesario comprender cómo se puede comprometer una contraseña.
Descifrado de contraseñas
Las contraseñas pueden comprometerse o descifrarse una por una o en bloque, como, por ejemplo, todas las contraseñas de todas las cuentas en un sistema dado. Las contraseñas son mercancías de valor. Puesto que las personas suelen usar la misma contraseña para muchas cuentas y que muchos usan (muy malas) contraseñas populares (123456, contraseña, qwerty, admin, bienvenido, por dar solo algunos ejemplos reales), descubrir las contraseñas usadas en un servicio puede poner en riesgo las cuentas de un servicio diferente y posiblemente también de otra persona.
Consideremos las formas de comprometer una contraseña.
Para descifrar una contraseña, un adversario podría lograrlo por la misma vía en que tú tecleas tu contraseña; por ejemplo, mediante un sitio web. Es relativamente fácil para el operador de un sitio web brindar protección contra esto; por ejemplo, bloqueando una cuenta después de varios intentos fallidos de introducir una contraseña o forzando retrasos después de la introducción de una contraseña para desacelerar la repetición de intentos. Otra manera en que el proveedor de una cuenta puede ayudar es permitir la autenticación de dos factores; esto es, que, aparte de introducir una contraseña para entrar en una cuenta, también debes introducir un código de autenticación enviado en un mensaje de texto o a través de una app en tu teléfono inteligente, o usando una llave física de autenticación (como YubiKey). Para comprometer tu cuenta, un adversario necesitaría tu contraseña, así como el dispositivo en el cual recibes el código de autenticación.
Un adversario también podría acceder físicamente al dispositivo (teléfono o computadora) en el cual introduces tu contraseña. Lo que es más probable (y se reporta con frecuencia en las noticias) es que el servidor donde se aloja tu contraseña resulte comprometido o jaqueado. En este caso, no serán solo tu nombre de usuario y contraseña los que resultarán comprometidos; todos aquellos que tengan una cuenta en ese sistema estarán en riesgo. Aunque es probable que un adversario que haya obtenido acceso a la base de datos de contraseñas de ese servidor tenga acceso a la información de tu cuenta, como se sugirió anteriormente, el objetivo del jaqueo podría ser obtener acceso a otro servicio completamente distinto.
Un proveedor de servicios responsable no almacenaría tu contraseña como texto en claro en su servidor, sino en un hash criptográfico. Para descifrar una contraseña (o todas las contraseñas), un adversario calcula el hash criptográfico de una supuesta contraseña y lo compara con la base de datos de contraseñas robadas. En la práctica, las herramientas para descifrar contraseñas (por ejemplo, John the Ripper) usan tres técnicas:
- Ataques de diccionario: probar palabras de diccionario, variaciones comunes de palabras de diccionario (por ejemplo, c0n7ra53n4, l1b3r74d) y contraseñas previamente descifradas.
- Fuerza bruta: probar todas las combinaciones posibles de letras y números o símbolos (por razones prácticas, este método solo funciona con contraseñas relativamente cortas).
- Hashes precalculados: comparar contra una tabla de hashes criptográficos de contraseñas posibles calculados con anterioridad.
Un usuario podría frustrar las primeras dos técnicas usando buenas prácticas para crear contraseñas (descritas a continuación). Un proveedor de servicios puede hacer que el descifrado de contraseñas sea menos práctico usando una función hash criptográfica que sea lenta de calcular o que use mucha memoria.
Esto no sería notorio con una sola contraseña (como cuando inicias sesión), pero haría muy lento el cálculo de los hashes durante su descifrado.
Un proveedor de servicios puede dificultar aún más el uso de hashes precalculados si agrega una secuencia larga de caracteres aleatorios (condimento) a tu contraseña cuando inicias sesión. Este “condimento” puede almacenarse como texto en claro con tu nombre de usuario, de manera que un adversario también tendría esta información, pero no habría tenido el “condimento” cuando preparó la tabla de hashes precalculados. Por otra parte, si dos usuarios tuvieran la misma contraseña, puesto que su “condimento” sería diferente, el hash criptográfico de sus contraseñas con condimento también sería diferente. Esto obligaría al atacante a descifrar cada contraseña de manera individual.
Debido a lo anterior, estás confiando en que tu proveedor de servicios en línea almacena y protege de manera responsable tu información de usuario, incluyendo el hash de tu contraseña, si es que la ha hasheado. El resto depende de ti.
Las mejores prácticas para crear contraseñas
Para protegerte contra los métodos descritos en la sección anterior, tu contraseña debería ser suficientemente larga (para evitar ataques de fuerza bruta), ser poco común (para evitar ataques de diccionario) y no ser reusada (para que, si una de tus cuentas resulta comprometida, tus otras cuentas no lo estén también)
Para lograrlo, usa un administrador de contraseñas que genere y almacene todas las contraseñas, sin que necesites teclearlas manualmente. El administrador generará contraseñas aleatorias fuertes, como bdY,Fsc_7\&*Q+cFP. Esta es una excelente contraseña, de las que no debes teclear; es decir, una que el administrador de contraseñas introducirá por ti.
En el caso de contraseñas que es necesario teclear (por ejemplo, la contraseña que introduces en tu teléfono, la contraseña con la cual proteges el administrador de contraseñas o la que usas para cifrar el acceso o bloquear tu computadora), usa una contraseña creada con Diceware; es decir, una secuencia aleatoria de palabras, como:
nadar.gracias.belez.zanahoria.torno.maleta
También puedes generar esta contraseña manualmente usando dados y una lista de palabras. Muchos administradores de contraseñas también generan dichas contraseñas, aunque es probable que no necesites muchas de ellas.
Observa que los dos ejemplos anteriores fueron generados aleatoriamente. Esto es importante porque, aunque pienses que tu contraseña es excelente y fuerte, si la creaste con tu propio cerebro es probable que también la haya creado el cerebro de alguien más, y por tanto es susceptible a ataques de diccionario.
![Seguridad de la contraseña XKCD](https://open.oregonstate.education/app/uploads/sites/182/2022/05/password_strength.png)
Generar claves criptográficas a partir de contraseñas
En algunos casos, las contraseñas se usan para desbloquear un archivo o dispositivo bloqueado. En este caso, se genera una clave criptográfica a partir de una contraseña o frase de contraseña usando una función de derivación de clave (KDF, por sus siglas en inglés), que es, en esencia, una función hash criptográfica. ¿Cómo funciona esto? Repasemos las propiedades de las funciones hash criptográficas.
- Sin importar la longitud del mensaje de entrada, el mensaje de salida siempre será del mismo tamaño. Así que, sin importar cuán corta (¡o débil!) sea tu contraseña, obtendrás una clave criptográfica del tamaño correcto. (Pero una contraseña corta y débil es susceptible a ser descifrada por los métodos antes mencionados.)
- El mismo mensaje de entrada siempre producirá el mismo hash de salida. De esta forma, tu contraseña siempre generará la clave criptográfica correspondiente que necesitas.
- No es posible generar el mensaje de entrada a partir del valor hash de salida. Si alguien lograra obtener tu clave criptográfica, no podría recrear tu contraseña.
- No es posible encontrar dos mensajes de entrada diferentes que produzcan el mismo hash de salida. Es poco probable que alguien que intentara descifrar tu contraseña encontrara otra que produjera la misma clave criptográfica que la tuya.
- Un pequeño cambio en el mensaje de entrada cambia tanto el valor hash de salida que el nuevo valor hash parece no tener ninguna relación con el anterior. Esta propiedad no es tan útil para la generación de una clave criptográfica.
En contexto: Cuando las precauciones no bastan
En 2016, la cuenta de Twitter y dos cuentas de correo electrónico de DeRay Mckesson, activista por muchos años, fueron comprometidas en un ataque dirigido, a pesar de que tenían un protocolo de autenticación de dos factores. Para obtener el control del teléfono de Mckesson, su adversario llamó a Verizon y solicitó una nueva tarjeta SIM, y sabía suficiente sobre Mckesson para convencer a Verizon. Una vez que el adversario tuvo acceso al número telefónico de Mckesson, pudo obtener códigos para reestablecer sus contraseñas y obtener así acceso a sus cuentas. Este es un recordatorio de que ninguna medida de seguridad es perfecta, y quienes son susceptibles de sufrir ataques dirigidos (en este caso, Mckesson era un blanco debido a su apoyo al movimiento Black Lives Matter) deben ejercer vigilancia adicional. En este caso, el acceso al teléfono de Mckesson permitió reestablecer contraseñas y degradó la protección de sus cuentas de dos factores a un factor: solo el acceso a su teléfono dio al adversario de Mckesson acceso a sus cuentas, en lugar de la contraseña más el acceso al teléfono.
Recursos externos
- Dreyfuss, Emily. “@Deray’s Twitter Hack Reminds Us Even Two-Factor Isn’t Enough.” Wired, 10 de junio de 2016.
- Wikipedia. “John the Ripper.” 29 de diciembre de 2020.
- TeamPassword. “Top 50 Worst Passwords of 2019.” 18 de diciembre de 2019.
Atribuciones de los medios
- password_strength © Randall Munroe is licensed under a CC BY-NC (Atribución NoComercial) license