Me gusta la sugerencia de symcbean de crear un valor asignado aleatorio al iniciar sesión que esté relacionado con la cuenta por separado del nombre de usuario y la contraseña. Sin embargo, para responder específicamente a su pregunta, también hay formas de cifrar los datos sin una clave asignada estática. Me gustaría generar una clave que utilice bits de información exclusivos del teléfono y recuperables a través de llamadas a la API del sistema operativo.
Editar : a instancias de @DW, elaboraré: El UDID, el número de serie y otra información de identificación pueden ser de calidad criptográfica y de secreto suficientes sin acceso al teléfono para evitar el descifrado de los datos almacenados. Sin embargo, el acceso a los datos almacenados implica un acceso probable al teléfono también. Por lo tanto, cualquier nivel de seguridad a través del cifrado local del dispositivo es una simple oscuridad.
Otros encuestados han sugerido almacenar un valor aleatorio como se hace en las sesiones HTTP. Parece que el solicitante original no está usando HTTP y no cree que este método se aplique a su software. Sin embargo, la implementación lógica de almacenar y transmitir un valor aleatorio es aplicable a cualquier protocolo de transporte. Lo sugiero fuertemente.
Alternativamente, las credenciales se pueden almacenar en el teléfono mediante el cifrado de clave pública. La aplicación puede cifrar el nombre de usuario y la contraseña al ingresar con la clave pública del servidor. Por lo tanto, los datos de inicio de sesión serían ilegibles incluso si el dispositivo estuviera comprometido.
Cuando el objetivo es evitar la recuperación de las credenciales de inicio de sesión, creo que lo mejor es utilizar un identificador temporal aleatorio. Esto excluye cualquier problema de mantener los datos del servidor (una clave privada) en secreto y disponibles. Si esa clave fuera revelada, la protección es marginal a inútil. Si se pierde, la aplicación debe volver a implementarse con una nueva clave. Si se perdieran los datos de inicio de sesión temporales, todos se verían obligados a iniciar sesión, pero no se produciría una interrupción apreciable en el servicio.
También, use el cifrado de la clave pública del transporte (SSL o clave PGP simple incorporada en la aplicación) tanto para el inicio de sesión inicial como para cualquier otro posible dato de autenticación, ya sea el nombre de usuario y la contraseña o un valor aleatorio.