Hallo
Mir geht es in diesem Thema mehr um ein allgemeines Konzept, als um eine konkrete Implementierung, da ich mit Java entwickele poste ich es hier.
Problemstellung: Für ein Netzwerk soll ein Programm entwickelt werden, welches auf mehreren PCs Clientseitig läuft. Für das Programm müssen Daten gespeichert werden(Authetifizierungen, usw.)
Da ein Benutzer den PC wechseln kann, müssen die Daten an einer zentralen Stelle (Datenbank, Datei)
gespeichert werden. Diese Daten müssen natürlich verschlüsselt werden. Das erste Konzept, welches mir in den Sinn kam, war folgendes:
Im Client-Programm wird ein Schlüssel hart kodiert, d.h. in jedem Clienten befindet sich der gleiche Schüssel. Ver und Entschlüsselung geschieht synchron beim Clienten, die Daten werden verschlüsselt übertragen und auch verschlüsselt gespeichert. Problem bei diesem Konzept: Wird beim Clienten mit einem Tool aus den class-Dateien der Sourcecode wieder hergestellt, ist sowohl der Schlüssel als auch der Algorithmus sichtbar, damit können dann die Daten dann leicht entschlüsselt werden.
Zweites Konzept: Dort wo die Daten gespeichert werden läuft ein Serverprogramm, welches synchron die Datenverschlüsselung übernimmt(das was in Konzept 1 der Client macht). Server und Client kommunizieren asynchron, d.h. der Client wählt für jede Session einen public key, sendet diesen an den Server, dieser holt die Daten aus der Datenbank, verschlüsselt sie mit dem public key des Clienten, schickt diese verschlüsselten Daten an den Clienten, dieser entschlüselt sie mit seinem privaten key. Soweit so gut, das Problem daran ist, wie erkennt der Server, dass die Anfrage von einem gültigen Clienten kommt und nicht von einem "bösen" Programm. Die erste Idee dazu war,
dem Clienten ein "Geheimnis" mitzugeben, key, id oder ähnliches. Dies führt aber wieder auf das gleiche Problem wie in Konzept1, da dieses Geheimnis aus dem Sourcecode auslesbar wäre.
Hat jemand eine Idee oder Lösung, wie man dieses Problem angehen könnte. Gäbe es z.B. eine Möglichkeit, die class-Dateien so zu verändern, dass der Sourcecode aus ihnen nicht mehr gewonnen werden kann? Wenn sehr spezifische Begriffe verwendet werden bitte mit einer kurzen Erklärung oder einem Verweis auf eine Erklärung.
Vielen Dank im Voraus für die Antworten.
Mir geht es in diesem Thema mehr um ein allgemeines Konzept, als um eine konkrete Implementierung, da ich mit Java entwickele poste ich es hier.
Problemstellung: Für ein Netzwerk soll ein Programm entwickelt werden, welches auf mehreren PCs Clientseitig läuft. Für das Programm müssen Daten gespeichert werden(Authetifizierungen, usw.)
Da ein Benutzer den PC wechseln kann, müssen die Daten an einer zentralen Stelle (Datenbank, Datei)
gespeichert werden. Diese Daten müssen natürlich verschlüsselt werden. Das erste Konzept, welches mir in den Sinn kam, war folgendes:
Im Client-Programm wird ein Schlüssel hart kodiert, d.h. in jedem Clienten befindet sich der gleiche Schüssel. Ver und Entschlüsselung geschieht synchron beim Clienten, die Daten werden verschlüsselt übertragen und auch verschlüsselt gespeichert. Problem bei diesem Konzept: Wird beim Clienten mit einem Tool aus den class-Dateien der Sourcecode wieder hergestellt, ist sowohl der Schlüssel als auch der Algorithmus sichtbar, damit können dann die Daten dann leicht entschlüsselt werden.
Zweites Konzept: Dort wo die Daten gespeichert werden läuft ein Serverprogramm, welches synchron die Datenverschlüsselung übernimmt(das was in Konzept 1 der Client macht). Server und Client kommunizieren asynchron, d.h. der Client wählt für jede Session einen public key, sendet diesen an den Server, dieser holt die Daten aus der Datenbank, verschlüsselt sie mit dem public key des Clienten, schickt diese verschlüsselten Daten an den Clienten, dieser entschlüselt sie mit seinem privaten key. Soweit so gut, das Problem daran ist, wie erkennt der Server, dass die Anfrage von einem gültigen Clienten kommt und nicht von einem "bösen" Programm. Die erste Idee dazu war,
dem Clienten ein "Geheimnis" mitzugeben, key, id oder ähnliches. Dies führt aber wieder auf das gleiche Problem wie in Konzept1, da dieses Geheimnis aus dem Sourcecode auslesbar wäre.
Hat jemand eine Idee oder Lösung, wie man dieses Problem angehen könnte. Gäbe es z.B. eine Möglichkeit, die class-Dateien so zu verändern, dass der Sourcecode aus ihnen nicht mehr gewonnen werden kann? Wenn sehr spezifische Begriffe verwendet werden bitte mit einer kurzen Erklärung oder einem Verweis auf eine Erklärung.
Vielen Dank im Voraus für die Antworten.