Deze informatie is bedoeld voor ontwikkelaars met een of meer apps die onveilige cryptografische versleuteling bevatten. Dat wil zeggen dat een versleutelde tekst wordt gegenereerd met een statisch berekende geheime sleutel, salt of initialisatievector (IV). U vindt de locaties van onveilige cryptografische versleuteling in uw app in de Play Console-melding voor uw app.
Problemen oplossen met meldingen over onveilige cryptografische versleutelingspatronen
Controleer uw app op statisch berekende sleutels, initialisatievectoren en/of salts die worden gebruikt bij cryptografische versleuteling en zorg ervoor dat deze waarden veilig worden gemaakt. De volgende code gebruikt bijvoorbeeld een statisch berekenbare geheime sleutel en een statisch berekenbare initialisatievector: // 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);
Statisch berekende waarden
Een statisch berekende waarde is een waarde die bij elke uitvoering van uw app gelijk blijft. Statisch berekende cryptografische waarden kunnen uit uw app worden gehaald en worden gebruikt om de versleutelde gegevens van uw app aan te vallen. Zelfs als u de sleutels, initialisatievectoren en salts vóór gebruik op complexe manieren manipuleert, blijven ze onveilig als deze manipulaties voor elke uitvoering van een programma gelijk zijn.
Praktische tips voor Android
We raden u aan Jetpack Security te gebruiken voor symmetrische cryptografie. Als uw app API-sleutels, persoonlijk identificeerbare informatie (PII) of andere gevoelige gegevens versleutelt, kunt u EncryptedSharedPreferences gebruiken om deze gegevens veilig op te slaan zonder dat u zich zorgen hoeft te maken over geheime sleutels, initialisatievectoren en salts. Ga naar deze pagina voor meer praktische tips en voorbeelden. Ontwikkelaars moeten TLS/SSL gebruiken om gegevens te beveiligen als ze deze naar andere systemen willen overdragen.
Jetpack Security gebruikt het open-sourceproject Tink van Google om symmetrische geverifieerde versleuteling te verwerken. Voor geavanceerde toepassingen met betrekking tot cryptografische handelingen op een lager niveau raden we u aan Tink rechtstreeks te gebruiken.
Als de bovenstaande praktische tips voor Android niet gelden voor uw toepassing en als expliciet beheer van sleutels, initialisatievectoren en salts nodig is, raden we u aan de volgende normen te volgen:
- Geheime sleutels: Symmetrische geheime sleutels moeten onvoorspelbaar en geheim zijn. Als ontwikkelaars lokale gegevens willen versleutelen, moeten ze geheime sleutels maken met behulp van cryptografisch beveiligde willekeurigheid (of via door gebruikers gegenereerde gegevens als ze PBEKeySpecs gebruiken). De geheime sleutels moeten worden opgeslagen met de AndroidKeystore.
- Initialisatievectoren: Initialisatievectoren moeten uniek en onvoorspelbaar zijn voor meerdere berichten, maar hoeven niet geheim te zijn. Ontwikkelaars moeten initialisatievectoren maken met behulp van cryptografisch beveiligde willekeurigheid. De initialisatievectoren moeten samen met de bijbehorende versleutelde tekst worden opgeslagen of overgedragen.
- Salts: Salts moeten uniek en onvoorspelbaar zijn voor meerdere hashes, maar hoeven niet geheim te zijn. Ontwikkelaars moeten salts maken met behulp van cryptografisch beveiligde willekeurigheid. De salts moeten samen met de bijbehorende versleutelde tekst worden opgeslagen of overgedragen.
Volgende stappen
- Update uw app volgens de hierboven beschreven stappen.
- Log in bij uw Play Console en dien een geüpdatete versie van uw app in.