myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Authentifizierung bei Programmstart mit Kennwort
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Authentifizierung bei Programmstart mit Kennwort

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
DerColaTrinker DerColaTrinker ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.07.2014
Beiträge: 6
Entwicklungsumgebung: Visual Studio 2013
Herkunft: Dortmund


DerColaTrinker ist offline

Authentifizierung bei Programmstart mit Kennwort

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich arbeite an einem Programm das innerhalb meines Unternehmens an mehreren Standorten eingesetzt werden soll. Dieses Programm besitzt auch Zugriff auf eine SQL Datenbank. Da sich die Verbindungszeichenfolge ändern kann, habe ich mich entschieden die Zeichenfolge nicht in mein Programm einzubinden, sondern sie aus einer Konfigurationsdatei zu laden.

Nun suche ich nach einem Weg diese Datei unlesbar zu machen. Da die Verbindungszeichenfolge auch das Kennwort zu Datenbank enthalten wird.

Spontan fällt mir die Möglichkeit ein, die Datei mit einem Kennwort zu verschlüsseln. Dieses Kennwort stellt auch den Zugriff auf das Programm dar.

Die Konfigurationsdatei würde also mit einem initial Kennwort von einem Administrator ausgestellt und an den Benutzer weitergegeben ( via Mail oder persönlich ).

Dazu meine Fragen:
1. Ist das eine durchaus übliche Methode?
2. Welchen Verschlüsselung-Algo sollte ich dazu verwenden?


Vielen dank im voraus.
03.07.2014 10:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.221
Entwicklungsumgebung: VS2003-VS2013 / SAP WebIDE
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wieso verwendest Du nicht Windows-Authentifizierung ?

 Auswählen eines Authentifizierungsmodus
03.07.2014 11:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
DerColaTrinker DerColaTrinker ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.07.2014
Beiträge: 6
Entwicklungsumgebung: Visual Studio 2013
Herkunft: Dortmund

Themenstarter Thema begonnen von DerColaTrinker

DerColaTrinker ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Leider geizen die Kollegen Datenbank-Administratoren mit Logins. Eine Windows-Authentifizierung kommt nicht in frage.

Die allgemeine Handhabung in unseren Unternehmen ist, das jedes Tool ein Datenbankzugriff erhält, nicht jeder User. Was mich ja zu meinen oben aufgeführten Fragen führt.
03.07.2014 11:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 9.837


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

03.07.2014 11:19 Beiträge des Benutzers | zu Buddylist hinzufügen
DerColaTrinker DerColaTrinker ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.07.2014
Beiträge: 6
Entwicklungsumgebung: Visual Studio 2013
Herkunft: Dortmund

Themenstarter Thema begonnen von DerColaTrinker

DerColaTrinker ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

danke für den Link und der Antwort aber ich glaube das meine Fragen falsch verstanden wurden. Ich bin nicht auf der suche nach Code-Schnippseln oder wie ich zu machen habe, eher an Erfahrungsberichten oder einer Einschätzung ob dies eine gute Idee ist.
03.07.2014 13:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.823
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Eigentlich bleibt Dir für eine wirklich sichere Variante - außer Logins direkt auf den SQL Server - eigentlich nur, dass Du einen Service dazwischen schaltest.

Sprich die Clients verbinden sich nicht mit der Datenbank, sondern einem zentral auf einem Server installierten Service (zB WCF).
Über den Service kannst Du dann die Windows-Authentifizierung auslesen und über ein eigenes Management kontrollieren und der Service kommuniziert dann auch mit der Datenbank.

Eine wirklich sichere, lokale Variante gibt es so nicht.
Spätestens wenn jemand die Anwendung von IL zurück auf .NET Code konvertiert und sich den Mechanismus anschaut ist die Hürde der "verschlüsselten Datei" geknackt.
Das dürfte übrigens auch in den Links von Fzelle stehen.

Und: sowas überlegt man sich eigentlich bereits in der Planungsphase.
03.07.2014 13:36 Beiträge des Benutzers | zu Buddylist hinzufügen
DerColaTrinker DerColaTrinker ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.07.2014
Beiträge: 6
Entwicklungsumgebung: Visual Studio 2013
Herkunft: Dortmund

Themenstarter Thema begonnen von DerColaTrinker

DerColaTrinker ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Eigentlich bleibt Dir für eine wirklich sichere Variante - außer Logins direkt auf den SQL Server - eigentlich nur, dass Du einen Service dazwischen schaltest.

Okay, das klingt nach einer Sinnvollen alternative.

Zitat:
Eine wirklich sichere, lokale Variante gibt es so nicht.
Spätestens wenn jemand die Anwendung von IL zurück auf .NET Code konvertiert und sich den Mechanismus anschaut ist die Hürde der "verschlüsselten Datei" geknackt.

Auch wenn das Kennwort nicht bekannt ist?

Zitat:
Und: sowas überlegt man sich eigentlich bereits in der Planungsphase.

Nun gut, das Programm besteht bereits. So wie ist das verstehe, wurde das Programm wohl eher "inoffiziell" verwendet. Da es jetzt, wie oben beschrieben, an weiteren Standorten in betrieb gehen soll, nimmt es einen "offiziellen" Charakter an. Das ruft den Datenschutzbeauftragten auf den Plan und dem will ich jetzt eine gute Lösung bieten.
03.07.2014 13:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.823
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Auch wenn das Kennwort nicht bekannt ist?

