Ich spiele mit einer App herum, um Dateien in "der Cloud" zu sichern :) und ich möchte die Dateien verschlüsseln, bevor ich sie speichern kann. Der Teil, den ich behandelt habe, aber da diese App Ordner für Änderungen überwacht und die geänderten Dateien hochlädt, muss ich den Schlüssel speichern, mit dem ich die Dateien verschlüssle. Die Idee ist, dass der Benutzer ein Passwort angibt und ein Schlüssel generiert wird.
Im Moment verwende ich das .NET Framework, um die Verschlüsselung durchzuführen. Ich verwende die RijndaelManaged-Klasse zum Verschlüsseln / Entschlüsseln und die PasswordDeriveBytes-Klasse zum Abrufen des Schlüssels.
Aber wie soll ich den Schlüssel behalten, der zum Verschlüsseln der Dateien verwendet wird? Ich möchte auch, dass das Programm mit Windows startet und der Benutzer sein Passwort nicht erneut eingeben muss.
Ich würde empfehlen, die asymmetrische Verschlüsselung für die Verschlüsselung Ihrer Dateien zu vermeiden. Asymmetrische Verschlüsselung ist (rechnerisch) wesentlich teurer als symmetrische Verschlüsselungsalgorithmen gleicher Stärke. Zum Verschlüsseln großer Dateien würde ich AES jeden Tag über RSA empfehlen.
Was Ihre Frage betrifft - die Data Protection API (DPAPI), die Gaurav erwähnt, ist Ihre beste Wette auf Windows. Vorgehensweise: Verwenden des Datenschutzes
DPAPI bietet ProtectedMemory und ProtectedData . Ersteres erlaubt es Ihnen, Geheimnisse im Speicher zu schützen, letzteres bietet Schutz für die auf Festplatte gespeicherten Geheimnisse. Die API kümmert sich um Verschlüsselung & amp; Entschlüsselung für Sie und (abhängig vom angegebenen Umfang) schützt Ihre Daten vor Zugriff / Entschlüsselung durch andere Benutzer oder auf anderen Maschinen.
Um DPAPI in Ihrem Szenario zu verwenden, empfehle ich, das Benutzerkennwort zu verwenden und einen symmetrischen Verschlüsselungsschlüssel zu generieren (z. B. PasswordDeriveBytes ), speichert diese mit DPAPI und beschränkt den Zugriff auf den aktuellen Benutzer.
Ihre Anwendung kann diesen Schlüssel verwenden, um alle Uploads zu verschlüsseln. Ihre Anwendung kann den Schlüssel abrufen, ohne den Benutzer erneut zu fragen, und der Schlüssel könnte vom Benutzer auf einem neuen System neu generiert werden.
Ein Nachteil wäre, dass eine bösartige Anwendung, die auch von demselben Benutzer ausgeführt wird, möglicherweise den geheimen Schlüssel erhalten könnte. Um sich vor diesem Szenario zu schützen, muss eine zusätzliche Entropie (effektiv ein Salz) in bereitgestellt werden Schützen & amp; Entsperren Sie . Die Implementierung wird jedoch wahrscheinlich von Ihrem Ziel abweichen - denn jetzt müssen Sie den Benutzer nach etwas fragen, das einem Passwort ähnelt.
Auch: interessante Lektüre:
Sie können diesen Beitrag von Backblaze auch interessant finden. Sie erklären zwar nicht, wie sie Ihr Szenario unterstützen (verschlüsselte Uploads, die der Cloud-Anbieter nicht entziffern kann - nur dass sie einen solchen Dienst anbieten): Ссылка
Disclaimer: Ich bin ein zufriedener Backblaze-Kunde, bin aber in keiner anderen Weise mit seinem Service verbunden.
PS: Nehmen Sie sich Zeit, um akzeptable Antworten zu markieren. Die Gemeinschaft wird dich belohnen.
Ich empfehle Ihnen, asymmetrische Verschlüsselung zu verwenden, wie ich hier beschrieben habe. Dadurch können Sie nur einen einzigen privaten Schlüssel zum Schützen (und Backup) haben, selbst wenn jede Datei mit einem anderen symmetrischen Schlüssel verschlüsselt wird.
Sie können auch Windows (eigentlich CryptoAPI) schützen den Schlüssel mit einem CspParameters
(und die richtigen Flags) mit RSACryptoServiceProvider
. Abhängig von Ihren Flags können Sie den Schlüssel für den Benutzer protokolliert verfügbar haben (er wird so sicher wie das Benutzeranmeldepasswort).
Ich stimme dem DPAPI-Vorschlag zu. Im Folgenden finden Sie einen Code zum Vorführen der Verwendung der ProtectedData-Klasse. Dies ist nicht genau relevant für Ihr genaues Szenario, aber Sie können extrapolieren.
%Vor%Tags und Links c# cryptography encryption aes rijndael