web-dev-qa-db-fra.com

chiffrer les données dans SharedPreferences

Je développe actuellement un cadre pour l'accès oAuth 1 et 2 aux services Web. Ma question est la suivante: comment stocker des données sensibles comme une clé d'accès oAuth de manière sécurisée? Le problème avec cette clé est que certaines plates-formes comme Twitter utilisent une clé permanente et si quelqu'un pouvait accéder à cette clé, il pouvait faire ce qu'il voulait avec le compte Twitter des utilisateurs. 

est-il possible de chiffrer automatiquement les données avant qu'elles ne soient stockées dans les préférences partagées? Ou existe-t-il un meilleur moyen/endroit pour stocker des données très importantes?

UPDATE - ALSO READ: Quel est le moyen le plus approprié de stocker les paramètres utilisateur dans une application Android

31
Simon Heinen

1). Comment chiffrer?

Sur Android, le cryptage est effectué via JCA (Java Cryptography Architecture). Il s’agit principalement du paquetage javax.crypto.*.

Guide de référence JCA

Voici un exemple d'utilisation de l'API JCA (algorithme AES en particulier).

2). Où stocker?

L'API de chiffrement manipule des tableaux d'octets (et non des chaînes). Cela signifie que vous pouvez utiliser SharedPreferences, mais vous devrez appliquer le codage Base 64 sur le tableau d'octets cryptés avant de le placer dans SharedPreferences (sinon l'analyseur XML ne lira pas le fichier de préférences partagé). Ensuite, pour lire, vous devrez utiliser le décodage en base 64. Notez que par défaut, la plupart des versions du système d'exploitation Android ne disposent pas d'une API Base-64 intégrée (voir la section MISE À JOUR). Donc, pour supprimer cette surcharge Base-64, je vous recommande simplement de stocker vos octets dans un fichier private .

UPDATE: Depuis l'API niveau 8, l'API a Android.util.Base64.

32
Vit Khudenko

Vous pouvez également consulter cette classe que j’ai créée pour faire exactement cela: https://github.com/sveinungkb/encrypted-userprefs

Il utilise AES au lieu du DES obsolète et faible utilisé dans l'autre suggestion.

50

Je recommanderais d'utiliser Facebook Dissimuler pour le cryptage sur Android presque à chaque fois - c'est une bibliothèque rapide pour Android qui prend des décisions vraiment saines et vous laisse avec quelques interfaces simples pour effectuer le travail.

Prime! J'ai récemment reconstitué le puzzle de l'utilisation de Xamarin - voir mon article sur sécurisation des données de votre application C # à l'aide de masquer pour plus d'informations.

3
instantiator

Vous devriez jeter un oeil à Slink . Je me suis rendu compte que la plupart des outils de chiffrement SharedPreferences utilisent le chiffrement pour chaque action exécutée, ce qui signifie que chaque paire clé-valeur est enregistrée uniquement après que la clé et la valeur ont été chiffrées séparément. Cela crée une surcharge de performances.

J'ai donc cherché une bibliothèque qui me donnerait un processus de cryptage plus efficace et j'ai trouvé Slink. Slink utilise la bibliothèque Dissimulation de Facbook pour enregistrer l'ensemble de la carte d'objets, ce qui en fait la solution de cryptage SharedPreferences la plus efficace et la plus rapide. Il utilise également les interfaces SharedPreferences courantes d'Android, ce qui rend l'utilisation extrêmement facile et presque transparente . Avertissement: Je fais partie de l'équipe de développement qui développe cette bibliothèque.

3
Σrez Lankri

Voir dupliquer: Obfuscate/Encrypt Fichier SharedPreferences possible?

Bonjour, j'ai créé une implémentation SharedPreferences à l'aide d'AES cryptage. Le projet est un module maven. Si vous en avez besoin, prenez un Regardez. https://github.com/kovmarci86/Android-secure-preferences

2
Marcell

nouveau cryptage introduit par facebook - dissimulation du cryptage .. facile à utiliser

https://github.com/afiqiqmal/ConcealSharedPreference-Android

1
ZeroOne

Essayez d’utiliser notre composant https://github.com/BottleRocketStudios/Android-Vault Vault. Il utilisera le magasin de clés Android (sur les périphériques pris en charge) ou une technique d’obscurcissement pour chiffrer les valeurs d’un fichier SharedPreference et implémentera l’interface SharedPreference. 

1
caller9

Il existe une bibliothèque Android qui utilise Facebook dissimulation pour chiffrer des données.

https://github.com/rtoshiro/SecureSharedPreferences

Maven Central:

compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'

0
Hamiseixas

Cet article sur codeproject contient un wrapper Nice pour les préférences partagées. Cependant, le nom de classe SecurePreferences est trompeur, quelque chose comme ObfuscatedPreferences serait plus approprié. 

0
scottyab

Vous pouvez chiffrer les données dans les préférences et conserver la clé de chiffrement dans le système Android Keystore . De cette façon, votre clé de cryptage serait également sécurisée.

Vous pouvez faire cela dans une bibliothèque https://github.com/ophio/secure-preferences

0
Gaurav Vashisth