Worn Geschrieben 19. Dezember 2007 Geschrieben 19. Dezember 2007 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 Zitieren
Guybrush Threepwood Geschrieben 19. Dezember 2007 Geschrieben 19. Dezember 2007 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. Zitieren
Worn Geschrieben 19. Dezember 2007 Autor Geschrieben 19. Dezember 2007 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 Zitieren
Guybrush Threepwood Geschrieben 19. Dezember 2007 Geschrieben 19. Dezember 2007 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? Nein Zitieren
Worn Geschrieben 19. Dezember 2007 Autor Geschrieben 19. Dezember 2007 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 Zitieren
Guybrush Threepwood Geschrieben 19. Dezember 2007 Geschrieben 19. Dezember 2007 naja du könntest mal schauen ob dir die Data Protection API weiterhilft. Kann da allerdings selber nichts genaueres zu sagen... Zitieren
marcom Geschrieben 20. Dezember 2007 Geschrieben 20. Dezember 2007 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 Zitieren
Argbeil Geschrieben 20. Dezember 2007 Geschrieben 20. Dezember 2007 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. Zitieren
Empfohlene Beiträge
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.