PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Wie Passwort verschlüsseln?


Gast
2008-09-16, 22:41:04
Hallo zusammen :)

Hier die Ausgangslage:
Ich habe eine Access-DB, welche mit einem Passwort geschützt ist.
Jetzt habe ich ein C# Programm geschrieben, dass mir in der DB Werte aus-
liest. Das Passwort ist im Moment fest im Quellcode hinterlegt.
Wenn jetzt jemand das Passwort in der DB ändert, muss ich den Quellcode neu
übersetzen. Kann ich das Passwort verschlüsselt in einem XML-File speichern, so
das man es hier verschlüsselt hinterlegen kann?
Ändert man das Passwort in der DB, muss man es auch im XML-File ersetzen.

Kann mir jemand helfen?
Danke

samm
2008-09-16, 22:58:33
Du kannst z.b. per VBA, da es ja Access ist, nachdem das Passwort updated wurde es ins XML hineinschreiben. Standardverschlüsselungen oder Hashes wie MD5 oder die SQL PASSWORD-Funktion taugen dir wohl nicht so viel, wenn du die Verschlüsselung wieder rückgängig machen können musst, damit das Verbinden über das C#-Programm klappt. Da du Zugriff sowohl auf die Access-DB als auch die Source des C#-Programm zu haben scheinst, könntest du dir selbst etwas zusammenbauen, das den Ansprüchen genügt - wenns nicht zu sensibel ist ganz billig was per XOR mit dem gleichen Wert, sonst etwas mit keys.

Gast
2008-09-16, 23:02:09
Naja, wenn das Passwort jemand haben will, dann kommt er so oder so dran. Davon auszugehen, dass das PW hardcoded im Quelltext sicher wäre ist übrigens fahrlässig.

Gast
2008-09-16, 23:02:10
Mir ist gerade die Idee mit TripleDES gekommen.

SHA1 und MD5 scheiden aus, da ich ja das Passwort wieder auslesen (XML-File) muss...

Gast
2008-09-16, 23:04:45
Naja, wenn das Passwort jemand haben will, dann kommt er so oder so dran. Davon auszugehen, dass das PW hardcoded im Quelltext sicher wäre ist übrigens fahrlässig.

Mir ist klar, dass mit der BruteForce Methode mein Passwort geknackt werden
kann aber ich habe ja keine andere Wahl, da ich das Passwort in der XML-Datei
hinterlegen muss und nicht per Abfrage abfragen kann.

TheGamer
2008-09-16, 23:15:41
Das Passwort im Code ist genauso sicher als wie wenn du es im Klartext in ein Xml schreiben wuerdest uebrigens. Oder verschleierst du den .net Code?

Also tun musst du tatsaechlich was.

Gast
2008-09-16, 23:24:08
Die Frage ist nur: Welcher Weg ist der Beste?

Trap
2008-09-16, 23:37:36
Alles was ohne Benutzereingabe auskommt ist exakt genauso sicher wie Klartext.

Gegen was soll das eigentlich gesichert werden? Gegen Leute die den Rechner klauen? Gegen Mitbenutzer des Computers? Gegen rootkits?

Gast
2008-09-17, 08:56:58
Alles was ohne Benutzereingabe auskommt ist exakt genauso sicher wie Klartext.

Gegen was soll das eigentlich gesichert werden? Gegen Leute die den Rechner klauen? Gegen Mitbenutzer des Computers? Gegen rootkits?

Bitte 1. Posting lesen DANKE!

Bietchiebatchie
2008-09-17, 09:18:40
Wieso, Traps Frage ist absolut berechtigt - die DB hat ja aus irgendeinen Grund ein Passwort und die Antwort auf die Frage des Thread-Startes hängt eben von diesem Grund ab.

Gast
2008-09-17, 09:57:58
Wieso, Traps Frage ist absolut berechtigt - die DB hat ja aus irgendeinen Grund ein Passwort und die Antwort auf die Frage des Thread-Startes hängt eben von diesem Grund ab.

Wieso sollte man eine Access-DB mit einem Passwort schützen?
Na damit niemand die Daten sie, der nicht berechtigt ist?

Monger
2008-09-17, 10:05:55
Wieso sollte man eine Access-DB mit einem Passwort schützen?
Na damit niemand die Daten sie, der nicht berechtigt ist?
Du hast nicht verstanden, worauf Trap hinaus will.

