¿Cómo almacenar de manera segura las credenciales (contraseña) en la aplicación de Android?

Quiero guardar la contraseña utilizada para iniciar sesión en una aplicación financiera que estoy desarrollando en un lugar seguro. Después de hacer surf en red, encontré las siguientes opciones, pero cada una de ellas tiene cierto inconveniente.

1) KeyChain.
Solo disponible en el sistema operativo versión 4.

2) Preferencias compartidas.
Almacena datos en texto sin formato, aunque si cifro los datos, la clave de cifrado puede verse comprometida al descomstackr el código de la aplicación.

3) Acceda al daemon del almacén de claves y almacene las credenciales en él.
( http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html ) Requiere otra contraseña para recordar.

Sugiera una mejor manera de proteger la información de credenciales en la aplicación de Android, como IPhone KeyChain.

No es el equivalente de KeyChain de iPhone en Android actualmente. Si desea mantener algo en secreto, no lo almacene en el dispositivo. O al menos, no almacene la clave / contraseña con la que está encriptada en el dispositivo. Simple como eso.

Adicionalmente:

1) Incluso en ICS, no puede usar KeyChain directamente para almacenar secretos de aplicaciones (vea la publicación de blog en 3)

2) Esto es solo un problema para teléfonos rooteados, o si alguien tiene acceso físico al dispositivo.

3) Es mucho mejor recordar una sola contraseña, proteger todas sus credenciales, que tratar de recordar varias contraseñas. Además, en ICS, no hay una contraseña por separado, el almacenamiento de credenciales está protegido por la contraseña de deslocking del dispositivo.

Hashing es la solución, no almacene las credenciales como texto sin formato en las preferencias compartidas o en cualquier medio.

Simplemente sal y hash la contraseña, entonces puedes proceder a almacenarla en sharedPreferences o en algunos db incrustados.

Así es como funciona:

En línea

  1. La contraseña simple (sin hit) se envía al servidor para autenticación y autorización luego de iniciar sesión correctamente.

  2. La sal puede generarse y devolverse de servidor a cliente o puede generarse en el cliente

  3. Luego guárdalo como sal y hash la contraseña y guárdala.

Desconectado

  1. Vamos a hash la contraseña ingresada por el usuario usando la sal que almacenamos

  2. Vamos a comparar con el hash que almacenamos al iniciar sesión con éxito

  3. Si ambos son iguales, dejaremos entrar al usuario; de lo contrario, no dejaremos entrar al usuario.

Ventajas:

  1. Entonces, ahora no tiene que preocuparse por la compatibilidad de la versión.

  2. Incluso si el dispositivo está rooteado, es tan difícil forzar brutalmente el hash.

  3. Incluso si alguien descomstack / rompe la aplicación, es muy difícil aplicar ingeniería inversa