database - salting - salt password generator
¿Por qué alguna vez querría almacenar una contraseña de texto plano o encriptada(no hash) en una base de datos? (9)
He escuchado bastantes razones para almacenar contraseñas hash en una base de datos. Sin embargo, casi siempre hay opciones en las API de autenticación para almacenar contraseñas como texto sin formato o encriptadas.
¿Alguna vez hay una razón por la que desee almacenar una contraseña como texto sin formato o encriptada en una base de datos?
Nota: Para ser claro, sé que el almacenamiento de contraseñas sin hash casi siempre es malo . (Por lo que sé de todos modos) Mi pregunta es por qué la mayoría de las API de autenticación incluyen opciones para almacenar contraseñas como texto cifrado o sin formato.
1) La mayoría de los protocolos de autenticación Challenge-Response requieren que el servidor conozca la contraseña de texto sin formato. Hay excepciones, pero son impopulares y difíciles de implementar.
2) Las contraseñas de almacenamiento permiten la recuperación de contraseña.
Incluso si está seguro de la seguridad de su base de datos, las contraseñas de sus usuarios aún son accesibles para todos los administradores.
Es de vital importancia comprender que el cifrado de contraseñas no protegerá su sitio web, solo puede proteger sus contraseñas.
Si su sitio web no cuenta con protección suficiente, el cifrado de contraseñas no lo salvaguardará de las grietas. Si su sistema se ha descifrado, un hacker puede infligirle un daño irreparable y también obtener acceso a información confidencial, incluida la base de datos de contraseñas. Pero si almacena esta información encriptada, los piratas informáticos prácticamente no pueden hacer uso de ella. Descifrar una contraseña encriptada requiere una gran cantidad de tiempo y poder de procesamiento, incluso en las computadoras de hoy en día.
La única ''buena'' razón que puedo pensar es que el cliente le paga por desarrollar la aplicación o su gerente insiste en ello. No puedo pensar en ninguna razón técnica para ello.
La única razón real que se me ocurre es cuando la base de datos pertenece a un sistema que se dirige a la aplicación real. Como cuando tiene programas que inician sesión en algo para usted (clientes de correo electrónico, clientes de mensajería instantánea, etc.). Todos los que tienen que almacenar la contraseña de una manera recuperable para obtener acceso, porque la aplicación de destino no decidirá entre el usuario real y el usuario a través de una herramienta . Exactamente en este punto, OAuth y similares se hacen para guardar la contraseña del usuario.
Me he encontrado con el siguiente argumento varias veces:
El almacenamiento de contraseñas de texto claro le permite detectar cuándo un usuario cambia su contraseña a algo cercano a una contraseña anterior, es decir, al incrementar un número, agregar un ''1'' o mediante algún otro método de actualización de baja condicional con entropía.
Nadie debería tomar ese argumento como una buena razón para almacenar contraseñas de texto simple; está equivocado por varias razones.
Por supuesto, puede almacenar todas las contraseñas como texto sin formato en su almacenamiento (por ejemplo, base de datos). Pero no es recomendado Si alguien logra piratear tu servidor y obtiene tus datos de la base de datos, también tiene todas las contraseñas. Incluso el solo almacenamiento de una contraseña hash con métodos comunes como md5 no es muy fácil de guardar en este caso. Porque hay tablas de arcoiris (busque google para esto), para buscar contraseñas.
Así que recomiendo almacenar contraseñas saladas. No sé por qué almacenarías tus contraseñas como texto sin formato. Yo no lo haría :)
Una de las razones podría ser la reutilización automática de la contraseña para otro servicio externo.
Si configuro mi cuenta de gmail para recuperar mi correo electrónico de otro proveedor de correo electrónico que no sea de google, tengo que darle a google mi contraseña y google tiene que tener esta contraseña en claro para recibir mis correos en mi cuenta de gmail.
Obviamente, no es la misma contraseña que para el servicio principal, pero de todos modos es "de tipo contraseña".
Una razón por la que puedo pensar es permitir una opción de recuperación de contraseña. No hay forma de recuperar una contraseña que el sistema no conoce.
Por supuesto, la alternativa es que el sistema simplemente restablezca la contraseña a algo nuevo y le envíe la nueva contraseña.