Le cryptage des données dans Android

Je voudrais crypter les données dans mon application Android. J'ai peu d'expérience dans l'état actuel de cryptage est, que ce soit pour Android en particulier ou en général. Je me souviens d'années que les etats-unis ont des lois qui empêchait les entreprises de logiciels d'exportation solide de la technologie de cryptage. Je ne sais pas si tout cela est applicable aujourd'hui en considérant que Android est open source code.

Ce que je veux accomplir est de permettre à l'utilisateur de crypter des données en utilisant seulement un mot de passe. Je préfère éviter d'utiliser des clés privée et publique parce que c'est probablement ce qui nécessite d'avoir à entrer dans ces deux clés par l'utilisateur. Dans mon application, l'utilisateur doit être en mesure de chiffrer/déchiffrer les données à l'aide d'un mot de passe. Leurs données seront envoyées à partir d'un appareil mobile à un autre et il ne devrait pas être possible de décrypter leurs données sur la fin de réception sans connaître le mot de passe. Je ne l'utilisation de SSL lors de l'envoi de données, mais qui n'est pas assez bon, parce que les données restent cryptées sur le serveur avant qu'il soit transmis à l'appareil de réception. Si un pirate a accès à mon serveur, ils pourraient lire les données. Pour cette raison, je tiens à crypter sur l'appareil d'envoi et de décrypter sur l'appareil de réception.

Un certain nombre de problèmes que je dois résoudre:

  1. Est-il une API de chiffrement qui me permettra de crypter seulement à l'aide d'un mot de passe, mais si pas, alors, je vais envisager d'utiliser des clés privée et publique.
  2. Quelles sont les algorithmes de chiffrement que je peux utiliser, et sont-ils disponibles dans le monde ou les états-unis de mettre certaines restrictions sur leur utilisation?
  3. Serais-je mieux de créer mon propre algorithme de chiffrement et de le modifier de temps à autre pour empêcher les pirates de facilement se briser? Ou voulez-vous de les décourager? Si oui, pourquoi? Si je change l'algorithme régulièrement, j'ai besoin d'inclure un algorithme ID dans les données de commande pour le déchiffrement du code de reconnaître qu'il peut déchiffrer que la version actuelle de l'algorithme.

Je ne suis pas à la recherche de toute "extrêmement difficile à briser" l'algorithme, mais quelque chose qui devrait être suffisant. Le type de données stockées sont des images, des vidéos, de l'audio et de données GPS. Ce serait bien si la solution travaillé sur Android 2.2 et au-dessus. Je ne vois pas pourquoi n'importe quel algorithme ne devrait pas travailler sur ces versions étant donné que les algorithmes doivent être indépendants de l'OS. Néanmoins, peut-être Android utilise un algorithme intégré uniquement pour certaines versions?

Edit:

Code j'utilise maintenant, pour certains, de base interne de chiffrement dans mon application ressemble à ça, mais j'ai des doutes c'est suffisant:

import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);

À l'origine, la ligne ci-dessus est:

SecureRandom.getInstance("SHA1PRNG")

mais Google a changé cela en 4.0 et cela a causé mon code afin de le briser. Rien de chiffré avec mon code précédent pourrait ne plus être déchiffré qu'avec la valeur par défaut de l'API pour la version 4.0. Personnellement, j'ai trouvé que l'un des principaux problème avec Google, car ils ont cassé la compatibilité. Ce qui est de les empêcher de répéter cela à nouveau dans l'avenir? Mon chiffrement/déchiffrement ne peut pas être dépendant de Google est le choix de la rupture de compatibilité.

Je suis aussi obligé d'utiliser un cryptage de 128 bits car apparemment soutien pour 192 et 256 bits n'est pas forcément disponible sur tous les appareils, persumably en raison des lois du gouvernement.

Je ne comprends pas cette partie: "il ne devrait pas être possible de décrypter leurs données sur la fin de réception sans connaître le mot de passe". Peut pas un attaquant il suffit de faire comme la fin de réception et de récupérer le message?
Bien sûr, un hacker pourrait. Le hacker première a pour pirater les données qui vont sur Internet, sur le sens de hack à la fois le protocole SSL puis les données chiffrées ainsi, ou qu'ils ont à pirater les données sur mon serveur. S'ils ne peuvent pas obtenir au-delà de l'Internet, de données ou d'accéder à mon serveur, alors qu'ils ont d'avoir accès à l'appareil mobile de réception des données. C'est beaucoup plus difficile d'accès. Aucun chiffrement n'est sûr à 100%, mais en laissant les données non cryptées sur mon serveur et en s'appuyant uniquement sur SSL serait une grave erreur. Essentiellement, je veux le double cryptage, il est très difficile de déchiffrer les données.
Désolé, j'ai oublié le "pas" dans cette phrase, de sens maintenant.

OriginalL'auteur AndroidDev | 2013-02-04