Laden...

Sicheres, lokales Passwort

Erstellt von AbrahamM vor 2 Jahren Letzter Beitrag vor 2 Jahren 601 Views
A
AbrahamM Themenstarter:in
3 Beiträge seit 2021
vor 2 Jahren
Sicheres, lokales Passwort

Hallo,

ich hoffe ich bin in diesem Forum korrekt. Falls nicht, bitte ich um Entschuldigung, ich bin zum ersten Mal hier. 🙂

Vor kurzem habe ich angefangen C# zu lernen. Als kleines Übungsprojekt habe ich mir dann überlegt, einen kleinen Passwort-Manager zu basteln, der mir automatisch sichere Passwörter generieren kann und diese direkt auch in einer Datei speichert. War bisher auch alles sehr lehrreich und ich bin fast fertig; bis auf eine Sache, wo mir keine gute Lösung einfällt.

Die Passwörter sollen natürlich nicht im Klartext irgendwo auf dem PC liegen. Sie sollen wenigstens Ansatzweise sicher sein, deswegen möchte ich die Datei verschlüsseln.
Meine Idee dabei war: Der Benutzer kann ein Masterpasswort festlegen und nur, wenn er das korrekte Passwort angegeben hat, dann wird die Datei entschlüsselt und die Passwörter können abgerufen werden.

Das Verschlüsseln und Entschlüsseln habe ich hinbekommen. Mein Problem ist nun eher das Masterpasswort. Auch dieses muss ich ja irgendwo speichern. Ich habe es als SHA512-Hash in einer Datei gespeichert. Nun kann aber natürlich theoretisch jeder kommen, die Datei mit einer eigenen Datei austauschen und schon kann er mit seinem eigenem Passwort die Datei entschlüsseln.

Kann mir da jemand einen Tipp geben ob und wenn ja, wie das besser zu lösen wäre? Mir fällt einfach nichts ein, jede Lösung die mir nun eingefallen ist, entpuppte sich nach etwas längerem Nachdenken als sehr einfach zu umgehen.

Ich würde mich sehr freuen, wenn mir jemand den ein oder anderen Tipp geben kann.

Vielen Dank! 🙂

16.807 Beiträge seit 2008
vor 2 Jahren

Nun kann aber natürlich theoretisch jeder kommen, die Datei mit einer eigenen Datei austauschen und schon kann er mit seinem eigenem Passwort die Datei entschlüsseln.

Korrekt. Das ist von grundauf eine unsichere Infrastruktur und gilt für jede Art eines solchen "Master"-Vorgehens.
Leider ist Security through obscurity jedoch weit verbreitet bei Applikationen mit "lokalem Benutzer".

Unter Windows sollte man Credentials im Windows Credential Manager abgelegen, der ist genau für solche Zwecke da und hier werden zB auch Token von Microsoft Produkten, Git, Password Managern (zB 1Password) und Co abgelegt. Einfach mal öffnen, dann siehst, welche Applikationen das bei Dir so machen.
Es ist nicht notwendig das selbst zu basteln.

D
261 Beiträge seit 2015
vor 2 Jahren

