Åtgärda osäker kryptografisk kryptering

Den här informationen är avsedd för utvecklare vars appar innehåller osäkra kryptografiska krypteringsmönster. Det vill säga chiffertext som genereras med en hemlig nyckel, ett salt eller en initieringsvektor som har beräknats statistiskt. Du hittar platserna för osäker kryptografisk kryptering i Play Console-aviseringen för appen. 

Så här åtgärdar du varningar om osäkra kryptografiska krypteringsmönster 

Kontrollera om appen innehåller statistiskt beräknade nycklar, initieringsvektorer och/eller salter som används i kryptografiska krypteringsåtgärder och se till att dessa värden har skapats på ett säkert sätt. I till exempel följande kod används en statistisk beräknad hemlig nyckel och en statistisk beräknad initieringsvektor:

   // Aviseringen från Play Console hänvisar till den här metoden
  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);
  }

  // Den osäkra nyckeln och initieringsvektorn visas här och ska ändras
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Statiskt beräknade värden
Ett statiskt beräknat värde är ett värde som är samma varje gång appen körs. Statiskt beräknade kryptografiska värden kan extraheras från appen och användas till att angripa krypterad data i den. Även om du manipulerar nycklar, initialiseringsvektorer och salter på komplexa sätt före användning är de fortfarande osäkra om samma manipulationer används varje gång programmet körs.

Rekommendationer för Android
Vi rekommenderar att du använder Jetpack Security för symmetrisk kryptografi. Om API-nycklar, uppgifter som kan kopplas till en specifik individ eller andra känsliga uppgifter krypteras av appen kan sådan data lagras på ett säkert sätt med hjälp av EncryptedSharedPreferences så att du inte behöver oroa dig för implementering av hemliga nycklar, initieringsvektorer och salter. Fler rekommendationer och exempel finns på den här sidan. Utvecklare ska använda TLS/SSL för att skydda data när den överförs till andra system. 

Jetpack Security använder Googles öppna källkodsprojekt Tink för att hantera symmetrisk autentiserad kryptering. Vid avancerade användningsfall som rör kryptografiska åtgärder på lägre nivå föreslår vi att du använder Tink direkt.

Om de ovannämnda rekommendationerna för Android inte uppfyller kraven för ditt användningsfall och du måste uttryckligen hantera nycklar, initieringsvektorer och salter rekommenderar vi att du följer dessa standarder:

  1. Hemliga nycklar: Symmetriska hemliga nycklar måste vara oförutsägbara och hemliga. Vi rekommenderar att utvecklare som krypterar lokal data konstruerar hemliga nycklar med hjälp av kryptografisk säker slumpmässighet (eller från användargenererad data om de använder PBEKeySpecs) och lagra de hemliga nycklarna med AndroidKeystore
  2. Initieringsvektorer: Initieringsvektorer måste vara unika och oförutsägbara över flera meddelanden, men de måste inte vara hemliga. Vi rekommenderar att utvecklare konstruerar initieringsvektorer med hjälp av kryptografiskt säker slumpmässighet. Utvecklare bör lagra eller överföra initieringsvektorer tillsammans med tillhörande chiffertext.
  3. Salter: Salter måste vara unika och oförutsägbara över flera hashvärden, men de måste inte vara hemliga. Vi rekommenderar att utvecklare konstruerar salter med hjälp av kryptografiskt säker slumpmässighet. Utvecklare bör lagra eller överföra salter tillsammans med tillhörande hashvärden.

Nästa steg

  1. Uppdatera appen enligt anvisningarna ovan.
  2. Logga in på Play Console och skicka in en uppdaterad version av appen.
Appen granskas på nytt. Om uppdateringen inte gjordes korrekt kommer varningen att kvarstå. Granskningen kan ta flera timmar.

Vi hjälper dig gärna

Om du har tekniska frågor som handlar om säkerhetsbristen kan du ställa dem på Stack Overflow. Använd taggen android-security.
 
false
Huvudmeny
16600148067854525509
true
Sök i hjälpcentret
true
true
true
true
true
5016068
false
false