PGP-Verschlüsselung bei Dateien
Geschrieben von: Christian Koller PGP ist ein Verschlüsselungssystem, mit dessen Hilfe man vertrauliche Daten Ver- und Entschlüsseln kann (siehe auch Artikel Mit PGP verschlüsselte e-Mails senden). Dies ist besonders hilfreich, wenn man Nachrichten in Emails oder Attachments verschlüsseln will. Ein anderes Anwendungsgebiet wäre, Dateien am Webserver zu verschlüsseln, um diese gefahrlos zum Download zur Verfügung zu stellen. Die downgeloadeten Dateien kann man nur mit dem richtigen "Private Key" und einer Passwortphrase wieder entschlüsseln. Dieser Artikel zeigt, wie man von ASP Seiten aus Dateien auf dem Webserver verschlüsselt. PGP selbst hat leider keine ActiveX kompatible COM-Schnittstelle, die man aus einem ASP Skript heraus angreifen könnte. Allerdings gibt es die gratis Komponente NSDPGP (erstellt von Gerard Thomas), die eine COM Schnittstelle zur PGP Software darstellt. Um nun NSDPGP benützen zu können, muß am Webserver die PGP Software installiert und die benötigten Verschlüsselungsdateien (Key Files) am Webserver vorhanden sein. Wie man PGP am Webserver installiert können Sie im AspHeute Artikel Mit PGP verschlüsselte e-Mails senden detailliert nachlesen. Hier soll speziell auf die Installation der NSDPGP.dll am Webserver und auf die Benutzung des COM-Interfaces mittels ASP eingegangen werden. Installation der NSDPGP KomponenteDie NSDPGP.dll samt Dokumentation steht jedermann zum Download von der Webseite http://community.wow.net/grt/nsdpgp.html zur Verfügung. NSDPGP kann für kommerzielle Zwecke gratis eingesetzt werden, wie der mitgelieferten License.txt Datei entnommen werden kann. Prinzipiell arbeitet NSDPGP mit PGP der Version 6.5.1 (oder höher) zusammen. Nachdem man NSDPGP.zip downgeloadet hat, entpackt man es in ein beliebiges Verzeichnis. Die Datei NSDPGP.DLL kopiert man anschließend in das system32 Verzeichnis des Betriebssystems, für gewöhnlich also in C:\WINNT\system32. Danach muß man die DLL registrieren um sie benutzen zu können. Dies geschieht durch folgenden Befehl, den man in der Kommandozeile (DOS-Fenster) eingibt: REGSVR32 NSDPGP.DLL Um die DLL wieder zu deinstallieren, benutzen Sie den Befehl REGSVR32 /U NSDPGP.DLL und löschen Sie die Datei NSDPGP.DLL. Benutzung von NSDPGPUm die Funktionalität des NSDPGP Objektes nützen zu können, erstellen Sie das Objekt mit CreateObject: Set objPGP = CreateObject("NSDPGP") Zum Ver- und Entschlüsseln von Dateien stellt das NSDPGP Objekt die folgenden Funktionen zur Verfügung:
Die Benutzung der EncryptFileEx und DecryptFileEx Methoden möchte ich mit Beispielskripts in ASP demonstrieren. Verschlüsseln einer Datei am WebserverDas folgende Skript benutzt das NSDPGP Objekt um mittels EncryptFileEx Methode eine Datei zu verschlüsseln. Die Syntax der EncryptFileEx ist wie folgt: objPGP.EncryptFileEx PGPKey, "NOSIGN", _ FileNameSource , FileNameEnc, Passphrase Der PGPKey Parameter ist die ID eines am Webserver installierten PGP-Schlüssels, der zum Verschlüsseln benutzt wird. FileNameSource ist die zu verschlüsselnde Datei, FileNameEnc der Dateiname, unter dem die verschlüsselte Datei abgespeichert wird. Der Passphrase Parameter schließlich muß die PGP-Verschlüsselungsphrase für den PGP Schlüssel enthalten, ansonsten verschlüsselt EncryptFileEx die Datei nicht. Um also mittels PGP Schlüssel (ID = 0xB766E886, Passphrase = "Pass") die Datei C:\temp\datei.txt als PGP-verschlüsselte Datei C:\temp\datei.txt.pgp abzuspeichern, benutzt man NSDPGP wie folgt: objPGP.EncryptFileEx "0xB766E886", "NOSIGN", _ "C:\temp\datei.txt" , "C:\temp\datei.txt.pgp", "Pass" Die ID eines Schlüssels können Sie mittels PGPKey Programm (siehe Bild 1) aus der PGP-Programmgruppe im Start-Menü auslesen, indem Sie mit der rechten Maustaste einen Schlüssel wählen und im Kontextmenü auf Key Properties gehen.
Im erscheinenden Fenster können Sie die Key ID mit der Maus markieren und in den Zwischenspeicher kopieren (siehe Bild 2).
Um die Anwendung der EncryptFileEx Methode zu veranschaulichen, habe ich folgendes ASP Skript geschrieben (EncryptFile.asp): <% @LANGUAGE="VBScript" %> <% If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then isPostBack = True FileNameSource = Trim(Request.Form("FileNameSource")) FileNameEnc = Trim(Request.Form("FileNameEnc")) PGPKey = Trim(Request.Form("PGPKey")) Passphrase = Trim(Request.Form("Passphrase")) DeleteSourceFile = Trim(Request.Form("DeleteSourceFile")) ' PGP Objekt instanzieren Set objPGP = CreateObject("NSDPGP") ' Datei mit PGP verschlusesseln: ' Syntax: objPGP.EncryptFileEx(EmpfaengerKey, SignKey, _ ' Quelldatei, PGP_ErgebnisDatei, Passwort) objPGP.EncryptFileEx PGPKey, "NOSIGN", _ FileNameSource , FileNameEnc, Passphrase ' Quelldatei loeschen wenn gewuenscht If LCase(DeleteSourceFile) = "true" Then objPGP.WipeFile(FileNameSource) End If Set objPGP = Nothing Else FileNameSource = "C:\Temp\test.txt" FileNameEnc = "C:\Temp\test.txt.pgp" PGPKey = "0xB766E886" Passphrase = "Pass" isPostBack = False End If %> <html> <body> <% If isPostBack Then Response.Write("Die Datei " & _ Server.HTMLEncode(FileNameSource) & _ " liegt verschlüsselt als Datei " & _ Server.HTMLEncode(FileNameEnc) & _ " am Webserver!") Response.Write("<br><br>") End If %> <form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" method="POST"> Quelldatei (Dateiname der zu verschlüsselnden Datei):<br> <input type="Text" name="FileNameSource" value="<%= FileNameSource %>"><br> <input type="Checkbox" name="DeleteSourceFile" value="True"> Quelldatei löschen<br><br> Dateiname der verschlüsselten Datei:<br> <input type="Text" name="FileNameEnc" value="<%= FileNameEnc %>"> <br><br> ID des PGP-Schlüssel: <input type="Text" name="PGPKey" value="<%= PGPKey %>"><br> PGP-Passphrase: <input type="Text" name="Passphrase" value="<%= Passphrase %>"><br> <input type="Submit" name="Submit" value="Submit"> </form> </body> </html> Dieses Skript erfragt vom Benutzer die Dateinamen der zu verschlüsselnden und der PGP-verschlüsselten Datei, die Key ID des Schlüssels der zur Verschlüsselung benutzt wird, sowie die Passphrase des Schlüssels. Mit diesen Daten nimmt das Skript dann die PGP-Verschlüsselung der Datei vor. Außerdem demonstriert das Skript die Verwendung der WipeFile Methode, mit der man Dateien unwiederbringlich von der Festplatte löschen kann. Natürlich möchte ich Ihnen auch ein Skript zeigen, das eine PGP-verschlüsselte Datei wieder entschlüsselt. Entschlüsseln einer PGP-verschlüsselten DateiDas Entschlüsseln einer verschlüsselten Datei gestaltet sich mit der NSDPGP Komponente problemlos. Einfach die DecryptFileEx Methode anwenden, wobei man nur die Namen der verschlüsselten Datei, den Namen der Datei mit dem entschlüsselten Inhalt sowie die PGP-Passphrase für den Verschlüsselungs-Key angeben muß: objPGP.DecryptFileEx "NOSIGN", _ FileNameSource , FileNameDec, Passphrase Natürlich muß dazu auch wieder der PGP-Schlüssel (auch der "Private Key") in den PGPKeys am Webserver vorhanden sein. Das folgende Skript verschlüsselt eine Datei gemäß den Benutzereingaben: <% @LANGUAGE="VBScript" %> <% If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then isPostBack = True FileNameSource = Trim(Request.Form("FileNameSource")) FileNameDec = Trim(Request.Form("FileNameDec")) Passphrase = Trim(Request.Form("Passphrase")) ' PGP Objekt instanzieren Set objPGP = CreateObject("NSDPGP") ' Datei mit PGP entschlüsseln: ' Syntax: objPGP.DecryptFileEx(SignKey, _ ' PGP_Quelldatei, ErgebnisDatei, Passwort) objPGP.DecryptFileEx "NOSIGN", _ FileNameSource , FileNameDec, Passphrase Set objPGP = Nothing Else FileNameSource = "C:\Temp\test.txt.pgp" FileNameDec = "C:\Temp\test.txt" Passphrase = "Pass" isPostBack = False End If %> <html> <body> <% If isPostBack Then Response.Write("Die Datei " & _ Server.HTMLEncode(FileNameSource) & _ " liegt entschlüsselt als Datei " & _ Server.HTMLEncode(FileNameDec) & _ " am Webserver!") Response.Write("<br><br>") End If %> <form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" method="POST"> Quelldatei (Dateiname der verschlüsselten Datei):<br> <input type="Text" name="FileNameSource" value="<%= FileNameSource %>"> <br><br> Dateiname der entschlüsselten Datei:<br> <input type="Text" name="FileNameDec" value="<%= FileNameDec %>"> <br><br> PGP-Passphrase:<br> <input type="Text" name="Passphrase" value="<%= Passphrase %>"> <br><br> <input type="Submit" name="Submit" value="Submit"> </form> </body> </html> SchlußbemerkungPGP ist der wohl am meisten verbreitete Standard zum Verschlüsseln von Nachrichten und Dateien. Mit Hilfe der NSDPGP Komponente ist es möglich, Dateien von ASP (oder einer anderen COM-Umgebung) mit PGP zu ver- und zu entschlüsseln. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Aber bitte mit Rijndael Links zu anderen SitesWenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |