Morgen!
Ich benutze ein Passwort für bestimmte Operationen.
Dieses möchte ich gerne verschlüsselt abspeichern und im Klartext wieder lesen können.
Es handelt sich um keine Passwortabfrage!
Doch brauche ich nicht ein weiteres Passwort um das eigentliche PW zu verschlüsseln?
Und da ich kein Passwort im Klartext in meinen Sourcecode schreiben möchte,
müsste ich ja dann das Passwort zum Verschlüsseln des anderen und dessen anderen ... auch wieder verschlüsseln ?? 😜
Ungefähr so:
Passwort <- encrypt mit pw1 <- encrypt mit pw2 <- encrypt mit ...
Ich drehe mich wie doof im Kreis und finde kein Ende ! 🤔
Danke jeden, der mir aus dem Teufelskreis hilft 😁
Hallo words_sourcecode,
Wie bereits öfter hier im Forum diskutiert sind symmetrische Verfahren in .Net immer erstmal unsicher. Du könntest dein Passwort höchstens noch als MD5 bzw. SHA1 Hash im Quellcode ablegen... aber selbst das könnte man einfach austauschen wenn man will ^^
Also such erstmal hier im Forum danach.
Hallo words_sourcecode,
an dieser Stelle musst du ganz klar zwischen einer symmetrischen / asymmetrischen Verschlüsselung und einer kryptologischen Hashfunktion unterscheiden.
Verschlüsselte Klartexte, also Geheimtexte, können wieder entschlüsselt werden, um aus ihnen den Klartext – unter Kenntnis des Schlüssels – wiederherzustellen. Hashfunktionen, auf der anderen Seite, funktioneren wie ein Falltür, nämlich nur in _eine _Richtung. Das heißt, dass es eben nicht erstrebenswert ist, und bei einer guten Hashfunktion auch nicht "leicht" zu machen, diese wieder umkehren zu können.
Jetzt zum eigentlichen Punkt: Passwörter sollten niemals im Klartext abgelegt werden. Gespeichert werden sollte lediglich ein ++Hash ++von ihnen. Du errechnest mit der gleichen Hashfunktion den Hash des eingegebenen Passwortes und vergleichst diesen mit dem gespeicherten Hash. Stimmen die beiden Werte überein, wurde mit an Sicherheit grenzender Wahrscheinlichkeit das richtige Passwort eingegeben.
Der Vorteil dieses Verfahrens liegt darin, dass keine Rückschlüsse auf das Passwort eines Nutzers gezogen werden können, da aus einem gegebenen Hash nicht ohne riesig hohen Aufwand der Klartext wiederhergestellt werden kann. Die lange Zeit gängige Hashfunktion MD5 solltest du dabei meiden und auf kryptographisch stärkere Funktionen, wie z.B. SHA-512 aus der SHA-Reihe, ausweichen.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo words_sourcecode,
ich drehe mich wie doof im Kreis und finde kein Ende
korrekt. Wie in [FAQ] DB-Password/Kennwort/Connection-String sicher speichern beschrieben, gibt es da kein Ende. Insofern ist dieser Thread leider auch unnötig, weil die Antwort schon in der FAQ steht.
Das ist übrigens keine "Generelle Frage zur Verschlüsselung", sondern eine ganz konkrete. Ich habe den Titel geändert.
Hallo TheGear, hallo m0rius,
Du könntest dein Passwort höchstens noch als MD5 bzw. SHA1 Hash im Quellcode ablegen
dann bekommt man aber den Klartext nicht mehr, was in vielen Fällen natürlich gerade gewünscht ist, aber words_sourcecode hat ja geschrieben, dass es nicht darum geht, eine Passwortabfrage zu realisieren, wo man Hashs verwenden kann, sondern dass er das Passwort im Klartext braucht. Solche Fälle es gibt eben leider, z.B. wenn sich das Programm gegenüber einer Datenbank oder einem Dienst authentifizieren muss und diese/dieser nunmal das Passwort im Klartext erwartet. Insofern ist der Rat, möglichst kein Passwort im Klartext zu speichern, zwar grundsätzlich richtig, aber leider nicht in allen Fällen durchzuhalten.
herbivore