Geschrieben von: Christoph Wille
Kategorie: Sicherheit
This printed page brought to you by AlphaSierraPapa
Relativ unbemerkt hat Microsoft im Vorjahr CAPICOM - einen COM Client für das CryptoAPI - im "Windschatten" von Windows XP released. Dabei handelt sich um ein Set sehr nützlicher kryptographischer Komponenten, die in jeder Programmiersprache mit Automation Unterstützung verwendet werden können - von Visual Basic bis hin zur kleinen Verwandtschaft in ASP, VBScript.
CAPICOM bietet Komponenten zur Ver- und Entschlüsselung (in der Version 1.0 sind nur symmetrische Algorithmen mit dabei), Komponenten zur Signierung von Daten und der bequemen Handhabung von Zertifikaten (mit und ohne User Interface, je nach Wunsch). Im heutigen Artikel beschränke ich mich auf Ver- und Entschlüsselung, da dies speziell für ASP ein größeres Anwendungsgebiet findet.
Der erste Schritt ist der Download des CAPICOM Redistributables als Teil des Platform SDK's. Von der Downloadseite holen wir uns ein selbstextrahierendes Archiv, das die Datei capicom.dll im x86 Unterverzeichnis des Zielverzeichnisses speichert. Diese capicom.dll kopiert man in system32 Verzeichnis, und führt dann noch folgenden Befehl aus:
regsvr32 capicom.dll
Wenn man Anwendungen verteilt, kann man diese DLL in das Setup aufnehmen, und am Zielrechner automatisch registrieren lassen.
CAPICOM ist erfolgreich installiert - nun heißt es, sich mit den neuen Komponenten vertraut zu machen. Was ist da besser, als ein kleines Beispiel zu programmieren: es soll Text mit Triple-DES verschlüsseln, und an den Client ausgeben. Daß dies wirklich leicht implementiert werden kann, zeigt der Sourcecode von encrypt.asp:
<% Const CAPICOM_ENCRYPTION_ALGORITHM_RC2 = 0 ' Use RSA RC2 encryption. Const CAPICOM_ENCRYPTION_ALGORITHM_RC4 = 1 ' Use RSA RC4 encryption. Const CAPICOM_ENCRYPTION_ALGORITHM_DES = 2 ' Use DES encryption. Const CAPICOM_ENCRYPTION_ALGORITHM_3DES = 3 ' Use triple DES encryption. strTestMessage = "Hello World!" strPassphrase = "A#0x?\$dE<" ' NIEMALS die Passphrase "herumliegen" lassen Set xEncrypt = Server.CreateObject("CAPICOM.EncryptedData") xEncrypt.Content = strTestMessage xEncrypt.SetSecret strPassphrase xEncrypt.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_3DES strEncryptedMsg = xEncrypt.Encrypt() Response.Write strEncryptedMsg %>
Zuerst erstellt man das Objekt, weist den zu verschlüsselnden Text der Eigenschaft Content zu, setzt das Secret mittels SetSecret Methode, und dann müßte man nur noch Encrypt aufrufen. Um festzulegen, mittels welchem Algorithmus verschlüsselt wird, bedient man sich der Algorithm Eigenschaft, die ein gleichnamiges Objekt liefert, das die Name Eigenschaft besitzt - und hier kann man dann aus vier Algorithmen wählen: RC2, RC4, DES und Triple-DES.
Wer jemals in das normale C API des CryptoAPI hineingeschnuppert hat, der wird ob der leichten Verwendbarkeit entzückt sein. Und es wird auch nicht schwieriger, wenn man einstellen will, welche Schlüssellänge für den jeweiligen Algorithmus verwendet werden soll. Ein paar Konstanten mehr, sonst nichts, wie der Code in highencpack.asp demonstriert:
<% Const CAPICOM_ENCRYPTION_ALGORITHM_RC2 = 0 ' Use RSA RC2 encryption. Const CAPICOM_ENCRYPTION_ALGORITHM_RC4 = 1 ' Use RSA RC4 encryption. Const CAPICOM_ENCRYPTION_ALGORITHM_DES = 2 ' Use DES encryption. Const CAPICOM_ENCRYPTION_ALGORITHM_3DES = 3 ' Use triple DES encryption. Const CAPICOM_KEY_LENGTH_MAXIMUM = 0 ' Use the maximum key length available... Const CAPICOM_KEY_LENGTH_40_BITS = 1 ' Use 40-bit keys. Const CAPICOM_KEY_LENGTH_56_BITS = 2 ' Use 56-bit keys if available. Const CAPICOM_KEY_LENGTH_128_BITS = 3 ' Use 128-bit keys if available strTestMessage = "Hello World!" strPassphrase = "A#0x?\$dE<" ' NIEMALS die Passphrase "herumliegen" lassen Set xEncrypt = Server.CreateObject("CAPICOM.EncryptedData") xEncrypt.Content = strTestMessage xEncrypt.SetSecret strPassphrase ' Key lengths for DES and 3DES encryption are standard and the key length ' property is ignored when these algorithms are used. xEncrypt.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_RC4 xEncrypt.Algorithm.KeyLength = CAPICOM_KEY_LENGTH_128_BITS strEncryptedMsg = xEncrypt.Encrypt() Response.Write strEncryptedMsg %>
Fast selbstverständlich funktioniert das Entschlüsseln ähnlich einfach wie das Verschlüsseln. Der Unterschied ist, daß man die Funktion Decrypt mit dem Ciphertext "füttern" muß, und bei der Content Eigenschaft kommt dann der Plaintext wieder heraus (decrypt.asp):
<% Const CAPICOM_ENCRYPTION_ALGORITHM_3DES = 3 ' Use triple DES encryption. strCipherText = "MGoGCSsGAQQBgjdYA6BdMFsGCisGAQQBgjdYAwGgTTBLAgMBAAACAmYDAgIAwAQI" & vbCrlf & _ "JZjDl4H5hRIEEOdot2WroaM35Vr5FVAl/e8EIL7qaJJeuMBQC4625aKdH8u8hgd5" & vbCrlf & _ "rsyBD3jAok7fbdCG" strPassphrase = "A#0x?\$dE<" ' NIEMALS die Passphrase "herumliegen" lassen Set xEncrypt = Server.CreateObject("CAPICOM.EncryptedData") xEncrypt.SetSecret strPassphrase xEncrypt.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_3DES xEncrypt.Decrypt(strCipherText) strPlainText = xEncrypt.Content Response.Write strPlainText %>
Zur Auflösung - es kommt natürlich "Hello World!" beim Client an.
Ver- und Entschlüsseln ist nur ein Feature von CAPICOM - ein sehr nützliches. Für eine Besprechung der weiteren Features empfehle ich die Links am Ende dieses Artikels.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20020115.zip
Aber bitte mit Rijndael
http:/www.aspheute.com/artikel/20010528.htm
Benutzerverwaltung leicht gemacht: Teil 1
http:/www.aspheute.com/artikel/20020429.htm
Passwörter mit SHA1 absichern
http:/www.aspheute.com/artikel/20010330.htm
Passwörter speichern - aber richtig!
http:/www.aspheute.com/artikel/20040105.htm
PGP-Verschlüsselung bei Dateien
http:/www.aspheute.com/artikel/20000920.htm
Unknackbare Verschlüsselung mit Onetime Pads
http:/www.aspheute.com/artikel/20010924.htm
Ver- und entschlüsseln von Texten mit PGP
http:/www.aspheute.com/artikel/20000921.htm
CAPICOM Dokumentation
http://msdn.microsoft.com/library/en-us/security/Security/capicom_start_page.asp
Introducing CAPICOM
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/intcapicom.asp
Platform SDK Redistributable: CAPICOM 1.0A
http://www.microsoft.com/downloads/release.asp?releaseid=30316
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.