Laden...

Wie Inhalte in einer App verschlüsseln?

Erstellt von Paschulke vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.814 Views
P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 3 Jahren
Wie Inhalte in einer App verschlüsseln?

Hallo!

Ich möchte einen TOTP Generator für Windows erstellen (im Prinzip genauso wie die Android App "Google Authenticator").
Grundsätzlich habe ich das hinbekommen. Meine Frage ist, wie kann ich die Schlüssel, die ich für die Generierung der Einmalpasswörter benötige, sicher speichern?

Aktuell habe ich es so gelöst, dass ich sie mit AES verschlüsselt in eine Textdatei schreibe.
Aber wie lege ich den Schlüssel für die AES-Verschlüsselung sicher ab? Nach etwas Recherche schien mir der einizig sichere Weg die Vergabe eines Passworts durch den Nutzer selber zu sein. Also vergibt der Nutzer nun beim erstmaligen Start ein Passwort, ich speichere den mit Argon2 verschlüsselten Hashwert des Passworts in einer Textdatei ab und lasse den Benutzer bei jedem Programmstart das Passwort neu eingeben.
Das Passwort muss ich allerdings jeweils im Speicher halten, weil ich es ja für die AES-Verschlüsselung benötige.

Fragen:

  1. Ist es ok das Passwort im Speicher zu halten? Ich verwende einen SecureString - aber der ist ja nicht wirklich sicher. Aber irgendwo muss der Key für die Verschlüsselung ja schließlich stehen...
  2. Ist die Vorgehensweise sinnvoll? Oder gib es bessere Möglichkeiten?
  3. Wie macht es Google bei seiner App? Da muss ich kein Passwort eingeben!?
16.807 Beiträge seit 2008
vor 3 Jahren

Apps auf Windows (UWP), Android, IOS haben einen isolierten Datenbereich.
D.h. Anwendung A kann gar nicht auf Anwendung B zugreifen und ist daher "by Design" sicher.
Konzeptionell ist also eine Json-Datei in Deinem Anwendungsbereich "sicher".

Mit Hilfe von root Access (zB Android) kann man trotzdem auf diesen Datenbereich zugreifen.
Rooting gilt aber allgemein als Zero Warranty, was prinzipiell dann heisst: nicht mehr in Deinem Einfluss, da Du die Bordmittel verwendet hast.

Gibt aber zB auf Android auch mit Jetpack Security ein Framework, mit dem Du lokale Daten verschlüsseln kannst.

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 3 Jahren

Ich bin nicht sicher, ob das richtig rüber kam. Das Programm soll eine Windows 10 Desktop Anwendung sein. Deine Antwort bringt mich leider nicht wirklich weiter...

16.807 Beiträge seit 2008
vor 3 Jahren

Auf Windows kannst Du sicher Credentials im Windows Credential Manager hinterlegen.
Das verwendet zB. auch die Office Suite für Credentials.

Deine Antwort bringt mich leider nicht wirklich weiter...

Ich gelobe mir Besserung.....

4.931 Beiträge seit 2008
vor 3 Jahren

Da sollte dir z.B. das NuGet Paket CredentialManagement (ein C# Wrapper für den "Windows Tresor") weiterhelfen.

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 3 Jahren

OK, vielen Dank euch beiden! Das sieht gut aus. 😃

Allerdings hatte ich meine Anwendung mit .NET Core erstellt. Das NuGet Paket sieht älter aus. Kennt jemand ein Paket für .NET Core?
Ansonsten muss ich mir den Quellcode herunterladen und versuchen ihn auf .NET Core bzw. Standard zu konvertieren...

16.807 Beiträge seit 2008
vor 3 Jahren

Windows Tresor ist der deutsche Name vom Windows Credential Manager.

Ansonsten muss ich mir den Quellcode herunterladen und versuchen ihn auf .NET Core bzw. Standard zu konvertieren...

Auf den ersten Blick sollte das kein Problem sein, das entsprechend zu migrieren.
An der Windows API selbst hat sich nichts geändert.

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 3 Jahren

Nochmal interessehalber:

  • Wäre der in meinem ersten Kommentar beschriebene Ansatz sicher?
  • Und habe ich es richtig verstanden, dass man Passwörter im Speicher halten kann, weil man davon ausgeht, dass der Benutzer ein grundsätzliches Problem hat, wenn jemand den Speicher analysieren kann?
P
441 Beiträge seit 2014
vor 3 Jahren

Wenn du - wie im ersten Kommentar - selber eine Datei verschlüsselst, was machst du mit dem Schlüssel für die Datei?
Das verschiebt dein Problem nur ein Stückchen weiter.

Der Credential Manager ist an das Benutzerkonto des angemeldeten Benutzers gebunden. Das verschiebt das Problem natürlich auch nur, dafür aber an die Anmeldung des Benutzers.

16.807 Beiträge seit 2008
vor 3 Jahren

Und habe ich es richtig verstanden, dass man Passwörter im Speicher halten kann, weil man davon ausgeht, dass der Benutzer ein grundsätzliches Problem hat, wenn jemand den Speicher analysieren kann?

Das bezieht sich nur auf einen Isolated Storage, den Du auf Windows nur mit UWP hast.

Siehe Isolated Storage

P
Paschulke Themenstarter:in
69 Beiträge seit 2011
vor 3 Jahren

Wenn du - wie im ersten Kommentar - selber eine Datei verschlüsselst, was machst du mit dem Schlüssel für die Datei?
Das verschiebt dein Problem nur ein Stückchen weiter.

Aber wie löst man dann so eine Aufgabe sinnvoll?

Ich lasse ja genau deshalb den Schlüssel vom Benutzer eingeben (sein Passwort). Und nach allem was ich gelesen habe, sollte eine Passwortverschlüsselung z. B. mit Argon2 nicht mehr entschlüsselbar sein (mit aktuellen Mitteln).
Und ob ich es selber verschlüsselt ablege, oder von Windows verwalten lasse, ist dann theoretisch egal. Die Credential Manager-Lösung hätte allerdings einige Vorteile, weshalb ich diese favorisieren würde.

--

Und wegen des Passworts im Speicher: Gibt es eine empfohlene Vorgehensweise? Irgendwie muss ich es ja zwischenzeitlich halten.

16.807 Beiträge seit 2008
vor 3 Jahren

Aber wie löst man dann so eine Aufgabe sinnvoll?

Eine Lösung wurde Dir ja genannt.

Ansonsten ist eine potentielle Lösung auch immer abhängig von der Umgebung.
Unter Windows ist eine entsprechende User Identity teil des gesamten Rechtesystems.
Windows Security - Windows Hello

Was Du halt machst ist das Rad entsprechend neu zu erfinden statt Bordmittel zu nutzen.
Ich würde wann immer möglich einfach Windows die Identitätsverwaltung überlassen.
Machen (Gott sei dank) immer mehr Applikationen.

Und ob ich es selber verschlüsselt ablege, oder von Windows verwalten lasse, ist dann theoretisch egal.

Nein ist es nicht.

Wenn jemand an ein verschlüsseltes Passwort kommt, ist das immer auch ein Indiz auf ein solches.
Das ist der Baustein jeder Rainbow Table.

Daher: verwende wann immer möglich ein Credential Store.

Gibt es eine empfohlene Vorgehensweise?

Gar nicht (nutze Bordmittel!) oder zu kurz wie möglich halten.