Worin besteht der Zweck der Verschlüsselung von Anyting in Android (oder Java), wenn Quellcode reverse engineered sein kann?

8

Android und Java bieten eine Krypto-API , die für Crypto-Nicht-Experten relativ einfach zu verwenden ist.

Aber da wir wissen, dass kein Code wirklich vor Reverse Engineering geschützt werden kann, vor allem Stringkonstanten, die als Seeds oder Shared Secrets verwendet werden, frage ich mich: Was ist der Zweck der Verschlüsselung und Entschlüsselung in Android-Anwendungen? / p>

Vermisse ich etwas?

Ich versuche, meine Frage klarer und konkreter zu machen: Angenommen, ich habe eine Anwendung, in der bestimmte Zeichenfolgen bis für den Code und für verwendet werden Code (dh nicht Benutzerdaten) müssen geheim sein: Ein Ansatz besteht darin, sie in der kompilierten .apk in verschlüsselter Form zu speichern und sie (unter Verwendung eines verschleierten fest codierten Passworts) zur Laufzeit zu entschlüsseln. Ein anderer Ansatz wäre, sie in einem Remote-Server in verschlüsselter Form zu speichern, sie (über das Internet) zu holen und sie (unter Verwendung eines gemeinsamen Passworts) zur Laufzeit zu entschlüsseln.

Ich sehe keinen großen Unterschied zwischen den beiden, da beide den "geheimen Schlüssel" im (reverse-engineer-fähigen) Code benötigen.

Gibt es eine Lösung für dieses Problem?

Wenn es keine Lösung gibt, warum überhaupt verschlüsseln?

    
ateiob 18.08.2011, 20:33
quelle

5 Antworten

5

Dies ist nicht unbedingt ein Problem mit Android oder Java. Alles kann umgekehrt werden, es ist nur schwieriger, wenn es sich um nativen Code handelt. Und bedenken Sie, dass sie es nicht einmal umkehren müssen: Sie müssen schließlich die Daten im Speicher entschlüsseln, um sie zu manipulieren. An dieser Stelle kann der Angreifer einfach einen Speicherabbild erstellen und sie erhalten Ihre Daten. Wenn sie physischen Zugriff auf das Gerät haben und die Daten in der Software manipulieren, gibt es wirklich nichts, was Sie tun können, um sie zu stoppen. Die Lösung hierfür ist die Verwendung eines dedizierten Hardware Moduls (HSM), das manipulationssicher oder zumindest manipulationssicher ist (wenn jemand damit zu tun hat, löscht es entweder alle Daten oder hält zumindest einige davon) Protokolle der Veranstaltung). Diese kommen in verschiedenen Formen und Größen, von Smartcards bis zu netzwerkverbundenen Geräten, die viel kosten . Momentan nicht für Android verfügbar, aber vielleicht wird es einem TPM ähnlich, so dass Sie Ihre Schlüssel sicher speichern und Kryptooperationen in Hardware ausführen können.

Überlegen Sie sich also, wie geheim Ihre Daten sein müssen, und entscheiden Sie sich für ein angemessenes Schutzniveau.

Sie möchten, dass es über SSL heruntergeladen wird (das schützt es während der Übertragung), und stellen Sie sicher, dass Sie beide Server authentifizieren (damit Sie wissen, dass Sie die richtigen Daten von einem vertrauenswürdigen Ort erhalten) und der Kunde (so können Sie sicher sein, dass Sie nur die Daten an die richtige Person geben). Sie können dafür die SSL-Clientauthentifizierung verwenden, und sie wird wesentlich sicherer sein als jedes benutzerdefinierte Verschlüsselungs- / Schlüsselaustauschschema, das Sie (oder jemand, der kein Kryptografieexperte ist) mit sich bringen könnte.

    
Nikolay Elenkov 19.08.2011, 03:11
quelle
3

Das gemeinsame Geheimnis in der Crypto-API ist nicht etwas, das Sie in der App speichern würden (wie Sie sagen, dass anfällig für Reverse-Engineering wäre - obwohl vielleicht nicht so anfällig wie Sie es tun würden erwarten, Verschleierung ist ziemlich einfach).

