Eigener Paßwortmanager in C#, wie sicher ist der?
-
Hallo,
mein Paßwortmanager verlangt vom Benutzer zwei Paßwörter als Passphrase und Salt, sowie eine Ganzzahl als Iterations. Aus dem Salt-String wird der SHA512-Hashwert berechnet. Mit dem RFC2898DeriveBytes-Objekt erzeuge ich aus Passphrase, Salt-Hash und Iterations den Schlüssel für die AES-Verschlüsselung mit dem RijndaelManaged-Objekt. Letzterer hat CBC, kein Padding (komme ich später zu) sowie Key- und Blockgrösse von 256 Bit.
Gespeichert wird alles Verschlüsselte in einer Access-Datei. Jeder verschlüsselte Text erhält beim Abspeichern einen eigenen IV. Gespeichert in der Access-Datei werden der IV und der verschüsselte Text, sowie eine ID. Das Padding für die nötigen Füllbytes habe ich selbst entworfen, weil das mitgebrachte Padding des RijndaelManaged-Objektes Schwierigkeiten machte. Dazu benutze ich das Random-Objekt mit einer Initialisierung mit 'DateTime.Now.Millisecond'.
Clou des Programms ist, daß auf Richtigkeit der Benutzerpaßwörter garnicht geprüft wird, sondern das Programm nimmt Passphrase, Salt und Iterations nur an und arbeitet damit, egal ob sie richtig oder falsch sind. Nur mit richtigen Passphrase, Salt und Iterations kommt man an die gespeicherten verschlüsselten Daten, bei falschen Werten sieht der Benutzer nur Zeichensalat. Passphrase, Salt und Iterations werden also nicht abgespeichert.
Seht ihr dort evtl. Unsicherheiten oder würdet ihr es auch so machen? Bin für alle Meinungen offen, außer einer: ich will ein eigenes Programm haben und kein fremdes benutzen
Vielen dank
-
Hoppelmoppel schrieb:
Bin für alle Meinungen offen, außer einer: ich will ein eigenes Programm haben und kein fremdes benutzen
Und damit hast Du bereits das Sicherheitsrisiko #1 identifiziert. Was läßt Dich glauben das Du mit deinem Wissenstand bessere Verschlüsselung hinbekommst als Forscher die sich teilweise seit Jahrzehnten mit der Thematik beschäftigen? (wie z.B. ein Bruce Schneier)
Wenn Du wissen willst ob Dein Verfahren sicher ist, dann stell den kompletten Sourcecode offen. Nur wenn man trotz genauem Wissen des Verfahrens nicht in der Lage ist die verschlüsselten Sachen zu cracken, dann ist Dein Verfahren gut.
-
Hoppelmoppel schrieb:
SHA512-Hashwert RFC2898DeriveBytes-Objekt AES RijndaelManaged-Objekt CBC Padding
Bullshit!
-
Gratulation, nach dem du dann die Passwörter aus der Datei entschlüsselt hast stehen sie im Klartext im RAM.
-
loks schrieb:
Und damit hast Du bereits das Sicherheitsrisiko #1 identifiziert. Was läßt Dich glauben das Du mit deinem Wissenstand bessere Verschlüsselung hinbekommst als Forscher die sich teilweise seit Jahrzehnten mit der Thematik beschäftigen? (wie z.B. ein Bruce Schneier)
Hier liegt ein Missverstaendnis vor. Du hast zwar Recht mit dem Sicherheitsrisiko, aber ich schrieb, dass ich mein eigenes Programm benutzen will und kein fremdes - in einem Programmmiererforum zu lesen, ich solle doch nichts selber machen sondern etablierte Software verwenden, klänge nach meinem Dafürhalten etwas merkwürdig. Ich schrieb nichts von einer eigenen Verschlüsselungsmethode sondern daß ich AES/Rijndael mit 256bit Schluessel einsetze, ein Passwort nach RFC2898 generiere und keine Überpruefung auf Richtigkeit durchführe.
Ich wiederhole meine Frage, was kann jetzt noch Unsicher sein an meinem Programm? Was würden andere Programmierer noch berücksichtigen?
-
SG1 schrieb:
Bullshit!
Das ist alles andere als ein kompetenter Beitrag!
Bin ich hier nicht in einem Forum für Programmierer?
-
O.o schrieb:
Gratulation, nach dem du dann die Passwörter aus der Datei entschlüsselt hast stehen sie im Klartext im RAM.
Es befindet sich nur ein vom Benutzer ausgewählter Datensatz entschlüsselt im Speicher, eben um ihn am Monitor anzuzeigen. Aber es ist nie alles entschlüsselt im Speicher.
Was kann man Deiner Meinung nach unternehmen um dieses "Speicher-Problem" zu lösen? Gibt es noch andere Punkte wo Unsicherheiten auftreten und wie kann ich ihnen begegnen?