Die folgenden Informationen richten sich an Entwickler von Apps, die unsichere kryptografische Verschlüsselungsmuster enthalten. Das bedeutet, dass ein Geheimtext mit einem statisch berechneten Geheimschlüssel, Salt oder Initialisierungsvektor (IV) generiert wird. Informationen zu den Speicherorten der unsicheren kryptografischen Verschlüsselung finden Sie in der Play Console-Benachrichtigung für Ihre App.
Problembehebung bei Benachrichtigungen zu "unsicheren kryptografischen Verschlüsselungsmustern"
Überprüfen Sie Ihre App auf statisch berechnete Schlüssel, Initialisierungsvektoren und/oder Salts, die bei kryptografischen Verschlüsselungsvorgängen verwendet werden. Sorgen Sie dafür, dass diese Werte auf sichere Weise berechnet werden. Der folgende Code verwendet beispielsweise einen statisch berechneten Geheimschlüssel und einen statisch berechneten Initialisierungsvektor: // Die Benachrichtigung bezieht sich auf folgende Methode
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);
}
// Hier befinden sich der unsichere Schlüssel und der Initialisierungsvektor, die geändert werden sollten
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Statisch berechnete Werte
Ein statisch berechneter Wert ist bei jeder Ausführung Ihrer App gleich. Statisch berechnete kryptografische Werte können aus Ihrer App extrahiert und verwendet werden, um die verschlüsselten Daten Ihrer App anzugreifen. Selbst wenn Sie Schlüssel, Initialisierungsvektoren und Salts vor der Verwendung auf komplexe Weise manipulieren, bleiben sie unsicher, wenn diese Manipulationen bei jeder Programmausführung gleich sind.
Best Practices für Android
Wir empfehlen Ihnen, Jetpack Security zur symmetrischen Kryptografie zu verwenden. Wenn Ihre App API-Schlüssel, personenidentifizierbare Informationen (PII) oder andere vertrauliche Daten verschlüsselt, können Sie EncryptedSharedPreferences verwenden, um diese Daten sicher zu speichern, ohne sich um die Implementierung von Geheimschlüsseln, Initialisierungsvektoren und Salts kümmern zu müssen. Weitere Best Practices und Beispiele finden Sie auf dieser Seite. Zur sicheren Übertragung von Daten an andere Systeme sollten Entwickler TLS/SSL nutzen.
Jetpack Security nutzt das Open-Source-Projekt Tink von Google, um symmetrische, authentifizierte Verschlüsselung zu ermöglichen. Für besondere Anwendungsfälle mit untergeordneten kryptografischen Vorgängen empfehlen wir, Tink direkt zu verwenden.
Wenn die oben genannten Best Practices für Android Ihrem Anwendungsfall nicht entsprechen und Sie Schlüssel, Initialisierungsvektoren und Salts explizit verwalten müssen, empfehlen wir folgende Standards:
- Geheimschlüssel: Symmetrische Geheimschlüssel müssen unberechenbar und geheim sein. Zum Verschlüsseln lokaler Daten sollten Entwickler Geheimschlüssel mithilfe von kryptografisch sicherer Zufälligkeit berechnen (oder aus nutzergenerierten Daten, wenn PBEKeySpecs verwendet wird) und die Geheimschlüssel mit AndroidKeystore speichern.
- Initialisierungsvektoren: Initialisierungsvektoren müssen für mehrere Nachrichten eindeutig und unvorhersehbar, aber nicht geheim sein. Entwickler sollten Initialisierungsvektoren mithilfe von kryptografisch sicherer Zufälligkeit berechnen. Die Initialisierungsvektoren sollten zusammen mit dem zugehörigen Geheimtext gespeichert oder übertragen werden.
- Salts: Salts müssen für mehrere Hashes eindeutig und unvorhersehbar sein, aber nicht geheim sein. Entwickler sollten Salts mithilfe von kryptografisch sicherer Zufälligkeit berechnen. Salts sollten zusammen mit den zugehörigen Hashes gespeichert oder übertragen werden.
Weitere Vorgehensweise
- Aktualisieren Sie Ihre App, indem Sie die oben beschriebenen Schritte ausführen.
- Melden Sie sich in der Play Console an und reichen Sie die aktualisierte Version Ihrer App ein.