myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Entwicklungs- und Laufzeitumgebung (Infrastruktur) » Wie Inhalte in einer App verschlüsseln?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie Inhalte in einer App verschlüsseln?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Paschulke
myCSharp.de-Mitglied

Dabei seit: 27.03.2011
Beiträge: 57


Paschulke ist offline

Wie Inhalte in einer App verschlüsseln?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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!?
19.05.2020 18:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.817
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
19.05.2020 18:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Paschulke
myCSharp.de-Mitglied

Dabei seit: 27.03.2011
Beiträge: 57

Themenstarter Thema begonnen von Paschulke

Paschulke ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Paschulke am 19.05.2020 18:34.

19.05.2020 18:33 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.817
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Zitat:
Deine Antwort bringt mich leider nicht wirklich weiter...

Ich gelobe mir Besserung.....
19.05.2020 18:37 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.578
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da sollte dir z.B. das NuGet Paket  CredentialManagement (ein C# Wrapper für den "Windows Tresor") weiterhelfen.
19.05.2020 18:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Paschulke
myCSharp.de-Mitglied

Dabei seit: 27.03.2011
Beiträge: 57

Themenstarter Thema begonnen von Paschulke

Paschulke ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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...
19.05.2020 18:51 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.817
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Windows Tresor ist der deutsche Name vom Windows Credential Manager.

Zitat:
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.
19.05.2020 18:54 Beiträge des Benutzers | zu Buddylist hinzufügen
Paschulke
myCSharp.de-Mitglied

Dabei seit: 27.03.2011
Beiträge: 57

Themenstarter Thema begonnen von Paschulke

Paschulke ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
20.05.2020 07:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 267
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
20.05.2020 17:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.817
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Paschulke:
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
20.05.2020 17:42 Beiträge des Benutzers | zu Buddylist hinzufügen
Paschulke
myCSharp.de-Mitglied

Dabei seit: 27.03.2011
Beiträge: 57

Themenstarter Thema begonnen von Paschulke

Paschulke ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Papst:
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.
22.05.2020 07:42 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.817
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Paschulke:
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.

Zitat von Paschulke:
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.

Zitat von Paschulke:
Gibt es eine empfohlene Vorgehensweise?

Gar nicht (nutze Bordmittel!) oder zu kurz wie möglich halten.
22.05.2020 12:37 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.05.2020 17:01