Wir haben eine C # (.net 3.5) Anwendung. Während der Installation verwenden wir AesCryptoServiceProvider
, um einige nützliche Informationen in der Konfigurationsdatei zu verschlüsseln. Diese Informationen werden von der Anwendung entschlüsselt, wenn sie ausgeführt wird. Daher muss die Anwendung die Key
und IV
Wir denken daran, das Key
und IV
byte [] an einem sicheren Ort auf dem Rechner zu speichern. Ich weiß, dass es ein machine store
gibt, das RSA-Schlüsselpaar speichern kann. Kann ich die Key
und IV
byte [] darin speichern? Ich habe online gesucht und das MSDN-Dokument gelesen, kann aber keine Lösung finden.
Weißt du wie es geht? Hast du noch eine andere gute Idee?
Was Sie versuchen, ist eine Krypto-Verletzung. Kryptografische Schlüssel werden üblicherweise in einer Konfigurationsdatei im Klartext gespeichert. Die IV wird normalerweise zusammen mit dem Chiffretext in Ihrem Datenspeicher gespeichert. Solange Sie CWE-329 nicht verletzen, sollten Sie mit diesem Entwurf golden sein.
Wo das alles für Sie zusammenbricht, ist, dass Sie versuchen, verschlüsselten Text auf demselben Computer wie den Schlüssel zu verstecken. Wo ist der Angreifer? Wenn er bereits auf Ihrem Computer ist, kann er einfach einen Debugger starten und den Schlüssel oder Text im Speicher lesen. Kryptographie kann dieses Problem nicht lösen, was Sie suchen, ist Sicherheit trotz Obskurität (Was keine sichere Lösung ist.).
Ich werde zuerst auf die Frage antworten: "Hast du eine andere gute Idee?"
Das .NET-Framework verfügt über eine integrierte Unterstützung für die Verschlüsselung von Konfigurationsabschnitten. Sie können diese Verschlüsselung mit wenigen Ausnahmen (z. B. machine.config) auf die meisten Konfigurationsabschnitte anwenden. Wenn Sie keinen guten Grund haben, Ihre eigene Konfigurationsverschlüsselung zu erstellen, ist es möglicherweise eine bessere Idee, das zu verwenden, was Ihnen bereits im Framework zur Verfügung steht.
Wenn Sie diese Route gehen, ist hier ein guter Ausgangspunkt. Ссылка
Wenn Sie mit RSA arbeiten, müssen Sie Ihren öffentlichen und privaten Schlüssel während der Installation trotzdem auf dem Computer ablegen. Basierend auf Ihrer Frage haben Sie vermutlich eine Möglichkeit, den Schlüssel zum Gerät zu bekommen - Sie müssen nur wissen, wo Sie ihn speichern müssen. In diesem Fall bietet Microsoft einen Speicherort für Ihre RSA-Schlüssel. Sie können diesen Artikel zum Importieren und Exportieren von Schlüsseln folgen: Ссылка
Markieren Sie auf den Computern, auf denen die Anwendung ausgeführt wird, den privaten Schlüssel als nicht exportierbar, wenn Sie das Schlüsselpaar für zusätzliche Sicherheit installieren. Wenn die Anwendung unter einem bestimmten Benutzerkonto ausgeführt wird, installieren Sie das Schlüsselpaar im Benutzerspeicher.
Der Benutzer (oder der App-Pool für die meisten Web-Apps) benötigt die Berechtigung zum Lesen des privaten Schlüssels. Sie können aspnet_regiis.exe für die Berechtigungserteilung verwenden.
Die meisten Beispiele im Web verweisen auf aspnet_regiis.exe zum Erstellen, Exportieren, Importieren und Gewähren von Berechtigungen für RSA-Schlüsselpaare. Sie müssen dieses Programm nicht verwenden, aber wenn Sie das tun, gibt es ein paar Fehler:
Es wird nur auf Dateien namens web.config ausgeführt. Wenn Sie also eine Konsolenanwendung haben, müssen Sie Ihre Konfigurationsdatei in web.config umbenennen, um sie mit aspnet_regiis.exe zu verwenden.
Wenn Sie aspnet_regiis.exe verwenden, um Ihr Schlüsselpaar zu erstellen, wird der Schlüssellängenparameter ignoriert. Ab dieser Antwort ist die aktuelle empfohlene Schlüssellänge 3072. Verwenden Sie nicht aspnet_regiis.exe, um ein Schlüsselpaar mit einem privaten 3072-Bit-Schlüssel zu erstellen. Siehe Festlegen der Schlüsselgröße von RSA-Schlüssel erstellt mit aspnet_regiis? für ein Beispiel zum Erstellen einer größeren Schlüssellänge.
Wenn Sie den aes-Schlüssel nach wie vor irgendwo speichern müssen, können Sie ihn in eine Datei einfügen und mit EFS mit cipher.exe schützen.