In der Theorie: natürlich. Kommt aber natürlich auch immer auf die Verschlüsselungsart, Sicherheit etc an.
Klar kannst Du das so verwenden, da es eine Hürde für die normalen Nutzer ist - aber halt auch keine Große.

Wenn er ja eh schon das Passwort hat muss er nur noch rausfinden, wie verschlüsselt wird.
Das kann er Kinderleicht mit DeKompilierung.

Zum Thema Encryption von Config-Files findest Du hunderte Treffer bei Google, zB  Encrypting the app.config File for Windows Forms Applications
 Is app.config file a secure place to store passwords?
03.07.2014 14:30 Beiträge des Benutzers | zu Buddylist hinzufügen
Neidhard
myCSharp.de-Mitglied

Dabei seit: 04.06.2006
Beiträge: 135


Neidhard ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn der Endanwender das Passwort zum starten der Anwendung hat, hat er auch alles was er braucht. Die nötige Methode zum entschlüsseln hast Du doch dann direkt in Deiner Anwendung Augenzwinkern
Evtl sogar noch Public Zunge raus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Neidhard am 03.07.2014 16:44.

03.07.2014 16:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
DerColaTrinker DerColaTrinker ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.07.2014
Beiträge: 6
Entwicklungsumgebung: Visual Studio 2013
Herkunft: Dortmund

Themenstarter Thema begonnen von DerColaTrinker

DerColaTrinker ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Neidhard:
Wenn der Endanwender das Passwort zum starten der Anwendung hat, hat er auch alles was er braucht. Die nötige Methode zum entschlüsseln hast Du doch dann direkt in Deiner Anwendung ;)
Evtl sogar noch Public :tongue:

Da muss ich zustimmen. Also ist die beste Möglichkeit ein Web Service, der alle Funktionen bereit stellt.
03.07.2014 21:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.474
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo DerColaTrinker,

zu der Frage, ob man bezüglich der Sicherung der Zugangsdaten etwas gewinnt, wenn man statt eines direkten Zugriff auf die Datenbank noch einen Webservice dazwischenschaltet:

Zitat:
Also ist die beste Möglichkeit ein Web Service, der alle Funktionen bereit stellt.

Das beschränkt den Zugriff aber "nur" auf die erlaubten Operationen, nämlich die, die der Webservice bereitstellt und vielleicht noch auf die erlaubten Parameter, die der Webservice verifizieren kann.

Beim Schutz des Zugriffs auf den Webservice hat man wieder das gleiche Grundproblem wie beim Schutz des Zugriffs auf eine Datenbank, nämlich dass die Zugriffsdaten ausgelesen werden können, wenn sie in der lokalen Anwendung oder einer Config-Datei enthalten sind, selbst wenn die Zugriffsdaten verschlüsselt oder verschleiert gespeichert sind.

Das bedeutet insbesondere, dass auch ein zwischengeschalteter ein Webservice per se nicht das Problem löst, den Zugriff auf bestimmte Personen bzw. bestimmte Programme zu beschränken.

Der einzige Weg, den Zugriff auf bestimmte Personen zu beschränken, ist, nur den berechtigen Personen die Zugriffsdaten für den Dienst (egal ob Datenbank oder Webservice) zur Verfügung zu stellen und diese Zugangsdaten nicht in der lokalen Anwendung zu hinterlegen.

Betrachten wir noch den Fall, dass man den berechtigten Personen nicht direkt die Zugriffsdaten für den Dienst bekannt geben möchte, sondern diese in der lokalen Anwendung mit einem extra Passwort stark verschlüsselt speichert, wobei dieses Passwort nur den berechtigten Personen bekannt gegeben wird und sie dieses jedes Mal nach dem Start der Anwendung und vor dem ersten Zugriff eingeben müssen. Dann können zwar fremde Angreifer, die nur die Anwendung (bzw. deren Config-Datei) besitzen, die Zugangsdaten nicht mehr ermitteln(*), aber den berechtigten Personen ist weiterhin möglich, die Zugangsdaten des Dienstes zu ermitteln, da sie die Verschlüsselung in Kenntnis des Passwortes und des in der lokalen Anwendung notwendigerweise enthalten Entschlüsselungsalgorithmus rückgängig machen können.

Wie man es auch dreht, wenn die Zugangsdaten in der lokalen Anwendung enthalten sind, können diese mit den nötigen Kenntnissen und dem nötigen Aufwand prinzipiell ausgelesen werden. Durch das Zwischenschalten eines Webservices verschiebt man das Problem also im Wesentlichen nur von der Sicherung des Zugriffs auf die Datenbank zur Sicherung des Zugriffs auf den Webservice, ohne etwas prinzipiell zu ändern.

Anders sieht es aus, wenn die Berechtigung für den Zugriff auf den Dienst (wieder egal ob Datenbank oder Webservice) z.B. über die Windows Authentifizierung realisiert werden kann. Klar, wenn du aufgrund der Gegebenheiten in deiner Firma die Windows Authentifizierung zwar nicht für Datenbanken, aber für einen Webservice verwenden kannst, dann (und nur dann) hat ein Webservice für dich einen echten Vorteil. Vielen Dank für diesen Hinweis von Abt.

herbivore

(*) Es sei denn es gelingt ihnen die starke Verschlüsselung zu brechen, was bei starken Passworten bzw. -phrasen üblicherweise sehr viel Aufwand an Zeit und Geld erfordert, sofern es überhaupt gelingt.


Suchhilfe: 1000 Worte
04.07.2014 07:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Jahre.
Der letzte Beitrag ist älter als 5 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 29.05.2020 15:00