(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.
- ¿Es posible descargar y usar complementos y temas si quiero trabajar en sitios web de WordPress usando un Chromebook?
- ¿Cómo afecta la longitud del formulario de registro / registro a la conversión?
- ¿Qué se entiende por marco REST?
- ¿Dónde puedo encontrar una buena compañía de desarrollo de AngularJS en India?
- ¿Cuál es el orden correcto de estudiar JSON, jQuery y AJAX?
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.