Es geht nicht darum, dass die Datenbank gesichert werden soll. Die Frage ist: wer verwaltet den Schlüssel?

Du kannst an deiner Wohnungstür fünf Schlösser anbringen - wenn du die Schlüssel dann unter die Fußmatte legst, hilft dir ein starkes Schloss überhaupt nichts.
Genauso sinnfrei ist es, den Schlüssel mit einer Client-Software gleich mitzuliefern. Da ist es auch völlig egal, ob das Passwort verschlüsselt in einer XML Datei oder im Code rumliegt oder nicht. Dann nehm ich einfach die verschlüsselte XML Datei mit, und benutze sie als Login.

Das ist eine Wissenschaft für sich. Und je nachdem was für ein Szenario man eigentlich versucht zu verteidigen, bietet sich diese oder jene Strategie an. Trap hat also völlig recht, zu fragen gegen was und wen denn konkret die Daten geschützt werden sollen.

Gast
2008-09-17, 10:50:19
Mir ist klar, dass jemand in die XML-Datei hineinschauen kann und das ver-
schlüsselte Kennwort auslesen kann und dieses mit einer BF Atacke ent-
schlüsseln kann. Hier wäre nur die Möglichkeit per SHA1 oder MD5. (Hashwert).

OK nochmal:

Die Access-DB hat ein Passwort, dieses Passwort möchte ich nun verschlüsselt
in einem XML-File ablegen, damit mein C# Programm auf die DB zugreifen kann.
Wenn jetzt das Passwort der Access.DB geändert wird, muss man dieses
auch in der XML-Datei ändern. Was gibt es hier für einen möglichen Weg?

Monger
2008-09-17, 11:10:05
Ganz simpel: wenn dein Zugang abgelehnt wird, frag nach dem richtigen Passwort.

Gast
2008-09-17, 11:44:07
Ganz simpel: wenn dein Zugang abgelehnt wird, frag nach dem richtigen Passwort.

Sag mal willst du mich verarschen?
Ich kann keine Abfrage nach dem PW machen, weil das nur bestimmte User
wissen dürfen! Darum will ich es ja verschlüsselt in einem XML-File speichern!!!

Unglaublich!!!

Monger
2008-09-17, 11:47:03
Wie soll ich mir das denn jetzt vorstellen?
Heißt das, der Benutzer deines Clients soll nicht das Kennwort kennen mit dem er sich anmeldet?!?

Gast
2008-09-17, 11:50:55
Wie soll ich mir das denn jetzt vorstellen?
Heißt das, der Benutzer deines Clients soll nicht das Kennwort kennen mit dem er sich anmeldet?!?

Kannst du vielleicht nochmals mein 1. Posting lesen?
Ich weiss nicht, wie ich es noch erklären soll.

Gast
2008-09-17, 11:54:03
Mit Passwort meine ich das Passwort der DB