Du musst deine Passwortdatenbank mit dem Masterpasswort (bzw. mit einem Hash des Passworts) verschlüsseln, dann kann keiner irgendwas austauschen.
So macht es bspw. auch KeePass. (Ein Open Source Passwortmanager geschrieben in C#)

Wenn dann jemand versucht die Passwortdatenbank mit einem falschen Passwort zu entschlüsseln, dann kommt nur Kauderwelsch raus.

16.807 Beiträge seit 2008
vor 2 Jahren

Wenn dann jemand versucht die Passwortdatenbank mit einem falschen Passwort zu entschlüsseln, dann kommt nur Kauderwelsch raus.

Das ist ein Mechanismus zur Abwehr einer Brute-Force-Methode
Mir fällt leider der Name dazu nicht ein.

KeePass verwendet den WCM nicht aufgrund von Cross Platform Anforderungen bzw. unterstützt dieses Verhalten erst mit Version 2.0.

KeePass 1.x does not support encrypting databases using Windows user account credentials. Only KeePass 2.x and higher support this.

WCM ist die bessere und sicherere Wahl, wenn man diese in der Form nicht hat.

A
AbrahamM Themenstarter:in
3 Beiträge seit 2021
vor 2 Jahren

Unter Windows sollte man Credentials im Windows Credential Manager abgelegen, der ist genau für solche Zwecke da und hier werden zB auch Token von Microsoft Produkten, Git, Password Managern (zB 1Password) und Co abgelegt. Einfach mal öffnen, dann siehst, welche Applikationen das bei Dir so machen.
Es ist nicht notwendig das selbst zu basteln.

Vielen Dank, davon höre ich zum ersten Mal. Das werde ich mir mal genauer ansehen. 🙂

Du musst deine Passwortdatenbank mit dem Masterpasswort (bzw. mit einem Hash des Passworts) verschlüsseln, dann kann keiner irgendwas austauschen.

Dankeschön, warum auch immer ich nicht auf diese Idee kam - dabei ist das ja fast schon die naheliegendste Lösung.

D
261 Beiträge seit 2015
vor 2 Jahren

Ich glaube einer von uns hat die Frage falsch verstanden.

So wie ich es lese, hat Abraham eine Funktion die seine Datenbank verschlüsselt und entschlüsselt (mit einem festen Schlüssel, ungleich dem Masterpasswort) und er möchte dass die Datenbank nur mit einem bestimmten Passwort entschlüsselt werden kann. Um das zu erreichen hat er deswegen ein Passwort als Hash in einer Datei abgelegt. Wenn jetzt jemand die Datenbank entschlüsseln möchte, prüft er in seinem Programm ob das eingegebene Passwort gleich dem Hash in der Datei entspricht. Falls dem so ist dann stößt er den Entschlüsselungs-Mechanismus mit seinem festen Schlüssel (nicht dem Passwort) an.

D.h. in meinen Augen hat er nur nicht daran gedacht, dass die Verschlüsselungsfunktion selbst, das Masterpasswort verwenden kann. Dadurch muss auch nirgendwo das Masterpasswort gespeichert werden.

Wenn dann jemand versucht die Passwortdatenbank mit einem falschen Passwort zu entschlüsseln, dann kommt nur Kauderwelsch raus.
Das ist ein Mechanismus zur Abwehr einer
>

Mir fällt leider der Name dazu nicht ein.

Nein, ich meine eine ganz normale symmetrische Verschlüsselung. Wenn ich etwas mit einem Schlüssel A verschlüssle und es versuche mit Schlüssel X zu entschlüsseln, dann kommt halt irgendwas raus.
Du meinst vermutlich die "Key derivation", dabei wird X-mal der Schlüssel "verformt" um so die benötigte Entschlüsselung bzw. Rechenzeit zu erhöhen.

16.807 Beiträge seit 2008
vor 2 Jahren

D.h. in meinen Augen hat er nur nicht daran gedacht, dass die Verschlüsselungsfunktion selbst, das Masterpasswort verwenden kann. Dadurch muss auch nirgendwo das Masterpasswort gespeichert werden.

Auch das ist halt nicht notwendig, wenn man einfach den WCM verwendet 🙂

Im Endeffekt basiert aber auch der WCM (wie die meisten solcher Implementierungen) mit einer Master Key Struktur, nem Salt und anderen Zusätzen, zB das von Dir angesprochene PBKDF2.
Der WCM nimmt Dir also vieles ab: das sichere Speichern, das gesamte Verwalten, der sichere Zugriff.

Wozu das alles selbst machen? Unnötiger Aufwand mit Fehlerpotential.

Du meinst vermutlic
h die "Key derivation", dabei wird X-mal (einstellbar) der Schlüssel "verformt" um so die benötigte Entschlüsselungszeit zu erhöhen.

Nein.

Lokale Passwort-Implementierungen haben ein großes Angriffspotential von Brute Force. Je schneller ausprobiert werden kann, desto schneller errät man an das Passwort.
Der einzige Schutz lokal davor ist, dass das Passwort möglichst komplex ist, zB durch Länge oder Salting etc.

Ein Verfahren zur Prävention ist, dass das Ausprobieren einfach länger dauert, in dem man dem Mechanismus so spät wie möglich sagt, dass das ausprobierte Passwort falsch ist.
Und basierend auf dieser Idee gibt eine Brute Force Abwehr-Architektur/Methode, die ein falsches (Master-)Passwort nicht bestätigt (aka "Das Passwort ist falsch"), sondern dann einfach ungültige/"kauderwelsche" Werte rauskommen - so hatte ich Dein "Kauderwelsch" verstanden.
Das streckt die Dauer eines BF Angriffs enorm hinaus, weil das Ausprobieren viel viel längert dauert (-> weil die Info fehlt, ob was falsch ist).

Der Windows Credential Manager arbeitet intern auch mit einem Master Password (weil als Implementierung DPAPI verwendet wird), aber man muss sich um das drum herum nicht kümmern.

A
AbrahamM Themenstarter:in
3 Beiträge seit 2021
vor 2 Jahren

D.h. in meinen Augen hat er nur nicht daran gedacht, dass die Verschlüsselungsfunktion selbst, das Masterpasswort verwenden kann. Dadurch muss auch nirgendwo das Masterpasswort gespeichert werden.

Das ist übrigens genau richtig gewesen.

Wenn ich aber diesen Windows Credential Manager richtig verstanden habe, dann macht der genau das was ich manuell zusammengebastelt habe. Man spart sich also im Endeffekt einfach viel Arbeit, weil das zumindest unter Windows bereits vorgefertigt vorhanden ist.

Rein zum Lernen werd ich jetzt aber meine Lösung fertig machen und beibehalten. Aber wenn ich sowas nochmal brauche, werd ich wohl auf die Lösung von Abt verwenden, weil man sich damit wohl einiges an Arbeit/Zeit spart.

Falls es jemanden interessiert, im deutschen findet man das Ding bei Windows mit "Anmeldeinformationsverwaltung", wenn man sich angucken will wer/was damit Passwörter auf dem PC speichert. 🙂

16.807 Beiträge seit 2008
vor 2 Jahren

Solangs nur der Lerneffekt ist, da kannste ja machen was Du willst; je mehr, desto besser fürs Verständnis.
Sobald es produktiv wird, gibts spätestens mit DSGVO auch entsprechende gesetzliche Rahmenbedingungen für die Handhabung Zugangsdaten. Da ist es ratsam, wenn man solche Implementierungen den Profis überlässt 🙂