Encrypted login

Die App zeigt Euch, wie Ihr eine Login-Seite programmiert und die Login Daten sicher verschlüsselt innerhalb der App speichert.

Ich habe ebenfalls Funktionen für die Passwort-Änderung und Passwort Zurücksetzung mit eingebaut.

Die App nutzt für die sichere Speicherung die EncryptedSharedPreferences, welche über die Bibliothek „androidx.security:security-crypto“ nutzbar sind.

Die App speichert aber NICHT das Passwort in verschlüsselter Form ab, sondern erzeugt einen Hash des Passwortes, der anschließend abgespeichert wird.

Dadurch ist einem Angreifer nicht möglich, das gespeicherte Passwort (wie auch immer) zu entschlüsseln, sondern die einzige Möglichkeit besteht darin, alle möglichen Passwörter hintereinander einzugeben und auszuprobieren („brute force“), welches durch den zeitintensiven Hash Algorithmus aber verlangsamt ist.

Hier noch die technischen Details der verwendeten Algorithmen. Die Speicherung der Daten über die EncryptedSharedPreferences erfolgt über den AES Algorithmus im GCM Modus. Für den Hash des Passwortes wird der PBKDF2 Algorithmus („password based key derivation function“) genutzt, hier mit 10.000 Durchlaufen („iterations“) mit der Hashfunktion „Hmac256„. Es wird ein 64 Byte langer Schlüssel erzeugt und durch den zufällig erzeugten Salt wird bei jeder Neuerzeugung des Schlüssels (trotzt eventuell gleichem Passwort) ein neuer Schlüssel erzeugt.

Technische Details zur Programmierumgebung: erstellt unter Android SDK 32 („12“), lauffähig ab SDK 23 (Android 6). Da die Hmac256-Hashfunktion erst ab SDK 26 eingebaut ist, wird der Hash bei SDKs 23 – 25 mit einer eigenen Klasse erzeugt.

Der Sourcecode ist in meinem GitHub Repository https://github.com/AndroidCrypto/EncryptedLoginWithPassword verfügbar.