Gast
2008-09-17, 11:56:10
Im Prinzip wie ROT13 nur etwas stärker

][immy
2008-09-17, 11:59:39
Wieso willst du das passwort überhaupt im code oder sonst irgendwo abspeichern?
einfach eine eingabeaufforderung und das Passwort vom Benutzer eintippen lassen.

ein andere Möglichkeit wäre, z.B. wenn das Passwort nur beim ersten mal (pro Benutzer) fest hinterlegt werden sollte, dieses dann irgendwo hin verschlüsselt abzuspeichern. verschlüsseln könntest du beispielsweise mit der id des Benutzers die du abfragen kannst, indem du den derzeitig eingeloggten Benutzer vom System erfragst. zwar könnte dir das dann immernoch jeder mit .net wssen wieder entschlüsseln aber es ist schonmal ein wenig schwieriger.

für alles ander brauchst du "ganz einfach" ein rechtesystem.

Wenn es auch nur benutzer sind die eh keine ahnung von irgendwelcher programmierung haben, dann kannst du es auch ganz einfach base64-kodieren.

Gast
2008-09-17, 12:15:16
[immy;6789084']Wieso willst du das passwort überhaupt im code oder sonst irgendwo abspeichern?

Damit mein C# Programm automatisch auf die Access-DB zugreifen kann!

Trap
2008-09-17, 12:16:47
Es ist völlig nutzlos das Passwort verschlüsselt zu speichern, wenn man die Entschlüsselungsmethode direkt mitliefert (das Programm). Besonders wenn das Passwort dann auch noch im Klartext übers Netzwerk übertragen wird.

Wenn Access keine Benutzer mit eingeschränkten Zugriffsrechten kann, musst du zur Sicherung ein eigenes Serverprogramm schreiben, mit dem sich die Clients verbinden und nur das Serverprogramm hat das Datenbank Passwort. Die Leute, die das Passwort nicht wissen dürfen, bekommen nur den Client.

Gast
2008-09-17, 12:35:31
Es ist völlig nutzlos das Passwort verschlüsselt zu speichern, wenn man die Entschlüsselungsmethode direkt mitliefert

Das weiss ich selber!
Aber Otto-Normal-Benutzer sieht halt nur "RlbiBIw7x0ZSBlaW4gw58gaW0gTmFtZW4sIHfDpHJlbiB" anstelle des richtigen PW!

Vergesst es! Bitte!
Habe schon 2 mal geschrieben, dass ich mir dessen bewusst bin!
Scheint nur niemand zu lesen, sondern man gibt einfach seinen Senf dazu!!!

Bitte Thread schliessen
DANKE!

Trap
2008-09-17, 12:42:20
Habe schon 2 mal geschrieben, dass ich mir dessen bewusst bin!
Zitieren bitte. Du hast etwas von brute force geschrieben, das ist völlig am Thema vorbei.

Monger
2008-09-17, 13:38:12
Was du hier offenbar versuchst, ist schlicht unsinnig. Es hat nix mit Sicherheit zu tun, wenn man die Fenster verbarrikadiert aber die Tür offenlässt. Das macht die Sache sogar noch schlimmer, denn ein falsches Gefühl von Sicherheit ist schlechter als gar keins.

Wenn es einfach nur darum geht das Passwort auszuhebeln, dann deponier es halt irgendwo auf einem zugänglichen Server (meinetwegen als Textdatei oder über irgendeinen Webservice), hol dir mit dem Client vor jeder Anfrage das Passwort ab und log dich damit ein.

Gnafoo
2008-09-29, 19:24:34
.NET bringt eine Lösung dafür mit. Die ist aber eigentlich für Web-Server gedacht. Inwiefern das auf dein Szenario übertragbar ist, weiß ich nicht, da ich mich mit dem Thema nicht wirklich auseinandergesetzt habe. Aber vielleicht hilft dir das ja weiter:

http://msdn.microsoft.com/en-us/library/53tyfkaw.aspx
(http://www.codeproject.com/KB/dotnet/EncryptingTheAppConfig.aspx)

Ich bin mir auch nicht so ganz sicher, wie verhindert wird, dass jemand anderes die Daten ausliest, aber Microsoft wird sich schon etwas dabei gedacht haben. Steht sicher alles noch genauer irgendwo im zweiten Link beschrieben. Ich nehme aber fast an, dass das sicherheitstechnisch nur bei einer Client-Server-Architektur Sinn ergibt, bei der nur der Server etwas vom Passwort wissen muss und das die Sache andernfalls höchstens eine vorgetäuschte Sicherheit ist.

Nasenbaer
2008-09-30, 19:52:39
Um nochmal klar zu machen was du willst:
Du willst nicht verhindern, dass jemand an die Daten der DB kommt. Denn dein C# Programm kann es verschlüsseln und daran darf wohl jeder kommen und an das verschlüsselte PS auch. Du hast also frei zugänglich sowas das verschlüsselte PW als auch den Schlüssel liegen mit dem man das PW entschlüsseln kann.
Das entspricht etwa diesem Szenario: Du hast deine HAustür verschlossen und den Schlüssel in einen Tresor neben der Tür deponiert. Den Code für den Tresor hast unter dessen Schloss geschrieben. Das ist echt clever.

Dann kannst du dir auch ein PW ausdenken das so aussieht "rGT%FU46gD$tgU7h" und als Tag in der XML Datei schreibst du das so: <DB-PW-HASH>rGT%FU46gD$tgU7h</DB-PW-HASH> und Otto-Normal-Idiot glaubt sich auch in der Sackgasse zu befinden. Dabei ist das abgelegte PW im Klartext. Das ist für einen wirklich ernstzunehmenden Angreifer genauso leicht zu knacken wie deine Idee. Da kannst du es dir wenigstens sparen einen Verschlüsselungs-Algo zu implementieren.

Und nimm das nicht ständig so persönlich. Wir wollen dir nur erklären, welchen Denkfehler du dabei hast.