Good Practice: Umgang mit Keystore-Passwörtern in Android / Java? [Duplikat]

8

Angenommen, ein Kennwort für einen Schlüsselspeicher wird nicht von einem Benutzerkennwort geliefert oder an dieses gebunden (was mehr oder weniger bedeutet, dass es nur eine Zeichenfolge oder ein Array [] im Code ist), ist es ein ausreichender Schutz, den es einfach nicht oder nicht kann Kann nur schwer aus dem Bytecode extrahiert werden?

Ich weiß, dass das Passwort für einen Schlüsselspeicher (JKS / BKS) nur verwendet wird, um die Integrität des Schlüsselspeichers zu überprüfen. Darüber hinaus ist völlig klar, dass ich davon ausgehen muss, dass eine Anwendung in einer mehr oder weniger vertrauenswürdigen Umgebung läuft, um "sicher" zu sein. Wie auch immer, ist es möglich, das Passwort nur aus der apk-Datei zu extrahieren?

Es fühlt sich einfach falsch an, ein Passwort in der Quelle einer Anwendung fest zu codieren, also gibt es vielleicht ein paar Ideen, wie man es tatsächlich weniger bedrohlich macht. Z.B. wäre es besser, das Passwort in einer externen Konfigurationsdatei konfigurierbar zu machen oder es bei der Installation der App zufällig zu generieren (und wo sollte es dann gespeichert werden)?

    
evildead 08.02.2014, 13:39
quelle

3 Antworten

4
  

ist es ein ausreichender Schutz, den es einfach nicht oder nur schwer aus dem Bytecode extrahieren kann?

"Ausreichend" ist ein subjektiver Ausdruck; nur Sie können bestimmen, was Ihnen als ausreichend erscheint.

  

ist es möglich, das Passwort nur aus der apk-Datei zu extrahieren?

Ja, da APK-Dateien dekompiliert werden können, können unverschlüsselte Netzwerkkonversationen usw. verschlupft werden.

  

wie man es eigentlich weniger bedrohlich macht

Sie können eine Lizenz für DexGuard kaufen und sie verwenden, da diese hartcodierte Strings wie Ihr Passwort verschlüsselt. Ob das die zusätzliche Verteidigung wert ist, ist deine Entscheidung.

  

wäre es besser, das Passwort in einer externen Konfigurationsdatei konfigurierbar zu machen

Jeder, der das Gerät rooted, konnte die Datei bekommen.

  

oder generieren Sie es zufällig während der Installation der App (und wo sollte es dann gespeichert werden)?

Es würde irgendwo gespeichert werden, das für gerootete Gerätebenutzer mindestens verfügbar ist.

    
CommonsWare 08.02.2014, 14:14
quelle
3

Es ist durchaus üblich, Keystores mit einem Passwort zu verschlüsseln, aber das ist nicht notwendig.

Das Speichern des Kennworts in der Nähe des Schlüsselspeichers entspricht weitgehend dem eines Schlüsselspeichers, der nicht verschlüsselt ist. Das kann vollkommen in Ordnung sein. Es ist nämlich nicht ungewöhnlich, unverschlüsselte Schlüsselspeicher mit beiden Zertifikaten und private Schlüssel auf Servern zu haben, auf denen die Schlüsselspeicherdatei durch andere Mittel geschützt ist.

Die Art des Angriffs, gegen den Sie sich zu schützen versuchen, ist, wenn jemand den Inhalt des Schlüsselspeichers ändern kann. Ein Kennwort könnte verwendet werden, um die Integrität des Schlüsselspeichers zu überprüfen, jedoch nur, wenn es dem Angreifer unbekannt ist. Es kann sich kein typisches Szenario vorstellen, bei dem ein Angreifer Zugriff auf Ihren Schlüsselspeicher hat, aber keinen Zugriff auf den Bytecode Ihrer Anwendung oder die andere Konfiguration der Anwendung hat.

Das Dateisystem für eine Anwendung in Android ist relativ sicher, aber in keiner Weise kugelsicher. Wenn Sie diesem Dateisystem nicht vertrauen, müssen Sie den Keystore mit einem Kennwort verschlüsseln, das der Benutzer eingibt oder von einem anderen Ort außerhalb des Geräts abgerufen wird. Auf der anderen Seite, wenn Sie dem Dateisystem vertrauen, müssen Sie den Schlüsselspeicher überhaupt nicht verschlüsseln (oder Sie verschlüsseln ihn mit einem bekannten Passwort, wenn dies Ihre Entwicklung erleichtert).

    
sstendal 08.02.2014 22:45
quelle
1

Versuchen Sie, null anstelle des Passworts zu verwenden (siehe diese Frage )

%Vor%     
Lucas Jota 15.10.2014 13:22
quelle