Je voudrais mettre en œuvre une fonctionnalité de type auto-login automatique à temps limitée sur une application mobile (sur Android). Pour démarrer l'application, l'utilisateur doit taper dans un nom d'utilisateur et un mot de passe. Pour plus de commodité,
[~ # ~] éditer [~ # ~]
Je souhaite enregistrer le dernier nom d'utilisateur et/ou mot de passe entré dans un fichier sur le téléphone Pour éviter de la saisir l'utilisateur à chaque fois.
J'ai regardé - ceci , mais il semble être plus orienté navigateur ..
Des questions:
modifier 2
Suis-je sur-compliquer ces choses avec des clés de substitution et/ou une authentification de clé publique avec SSL/TSL? Je veux dire, Firefox enregistre mes mots de passe, et ils sont sûrement cryptés d'une manière ou d'une autre? Je pensais crypter l'utilisateur/passer de la même manière? Est-ce une mauvaise idée?
J'aime la suggestion de Symcbean de créer une valeur mappée aléatoire sur la connexion liée au compte séparément du nom d'utilisateur et du mot de passe. Pour répondre spécifiquement à votre question, il existe également des moyens de crypter les données sans une clé mappée statique. Je regarderais générer une clé utilisant des bits d'informations uniques au téléphone et récupérable via les appels d'API OS.
éditer: à la demande de @DW, je vais élaborer: l'UDID, le numéro de série et d'autres informations d'identification peuvent être suffisamment de qualité cryptographique et de secret sans accès au téléphone pour empêcher le déchiffrement de la mémoire stockée. Les données. Cependant, l'accès aux données stockées implique également un accès probablement au téléphone. Ainsi, tout niveau de sécurité via le cryptage local de l'appareil est une simple obscurité.
D'autres répondants ont suggéré de stocker une valeur aléatoire comme dans les sessions HTTP. Il semble que l'adresseur d'origine n'utilise pas HTTP et ne croit pas que cette méthode s'applique à son logiciel. Toutefois, la mise en œuvre logique de stockage et de transmission d'une valeur aléatoire est applicable à tout protocole de transport. Je le suggère fortement.
Alternativement, les informations d'identification peuvent être stockées sur le téléphone à l'aide du cryptage de clé publique. L'application peut chiffrer le nom d'utilisateur et le mot de passe lors de l'entrée avec la clé publique du serveur. Les données de connexion seraient donc illisibles même si l'appareil était compromis.
Lorsque l'objectif est d'empêcher la récupération des informations de connexion, je pense que l'utilisation d'un identifiant temporel aléatoire est la meilleure. Cela empêche toute question de garder les données du serveur (une clé privée) et disponible. Si cette clé a été divulguée, la protection est marginale à inutile. S'il est perdu, l'application doit être redéployée avec une nouvelle clé. Si les données de connexion temporelle ont été perdues, tout le monde serait obligé de se connecter, mais cela n'entraînerait aucune interruption appréciable du service.
En outre, utilisez le cryptage clé publique du transport (SSL ou une clé PGP simple intégrée à l'application) pour la connexion initiale et toutes les autres données d'authentification possibles, qu'il s'agisse du nom d'utilisateur et de mot de passe ou une valeur aléatoire.
N'utilisez pas le nom d'utilisateur/mot de passe pour le jeton!
S'il est possible de déchiffrer, il y a un risque qu'il sera déchiffré. Et même si la plupart des peolpes savent qu'ils ne devraient pas, ils utilisent les mêmes mots de passe pour plusieurs services - donc même si votre service n'est pas particulièrement utile, vous avez la responsabilité de protéger les passworsd qui vous sont données.
La manière de résoudre le problème est la même chose que la gestion des sessions HTTP - utilisez un identifiant de substitution (qui peut contenir la même valeur que le cookie de session - mais avec une durée de vie plus longue), maintenez une table de recherche de l'identifiant de substitution, l'utilisateur c'était délivré à et à l'heure d'expiration.
La 2e option de D.W.'s est la mieux implémentée avec les corrections suivantes et les détails supplémentaires:
Via ce qui précède, il faudrait une décompilation et une ingénierie inverse du code + accès aux données stockées sur le périphérique (accès physique au périphérique OR _ application malveillante sur le périphérique enracinée) + connaissance de l'appareil (empreinte digitale via un tour OR _ Accès physique au périphérique OR _ Contrôle d'une application sur le périphérique) Pour pouvoir utiliser ce keypair et cette appdeviceid pour s'authentifier.