Stocker des données sensibles sur le périphérique
Cela dépend beaucoup de votre auditoire. Normalement, le système d'exploitation Android interdit aux applications d'accéder à chacun des autres fichiers (c'est à dire les bases de données, les fichiers de préférences, régulièrement les fichiers stockés dans l'application d'annuaire privé) par l'expérience permissions de fichiers sous Linux. Cependant, sur les appareils enracinées une application peut obtenir l'accès root et de tout lire. Quelques choses à penser:
- Si vous savez que vos utilisateurs n'auront pas de racine (par exemple, si vous n'êtes pas la distribution de l'application par le biais de l'Android Market, mais seulement dans votre entreprise, ou quelque chose comme ça), vous pouvez simplement compter sur Androïde de système de fichiers basé sur la sécurité.
- Si un utilisateur obtient un accès à la racine, il sera très attention à ce que l'application qu'il vous donne l'opportunité de
- Si une application ne obtenir un accès root, il peut faire beaucoup de ravages. Les informations contenues dans votre application pourrait être la moins de de l'utilisateur de soucis.
- L'enracinement conduit à zéro de la garantie. Y compris dans les applications. Vous ne pouvez pas être tenu responsable pour avoir divulgué des informations sur un téléphone enracinée.
Pour conclure, si votre information n'est pas super-duper sensibles (par exemple, informations de carte de crédit), je vous suggère de simplement s'en tenir à la sécurité par défaut fourni par Android (c'est à dire de tout enregistrer en texte brut, sachant que d'autres applications ne peuvent pas y accéder).
Sinon, le chiffrement est le chemin à parcourir. Il n'est pas sûr à 100% (un hacker de compiler votre application et de comprendre comment décrypter les données), mais c'est une douleur importante à se fissurer et à arrêter la plupart des pirates. Surtout si vous dissimuler votre code avec quelque chose comme ProGuard.
Le transfert de données sensibles à partir du serveur vers l'appareil
Vous avez quelques options ici. Tout d'abord, toujours utiliser le protocole HTTPS. Après avoir activé le HTTPS, voici deux des mesures de sécurité supplémentaires, je propose:
- L'utilisation d'une clé API système. Inclure cette clé API dans l'ensemble de vos demandes et de vérifier sur le côté serveur avant d'envoyer une réponse en retour. Rappelez-vous que depuis que vous utilisez le protocole HTTPS, un attaquant ne serait pas en mesure de simplement utiliser un sniffer réseau pour trouver votre clé API. Cependant, c'est assez facile à comprendre si quelqu'un la décompilation de votre application, c'est pourquoi vous pouvez dissimuler encore plus loin (en plus de l'aide de ProGuard). Par exemple, vous pouvez garder la clé API cassé en morceaux tout autour de votre code (par exemple en tant que membres statiques dans deux ou trois classes). Ensuite, lorsque vous envoyez une demande, vous venez de concaténer tous ces morceaux. Vous pouvez même appliquer un autre type de transformation (par exemple, le décalage de bits) pour le rendre encore plus difficile à comprendre à partir du code décompilé.
- Vous pouvez générer une clé à chaque fois que vous envoyez une demande. Cette clé sera générée à l'aide d'un peu de logique que vous seul connaissez, de sorte que vous pouvez mettre en œuvre le client et côté serveur en tant que bien. Par exemple, une demande peut inclure les paramètres suivants:
time=1321802432&key=[generated-key]
où generated-key
est généré à partir de l' time
paramètre. Par exemple: md5(time + salt)
. Lorsque le serveur reçoit cette requête, il peut faire deux choses:
- Vérifiez que
key
est en effet égal à md5(time + salt)
(à noter que seul le client et le serveur connaître le sel et il peut être codé de la même façon à la clé API ci-dessus), et
- Vérifiez que
time
n'est pas trop loin en arrière dans le passé (par exemple, si c'est plus que de 1 à 2 minutes dans le passé, la demande en considération non valide).
La deuxième méthode est plus utile si vous êtes faire de la plaine des requêtes HTTP, où tout le monde peut voir les paramètres en cours d'envoi. Aussi, il est beaucoup plus difficile à comprendre à partir de décompiler le code. Surtout si vous étendez la clé de la logique de calcul entre plusieurs classes.
Toutefois, notez que rien n' est impossible à casser votre application. Vous pouvez dissimuler autant que vous voulez, si un pirate est vraiment déterminé à obtenir vos données, il pourra donc par la décompilation de votre application et de passer de nombreuses nuits blanches à passer à travers votre code et de comprendre comment les demandes sont formées. Le seul réel moyen de sécuriser vos données, en demandant à votre utilisateur un mot de passe, en plus de faire tout le travail que j'ai écrit sur ci-dessus. Vous ne pouvez pas obtenir un mot de passe qui n'existe que dans quelqu'un (l'utilisateur) de la tête de décompiler le code :).