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.