web-dev-qa-db-fra.com

comment stocker en toute sécurité des clés de cryptage dans Android?

Je veux savoir comment stocker en toute sécurité clé de cryptage dans Android? Quel est le meilleur scénario pour protéger le cryptage et les clés secrètes? 

26
user6693721

À partir de vos commentaires, vous devez chiffrer les données à l'aide d'une clé locale pour les versions actuelles d'Android et les anciennes.

Android Keystore est conçu pour générer et protéger vos clés. Mais il n’est pas disponible pour un niveau d’API inférieur à 18 et il a certaines limitations jusqu’au niveau 23. 

Vous aurez besoin d'une clé de chiffrement symétrique aléatoire, par exemple AES. La clé AES est utilisée pour chiffrer et déchiffrer vos données. Je vais résumer vos options pour la générer et la stocker en toute sécurité en fonction du niveau de l'API Android. 

  • Niveau API <18: Le magasin de clés Android n'est pas présent. Demander un mot de passe à l'utilisateur, dériver une clé de cryptage à partir du mot de passe. L'inconvénient est que vous devez demander le mot de passe au démarrage de l'application. La clé de cryptage n'est pas stockée dans l'appareil. Il est calculé à chaque démarrage de l'application avec le mot de passe 

  • Niveau de l'API> = 18 <23: Magasin de clés Android disponible sans prise en charge AES. Générez une clé AES aléatoire à l'aide du fournisseur de chiffrement par défaut (n'utilisant pas AndroidKeystore). Générez une paire de clés RSA dans le magasin de clés Android et chiffrez la clé AES à l'aide de la clé publique RSA. Stockez la clé AES chiffrée dans les références partagées Android. Lorsque l'application démarre, déchiffrez la clé AES à l'aide de la clé privée RSA

  • Niveau de l'API> = 23: Magasin de clés Android disponible avec prise en charge AES. Générez une clé AES aléatoire en utilisant Android Keystore. Vous pouvez l'utiliser directement.

Pour chiffrer, vous pouvez utiliser l'algorithme AES/CBC/PKCS7Padding. Il faut également un vecteur d’initialisation aléatoire (IV) pour chiffrer vos données, mais il peut être public.

Alternatives: 

  • Niveau de l'API> 14: Chaîne de clés Android: KeyChain est un stockage des informations d'identification à l'échelle du système. Vous pouvez installer des certificats avec des clés privées pouvant être utilisées par des applications. Utilisez une clé préinstallée pour chiffrer/déchiffrer votre clé AES, comme indiqué dans le deuxième cas ci-dessus.

  • Jeton externe: les clés protégées ne sont pas stockées dans l'appareil. Vous pouvez utiliser un jeton externe contenant une paire de clés privée/publique vous permettant de chiffrer la clé AES. Le jeton peut être accédé via Bluetooth ou NFC

22
pedrofb

Vous ne pouvez pas placer la clé de cryptage dans votre fichier apk. Vous souhaiterez peut-être le conserver sur un serveur distant et le déchiffrer à l'aide du serveur. Vous pouvez également rendre la tâche difficile aux autres en encodant la clé et en la conservant dans des endroits non évidents. Mais il n'y a pas de solution anti-balles pour cela.

3
Nabin Bhandari

Il n’existe aucun moyen de sauvegarder en toute sécurité vos clés d’API privées dans le code. Mais vous pouvez utiliser NDK pour sauvegarder en toute sécurité des clés privées. Il n’est pas anodin d’obtenir la clé de NDK. Exemple de clé Secue avec NDK

1
Manish

Vous pouvez utiliser le système Android Keystore pour stocker et récupérer des informations sensibles . Lisez cet article en 5 minutes pour comprendre son fonctionnement . Utilisation du système Android Keystore pour stocker et récupérer des informations sensibles

0
Neeraj