2016-11-01 4 views
-4

Ich arbeite an einer Windows-Desktop-Anwendung (WPF) in C# geschrieben, die bei jedem Start einige Dateien von einem Server herunterladen. Diese Dateien spielen eine große Rolle dabei, dass die Anwendung funktioniert.Implementieren On-the-Fly-Kryptographie

Ich möchte den Inhalt dieser Dateien mit einer Form der Verschlüsselung wie AES schützen. Diese Dateien sollten auch dann verschlüsselt bleiben, wenn sie von der Anwendung gelesen werden. Ich suche nach einer Möglichkeit, die Dateien im laufenden Betrieb zu entschlüsseln, wenn auf sie von der Anwendung zugegriffen wird. Mit anderen Worten, nur die Anwendung kann die Dateien verstehen, aber wenn Benutzer sie mit anderen Programmen öffnen, werden sie immer noch verschlüsselt.

Es wäre großartig, wenn Sie einige Ideen oder Artikel über die Implementierungen teilen könnten. Vielen Dank!

Edit 1: Die Anwendung Verwendung von CefSharp machen durchsuchen den HTML/JS/CSS-Dateien, die vom Server bei jedem Start heruntergeladen werden.

Edit 2: Ich versuche so etwas wie TrueCrypt zu implementieren.

Edit 3: Ich würde gerne tun, was TrueCrypt tun kann. Es verschlüsselt die Dateien und die verschlüsselten Dateien können normalerweise von jedem Programm geöffnet werden, da es beim Öffnen der Datei sofort entschlüsselt wird. Ich brauche das, weil ich die HTML/JS/CSS-Dateien schützen möchte, die vom eingebetteten Browser meiner Anwendung (CefSharp) geladen werden.

Antwort

0

Sie sollten das System.Security.Cryptography Namespace des .NET-Frameworks verwenden. Here und here finden Sie zwei Beispiele, die Sie verwenden können.

Hinweis: Zuerst müssen Sie den Inhalt der Datei AS BYTES [] mit einem FileStream oder System.IO.File.ReadAllBytes lesen. Und Sie müssen Ihren KEY implementieren - was bedeutet, dass er in Ihrer Anwendung fest codiert ist und mit einem Decompiler gefunden werden kann! So ist es fast unmöglich zu verhindern, dass der Benutzer die Daten liest.

+0

Vielen Dank für Ihre schnelle Antwort. Ich habe meinen Beitrag ein wenig bearbeitet. Ich denke, Ihre Antwort ist gut, aber möglicherweise nicht auf meinen Fall anwendbar ... –

+0

@GordonLuvinsky Thomas hat Recht. Es ist unmöglich zu verhindern, dass der Benutzer die Daten liest. Sie benötigen eine Serverbeteiligung. Diese Frage wird fast jeden Tag gestellt und erhält fast täglich die gleiche Antwort. –

0

Wie Thomas sagte, ist System.Security.Cryptography der beste Weg, um Daten zu verschlüsseln. Sie müssen jedoch die Verschlüsselungsschlüssel in die Client-Anwendung aufnehmen, und es ist sehr einfach für jeden Benutzer mit Zugriff auf diese Anwendung, die Schlüssel zu extrahieren.

Sie sind wahrscheinlich besser dran, nicht Ihre Zeit zu verschwenden, die Dateien zu verschlüsseln.

2

Sie müssen erkennen, dass Sie nicht können verhindern, dass Benutzer auf Ihre ungeschützten Dateien auf einer offenen Plattform wie der PC zugreifen. Das ist es, was DRM seit Jahrzehnten versucht, aber dieses Ziel ist per Definition unachievable.

Das einzige, was Sie tun können, ist es schwieriger/mühsamer auf die ungeschützten Dateien zugreifen, aber am Ende, wenn jemand beschließt, genug Anstrengungen zu machen um Ihren Schutz zu umgehen, wird er oder sie immer erfolgreich sein.

Zum Beispiel können Sie Ihre Quelldateien verschleiern (durch dedizierte Obfuscatoren oder einfach durch Minimierung), können Sie einige nicht-Standard-Dateicodierung verwenden (umgekehrt von base64) oder Sie können eine Art von Verschlüsselungsmethode verwenden. Da Sie Ihren Schlüssel auch versenden müssen, ist jede Verschlüsselungsmethode geeignet, egal wie sicher oder unsicher sie ist.

Schließlich, wie bereits erwähnt, befinden sich die Krypto-Primitive im Namensraum . Beachten Sie jedoch, dass ich für sicherheitsempfindliche Systeme nicht empfehlen würde, sie direkt zu verwenden, weil es viele Nuancen gibt und es richtig schwierig ist, es richtig zu machen. Sie sollten sich Bibliotheken wie SecurityDriven.Inferno ansehen, die die Crypto-Primitive mit sicheren Standardwerten umhüllen.

+0

Hallo, danke für deine Antwort. Ich habe meinen Beitrag ein wenig bearbeitet. Im Grunde versuche ich etwas wie TrueCrypt zu implementieren. Es wäre also großartig, wenn Sie einige Schritte teilen oder einen Artikel teilen könnten, der Ihnen beibringt, wie man etwas wie TrueCrypt macht. Ich weiß sehr gut über die Zwecklosigkeit von DRM und ich werde mein Bestes versuchen, meinen Klienten davon zu überzeugen, aber nur aus Neugier möchte ich wirklich wissen, wie man etwas wie TrueCrypt macht. :) –