¿Es posible enviar al usuario una contraseña generada aleatoriamente mientras se almacena de forma segura en la base de datos?

2

NOTA: Soy consciente de que existen muchas preguntas similares sobre el tema del almacenamiento de contraseñas de forma segura, sin embargo, estoy publicando esto porque creo que es lo suficientemente diferente de las preguntas de almacenamiento de contraseñas existentes porque esta pregunta es principalmente sobre cómo un servicio puede enviar de forma segura al usuario una contraseña generada aleatoriamente en texto sin formato y, sin embargo, mantenerla segura en su extremo (es decir, en la base de datos) en lugar de almacenar de forma segura una contraseña proporcionada por el usuario.

Me di cuenta de que el servicio VPN que uso (PIA) está en la lista de delincuentes de texto sin formato , y mi opinión parcial es que no lo hacen. En cualquier caso, me pregunto si es realmente una buena idea que un servicio como PIA genere las contraseñas de los usuarios y las envíe al usuario en texto sin formato mientras las almacena de forma segura en una base de datos utilizando las mejores prácticas descritas en otro lugar (hashing, salazón, múltiples iteraciones, etc).

Si tuviera que implementar algo como esto, mi pensamiento sería hacer un flujo como este:

  1. El usuario se registra (y no proporciona una contraseña)
  2. Genere una contraseña y almacénela temporalmente
  3. Transmitir la contraseña en texto sin formato al usuario a través de cualquier método
  4. Rompe la contraseña y guárdala en la base de datos
  5. Eliminar permanentemente la contraseña de texto sin formato almacenada y / o sobrescribirla un poco.

Mi pregunta es, ¿es posible lograr la funcionalidad descrita anteriormente en negrita de una manera similar a la que se menciona arriba o de otra manera?

Nota: No estoy preguntando acerca de la seguridad de transmitir la contraseña, solo si existe una buena manera de que el servicio lo mantenga seguro mientras aún puede. envíe al usuario su contraseña en forma clara.

    
pregunta DeveloperACE 03.05.2018 - 00:42
fuente

4 respuestas

1

Luego de una conversación en el chat con @forest, llegué a La respuesta / confirmación que estaba buscando. Esencialmente, sí , es posible hacer algo parecido a lo que estaba pidiendo, pero solo sería realmente seguro si el método de transmisión también fuera seguro.

  

Si lo enviaban [la contraseña] a través de un medio tan seguro como el formulario de envío de contraseña, estaría bien. Si se utilizara una contraseña de un solo uso, habría una ventana para atacar si la OTP se enviara por un medio inseguro, pero no sería tan grave.

    
respondido por el DeveloperACE 03.05.2018 - 05:32
fuente
3

La mejor idea aquí, para evitar almacenar la contraseña, es tener una clave K que solo su servidor conozca. Luego, cuando un usuario se registra, crea un enlace como: signup.php? username = xxxx & [email protected]& password = randomrandom & expiry = nnnnnnnnnn & hash = (*)

(*) luego consiste en sha256 (K + ":" + [email protected] + ":" + xxxx + ":" + randomrandom + ":" + nnnnnnnnnn)

Al utilizar este método, no necesita almacenar nada. Cuando el usuario se registra, lo único que sucede es que el enlace anterior se genera y envía, nada se almacena en la base de datos.

Cuando se hace clic en el enlace, la cuenta se crea de verdad. (Por supuesto, debe volver a verificar que no se haya tomado el nombre de usuario y que el correo electrónico no esté registrado, por ejemplo)

Esto garantiza que no sea necesario almacenar nada hasta que la acción haya sido completada por completo por el usuario.

También puede tener ese enlace anterior para crear directamente & inicie sesión con el usuario (sin ninguna contraseña aleatoria inicial) y pídale que seleccione una contraseña en la primera visita.

    
respondido por el sebastian nielsen 03.05.2018 - 10:23
fuente
0

Entonces, si ignoramos la inseguridad del correo electrónico, entonces estás diciendo:

  1. El usuario se registra
  2. El servicio genera una contraseña
  3. Servicio de sales, hashes y contraseñas
  4. La seguridad del servicio envía la contraseña al usuario mediante algún método no especificado

Bueno, sí, es mejor que esté seguro, ya que algunos servicios lo hacen, aunque la mayoría permite que el usuario especifique una contraseña.

En lo que respecta a proteger el correo electrónico de la contraseña, lo que usted desea hacer es tener una parte que comparta un secreto con una segunda parte sin tener una forma fuera de línea de compartir un secreto. La única forma que tengo de transferir datos de forma segura entre dos partes que no se comunican de forma interactiva entre sí, y que no tienen un secreto precompartido, es el cifrado de clave pública. Por lo tanto, si tenía una manera de generar de forma independiente un par de claves pública / privada y especificó su clave pública cuando se suscribió al servicio, el servicio podría cifrar su contraseña usando su clave pública y usted podría descifrar con su clave privada cuando recibió el correo electrónico.

    
respondido por el Swashbuckler 03.05.2018 - 03:00
fuente
0
  

No estoy preguntando acerca de la seguridad de transmitir la contraseña, solo si hay una buena manera para que el servicio la mantenga segura al mismo tiempo que todavía puedo enviar la contraseña al usuario de manera clara.

Bueno, si se siente cómodo con ellos, cualquiera que los piratee, algún empleado deshonesto y probablemente {cualquier país donde operen en los servicios secretos} tenga acceso a su contraseña, sin ninguna razón, solo porque confía en ellos. , entonces eso es perfectamente seguro!

No hay una buena razón porque existen soluciones para el almacenamiento de contraseñas que no necesitan para almacenar su contraseña real. Vea esta pregunta: ¿Cómo hash seguro las contraseñas?

Tal vez haya un caso de uso para poder recuperar una contraseña de texto sin formato, pero desde el principio no puedo pensar en ninguna, especialmente para esta aplicación (un servicio VPN). No veo la necesidad de almacenarlo de manera recuperable.

Si los infractores de texto sin formato es correcto está fuera del alcance aquí, no estoy diciendo nada al respecto. Pero si almacenan su contraseña en texto sin formato, entonces eso es estúpido. No puedo pensar en ninguna justificación.

Entonces, ¿es seguro? Sí, siempre que no sean hackeados, ninguno de sus empleados se agrie y no reciben ninguna carta infame de seguridad nacional (o el equivalente de su país). No estoy seguro de que quisiera apostar en eso.

    
respondido por el Luc 03.05.2018 - 11:38
fuente

Lea otras preguntas en las etiquetas