Frage

Ich möchte einige kleine, aber wichtige Informationen wie AES-Schlüssel in meiner Android-Anwendung speichern.Was wäre der empfohlene Weg, dies zu tun?Ich möchte im Rahmen meiner Bewerbung keine Schlüssel fest codieren.

Ich schaue an KeyStore aber es löst mein Problem nicht wirklich.Es kann meine Schlüssel speichern, sofern ich ein Passwort angeben kann.Dann muss ich einen sicheren Ort zum Speichern dieses Passworts finden, der mit meinem ursprünglichen Problem identisch ist.

Gibt es eine integrierte Android-Klasse, um diese Aufgabe auszuführen?Oder sollte ich nach Bibliotheken von Drittanbietern suchen?Auch die Verwendung von NDK ist für mich akzeptabel.

Aktualisieren:

Ich hatte gehofft, eine Android-API für die Speicherung zu finden, die garantiert, dass nur die Anwendung, die einige Informationen gespeichert hat, diese wieder abrufen kann.Das Android-Betriebssystem hätte dies anhand der Signatursignaturen der Anwendung erzwingen können.Auf diese Weise kann meine Anwendung beim ersten Start einen zufälligen Schlüssel generieren und ihn zur späteren Verwendung in einem sicheren Speicher speichern.Gibt es dafür eine API?

War es hilfreich?

Lösung

Gibt es eine integrierte Android-Klasse, um diese Aufgabe auszuführen?

Außer java.io.File, nein.

Oder sollte ich nach Bibliotheken von Drittanbietern suchen?

Sie können es versuchen, aber ich vermute, die meisten werden wie die Lösung aussehen, die Sie bereits abgelehnt haben.Die meisten sicheren Datenspeicher beinhalten Passwörter und gehen davon aus, dass die Passwörter woanders gespeichert sind (z. B. im Kopf eines Benutzers).Beispielsweise verfügt OI Safe über ein Intent-basiertes System, das es Anwendungen ermöglicht, Dinge im Safe zu speichern, aber dann ist der Benutzer an der Entsperrung des Safes, IIRC, beteiligt.

Andere Tipps

Wenn Sie letztendlich die KeyStore-API verwenden, besteht eine Lösung darin, Ihr Kennwort jedes Mal dynamisch zur Laufzeit zu generieren, wenn die App auf den KeyStore zugreifen muss.Wenn Sie Ihren Passwortalgorithmus auf eine einfache, aber veränderbare Variable stützen, die an die spezifische Installation gebunden ist, wie z. B. die Geräte-MEID (oder eine andere spezifische ID des physischen Geräts, die zur Laufzeit erfasst wird), könnten Sie einen Schlüssel für das Schloss bereitstellen, der immer schwieriger wirdnehmen.

Beispiel: Verwenden Sie eine ID aus dem physischen Gerät, schneiden Sie sie an drei Stellen aus und hängen Sie sie an die Endposition in der ID-Zeichenfolge an. Hängen Sie dann Ihre Initialen programmgesteuert an die Zeichenfolge an.Ich würde denken, dass dieser Ansatz eine Sicherheitsebene bieten würde, die nicht leicht gebrochen werden kann, es sei denn, der Cracker weiß, wie Sie den Schlüssel erstellt haben (dh hat Ihren Quellcode).

MEID = MEID + "fluffy" + "2008";

Dabei ist MEID eine Zeichenfolge mit einer ID des Geräts, „fluffy“ ist der Name der Katze Ihres besten Freundes und „2008“ ist das Jahr eines wichtigen Ereignisses in Ihrem Leben.Dann füttern Sie diese neue Zeichenfolge in ein Array, analysieren Sie eine Zahl, die zu Ihnen passt (z. B. den Tag des Monats, an dem Sie Ihren Führerschein erhalten haben), greifen Sie drei Zeichen heraus und lassen Sie diese Zeichen am Ende der Zeichenfolge fallen.Clip von der Vorderseite der Schnur auf die Anzahl der Positionen, die Sie für Ihren Schlüssel benötigen, und los geht's.Dies sollte keine sehr prozessorintensive Aufgabe sein, daher sollten Sie mit etwas Fehlertoleranzcode für die Variablen in der Lage sein, dies in Ihrem Hauptprozess auszuführen, auch ohne sich zu viele Sorgen machen zu müssen, ein ANR vom System zu erhalten.Wenn Sie wirklich frech werden wollen, konvertieren Sie den String irgendwann in Bits und "bitwise op" die Änderungen.Viola, eine dynamische Taste mit geringem Overhead, die für das Gerät, auf dem sie ausgeführt wird, einzigartig ist!

BEARBEITEN:

Wie @RedWarp betonte, liegt das Dekompilieren einer .apk immer im Bereich der Möglichkeiten für jeden Objektcode mit den richtigen Tools und der richtigen Motivation.Wenn die „Schlüssel“-Generierung ein wirklich wichtiger Prozess ist, dann ist die Abstraktion der Schlüsselgenerierung außerhalb des Anwendungsbereichs der App ein Muss.

Der eigentliche Punkt, den ich mit dieser Antwort zu machen versuche, ist, dass ein wenig Voraussicht in Bezug auf minimale Sicherheit einen Weg gehen kann.Stärkere Sicherheit ist mehr in die Tiefe als eine einfache Antwort von mir.

Hierbei muss zwischen Schlüsseln und App-Daten unterschieden werden.

Der KeyPairGenerator und KeyGenerator „AndroidKeyStore“ speichert die von Ihrer App generierten Schlüssel unter einem Alias ​​im KeyStore und ordnet die Schlüssel Ihrer App zu.Wenn das Gerät über „sichere Hardware“ verfügt, können Sie festlegen, dass diese verwendet wird und die Schlüssel dort gespeichert werden.

Es gibt kein Passwort für die Schlüssel.Mit dem Alias ​​geben Sie an, welchen Schlüssel Sie verwenden möchten.Nur Ihre App kann die von ihr generierten Schlüssel abrufen.

sehen:https://developer.android.com/training/articles/keystore.html

Für die privaten Daten Ihrer App, wenn ich das verstehe: „..eine Android-API für die Speicherung, die garantiert, dass nur die Anwendung, die bestimmte Informationen gespeichert hat, diese wieder abrufen kann...", Sie könnten sich diese ansehen:

https://developer.android.com/guide/topics/data/data-storage.html#filesInternal https://developer.android.com/guide/topics/data/data-storage.html#db

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top