Zum Inhalt springen

Passwort sicher abspeichern / verschlüsseln / entschlüsseln


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

aus aktuellem Anlass beschäftige ich mich ein wenig mit dem ver- und entschlüsselt von Passwörtern. Bei einem recht einfachen Szenario komme ich schon an Problemen nicht vorbei. Evtl. harpert es hier am Verständis oder am handlinig, daher frage ich mal nach.

Was ich mache:

Ich habe eine kleine Testanwendung geschrieben. Hier wird der Benutzer nach dem Klick auf einen Button nach seinem Passwort gefragt. Nachdem dieses eingegeben wurde klickt man auf "speichern". Nun soll dieses Passwort (aus einem "Sternchen-Textfeld" in einen String geschrieben werden und dieser dann verschlüsselt werden. Danach möchte ich den kryptischen String in eine Textdatei speichern. Sinn und zweck ist es, dass Passwort später wiederzuverwenden ohne es erneut eingeben zu müssen.

Jetz das Problem:

Wenn ich das Passwort im String "pwd" verschlüssele muss ich ja einen Key angeben (RijndaelManaged, md5). Speicher ich den Key als String "blablabla" im Code (so mach ich es im Test hier) so kann dieser Key durch bestimmte Programme (Sysinternals Process Explorer z.B.) gelesen werden. Der Sysinternals Process Explorer kann mir zum Beipspiel die Strings eines Prozesses anzeigen. Suche ich dort nach meinem Key, dann finde ich den Klartext wieder. Ich kann zwar nicht einschätzen wie unsicher das ist aber wenn der Key da ist, dann kann jemand auch das Passwort entschlüsseln!

Meine Frage also:

Wie bekomme ich es hin, das man ein Passwort in einer Textdatei oder ähnlichem verschlüsselt abspeichert und dieses dann auch wieder entschlüsseln kann so das es auch richtig sicher ist? Will heissen, wie

schaffe ich es den KEY im Code zu verstecken, dass diesen niemand irgendwie auslesen kann?

Ist es dumm den Key als String oder Char im Code zu hinterlegen? Oder gibt es einen Befehl oder einen Modifizierer den man beifügen kann so das kein anderes Programm da ran kommt?

Ich hoffe ich habe mich verständlich ausgedrückt. Ich bin noch nicht sooo weit bei dem Thema vorgedrungen daher bitte ich und Infos.

Vielen Dank!

Grüße

Ben

Geschrieben

Wenn du ein Passwort irgendwo ablegst kann es grundsätzlich immer irgendwie wieder ausgelesen werden. Wie du ja selber gemerkt hast bringt es dir auch nichts das Passwort wieder zu verschlüsseln da du ja dann nicht weißt wohin mit dem Schlüssel.

Das übliche Vorgehen mit Passwörtern ist das man es vom Benutzer eingeben lässt und aus der Eingabe dann einen Hashwert (z.B. MD5) bildet.

Dieser Hashwert lässt sich nie wieder in das original Passwort zurückrechnen (zumindest sollte er das nicht mit einem aktuellen Hash Algorithmus), aber mit der selben Eingabe bekommst du immer den selben Hashwert.

Diesen Hashwert kannst du dann abspeichern und beim nächsten mal lässt du den Benutzer wieder sein Kennwort eingeben, erzeusgt wiederden Hashwert und vergleichst ihn mit dem eingegebenen.

Es kann dabei zwar passieren das jemand anderes ein falsches Kennwort eingbit welches den selben Hashwert liefert, das ist aber sehr sehr unwahrscheinlich.

Wenn jetzt irgendwer irgendwie an diese Hashwerte drankommt kann er damit erstmal nichts anfangen, denn wenn er sie als Passwort eingibt wird daraus ja ein neuer Hashwert gebildet.

Die einzige Möglichkeit die er hat ist zu versuchen einen entsprechenden Wert zu finden der den selben Hash liefert um ihn dann als Passwort zu verwenden. Je nach komplexiblität des Passworts kann das wenige Minuten oder viele hundert Jahre dauern ;)

Trotzdem solltest du diese Hashwerte natürlich auch so weit wie möglich vor unbefugtem Zugriff schützen.

Geschrieben

Hy,

danke für die ausführliche Antwort. Ja so sollte es am besten laufen. Hier ist aber ja gewünscht das Passwort zu speichern. Das ist natürlich keine schöne Sache und sollte man eigentlich auch nicht machen aber ich suche nur den Weg, wenn man es schon macht, der am sichersten währe.

Simpel ausgedrückt halt. Kann ich einen "String" oder eben einen Key (kann ja auch ein anderer) Datentyp sein so deklarieren oder im Programm hinterlegen, das dort niemand rankommt?

Übrigends den Key als Char definiert kann der Process Explorer schon nicht mehr ran. ( sicher aber ein anderes Tool :-()

Grüße

Ben

Geschrieben

Klare Ansage... dan nehm ich das mal so an... Kennst du noch gute Websites zu

dem Thema? Wär dankbar für ne Fundgrube. Obwohl MSDN hier recht nette Code Clips bereithält...

Ben

Geschrieben

Es gibt auch symmetrische Algorithmen, d.h. der Input wird verschlüsselt und kann wieder zum Input entschlüsselt werden. Du könntest also das Passwort symmetrisch verschlüsseln und den verschlüsselten Wert speichern. Kurz bevor du das Passwort wieder brauchst, entschlüsselst du ihn wieder. Die ver/ent-schlüsselung erfolgt mit mathematischen Berechnungen (z.B. Polynome sehr hoher Ordnung) und kann mit einem Debugger nur recht schwer gehacked werden. Ist aber natürlich möglich. Bei einem 0815 Programm wird sich aber kein Hacker die Mühe machen, den Algo zu knacken. Sorg aber dafür, dass du das ent/ver-schlüsseln nicht einfach in eine dll packst die dann ganz leicht ausgetauscht werden kann ;)

Geschrieben

1. Wahl ist die bereits genannten Hash-Version. Anderenfalls würde ich eine Verschlüsselung mit einem Schlüsselpaar wählen.

Das Passwort wird mit dem Private Key verschlüsselt und der Publik Key liegt im Programm.

Verschlüsseln könnte man dann mit einem Webservice der Zugriff auf den Private Key hat und über SSL angesprochen wird.

Aber die sicherste Variante ist es, das Password gar nicht zu speichern.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...