Résoudre des problèmes de chiffrement cryptographique non sécurisé

Ces informations sont destinées aux développeurs dont la ou les applications contiennent des schémas de chiffrement cryptographiques non sécurisés. En d'autres termes, un texte chiffré est généré avec une clé secrète, un salage ou un vecteur d'initialisation (IV) à calcul statique. Les emplacements liés au chiffrement cryptographique non sécurisé sont disponibles dans la notification de la Console Play concernant votre application. 

Comment corriger les alertes liées aux schémas de chiffrement cryptographiques non sécurisés ? 

Examinez votre application à la recherche de clés, de vecteurs d'initialisation et/ou de salages calculés de manière statique, utilisés dans les opérations de chiffrement cryptographiques, et assurez-vous que ces valeurs sont conçues de manière sécurisée. Par exemple, le code suivant utilise une clé secrète à calcul statique et un vecteur d'initialisation calculable de manière statique :

   // L'alerte dans la Console fait référence à cette méthode
  public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
    Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
    GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
    return cipher.doFinal(plainText);
  }

  // La clé non sécurisée et le vecteur d'initialisation sont ici et doivent être modifiés
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Valeurs calculées de manière statique
Une valeur calculée de manière statique est une valeur identique à chaque exécution de votre application. Les valeurs cryptographiques calculées de manière statique peuvent être extraites de votre application et utilisées pour attaquer ses données chiffrées. Même si vous manipulez les clés, les vecteurs d'initialisation et les salages de manière complexe avant leur utilisation, ils restent peu fiables si ces manipulations sont identiques pour chaque exécution du programme.

Bonnes pratiques Android
Nous vous recommandons d'utiliser Jetpack Security pour la cryptographie symétrique. Si votre application chiffre des clés API, des informations personnelles ou d'autres données sensibles, EncryptedSharedPreferences peut être utilisée pour stocker ces données en toute sécurité, sans se soucier de l'implémentation de clés secrètes, de vecteurs d'initialisation ni de salages. D'autres bonnes pratiques et exemples sont disponibles sur cette page. Pour transmettre des données vers d'autres systèmes en toute sécurité, les développeurs doivent utiliser le protocole TLS/SSL pour sécuriser les données en cours de transmission. 

Jetpack Security utilise Tink, le projet Open Source de Google, pour gérer le chiffrement à authentification symétrique. Pour les cas d'utilisation avancée concernant les opérations cryptographiques de niveau inférieur, nous vous conseillons d'utiliser directement Tink.

Si les bonnes pratiques Android mentionnées ci-dessus ne correspondent pas à votre utilisation et que vous devez gérer explicitement les clés, vecteurs d'initialisation et salages, nous vous recommandons de respecter les normes suivantes :

  1. Clés secrètes : les clés secrètes symétriques doivent être imprévisibles et secrètes. Pour le chiffrement des données locales, les développeurs doivent concevoir des clés secrètes à l'aide de valeurs aléatoires sécurisées cryptographiquement (ou à partir de données générées par l'utilisateur si PBEKeySpecs est utilisé), et stocker les clés secrètes via AndroidKeystore
  2. Vecteurs d'initialisation : les vecteurs d'initialisation doivent être uniques et imprévisibles pour plusieurs messages, mais ils n'ont pas besoin d'être secrets. Les développeurs doivent concevoir des vecteurs d'initialisation en utilisant des éléments aléatoires sécurisés cryptographiquement. Les développeurs doivent stocker ou transmettre les vecteurs d'initialisation avec le texte chiffré associé.
  3. Salages : les salages doivent être uniques et imprévisibles sur plusieurs hachages, mais ils n'ont pas besoin d'être secrets. Les développeurs doivent construire des salages à l'aide d'éléments aléatoires sécurisés cryptographiquement. Les développeurs doivent stocker ou transmettre les salages avec les hachages associés.

Étapes suivantes

  1. Mettez à jour votre application en suivant les étapes indiquées ci-dessus.
  2. Connectez-vous à la Console Play, puis envoyez la version mise à jour de votre application.
Votre application sera à nouveau examinée. Si elle n'a pas été mise à jour correctement, le message d'avertissement restera affiché. Le processus peut durer plusieurs heures.

Nous sommes là pour vous aider

Si vous avez des questions techniques sur la faille, vous pouvez publier un message sur le site Stack Overflow en utilisant le tag "android-security".
 

Ces informations vous-ont elles été utiles ?

Comment pouvons-nous l'améliorer ?
false
Menu principal
2016104293580105054
true
Rechercher dans le centre d'aide
true
true
true
true
true
5016068
false
false