Aber bitte mit Rijndael
Geschrieben von: Christoph Wille DES ist mittlerweile sehr in die Jahre gekommen, und die jährlichen Challenges beweisen, daß die (Verschlüsselungs-)Stärke von DES den heutigen Anforderungen an Sicherheit nicht mehr gewachsen ist. Daher wurde vom NIST eine Ausschreibung für den Nachfolger AES (Advanced Encryption Standard) gestartet, den der Algorithmus Rijndael gewann. Rijndael ist wie auch DES ein Block-Cipher, der die Verschlüsselung immer auf einen Block von Daten ausführt. Die Blöckgröße als auch die Schlüssellänge sind bei Rijndael variabel (ein vielfaches von 32 Bit, üblicherweise 128, 192, oder 256), und es wurde darauf Wert gelegt, daß Rijndael sowohl in Hardware als auch Software effizient implementiert werden kann (historischer Hinweis: DES wurde eigentlich für Hardwareimplementierung konzipiert). Ich möchte gar nicht tiefer in den Algorithmus einsteigen, da viele wahrscheinlich am mathematischen Hintergrund gar nicht interessiert sind. Für diejenigen, die es doch sind, empfehle ich The Rijndael Page als Startpunkt zur jeweils genehmen Dokumentation oder sogar Implementation. Für uns ist viel mehr von Interesse, wie wir diesen Algorithmus in ASP verwenden können. Klarerweise benötigen wir eine Komponente, um eine (Geschwindigkeits-)effiziente Implementierung in der Hand zu haben. Zwar gibt es auf The Rijndael Page etliche Links zu Implementierungen in verschiedenen Sprachen, nur so recht gefallen hat mir dabei keine. Wer daraus schließt, ich hätte mir eine eigene programmiert, irrt. Denn es gibt eine äußerst leistungsfähige Cryptokomponente, die auf OpenSSL aufbaut, und als nette Zugabe sogar vollständig gratis zu haben ist: ebCrypt. Es gibt ein Windows Installer Programm zum Download, und wer seine Unterstützung für das Projekt ausdrücken möchte, sollte die paar Dollar für einen einjährigen Support hinlegen (nicht verpflichtend, ist aber bei diesem Leistungsumfang sicher nicht zuviel). ebCrypt & Rijndael verwendenGut - die Komponente ist installiert. Was nun? Es liegt ein Windows Help File bei, in dem man sich über die Verwendung der Komponente informieren kann. Ich denke aber, ein Beispiel sagt mehr als tausend Worte (encrypt.asp): <% Const EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256 = 80 Const cstrPassphrase = "passphrase" Set objLibrary = Server.CreateObject("EbCrypt.eb_c_Library") Set objCipher = Server.CreateObject("EbCrypt.eb_c_Cipher") vEncrypted = objLibrary.BLOBToHex( _ objCipher.EncryptString(EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256, _ cstrPassphrase, "", "Zu verschlüsselnder Text")) Response.Write vEncrypted & vbCrLf Response.Write objCipher.DecryptBLOB(EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256, _ cstrPassphrase, "", objLibrary.HexToBLOB(vEncrypted)) %> Eigentlich dient diese Seite nicht nur der Verschlüsselung, sondern auch der Entschlüsselung. Auf diese Art kommt das Library Objekt nicht so zur Geltung, allerdings hat sein Einsatz folgenden Zweck: EncryptString liefert ein Byte-Array, und um dieses als String herumreichen zu können, ist eine Umwandlung in hexadezimal anzuraten (es wäre auch Base64 möglich). Das Konvertieren auf hexadezimal wird dann interessant, wenn man zB Werte in Cookies speichert, oder an QueryStrings anhängt. Ohne Passphrase (auch als "shared secret" bekannt) ist eine Entschlüsselung nicht möglich. Aber das ist ja der Sinn und Zweck eines symmetrischen Algorithmus. Natürlich kann man Rijndael auch auf Dateien anwenden. Dazu bedarf es nur des Library Objekts, wie der Code in encryptfile.asp zeigt: <% Const EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256 = 80 Const EB_CRYPT_HASH_ALGORITHM_NONE = 0 Const cstrPassphrase = "passphrase" Set objLibrary = Server.CreateObject("EbCrypt.eb_c_Library") objLibrary.EncryptFile EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256, _ EB_CRYPT_HASH_ALGORITHM_NONE, _ cstrPassphrase, "", Server.MapPath("demo.txt"), _ Server.MapPath("demo_encrypted.txt") objLibrary.DecryptFile EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256, _ EB_CRYPT_HASH_ALGORITHM_NONE, _ cstrPassphrase, "", Server.MapPath("demo_encrypted.txt"), _ Server.MapPath("demo_decrypted.txt") %> Die beiden Funktionen EncryptFile und DecryptFile würden auch Hashes der jeweiligen Dateien rechnen können. Ich habe mittels EB_CRYPT_HASH_ALGORITHM_NONE darauf verzichtet. Es möge sich jeder von der Verschlüsselung in der Datei demo_encrypted.txt überzeugen. Apropos - wer das Original der verschlüsselten Datei effektiv "entsorgen" möchte, kann auf die Funktion WipeFile des Library Objektes zurückgreifen. SchlußbemerkungDie ebCrypt Komponente zeigt, daß Verschlüsselung keineswegs schwierig, und schon gar nicht kostenintensiv sein muß. Und bevor ich es vergesse: ebCrypt kann unter anderem auch SHA1, MD5, IDEA, CAST, BlowFish, DES, 3DES, Serpent und andere. OpenSSL läßt grüßen! Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
CAPICOM One Links zu anderen Sites
ebCrypt Download Wenn 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 |