Geschrieben von: Christoph Wille
Kategorie: Sicherheit
This printed page brought to you by AlphaSierraPapa
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).
Gut - 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.
Die 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!
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010528.zip
CAPICOM One
http:/www.aspheute.com/artikel/20020115.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
Sicherheitsaspekte bei der Gestaltung von ASP Sites ohne Cookies
http:/www.aspheute.com/artikel/20010601.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
ebCrypt Download
http://www.ebcrypt.com/components/ebCrypt/index.htm
OpenSSL
http://www.openssl.org
The Rijndael Page
http://www.esat.kuleuven.ac.be/~rijmen/rijndael/
©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.