Disse oplysninger er tiltænkt udviklere med apps, der indeholder usikre kryptografiske krypteringsmønstre. Det vil sige, at en ciffertekst genereres med en statisk beregnet hemmelig nøgle, salt eller initialiseringsvektor (IV, initialization vector). Steder med usikker kryptografisk kryptering kan findes i Play Console-underretningen for din app.
Sådan rettes advarsler om "Usikre kryptografiske krypteringsmønstre"
Gennemgå din app for statisk beregnede nøgler, initialiseringsvektorer og/eller salte, der bruges i kryptografiske krypteringsoperationer, og sørg for, at disse værdier er konstrueret sikkert. Følgende kode bruger f.eks. en hemmelig nøgle og en initialiseringsvektor, der kan beregnes statisk: // Konsoladvarslen henviser til denne metode
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 usikre nøgle og initialiseringsvektor er her og bør ændres
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Statisk beregnede værdier
En statisk beregnet værdi er en værdi, der er ens ved hver kørsel af din app. Statisk beregnede kryptografiske værdier kan trækkes ud af din app og bruges til at angribe din apps krypterede data. Selv hvis du manipulerer nøgler, initialiseringsvektorer og salte på komplekse måder inden brug, forbliver de usikre, hvis disse manipulationer er de samme for hver programkørsel.
Optimale løsninger for Android
Vi anbefaler, at du bruger Jetpack Security til symmetrisk kryptografi. Hvis din app krypterer API-nøgler, personhenførbare oplysninger eller andre følsomme data, kan EncryptedSharedPreferences bruges til at gemme disse data sikkert, uden at du skal bekymre dig om implementeringen af hemmelige nøgler, initialiseringsvektorer og salte. Der er flere optimale løsninger og eksempler på denne side. Udviklere bør bruge TLS/SSL til at sikre data ved transmission til andre systemer.
Jetpack Security bruger Googles open source-projekt Tink til at håndtere symmetrisk godkendt kryptering. Hvis du har avancerede eksempler på brug af kryptografiske operationer på lavere niveau, anbefaler vi, at du bruger Tink direkte.
Hvis de førnævnte optimale løsninger for Android ikke lever op til dine eksempler på brug, og du er forpligtet til eksplicit at administrere nøgler, initialiseringsvektorer og salte, anbefaler vi, at du følger disse standarder:
- Hemmelige nøgler: Symmetriske hemmelige nøgler skal være uforudsigelige og hemmelige. Når lokale data krypteres, bør udviklere konstruere hemmelige nøgler ved hjælp af kryptografisk sikker tilfældighed (eller fra brugergenereret data, hvis de bruger PBEKeySpecs) og gemme de hemmelige nøgler ved hjælp af AndroidKeystore.
- Initialiseringsvektorer: Initialiseringsvektorer skal være unikke og uforudsigelige i flere meddelelser, men behøver ikke at være hemmelige. Udviklere bør konstruere initialiseringsvektorer ved hjælp af kryptografisk sikker tilfældighed. Udviklere bør gemme eller overføre initialiseringsvektorer sammen med den tilhørende ciffertekst.
- Salte: Salte skal være unikke og uforudsigelige på tværs af flere hashes, men behøver ikke at være hemmelige. Udviklere bør konstruere salte ved hjælp af kryptografisk sikker tilfældighed. Udviklere bør opbevare eller overføre salte sammen med de tilhørende hashes.
Næste trin
- Opdater din app ved at følge de fremhævede trin ovenfor.
- Log ind på Play Console, og indsend en opdateret version af din app.