web-dev-qa-db-fra.com

Android: est-ce une bonne idée de stocker le jeton d'authentification dans les préférences partagées?

J'ai une application qui communique avec un serveur. Lorsque l'utilisateur se connecte à l'application, un jeton d'authentification est créé sur le serveur et stocké dans le SharedPreferences de l'application et chaque fois que l'application demande des données à un service Web, le jeton d'authentification est validé.

Ma question est, est-il sécurisé de stocker le jeton d'authentification dans le SharedPreferences? Je demande parce qu'un utilisateur avec des privilèges root peut accéder aux préférences, extraire le jeton et l'utiliser.

Y a-t-il de toute façon plus de sécurité à cet égard?

34
Eric Bergman

En bref, oui, c'est une chose parfaitement raisonnable à faire.

Le mieux que vous puissiez faire en plus est l'obscurcissement uniquement. Si vous conservez le jeton en mémoire, un utilisateur root peut y jeter un œil. Si vous le cryptez, vous devez également stocker la clé de cryptage sur l'appareil ou vous ne pourrez pas utiliser le jeton… et la clé peut être volée aussi facilement que le jeton.

Si quelqu'un a un compte root sur l'appareil, tous les paris sont désactivés. N'optimisez pas pour ce cas. Si votre application est hautement sécurisée, ne l'autorisez pas à s'exécuter sur des appareils enracinés ou implémentez une fonctionnalité de nettoyage à distance où l'utilisateur peut signaler son appareil volé et vous pouvez invalider le jeton sur le serveur.

Android 4.3 a introduit le Android Keystore . Cela fournit prétendument un magasin sécurisé pour les clés cryptographiques. Cela pourrait être utilisé pour stocker une clé utilisée pour déchiffrer un jeton chiffré stocké avec des méthodes traditionnelles. Cependant, le lien référencé ne fait aucune mention de l'impact d'un périphérique enraciné sur la sécurité de celui-ci.

MISE À JOUR 2018: La plupart des appareils modernes Android ont magasins de clés soutenus par le matériel , via un compte de confiance environnement d'exécution (TEE) fourni par le SoC. Cela rend impossible (voir ci-dessous) pour le pirate d'obtenir la clé principale du magasin de clés qui serait autrement nécessaire pour décrypter les clés que vous avez stockées dans le Android = Keystore.

Eh bien, "impossible" est un mot fort. Il vaut mieux dire "infaisable". Cela signifie que vous auriez besoin de quelque chose comme un microscope électronique pour scanner les bits fusionnés dans le SoC fournissant le TEE. Si vous êtes le type de personne dont les données justifient ce genre d'attention, vous avez probablement de plus gros problèmes.

39
Jeffrey Blattman

S'il est à craindre que le jeton puisse être lu à partir de SharedPreferences, une bonne règle générale consiste à fournir un certain niveau d'obscurcissement aux données stockées.

Cette réponse décrit une classe simple pour brouiller les données SharedPreferences: Quelle est la façon la plus appropriée de stocker les paramètres utilisateur dans Android Android

0
jdev