¿Cómo verifican los sitios web modernos las contraseñas de los usuarios sin almacenar la contraseña de texto sin cifrar en la base de datos?

(Advertencia: esta respuesta está escrita para que los lectores no técnicos tengan una buena idea de los problemas involucrados. Para fines pedagógicos, hay una serie de simplificaciones excesivas e instancias de términos que se usan libremente. Para una terminología “técnicamente precisa” y detalles, se recomienda a los lectores que hagan clic en los enlaces provistos).

La mayoría de las buenas compañías nunca almacenarán su contraseña directamente en la base de datos, y nadie en la compañía sabrá o tendrá acceso a su contraseña directamente. Hay algunas compañías incompetentes (o software interno en su oficina) que almacenan la contraseña directamente. Si una empresa puede devolverle su contraseña en un correo electrónico o por teléfono, es una señal segura de que el software de la empresa es muy inseguro.

La razón por la cual las contraseñas nunca se almacenan directamente en la base de datos es que cualquiera que tenga acceso a la base de datos tendría acceso a todas las contraseñas de todos los usuarios. Eso sería desastroso, ya que no solo las cuentas de millones de personas se verían comprometidas en un instante, sino que también recuerde que muchas personas usan la misma contraseña en todos los sitios web, por lo que alguien que obtenga su contraseña de Quora también podría ingresar a su Gmail y Facebook y otras cuentas.

