Konzept für Offline-Login

  • 5 Antworten
  • Neuester Beitrag
Diskutiere Konzept für Offline-Login im Android App Entwicklung im Bereich Betriebssysteme & Apps.
E

effgeh

Neues Mitglied
Hi, ich benötige für meine Anwendung einen Offlinelogin, falls momentan keine Internetverbindung zur Verfügung steht, dabei habe ich mir das so überlgt:

Ich erstelle in dem /data/ ordner der App eine Datei "login" mit dem Inhalt "OK". Diese wird beim Erstlogin, für den Internet erforderlich ist, mit dem Passwort des Benutzers verschlüsselt (z.B."Passwort").
Versucht sich der Benutzer nun offline einzuloggen, wird die Datei "login", die nun aus "ABCDEFG" besteht, mit dem eingegebenen Passwort entschlüsselt und der Klartext überprüft. Lautet dieser "OK", ist die Kennworteingabe erfolgreich, kommt etwas anderes heraus, war das Passwort falsch.

Mein problem dahinter ist:
Allgemein ist security by obscurity ja nicht als Ziel zu setzen, d.h. jeder weiß prinzipiell wie das alles funktioniert und kann eine beliebige Datei "login" mit dem Inhalt "OK" im /data/ erstellen und mit seinem passwort "falschesPasswort" verschlüsseln, welche dann beim Login überprüft wird und mit "falschesPasswort" erfolgreich sein wird.

Wie kann man das sicher hinbekommen bzw hat jemand einen anderen Vorschlag?

Grüße
 
DagobertDokate

DagobertDokate

Experte
Naja alles was auf dem Gerät ist, ist auch zu knacken...
Ich würde lieber bei der Idee ansetzen...
Wofür brauchst du das ganze?

lg. Dagobert
 
A

amfa

Experte
Android Explorations: Using Password-based Encryption on Android

Using Cryptography to Store Credentials Safely | Android Developers Blog

Grundsätzlich ist dein Ansatz nicht so verkehrt, denn ohne root kann niemand die OK Datei sehen oder bearbeiten.
Im Prinzip wird es aber darauf hinaus laufen.

Nur würde ich die Daten nicht direkt mit dem passwort verschlüsseln, ich würde einen längeren Key generieren und diesen mit dem Passwort verschlüsseln.
Mit dem key kannst du dann die Nutzdaten (Ich würde übrigens eher eine Datei nehmen die mehr als "OK" enthält, sondern eher einen langen zufälligen String).

Generell ist es halt immer schwierig, wenn man den key zusammen mit den Daten speichern muss.
 
E

effgeh

Neues Mitglied
Danke für die schnelle Antwort,

ich schreibe da gerade momentan an einem Projekt und möchte, dass der Benutzer auch im Funkloch auf seine Daten zugreifen kann, die sich automatisch im Hintergrund bei Internetverbindung synchronisieren. Aber da soll eben nur der Benutzer drauf Zugriff haben, da es relativ sensible Daten sind und ich versuch das gerade so safe zu machen, dass man das Gerät theoretisch verlieren könnte und ein Dieb trotzdem keine chance hat, an die Daten heranzukommen.
Bisher realisiere ich das so, dass bei der Synchronisation sämtliche Datensätze mit dem Benutzerpasswort verschlüsselt vom Server kommen und man damit nur etwas anfangen kann, wenn man das Passwort hat.

Jetzt wollte ich eben noch den Zugang zur App schützen(mit dem man eigentlich sowieso ohne richtiges Entschlüsselungspasswort trotzdem nicht an die Daten rankommt, aber rein aus Interesse würde es mich schon interessieren, wie man das am sichersten realisieren könnte)

edit: Jetzt habe ich gerade den 2. Post gelesen: Prinzipiell kann man also davon ausgehen, dass mit Root sowieso alles möglich ist.. Der key würde dann aber auch irgendwo rumliegen und könnte ausgelesen werden. Ich schau mir mal die beiden Links an, danke erstmal
 
Zuletzt bearbeitet:
Z

Zoopa

Stammgast
Kommt drauf an, was dein Ziel ist. Wenn es dir nur um die Authentifizierung geht, kannst du es einem Angreifer einfach schwerer machen, aber wohl nicht verhindern, dass jemand Offline-Zugirff bekommt.

Vielleicht geht es dir aber darum, die Daten zu schützen, die du beim ersten Online-Login herunterlädst. In diesem Fall kannst du einfach sämtliche Daten mit dem Passwort des Users (am besten nicht mit dem Passwort selber, sondern einem daraus abgeleiteten Key, z.B. mit PBKDF2) verschlüsseln. Man kann der App dann zwar immernoch vortäuschen, dass man ein korrekter Offline-User ist, aber man kommt nicht an fremde Daten. Die Daten liegen also immer nur verschlüsselt auf dem Gerät und werden nur entschlüsselt, wenn sie gebraucht werden (und werden nie entschlüsselt auf den Speicher geschrieben). So machen das auch die Cloud-Passwort-Manager, die einen Offline-Login anbieten, siehe z.B. LastPass.

Der Ablauf sieht dann etwa so aus:
  1. Login auf Server
  2. Daten laden und mit User-PW verschlüsselt auf Phone speichern
  3. Bei Offline-Login: User gibt Name + Passwort ein
  4. App versucht mit Passwort die Daten zu entschlüsseln
  5. Entschlüsseln funktioniert: Offline-Login erfolgreich
  6. Entschlüsseln schlägt fehl: Passwort war falsch

Edit: Das Passwort muss natürlich so bei jedem Offline-Login eingegeben werden und darf nicht irgendwo gespeichert werden. Nur die Daten der App sind verschlüsselt. So kann niemand ohne Key die Daten entschlüsseln.
 
Zuletzt bearbeitet:
E

effgeh

Neues Mitglied
Zoopa schrieb:
Kommt drauf an, was dein Ziel ist. Wenn es dir nur um die Authentifizierung geht, kannst du es einem Angreifer einfach schwerer machen, aber wohl nicht verhindern, dass jemand Offline-Zugirff bekommt.

Vielleicht geht es dir aber darum, die Daten zu schützen, die du beim ersten Online-Login herunterlädst. In diesem Fall kannst du einfach sämtliche Daten mit dem Passwort des Users (am besten nicht mit dem Passwort selber, sondern einem daraus abgeleiteten Key, z.B. mit PBKDF2) verschlüsseln. Man kann der App dann zwar immernoch vortäuschen, dass man ein korrekter Offline-User ist, aber man kommt nicht an fremde Daten. Die Daten liegen also immer nur verschlüsselt auf dem Gerät und werden nur entschlüsselt, wenn sie gebraucht werden (und werden nie entschlüsselt auf den Speicher geschrieben). So machen das auch die Cloud-Passwort-Manager, die einen Offline-Login anbieten, siehe z.B. LastPass.

Der Ablauf sieht dann etwa so aus:
  1. Login auf Server
  2. Daten laden und mit User-PW verschlüsselt auf Phone speichern
  3. Bei Offline-Login: User gibt Name + Passwort ein
  4. App versucht mit Passwort die Daten zu entschlüsseln
  5. Entschlüsseln funktioniert: Offline-Login erfolgreich
  6. Entschlüsseln schlägt fehl: Passwort war falsch

Edit: Das Passwort muss natürlich so bei jedem Offline-Login eingegeben werden und darf nicht irgendwo gespeichert werden. Nur die Daten der App sind verschlüsselt. So kann niemand ohne Key die Daten entschlüsseln.
:thumbsup::thumbsup::thumbsup:
 
Ähnliche Themen - Konzept für Offline-Login Antworten Datum
0