So verwenden Sie den Android Keystore zum Speichern von Passwörtern und anderen vertraulichen Informationen
HeimHeim > Blog > So verwenden Sie den Android Keystore zum Speichern von Passwörtern und anderen vertraulichen Informationen

So verwenden Sie den Android Keystore zum Speichern von Passwörtern und anderen vertraulichen Informationen

Jun 03, 2024

Affiliate-Links auf Android Authority können uns eine Provision einbringen. Erfahren Sie mehr.

Bevor wir mit dem Codieren beginnen, ist es hilfreich, ein wenig über den Android Keystore und seine Funktionen zu verstehen. Der Keystore wird nicht direkt zum Speichern von Anwendungsgeheimnissen wie Passwörtern verwendet. Er stellt jedoch einen sicheren Container bereit, der von Apps zum Speichern ihrer privaten Schlüssel verwendet werden kann, und zwar auf eine Weise, die für böswillige (nicht autorisierte) Benutzer und Apps ziemlich schwierig abzurufen ist .

Wie der Name schon sagt, kann eine App mehrere Schlüssel im Keystore speichern, aber eine App kann nur ihre eigenen Schlüssel anzeigen und abfragen. Im Idealfall würde eine App mit dem Keystore ein privates/öffentliches Schlüsselpaar generieren/oder empfangen, das im Keystore gespeichert würde. Der öffentliche Schlüssel kann dann zum Verschlüsseln von Anwendungsgeheimnissen verwendet werden, bevor er in den app-spezifischen Ordnern gespeichert wird, wobei der private Schlüssel bei Bedarf zum Entschlüsseln derselben Informationen verwendet wird.

Obwohl der Android-Keystore-Anbieter in API-Level 18 (Android 4.3) eingeführt wurde, ist der Keystore selbst seit API 1 verfügbar und auf die Verwendung durch VPN- und WiFi-Systeme beschränkt.

Der Keystore selbst wird mit der eigenen Sperrbildschirm-PIN/Passwort des Benutzers verschlüsselt. Daher ist der Keystore nicht verfügbar, wenn der Gerätebildschirm gesperrt ist. Bedenken Sie dies, wenn Sie über einen Hintergrunddienst verfügen, der möglicherweise auf Ihre Anwendungsgeheimnisse zugreifen muss.

Das Hauptlayout für unsere Beispiel-App ist eine ListView mit Elementen, die aus einer Liste aller von der App erstellten Schlüssel (eigentlich die Schlüsselaliase/-namen) bestehen. Dies wird als „layout/activity_main.xml“ gespeichert.

Jedes Element in der Liste enthält eine Textansicht, die den Schlüsselalias darstellt, eine Schaltfläche zum Löschen des Schlüssels und jeweils Schaltflächen zum Verschlüsseln und Entschlüsseln von Text. Dieses Layout/list_item.xml in unserem Projekt.

Der List-Header wird mithilfe der Methode zur ListView hinzugefügt

Wie bei jeder Aktivität beginnen wir mit der Methode onCreate(). Als Erstes rufen wir einen Verweis auf den AndroidKeyStore ab und initialisieren ihn dann mit:

Anschließend rufen wir unsere Methode „refreshKeys()“ auf (wird als Nächstes besprochen), um alle Schlüssel aufzulisten, die unsere App im Keystore gespeichert hat. Dadurch wird sichergestellt, dass alle Schlüssel im Keystore sofort angezeigt werden, wenn ListView initialisiert wird.

Um ein öffentliches/privates Schlüsselpaar zu generieren, benötigen wir ein KeyPairGenerator-Objekt. Wir erhalten eine Instanz von KeyPairGenerator, die so eingestellt ist, dass sie den RSA-Algorithmus mit dem „AndroidKeyStore“ verwendet. Durch den Aufruf von genericKeyPair() wird das neue Schlüsselpaar (privater und entsprechender öffentlicher Schlüssel) erstellt und zum Keystore hinzugefügt.

Bei der Entschlüsselung handelt es sich grundsätzlich um den umgekehrten Verschlüsselungsprozess. Die Entschlüsselung erfolgt mit dem privaten Schlüssel des Schlüsselpaares. Anschließend initialisieren wir einen Cipher mit demselben Transformationsalgorithmus, der für die Verschlüsselung verwendet wird, jedoch auf Cipher.DECRYPT_MODE eingestellt. Der Base64-String wird in ein Byte[] dekodiert, das dann in einem ByteArrayInputStream platziert wird. Anschließend verwenden wir einen CipherInputStream, um die Daten in ein Byte[] zu entschlüsseln. Dies wird dann als String angezeigt.

Der Android Keystore macht das Erstellen und Verwalten von App-Schlüsseln zum Kinderspiel und bietet einen sicheren und relativ geschützten Tresor für Anwendungen zum Speichern von Verschlüsselungsschlüsseln. Natürlich kann der öffentliche Schlüssel auch an Ihren Server und der öffentliche Schlüssel des Servers an Ihre Apps gesendet werden, um eine sichere Kommunikation zwischen Ihrer Anwendung und Ihrem Server zu gewährleisten. Der vollständige Quellcode steht wie gewohnt auf Github zur freien Nutzung bereit. Für Ergänzungen, Korrekturen und/oder Diskussionen hinterlassen Sie unten einen Kommentar, wir freuen uns darauf, von Ihnen zu hören.