Ich habe einen Dienst, der sich in einem Netzwerk befindet und hin und wieder Anfragen von einem Client bearbeiten muss. Um diese Anfragen zu bearbeiten greift der Dienst auf eine Datenbank zu. Dienst, Client und Datenbank befinden sich auf jeweils eigenen Maschinen. Client, Dienst und Datenbank müssen jeweils auf einer eigenen Maschine laufen, daran kann absolut nichts geändert werden.
Dieser Dienst, der auf einer Maschine liegt auf die Hinz und Kunz keinen Zugriff haben, hat im Moment die Verbindungsdaten für die Datenbank in einer .json Datei gelagert, wo natürlich jeder hineinsehen kann. Dies (also das Passwort) muss nun verschlüsselt werden, da es keine Möglichkeit für den Dienst gibt, die Daten irgendwo anders abzurufen.
Nun habe ich da an zwei Methoden gedacht, die jedoch in meinen Augen beide sehr ähnlich, und unzufriedenstellend sind.
Dieser Dienst, der auf einer Maschine liegt auf die Hinz und Kunz keinen Zugriff haben, hat im Moment die Verbindungsdaten für die Datenbank in einer .json Datei gelagert, wo natürlich jeder hineinsehen kann. Dies (also das Passwort) muss nun verschlüsselt werden, da es keine Möglichkeit für den Dienst gibt, die Daten irgendwo anders abzurufen.
Nun habe ich da an zwei Methoden gedacht, die jedoch in meinen Augen beide sehr ähnlich, und unzufriedenstellend sind.
- Verschlüsselung mithilfe der DPAPI. Vorteil, es ist mit einem using und den beiden Methoden
Protect()
undUnprotect()
erledigt. Nachteil, entweder Programme die der User gestartet hat, oder aber alle Programme auf der Maschine können ebenfalls die Daten entschlüsseln. Einziger "Schutz" davor ist dieoptionalEntropy
, die dann hardcoded ist. - Verschlüsselung "von Hand" via AES. Es kann nur von meinem Programm entschlüsselt werden, jedoch ist der Schlüssel dann hardcoded.