Recuperar contraseña en el cliente (no en la base de datos) [cerrado]

1

Estoy intentando implementar la capacidad de mi programa (C ++) para recordar una combinación de usuario / contraseña, por lo que el usuario no necesita escribirlo nuevamente.

¿Hay una forma segura para que mi programa almacene esto? Preferiblemente plataforma cruzada también.

    
pregunta Catprog 21.11.2015 - 10:00
fuente

2 respuestas

0

Replantea el problema. El objetivo de la experiencia del usuario (permitir que el usuario se autentique sin credenciales) es el objetivo real. Este tipo de objetivo de seguridad no es adecuado para los puntos finales. Hay soluciones alternativas más seguras que guardar el nombre de usuario y la contraseña, una de las cuales sugeriré ahora. Tenga en cuenta que esto solo funciona si usted controla el servidor o puede implementar un intermediario como un proxy.

Crea un token de tiempo limitado en el servidor. Asociarlo con el usuario. Cuando el usuario se conecta, el programa suministra el token si está presente y se autentica. De lo contrario, se le solicitarán al usuario las credenciales.

Con un intermediario, almacenaría las credenciales en el intermediario con clave del token en una forma encriptada y utilizaría un servicio de encriptación separado (algo como Amazon KMS) para descifrarlas.

Nuevamente, si solo tiene el control del lado del cliente, entonces la mejor opción que tiene es similar a la anterior utilizando un servicio de encriptación del cliente, pero luego está sujeto a un ataque de punto final en @SteffenUlrich que ya se identificó en su respuesta. Existen API que envuelven de forma transparente soluciones de administración de claves específicas de la plataforma como gnome-keyring, KeyChain de OS X y Windows Credential Vault bajo una API común. Por ejemplo, este módulo de anillo de claves de Python hace eso:

enlace

En ese punto, las credenciales son tan seguras como cualquier otra cosa que administre el sistema operativo.

    
respondido por el Alain O'Dea 21.11.2015 - 17:28
fuente
1
  

¿Hay una forma segura para que mi programa almacene esto? Preferiblemente plataforma cruzada también.

¿Seguro contra qué tipo de ataque?

  • Contra un atacante remoto sin acceso a la máquina: probablemente, simplemente guardarlo como archivo lo hará, aunque en la práctica probablemente lo hará menos obvio (vea el siguiente punto).
  • Contra un atacante con acceso a la máquina: no hay una forma 100% segura, porque si su programa puede acceder al secreto, el atacante (con al menos los mismos permisos) puede hacer lo mismo. Solo puede hacer que sea más difícil guardando el archivo en lugares no obvios, ocultándolo dentro de contenido inocente (como con la esteganografía), ofuscando la información, cifrándolo (aunque el secreto debe ser accesible por la aplicación y, por lo tanto, también será accesible por la aplicación). un determinado atacante).
respondido por el Steffen Ullrich 21.11.2015 - 10:18
fuente

Lea otras preguntas en las etiquetas