Tiltak for å løse usikker kryptografisk kryptering

Denne informasjonen er beregnet på utviklere med apper som inneholder usikre kryptografiske krypteringsmønstre. Det vil si at en chiffertekst genereres med en statisk beregnet hemmelig nøkkel, salt eller initialiseringsvektor (IV). I varselet for appen din i Play-konsollen ser du hvor i appen den usikre kryptografiske krypteringen finnes. 

Slik fikser du varsler om «usikre kryptografiske krypteringsmønstre» 

Sjekk appen for statisk beregnede nøkler, initialiseringsvektorer eller salter som brukes i kryptografisk kryptering, og sørg for at disse verdiene konstrueres på en sikker måte. Den følgende koden bruker for eksempel en statisk beregnelig hemmelig nøkkel og en statisk beregnelig initialiseringsvektor:

   // Console alert refers to this method
  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);
  }

  // The unsafe key and initialization vector are here and should be changed
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Statisk beregnede verdier
En statisk beregnet verdi er en verdi som er lik hver gang appen din kjøres. Statisk beregnede kryptografiske verdier kan hentes ut fra appen din og brukes til å angripe appens krypterte data. Selv om du manipulerer nøkler, initialiseringsvektorer og salter på komplekse måter før bruk, forblir de usikre hvis disse manipulasjonene er de samme hver gang programmet kjøres.

Anbefalte fremgangsmåter for Android
Vi anbefaler at du bruker Jetpack Security for symmetrisk kryptografi. Hvis appen krypterer API-nøkler, personlig identifiserende informasjon (PII) eller andre sensitive data, kan EncryptedSharedPreferences brukes for å lagre disse dataene på en sikker måte uten at du trenger å bekymre deg for implementeringen av hemmelige nøkler, initialiseringsvektorer og salter. Du finner flere anbefalte fremgangsmåter og eksempler på denne siden. For sikker overføring av data til andre systemer, bør utviklere bruke TLS/SSL for å sikre dataene som overføres. 

Jetpack Security bruker Googles åpen kildekode-prosjekt Tink for å håndtere symmetrisk autentisert kryptering. For avanserte bruksmønstre som angår kryptografiske operasjoner på lavere nivå, foreslår vi at du bruker Tink direkte.

Hvis de anbefalte fremgangsmåtene for Android ikke passer ditt bruksmønster, og du må spesifikt administrere nøkler, initialiseringsvektorer og salter, anbefaler vi deg å følge disse standardene:

  1. Hemmelige nøkler: Symmetriske hemmelige nøkler må være uforutsigbare og hemmelige. For å kryptere lokale data bør utviklere konstruere hemmelige nøkler ved hjelp av kryptografisk sikker tilfeldiggjøring (eller fra brukergenererte data hvis vedkommende bruker PBEKeySpecs) og lagre de hemmelige nøklene med AndroidKeystore
  2. Initialiseringsvektorer: Initialiseringsvektorer må være unike og uforutsigbare på tvers av flere meldinger, men trenger ikke å være hemmelige. Utviklere bør konstruere initialiseringsvektorer ved bruk av kryptografisk sikker tilfeldiggjøring. Utviklere bør lagre eller overføre initialiseringsvektorer sammen med den tilhørende chifferteksten.
  3. Salter: Salter må være unike og uforutsigbare på tvers av flere hasher, men trenger ikke å være hemmelige. Utviklere bør konstruere salter ved hjelp av kryptografisk sikker tilfeldiggjøring. Utviklere bør lagre eller overføre saltene sammen med tilhørende hasher.

Neste trinn

  1. Oppdater appen din ved å følge trinnene ovenfor.
  2. Logg på Play-konsollen, og send inn en oppdatert versjon av appen.
Appen din vurderes på nytt. Hvis appen ikke er oppdatert riktig, ser du fortsatt advarselen. Denne prosessen kan ta flere timer.

Vi hjelper deg gjerne

Hvis du har tekniske spørsmål om sikkerhetsproblemet, kan du skrive et innlegg på Stack Overflow og bruke «android-security»-etiketten.
 
false
Hovedmeny
17794481669004347277
true
Søk i brukerstøtte
true
true
true
true
true
5016068
false
false