Verzeihen Sie, wenn dies eine dumme und offensichtliche Frage ist, aber ich habe Probleme, nach den richtigen Ressourcen zu suchen. Ich bin kein Sicherheitsexperte und ich kämpfe um zu verstehen, wie richtig gehen Sie darüber.So verschlüsseln und entschlüsseln Sie vertrauliche Informationen in C# ohne ein vom Benutzer eingegebenes Passwort
Hier ist das Szenario. Ich habe eine interne Anwendung auf einem internen Server: nicht etwas, das jemals ausgehen zu einer Client-Site. Diese Anwendung verfügt über eine Datenbank mit Benutzernamen- und Kennwortpaaren, über die Sie mit sicheren Webdiensten kommunizieren können. Ich muss diese Kennwörter nicht vor Kollegen geheim halten, aber ich möchte sie schützen, falls der Server angegriffen wird und die Daten gestohlen werden.
Traditionell würde man sie salzen und hacken. Dies ist ein Prozess, den ich im Prinzip verstehe, aber es hängt davon ab, dass der Benutzer ein Passwort eingibt, das dann gegen den gespeicherten Hash validiert werden kann. Das ist nicht der Fall für mich.
Also: Suchen dort sind verschiedene Lösungen, die eine feste "Passphrase" verwenden, um eine Zeichenfolge zu sichern. Hier ist ein Beispiel, https://stackoverflow.com/a/10177020/271907 und hier ist ein weiteres https://stackoverflow.com/a/10366194/188474.
Jedoch, wie ich es verstehe, bietet keiner von diesen eine nützliche Lösung in meinem Fall. Diese "Passphrase" muss irgendwo für meine Anwendung gespeichert werden, um ihre Arbeit zu tun. Wenn ich es in die Anwendung festcode, kann es reverse engineered sein. Wenn ich es verschlüssle und es in eine separate Datei lege, kann es gestohlen und mit einem Regenbogen-Tisch ausgearbeitet werden.
Ich schaute in die Verwendung von reg_iis, um einen Schlüssel nach Encrypting Web Config using ASPNET_REGIIS zu verschlüsseln, aber um ehrlich zu sein, das ließ mich nur noch mehr verwirrt. Ich bin nicht einmal sicher, ob diese verschlüsselten Konfigurationsdateien zwischen den Computern portiert werden können oder ob ich zwischen Dev und Test und Live neu verschlüsseln müsste. Ich weiß auch nicht, wie sicher sie sind: AFAIK dort muss ein Schlüssel irgendwo sein und wenn es einen Schlüssel gibt, kann es kaputt gehen.
Um das Wasser weiter zu verdrecken, fand ich diese Antwort, die keinen Schlüssel verwendet: https://stackoverflow.com/a/10176980/271907. Allerdings gibt der Autor zu, dass es veraltet ist und ich habe keine Ahnung, wie sicher das Ergebnis ist.
Gibt es irgendeinen vernünftigen Ansatz zur Lösung dieses Problems, der irgendwo kein Loch in der Sicherheit hinterlässt?
"Diese Anwendung verfügt über eine Datenbank mit Benutzernamen und Passwortpaaren, die verwendet werden, um mit sicheren Webdiensten zu kommunizieren" - Sie müssen also Zugriff auf die Klartextkennwörter haben, damit Sie den Benutzernamen \ password an den jeweiligen Webdienst senden können mit wem willst du reden? –
Können Sie diesen Zusammenhang klären? "Diese Anwendung verfügt über eine Datenbank mit Benutzernamen- und Passwortpaaren, die verwendet werden, um mit sicheren Webdiensten zu kommunizieren. Ich muss diese Kennwörter nicht vor Kollegen geheim halten." Wird sie in der Datenbank als reiner Text und statische Werte gespeichert? – jtabuloc