Stellen Sie sich vor, Sie wollten verschlüsselte Dateien auf Ihrem Telefon erstellen / lesen (für Ihre geheime Einkaufsliste).

Nachdem Sie einen erstellt haben, speichern Sie ihn mit einem Master-Passwort (das sofort vom Programm verworfen wird). Wenn Sie es dann lesen möchten, müssen Sie Ihr Master-Passwort erneut eingeben. Das ist das gemeinsame Geheimnis, auf das sich die API bezieht, und das Reverse-Engineering ist völlig tangential.

    
Alex Churchill 18.08.2011 20:38
quelle
2

Das Problem, das Sie beschreiben, ähnelt dem Speichern eines Master-Passworts für einen Passwort-Manager Problem.

In diesem Fall verwendet die angebotene Lösung salt für Passwort-Hashes .

    
uTubeFan 23.08.2011 03:06
quelle
1

ateiob Jedes Mal, wenn Sie das Master-Passwort in der App speichern, machen Sie es nur ein bisschen schwieriger für nicht autorisierte Benutzer, auf die verschlüsselten Daten zuzugreifen.

Zunächst können wir zustimmen, dass das Verschlüsseln von Daten mit einem in einer Anwendung eingebetteten "Hauptschlüssel" und das Speichern dieser Daten auf dem Telefon dafür offen ist, dass der "Hauptschlüssel" rückentwickelt und die Daten entschlüsselt werden.

Zweitens: Ich denke, wir können uns darauf einigen, dass das Verschlüsseln von Daten mit einem geheimen Passwort und das anschließende Löschen des geheimen Passworts mit starker Verschlüsselung, 256-Bit-Schlüsseln und starken Passwörtern einigermaßen sicher sein sollte. Beide Techniken gelten für die Programmierung auf mobilen Geräten. In der Tat, iOS, unterstützt BEIDE braucht out of the box.

%Vor%

Vielleicht kann ein Beispiel aus der realen Welt helfen.

Sagen Sie, wenn ein temporäres Datenfeld auf einem niedrigen Speicher gehalten und geschützt werden muss, kann es mit einem Master-Passwort verschlüsselt und gelöscht werden, wenn der Benutzer das temporäre Datenfeld löscht. Das temporäre Datenfeld wird niemals als einfacher Text gespeichert.

Also gibt es zwei Passwörter, ein Master-Passwort, eingebettet in die App für temporäre Kurzzeit-Verschlüsselung und ein geheimes Passwort, das normalerweise vom Benutzer eingegeben werden muss, für längerfristig persistent verschlüsselte Daten.

Wenn Sie Dateien verschlüsseln, sollten Sie schließlich eine andere Indirektionsebene hinzufügen. So dass das aktuelle geheime Passwort verwendet wird, um einen zufälligen Schlüssel zu verschlüsseln, der zum Verschlüsseln aller Benutzerdateien verwendet wird. Dadurch kann der Benutzer das geheime Passwort ändern, ohne dass alle verschlüsselten Dateien entschlüsselt und verschlüsselt werden müssen.

    
JAL 18.08.2011 21:55
quelle
-1

Es wird angenommen, dass der Angreifer eine Kopie Ihres Codes besitzt. Die Geheimhaltung Ihrer Daten sollte ausschließlich vom Schlüssel abhängen. Siehe Kerckhoffs Prinzip .

Um Ihren Schlüssel geheim zu halten, müssen Sie ihn von Ihrem Code trennen. Erinnere dich dran. Halten Sie es auf einem Stück Papier in Ihrer Brieftasche. Bewahren Sie es auf einem USB-Stick auf, den Sie normalerweise in einem Safe aufbewahren. Verwenden Sie ein Programm wie PasswordSafe . Es gibt viele Möglichkeiten.

Es ist natürlich möglich, dass jeder Angreifer sich durch viele Schlüsselschichten arbeiten lässt, um zu dem Schlüssel zu gelangen, den er tatsächlich benötigt. PasswordSafe und ähnliche sind eine solche Option. Sie werden bemerken, dass solche Programme nicht Ihnen die Option geben, sich an Ihr Passwort zu erinnern.

    
rossum 18.08.2011 22:00
quelle