/ / C # Die sicherste Methode zum Laden eines Kennworts in die Process-Methode mit einem Dienst - c #, Dienst, Kennwortspeicherung

C # Die sicherste Methode zum Laden eines Kennworts in die Process-Methode mit einem Dienst - c #, Dienst, Kennwortspeicherung

Ich habe einen C # -Dienst, der einen Prozess als anderer Benutzer ausführen muss (interaktiver Modus). Dieser Benutzer ist ein Benutzer mit Administratorrechten und ich weiß, dass ich das Kennwort NICHT als Zeichenfolge im Code speichern sollte.

Ich könnte etwas Hilfe gebrauchen, um mich in die richtige Richtung zu weisen, da meine Recherche auf eine Menge Methoden verweist, die nicht alle zu dem passen, was ich möchte.

Muss ich ein gehashtes PW in einer Konfigurationsdatei speichern? Kann ich ein gehashtes PW direkt im Code speichern, und jemand es an einen sicheren String übergeben? Ich fühle mich hier etwas verloren und könnte ein paar Ratschläge gebrauchen.

Antworten:

1 für die Antwort № 1

Wenn ich das Problem richtig verstanden habe, brauchst dudas Klartext-Passwort, damit Sie den externen Prozess als anderer Benutzer starten können. Dies würde Passwort-Hashes ausschließen, da Sie das Klartext-Passwort benötigen.

1) Wahrscheinlich ist es am sichersten, wenn das Dienstprogramm gestartet wird. Der Dienst kann dann das Kennwort im Speicher aufbewahren, solange der Dienst aktiv ist.

  • Auf diese Weise müssen Sie das Passwort überhaupt nicht auf der Festplatte speichern.
  • Der Nachteil ist natürlich, dass das Passwort beim Start des Dienstes eingegeben werden muss.

2) Wenn Sie das Passwort beibehalten müssen, gibt es dasKein absolut sicherer Weg, aber Windows bietet für genau dieses Problem eine API, die Data Protection API (DPAPI). Es löst das Problem, dass man ein Kennwort nicht verschlüsseln kann, ohne den Schlüssel irgendwo zu speichern (was die Frage aufwirft, wo der Schlüssel gespeichert werden soll).

using System.Security.Cryptography;

byte[] passwordBytes = Encoding.UTF8.GetBytes(plaintextPassword);
byte[] encryptedPassword = ProtectedData.Protect(passwordBytes, optionalEntropy, DataProtectionScope.LocalMachine);

Mit diesem Code verschlüsselt Windows das Kennwort mithilfe der Informationen des laufenden Computers. Nur Ihr auf diesem Computer ausgeführter Prozess sollte das Kennwort dann entschlüsseln können.