Kryptographie/Verschlüsselung
Neben der Datenisolierung, der Unterstützung der vollständigen Dateisystemverschlüsselung und der Bereitstellung sicherer Kommunikationskanäle bietet Android eine breite Palette von Algorithmen zum Schutz von Daten mithilfe von Kryptografie.
Informieren Sie sich darüber, welche Java Cryptography Architecture (JCA)-Sicherheitsanbieter Ihre Software verwendet. Versuchen Sie, die höchste Ebene der bereits vorhandenen Framework-Implementierung zu verwenden, die Ihren Anwendungsfall unterstützen kann. Nutzen Sie gegebenenfalls die von Google bereitgestellten Anbieter in der von Google vorgegebenen Reihenfolge.
Um lokale Dateien sicherer zu lesen und zu schreiben, verwenden Sie die Sicherheitsbibliothek.
Wenn Sie eine Datei sicher von einem bekannten Netzwerkspeicherort abrufen müssen, ist möglicherweise ein einfacher HTTPS-URI ausreichend und erfordert keine Kenntnisse der Kryptographie. Wenn Sie einen sicheren Tunnel benötigen, sollten Sie die Verwendung von HttpsURLConnection oder SSLSocket in Betracht ziehen, anstatt Ihr eigenes Protokoll zu schreiben. Wenn Sie SSLSocket verwenden, beachten Sie, dass keine Überprüfung des Hostnamens durchgeführt wird. Siehe Warnungen zur direkten Verwendung von SSLSocket.
Wenn Sie feststellen, dass Sie Ihr eigenes Protokoll implementieren müssen, implementieren Sie nicht Ihre eigenen kryptografischen Algorithmen. Verwenden Sie vorhandene kryptografische Algorithmen, z. B. die in der Cipher-Klasse bereitgestellten Implementierungen von AES und RSA. Befolgen Sie außerdem diese Best Practices:
Verwenden Sie 256-Bit-AES für kommerzielle Zwecke. (Falls nicht verfügbar, verwenden Sie 128-Bit-AES.)
Verwenden Sie entweder öffentliche Schlüsselgrößen von 224 oder 256 Bit für die Elliptische-Kurven-Kryptografie (EC).
Wissen Sie, wann Sie die Blockmodi CBC, CTR oder GCM verwenden sollten.
Vermeiden Sie die Wiederverwendung von Infusionen/Theken im CTR-Modus. Stellen Sie sicher, dass sie kryptografisch zufällig sind.
Implementieren Sie bei Verwendung der Verschlüsselung die Integrität mithilfe des CBC- oder CTR-Modus mit einer der folgenden Funktionen:
HMAC-SHA1
HMAC-SHA-256
HMAC-SHA-512
GCM-Modus
Verwenden Sie einen sicheren Zufallszahlengenerator, SecureRandom, um alle von KeyGenerator generierten kryptografischen Schlüssel zu initialisieren. Die Verwendung eines Schlüssels, der nicht mit einem sicheren Zufallszahlengenerator generiert wurde, schwächt die Stärke des Algorithmus erheblich und kann Offline-Angriffe ermöglichen.
Wenn Sie einen Schlüssel für die wiederholte Verwendung speichern müssen, verwenden Sie einen Mechanismus wie KeyStore, der die langfristige Speicherung und den Abruf kryptografischer Schlüssel ermöglicht.