Android: est-ce une bonne idée de stocker un Token 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 Token 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 token d'authentification est validé.

ma question Est, est-ce sûr de stocker le token 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?

27
demandé sur mmBs 2013-10-30 01:30:37

2 réponses

En bref, oui, c'est parfaitement raisonnable de le faire.

le mieux que vous pouvez faire en plus de cela est obfuscation seulement. Si vous gardez le token en mémoire, un utilisateur root peut jeter un oeil là-dedans. Si vous le cryptez, vous devez aussi stocker la clé de cryptage sur l'appareil ou vous ne pourrez pas utiliser le token... et la clé peut être volée aussi facilement que le token.

si quelqu'un a root sur le périphérique, tous les paris sont éteints. N'optimisez pas pour cette affaire. Si votre application est super-duper haute sécurité, ne lui permettez pas de fonctionner sur des appareils enracinés, ou mettre en œuvre une fonctionnalité d'effacement à distance où l'utilisateur peut signaler leur appareil volé et vous pouvez invalider le token sur le serveur.

Android 4.3 introduit le Android Keystore . Qui fournit prétendument un magasin sécurisé pour les clés cryptographiques. Cela pourrait être utilisé pour stocker une clé qui est utilisée pour déchiffrer un jeton chiffré stocké avec les méthodes traditionnelles. Cependant, le lien référencé ne donne aucune mention de la façon dont un dispositif enraciné affecte la sécurité de ce.

mise à JOUR 2018: Plus modernes appareils Android ont matériel adossés à des fichiers de clés , via un environnement d'exécution de confiance (TEE) fournis par le SoC. Cela rend impossible (voir ci-dessous) pour le hacker d'obtenir la clé de maître de keystore qui serait autrement nécessaire pour décrypter les clés que vous avez stockées dans le Keystore Android.

eh Bien, "impossible" est un mot fort. C'est mieux dit comme "impossible". Ce qui veut dire qu'il faudrait un microscope électronique pour scanner les bits fusionnés dans le SoC qui fournit le TEE. Si vous êtes le type de personne dont les données méritent ce genre d'attention, vous avez probablement de plus gros problèmes.

32
répondu Jeffrey Blattman 2018-05-15 19:40:18

si l'on craint que le jeton puisse être lu à partir de références partagées, une bonne règle empirique consiste à fournir un certain niveau de chiffrement aux données stockées.

cette réponse décrit une classe simple pour chiffrer les données: Quelle est la façon la plus appropriée de stocker les paramètres de l'utilisateur dans L'application Android

1
répondu jdev 2017-05-23 12:16:51