Soluzione per la crittografia non sicura

Queste informazioni sono rivolte agli sviluppatori di app che utilizzano schemi di crittografia non sicuri. CiĆ² significa che viene generato testo crittografato con un vettore di inizializzazione (IV), un sale o una chiave privata calcolati in modo statico. Puoi trovare le posizioni della crittografia non sicura nella notifica di Play Console relativa all'app.Ā 

Come risolvere il problema che causa gli avvisi per schemi di crittografia non sicuriĀ 

Controlla se nella tua app sono presenti chiavi, vettori di inizializzazione e/o sali calcolati in modo statico che vengono usati in operazioni di crittografia e assicurati che tali valori siano creati in modo sicuro. Ad esempio, nel codice che segue vengono usati una chiave privata e un vettore di inizializzazione calcolabili in modo statico:

Ā Ā  // L'avviso nella Console si riferisce a questo metodo
Ā  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 chiave e il vettore di inizializzazione non sicuri sono qui e devono essere cambiati
Ā  byte[] cipherText = encryptionUtil("abcdef...", "010203040506", plainText);

Valori calcolati in modo statico
Un valore calcolato in modo statico ĆØ un valore uguale per ogni esecuzione della tua app. I valori crittografici calcolati in modo statico possono essere estratti dalla tua app ed essere usati per attaccare i dati criptati dell'app. Anche se modifichi chiavi, vettori di inizializzazione e sali in modi complessi prima dell'uso, rimangono non sicuri se tali modifiche sono le stesse per ogni esecuzione del programma.

Best practice per Android
Ti consigliamo di utilizzare Jetpack Security per la crittografia simmetrica. Se la tua app cripta chiavi API, informazioni personali o altri dati sensibili, ĆØ possibile usare EncryptedSharedPreferences per archiviare in sicurezza questi dati senza preoccuparsi dell'implementazione di chiavi private, vettori di inizializzazione e sali. In questa pagina puoi trovare ulteriori best practice ed esempi. Per trasmettere in sicurezza i dati ad altri sistemi, gli sviluppatori dovrebbero usare TLS/SSL per proteggere i dati durante la trasmissione.Ā 

Jetpack Security utilizza il progetto open source di Google Tink per gestire la crittografia autenticata simmetrica. Per casi d'uso avanzati relativi alle operazioni di crittografia a piĆ¹ basso livello, ti consigliamo di utilizzare direttamente Tink.

Se le best practice per Android sopra indicate non sono adatte al tuo caso d'uso e devi gestire in modo esplicito chiavi, vettori di inizializzazione e sali, ti consigliamo di seguire i seguenti standard:

  1. Chiavi private. Le chiave private simmetriche non devono essere prevedibili e devono essere segrete. Per criptare i dati locali, gli sviluppatori dovrebbero creare chiavi private usando una casualitĆ  crittograficamente sicura (oppure dati generati dagli utenti se viene usato PBEKeySpecs) e archiviare le chiavi private usando AndroidKeystore.Ā 
  2. Vettori di inizializzazione. I vettori di inizializzazione devono essere univoci e non prevedibili per piĆ¹ messaggi, ma non ĆØ necessario che siano segreti. Gli sviluppatori dovrebbero creare i vettori di inizializzazione utilizzando la casualitĆ  crittograficamente sicura e archiviare o trasmettere i vettori di inizializzazione insieme al testo crittografato associato.
  3. Sali. I sali devono essere univoci e non prevedibili per piĆ¹ hash, ma non ĆØ necessario che siano segreti. Gli sviluppatori dovrebbero creare i sali utilizzando la casualitĆ  crittograficamente sicura e archiviare o trasmettere i sali insieme agli hash associati.

Passaggi successivi

  1. Aggiorna la tua app seguendo i passaggi precedenti.
  2. Accedi a Play Console e invia una versione aggiornata della tua app.
L'app sarĆ  esaminata di nuovo; se non ĆØ stata aggiornata correttamente, continuerai a vedere l'avviso. Questa procedura puĆ² richiedere diverse ore.

Siamo qui per aiutarti

Puoi pubblicare eventuali domande tecniche relative alla vulnerabilitĆ  su Stack Overflow utilizzando il tag "android-security".
Ā 

ƈ stato utile?

Come possiamo migliorare l'articolo?
false
Menu principale
5539096244929761314
true
Cerca nel Centro assistenza
true
true
true
true
true
5016068
false
false