J'ai cherché partout et je n'ai trouvé aucune information sur la façon dont Android parvient à stocker les mots de passe sur l'appareil. En particulier les mots de passe Gmail. Je cherche à savoir comment Android crypte et stocke les mots de passe ? Quelle clé utilise-t-il et où cette clé est-elle stockée, et quel algorithme de cryptage utilise-t-il.
Réponses
Trop de publicités?L'application officielle de Gmail n'a pas stocker le mot de passe dans votre appareil. Votre mot de passe est 100% sûr si vous utilisez cette application.
Voici comment cela fonctionne : Le mot de passe n'est utilisé par les serveurs d'authentification de Google que pour la première fois. Après la première authentification réussie, un Auth Token
est téléchargé sur l'appareil et est stocké dans accounts.db
en texte clair. Pour toutes les connexions ultérieures, ce Auth Token
est utilisé, PAS votre mot de passe original.
Donc, si votre appareil est volé, tout ce que quelqu'un peut obtenir est Auth Token
qui devient invalide lorsque vous changez votre mot de passe. Ainsi, vous serez aux commandes.
Pour une sécurité optimale, je vous recommande d'activer l'option 2-Factor Authentication
& créer Device Specific Password
pour votre appareil. Après avoir perdu un appareil, il vous suffit de le désactiver. Vous n'avez même pas besoin de changer le mot de passe principal.
Note : Tout cela n'est pas vrai si vous utilisez des applications de messagerie tierces pour Gmail, à savoir Stock Email app, K-9 Mail, etc. Le protocole IMAP ou POP nécessite un mot de passe original pour authentifier les utilisateurs à chaque fois. Le protocole IMAP ou POP a besoin du mot de passe original pour authentifier les utilisateurs à chaque fois. Le mot de passe brut doit donc être disponible pour l'application de messagerie avant d'être envoyé au serveur. Ainsi, la plupart des applications de messagerie stockent les mots de passe en texte clair (le hachage/cryptage est inutile car la clé de hachage/cryptage doit être stockée localement). Dans ce cas, je vous recommande d'activer l'option 2-Factor Authentication
& créer Device Specific Password
pour votre appareil. Après avoir perdu un appareil, il vous suffit de le désactiver.
Mise à jour :
Techniquement, il est possible de stocker localement les mots de passe sous forme cryptée/hachée sans conserver localement la clé de cryptage/clé de hachage en clair. Merci à @J.F.Sebastian de l'avoir signalé. Malheureusement, une telle implémentation pour Android n'est pas encore disponible. À partir d'ICS, Android fournit API KeyChain qui permet à une application de stocker localement un mot de passe sous une forme sécurisée. Les applications utilisant l'API KeyChain sont rares, mais l'application de messagerie stock l'utilise (Merci à @wawa pour cette info). Ainsi, votre mot de passe sera en sécurité avec l'application de messagerie stock tant que votre écran est verrouillé. Rappelez-vous, KeyChain n'est pas sûr si l'appareil est enraciné et il n'est pas disponible sur les appareils pré-ICS.
Les mots de passe Android utilisés avec l'application de messagerie intégrée sont stockés en texte clair dans une base de données SQLite. Ceci est en contraste avec l'application Gmail qui utilise des jetons d'authentification, comme décrit dans le document La réponse de Sachin Sekhar .
Pour Jelly Bean, l'emplacement de la base de données est :
/data/system/users/0/accounts.db
L'emplacement ci-dessus varie selon la version d'Android
Cet emplacement sur un appareil non enraciné est sécurisé et protégé par le système d'exploitation.
Sur les appareils enracinés, les utilisateurs ont déjà techniquement craqué leur propre sécurité, et même s'il n'était pas en texte clair, il serait toujours trivial de le décrypter car la clé doit exister quelque part sur l'appareil pour le faire.
Un membre de l'équipe de développement d'Android a publié une explication qui s'applique encore aujourd'hui :
Maintenant, en ce qui concerne cette préoccupation particulière. La première chose à clarifier est que l'application Email prend en charge quatre protocoles - POP3, IMAP, SMTP et Exchange ActiveSync - et à quelques exceptions près, très limitées, tous ces protocoles sont des protocoles anciens qui exigent que le client présente le mot de passe au serveur à chaque connexion. Ces protocoles nous obligent à conserver le mot de passe aussi longtemps que vous souhaitez utiliser le compte sur l'appareil. Les protocoles plus récents ne le font pas - c'est pourquoi certains articles ont établi une comparaison avec Gmail, par exemple. Les protocoles plus récents permettent au client d'utiliser le mot de passe une fois pour générer un jeton, de sauvegarder le jeton et de jeter le mot de passe.
Je vous invite à consulter l'article dont le lien figure dans le document commentaire #38 qui est bien écrit et très instructif. Il fournit de très bons renseignements sur la différence entre "masquer" les mots de passe et les rendre vraiment "sûrs". Le simple fait de masquer votre mot de passe (par exemple en base64) ou de le crypter avec une clé stockée ailleurs aura pour effet de no rendre votre mot de passe ou vos données plus sûrs. Un attaquant sera toujours en mesure de les récupérer.
(En particulier, certaines affirmations ont été faites sur le fait que certains des autres clients de messagerie ne stockent pas le mot de passe en clair. Même si cela est vrai, cela n'indique pas que le mot de passe est plus sûr. Un test simple : si vous pouvez démarrer l'appareil et qu'il commence à recevoir des e-mails sur vos comptes configurés, alors les mots de passe ne sont pas vraiment sécurisés. Ils sont soit obfusqués, soit cryptés avec une autre clé stockée ailleurs).
En outre, comme ce problème semble déranger de nombreux utilisateurs d'Android, vous pouvez également suivre cette discussion à l'adresse suivante Slashdot - Les données des mots de passe Android stockées en texte clair .