En cambio, su contraseña se almacena utilizando lo que yo llamaría “cifrado unidireccional”. (Técnicamente, esto se llama una función unidireccional, o una función hash criptográficamente segura. Consulte la página de Wikipedia para más detalles: http://en.wikipedia.org/wiki/One…) Básicamente, el “cifrado unidireccional” es Un método de cifrado en el que es fácil codificar cosas, pero muy difícil (léase: casi imposible) descifrarlo. Por ejemplo, una función de cifrado unidireccional típica podría tener las siguientes características:
se necesita 1 microsegundo para calcular el formulario encriptado a partir de una contraseña, pero se estima que tomará 2000 años si desea averiguar la contraseña del formulario encriptado.

Ahora, si ingresa su nombre de usuario y contraseña, el sistema encuentra el registro de la base de datos basado en su nombre de usuario, y encuentra la versión cifrada de su contraseña allí. Luego toma la contraseña que ingresó, la cifra usando la función unidireccional (y esto toma un tiempo insignificante) y verifica si el formulario cifrado coincide con lo que está almacenado en la base de datos. En caso afirmativo, puede ingresar al sistema; de lo contrario, no.

Si algún administrador o usuario malintencionado tiene acceso a la base de datos, las contraseñas cifradas no les serán de utilidad. Todavía es prácticamente imposible descifrar las entradas cifradas almacenadas y obtener contraseñas de ellas. Por lo tanto, su contraseña está segura incluso si la base de datos está comprometida.

Sin embargo, todavía es posible que el hacker intente adivinar cuál es su contraseña.

La idea básica es muy simple: adivina cuál podría ser la contraseña de ese usuario. Use la función unidireccional para verificar si la suposición fue correcta o no. Esto lleva 1 microsegundo. Esto significa que pueden verificar un millón de conjeturas en 1 segundo. En otras palabras, y pueden probar todas las palabras comunes en inglés, todos los nombres propios comunes de personas y animales, con y sin caplitalización, y con y sin uno o dos dígitos agregados al final, todo en unos minutos.

Por lo tanto, si su contraseña es Jebediah23, se descifrará en unos minutos, si no menos.

Ahora tenga en cuenta que si tengo en mis manos la base de datos de contraseñas cifradas de un sitio grande como LinkedIn, tengo acceso a millones de contraseñas cifradas. En esta base de datos, puedo garantizar que literalmente habrá cientos de miles de usuarios con contraseñas que son palabras o nombres en inglés, posiblemente con uno o dos dígitos agregados al final. En unos minutos, simplemente probando todas las palabras, nombres, etc. en inglés, puedo descifrar cientos de miles de contraseñas. Esto se llama un “ataque de diccionario” (http://en.wikipedia.org/wiki/Dic…)

Hay un programa gratuito llamado John the Ripper (http://en.wikipedia.org/wiki/Joh…) que hace exactamente esto. (Y esto ya ha sucedido, muchas, muchas veces en el pasado, con los principales sitios web, incluido LinkedIn).

Esto debería ayudarlo a comprender por qué su contraseña necesita dígitos y signos de puntuación en el medio, y no debe ser una palabra o nombre común en inglés. ¿Recuerda cómo algunos sitios y administradores de sistemas están tratando de imponer contraseñas “fuertes”? Esto es lo que están tratando de prevenir.

Un concepto importante aquí es el de “salazón”, que es útil para prevenir el ataque del diccionario. En lugar de simplemente encriptar la contraseña, el sitio web agrega el nombre de usuario o la dirección de correo electrónico o simplemente una cadena aleatoria a la contraseña y encripta la cadena combinada resultante. Por lo tanto, si ‘navin’ y ‘makarand’ tienen la contraseña ‘quorarox’, la base de datos almacenará la forma cifrada de ‘quorarox: navin’ con el registro de la base de datos de navin, y ‘quorarox: makarand’ con el registro de makarand. Esto hace que sea significativamente más difícil que el ataque del diccionario tenga éxito. (He simplificado en exceso: para obtener más información, lea las tablas del arco iris: http://en.wikipedia.org/wiki/Rai…).

La cadena agregada a la contraseña se llama ‘sal’, y se recomienda encarecidamente la salazón, pero lamentablemente no todos los sitios web siguen esta práctica. Por ejemplo, la filtración de LinkedIn de junio de 2012 mostró que LinkedIn no había salado las contraseñas (esto ya se ha solucionado).

Actualización: en la actualidad, muchos sitios web permiten a los usuarios iniciar sesión con Facebook, Google u otros terceros. Esto funciona un poco diferente. En ese caso, en lugar de una contraseña cifrada, el sitio web almacena un “token de autorización” proporcionado por Facebook / Google / etc. al sitio web específicamente para este usuario. Este token de autorización solo puede ser utilizado por este sitio web para verificar si este usuario en particular ha iniciado sesión. Esto lo hace el sitio web contactando a los servidores de Facebook / Google en el momento de cada inicio de sesión. Si un hacker obtiene acceso a este token de autorización, no le sirve de nada, ya que no puede ser utilizado por nadie más que este sitio web. Esto se debe a que el sitio web en sí tiene una clave secreta proporcionada por Facebook / Google, y esta clave secreta generalmente no se almacena en la base de datos.

El método utilizado para almacenar y verificar las contraseñas de los usuarios sin guardarlas es comparar la entrada del usuario con el hash almacenado.

¿Qué es el hash?
El hash es el proceso de pasar datos de longitud variable (contraseñas pequeñas, contraseñas grandes, archivos binarios, lo que sea) a través de un algoritmo que lo devuelve como un conjunto de longitud fija llamado valor hash. Los hashes solo funcionan de una manera. Un archivo * .img que consta de varios Mb puede codificarse exactamente igual que una contraseña. (en realidad, es una práctica común usar hashes en archivos grandes para verificar su integridad; digamos que descarga un archivo usando bittorrent, cuando está completo, el software lo analiza y compara el hash de lo que tiene con el hash de lo que se suponía que debía hacer) tener, si coinciden, la descarga no está dañada).

¿Cómo funciona la autenticación con hashes?
Cuando el usuario se registre, le dará una contraseña, diga `pass123` que luego se codifica (mediante cualquiera de los algoritmos de hash disponibles: sha1, sha256, etc., en este caso md5) al valor` 32250170a0dca92d53ec9624f336ca24` y ese valor se almacena en la base de datos . Cada vez que intentes iniciar sesión, el sistema te introducirá la contraseña en tiempo real y la comparará con el hash almacenado, si coincide, estás listo. Puede probar un hash md5 en línea aquí: http://md5-hash-online.waraxe.us/

¿Qué pasa si dos hashes son iguales? ¿Podría un usuario iniciar sesión con un pase diferente?
¡El podria! Eso se llama colisión. Digamos que en un algoritmo de hash ficticio el valor `pass123` produciría el hash` ec9624` y el valor `pass321` produciría exactamente el mismo hash, ese algoritmo de hash se rompería. Ambos algoritmos comunes md5 y sha1 (el que LinkedIn usó) se rompen cuando se han encontrado colisiones. Estar roto no significa necesariamente que no sea seguro.

¿Cómo puedes explotar las colisiones?
Si puede generar un hash, que es lo mismo que el hash generado por la contraseña del usuario, puede identificar a ese sitio como el usuario.

Ataques de mesa arcoiris.
Los crackers entendieron rápidamente que no sería posible explotar las contraseñas una por una, por lo que idearon un nuevo vector de ataque. Generarían todas las contraseñas existentes (aaa, aab, aac, aad, etc., etc.) y almacenarían todos los hashes en una base de datos. Luego, solo tendrían que buscar el hash en la base de datos (una consulta de menos de un segundo) y obtener la contraseña correspondiente.

Sal al rescate (¡y donde LinkedIn falló a lo grande!)
La seguridad se define por la cantidad de tiempo que le tomará a un cracker romper su contraseña y la frecuencia con la que la cambia. Con las tablas de arco iris, la seguridad cae muy rápido, por lo que a la industria se le ocurrió la sal. ¿Qué pasa si cada contraseña tiene un giro único? Eso es sal! Por cada usuario que se registre, genera una cadena aleatoria, digamos 3 caracteres (la industria recomienda 16 caracteres: http://stackoverflow.com/a/18419 …). Luego concatena la contraseña del usuario con su cadena aleatoria.

contraseña – sal – hash sha1
qwerty – 123 – 5cec175b165e3d5e62c9e13ce848ef6feac81bff
qwerty – 321 – b8b92ab870c50ce5fc59571dc0c77f9a4a90323c
qazwsx – abc – c6aec64efe2a25c6bc35aeea2aafb2e86ac96a0c
qazwsx – cba – 31e42c24f71dc5a453b2635e6ec57eadf03090fd

Como puede ver exactamente las mismas contraseñas, dados diferentes valores de sal, generan hashes completamente diferentes. Ese es el propósito de la sal y por qué LinkedIn falló en grande. ¡Tenga en cuenta que en la mesa solo almacenará el hash y la sal! ¡Nunca la contraseña!

Lo primero que hicieron los chicos que tuvieron en sus manos los hashes de LinkedIn fue clasificar los hash y ver si había coincidencias (porque varios usuarios tenían la misma contraseña, ¡qué vergüenza!) Esos usuarios fueron los primeros en abandonar. Si la mesa estuviera salada … nada de eso habría sucedido y necesitarían una cantidad de tiempo insoportable (y recursos informáticos) para descifrar cada contraseña. Eso le habría dado a LinkedIn mucho tiempo para aplicar una nueva política de contraseñas.

Espero que el aspecto técnico de la respuesta haya dado una idea de cómo funciona la autenticación (o debería funcionar).

La explicación de Navin Kabra es bastante buena.

Solo agregaré un par de cosas:

1. el ‘cifrado unidireccional’ generalmente se denomina ‘hash’ o ‘valor hash’. Estas son funciones de cifrado que se ‘rompen’ intencionalmente para que el mensaje original (la contraseña en este caso) no se pueda recuperar porque no se conoce un algoritmo de descifrado

2. los hash convierten palabras y frases simples en números binarios largos. Se podría pensar en tomar todas las letras de una palabra y escribirlas en un trozo de pimienta y luego esparcir la sal en una habitación grande.

Una función hash hace que todos los trozos de pimienta caigan en el mismo lugar cada vez que usas la misma frase.

Esto significa que si solo se usan unos pocos millones de frases (contraseñas), un pirata informático que obtiene la lista de contraseñas hash solo tiene que encontrar un millón de otras palabras que coincidan con el mismo patrón de pimienta.

Pero si le damos sal a la contraseña al concatenar cadenas generadas aleatoriamente al final o en el medio o como quiera hacerlo, obtenemos muchos más lugares para que aterrice el pimiento y, como señala Navin, la misma ‘contraseña’ aparecerá No generar el mismo valor hash.

Resulta (y no sé por qué, pero los criptográficos sí) que ni siquiera necesita mantener el secreto de sal, por lo que el valor de sal generalmente se incluye en la base de datos de contraseñas junto con el hash.

El hecho de que LinkedIn lo haya estropeado es muy decepcionante. Significa que no toman la seguridad lo suficientemente en serio como para realizar auditorías de rutina de su software.

Una adición a la excelente respuesta de Navin. Incluso si un sitio web utiliza contraseñas y sales hash para hacer que los hashes sean más aleatorios, aún necesita la capacidad de restablecer su contraseña y enviarle la nueva. Esto se puede hacer en el momento del cifrado. Si el sistema genera una contraseña temporal, puede guardarla, ejecute el algoritmo hash para almacenar la contraseña temporal en la base de datos, pero luego genere un correo electrónico con la contraseña temporal. Cuando un usuario inicia sesión, puede cambiar la contraseña temporal a una permanente y la función hash se vuelve a llamar para obtener la contraseña permanente.

Cuando utiliza la función Olvidé mi contraseña , algunos sitios web van un paso más allá y ni siquiera generan una contraseña temporal. En cambio, le envían un correo electrónico con un enlace de construcción especial que lo lleva a una página que es válida por solo unos minutos; incluso puede estar vinculado a un nombre de usuario o dirección IP específica o alguna otra información de identificación única. Luego crea una nueva contraseña permanente en esa página.

  1. Imagina que estoy tratando de abrir una tienda de batidos de fresa.
  2. Así que voy a comprar una licuadora en una misión para hacer el licuado de fresa más sabroso del mundo.
  3. Mi receta es de 10 fresas.
  4. Los tiro en la licuadora.
  5. Te doy el batido y lo pruebas.
  6. Inmediatamente puedes decirme que solo usé fresas. Es muy obvio.
  7. Fue un poco demasiado fácil para ti descubrir la receta.
  8. ¿Cómo puedo hacer que sea más difícil descubrir la receta?
  9. Entonces hago otro batido.
  10. Esta vez agrego fresas, toque de miel, extracto de vainilla.
  11. Lo saborea, y aunque sabe que es un batido, no puede entender cuál era la receta y los ingredientes.
  12. Si bien parece que solo son fresas, intentas mezclar algunas fresas pero no puedes reproducir el sabor exacto.
  13. ¡Sí! Mi receta es segura

Así es como se almacenan las contraseñas.

Los sitios web toman su contraseña (las fresas) y la arrojan a la licuadora (una función de cifrado de contraseña). Cada sitio agrega sus propios ingredientes secretos (conocidos como “sal” en la jerga de seguridad) a la licuadora, por ejemplo. Facebook podría agregar extracto de vainilla, Twitter podría agregar azúcar moreno: cada empresa utiliza un ingrediente secreto diferente. El batido resultante es su contraseña cifrada, y esta se almacena en su refrigerador, la base de datos.

Las buenas compañías agregan los ingredientes adicionales (sales) porque alguien podría asaltar el refrigerador y si no hubiera ingredientes adicionales, sería obvio que su batido estaba hecho solo de fresas, es decir. Es fácil descifrar la contraseña.

Algunas compañías malas no amplían su receta, no agregan sales. Solo usan las fresas que les diste, las mezclan y guardan ese batido. Al igual que la historia anterior, alguien podría robar este batido y descubrir fácilmente que solo está hecho de fresas. Esto se conoce como cifrado sin sal. Esto es malo y esto es lo que hizo LinkedIn.

Y algunas compañías peores ni siquiera mezclan sus fresas. Simplemente los almacenan como fresas. Esto se conoce como almacenar contraseñas como texto sin formato. Esto es horrible.

Bien, entonces dejo Facebook y ahora regreso. ¿Cómo sabe Facebook que soy yo?

Facebook toma tus fresas y las arroja nuevamente a la licuadora. Echan su ingrediente secreto, el extracto de vainilla, hacen un batido y lo comparan con el que han guardado. Los batidos solo coincidirán si usas fresas, si hubieras usado un plátano no sería lo mismo.

Más directamente, Facebook toma su contraseña y la arroja en la función de cifrado de contraseña. Agregan su sal secreta y comparan la contraseña cifrada con la que han almacenado (que también es una contraseña cifrada). Si coincide, inicia sesión.

Así es como se verifican las contraseñas.

Una cosa a tener en cuenta es que cuanto más simples sean sus ingredientes principales, más fácil será descubrir su receta. Es por eso que la gente le dice que no use contraseñas muy simples y que use muchos caracteres y números. Básicamente están diciendo “no use solo fresas como ingredientes iniciales, use fresas más 2 cucharaditas de azúcar más 1 vaso de leche”.

La respuesta corta es: no tiene que almacenar contraseñas en ninguna base de datos. Puede “destrozarlos más allá del reconocimiento” y almacenar la versión destrozada. Pero (te escucho decir) si realmente está destrozado más allá del reconocimiento, ¿cómo puede el sitio verificar tu contraseña cuando inicias sesión? ¡Ajá, esa es la parte difícil! El sitio toma la contraseña que ingresa y la destruye MÁS allá del reconocimiento … EXACTAMENTE DE LA MISMA MANERA. De esa manera, las dos versiones destrozadas coincidirán si y solo si fueron destruidas desde la misma contraseña. Nadie tiene que saber cuál es su contraseña que no sea usted, sentado en la puerta del mangler.

Por supuesto, hay complicaciones y advertencias, que incluyen la definición de “más allá del reconocimiento” y las condiciones sobre cómo funciona el mangler (que constituye una parte considerable del campo de la criptografía). Y, por supuesto, nada en este esquema lo salva de las personas que pueden adivinar su contraseña. Las otras respuestas cubren los detalles. Pero esa es la esencia.

Nunca. Usan una función unidireccional llamada Hashing. Las contraseñas nunca se almacenan en claro. El hash convierte sus contraseñas en un código único (supuestamente). Incluso si alguien obtiene este código, él / ella no puede convertirlo en la contraseña original. Esta inviabilidad de la reversión de código está incorporada en estas funciones de Hashing.

Ahora, un equipo de investigadores de seguridad ha logrado crear un algoritmo que descifra rápidamente la ‘billetera del cerebro’, que se suponía que era una solución para que los propietarios de Bitcoin accedan a su escondite utilizando una contraseña en lugar de un número de clave privada aleatorio.

Dado que los usuarios de Bitcoin se han tomado la molestia de subirse a bordo con esta moneda menos rastreable, podría haber pensado que las contraseñas serían, bueno, buenas. Piensa otra vez.

Estas son algunas de las contraseñas que el equipo logró recuperar de sus hazañas:

1. saluda a mi pequeño amigo

2. ser o no ser

3. Entra en esta sala

4. fiesta como si fuera 1999

5. yohohoandabottleofrum

6. dudewheresmycar

7. dajiahao

8. hankou

9. {1summer2leo3phoebe

10. 0racle9i

11. andreas antonopoulos

12. Arnold Schwarzenegger

13. blablablablablablabla

14. por el tiempo más largo

15. capitán spaulding

Claro, estos muchachos estaban haciendo un esfuerzo especial para recuperar contraseñas, de las cuales dicen que lograron descifrar 18,000 pero … El número 11 es en realidad el nombre de una de las personas más famosas de la comunidad de Bitcoin.

Si desea profundizar en los detalles sobre cómo funciona la criptología detrás de Bitcoin, puede encontrar el documento aquí.

Ya hay un poco de consenso de que los humanos no son buenos para crear contraseñas y el equipo concluyó que “nuestra investigación demuestra nuevamente que las billeteras cerebrales no son seguras y nadie debería usarlas”.

La mayoría de las compañías corporativas usan autenticación basada en LDAP, que es la más segura de todas, en mi opinión.

Crear un nuevo usuario en una base de datos de autenticación basada en LDAP

Gran video sobre cifrado: http://www.wimp.com/howencryption/

Como se explicó anteriormente, su nombre de usuario está en hash y el sitio lo autentica verificando la versión en hash con la versión en hash contenida en su base de datos de miembros. Es imposible calcular su nombre de usuario real desde la versión hash.
No recomendaría registrarse en sitios web con sus credenciales de Facebook / Google / LinkedIn / etc. Cree una contraseña nueva y complicada para cada sitio, al azar, algo como esto
-8S0Wb-w + 5J ^ YM_ \ g3Z * w27b & ks-3GYR6L? B4WIow
Por supuesto, nunca lo recordarás, ni nadie más. Para superarlo, lo ingreso en mi Netsso, contraseña de inicio de sesión único y administrador de enlaces y cuando hago clic en el enlace al sitio que quiero visitar, en Netsso, Netsso recuerda la contraseña correcta, el nombre y la dirección del sitio, y me conecta allí, desde cualquier computadora o tableta Android. La única contraseña que tengo que recordar es mi inicio de sesión en Netsso y, por supuesto, es hash, como se explicó anteriormente.

La respuesta simple es que cada vez que alguien intenta iniciar sesión, la función de autenticación codifica (encripta) la contraseña ingresada y la compara con la contraseña almacenada. De esa manera, no necesita saber cuál es exactamente la contraseña.

Para una explicación más técnica, me gusta mucho el artículo “Almacenamiento seguro de contraseñas” de Patrick Mylund Nielsen: http://throwingfire.com/storing-