Hola @1raziel1,
podés hacer esto de la siguiente manera:
- en el servidor, cifrás la contraseña del usuario. Sería ideal con un cifrado de verdad y no con un mero MD5.
- cuando un usuario se loguea, cifrás la contraseña y comparás con la guardada que también está cifrada: si son iguales, la contraseña es válida (de esta forma en el servidor no están las contraseñas en texto claro)
- el cliente móvil, cuando se loguea, pasar por este mecanismo, y en caso de un login válido, el servidor devuelve una transformación de algún tipo de la contraseña cifrada, para que el cliente la pueda guardar. Es decir, no devuelve lo mismo que está guardado en el servidor.
- en el caso de "recordar contraseña", el cliente envía el nombre de usuario y la transformación de la contraseña guardada, junto con algún parámetro que indique que es este el macanismo de acceso.
- en el servidor, al detectar el mecanismo de acceso de la contraseña, este revierte el proceso y obtiene la contraseña cifrada, luego compara la contraseña cifrada con la guardada para ver si coincide y el usuario es válido.
De esta forma tenés varias ventajas:
- en el cliente no está guardada la contraseña en claro.
- en el cliente no está guardada la contraseña cifrada que usa el servidor.
- en el cliente no está el algoritmo de transformación.
- en caso de romperse el algoritmo de transformación (que tiene que ser reversible y por tanto es la parte más débil) lo único que se obtiene es la contraseña cifrada.
Además de esto, tener algún mecanismo web para cambiar la contraseña o revocarla por parte del usuario, por si se extravía el móvil o se sospechan intrusiones.
El mecanismo que te describo es independiente de la plataforma: es un algoritmo típico para cuando no podés confiar en el cliente, ya sea un móvil, una tarjeta inteligente, etc.
Saludos cordiales!