- Blockverschlüsselung
-
Eine Blockverschlüsselung, auch Blockchiffre genannt, ist ein Verschlüsselungsverfahren, bei dem der Klartext in eine Folge gleichlanger Blöcke zerlegt wird, wobei die Blöcke anschließend unabhängig voneinander mit dem gleichen Schlüssel chiffriert werden. Somit werden auch Chiffretextblöcke mit einer festen Länge erzeugt. Den Chiffretext erhält man, indem man die Chiffretextblöcke wieder aneinanderfügt (konkateniert).
Typische Werte für die Blockgröße moderner Verfahren sind 128, 192 oder 256 Bit. Manche haben auch eine variable Blockgröße. Auch die Schlüssellänge kann fest (meist 128 bis 256 Bit) oder variabel sein. Um statistische Analysen zu erschweren, sollte die Blockgröße nicht zu klein sein, in der Praxis haben sich 64-Bit-Blöcke oder Vielfache davon durchgesetzt. Sollte ein Datenblock nicht die erforderliche Länge aufweisen, wird er mit Füll-Bits aufgefüllt (Padding). Der letzte Block muss jeweils mit Fülldaten aufgefüllt werden, in diesem kann auch die Länge der eigentlichen Nachricht kodiert werden.
Einige bekannte Blockchiffren sind:
DES Camellia RC2 3DES FEAL RC6 AES Blowfish Serpent IDEA Twofish Skipjack CAST MARS TEA XTEA Neben der Blockchiffre existiert die Stromchiffre. Diese ist eine Verschlüsselung, bei der die Information kontinuierlich zeichenweise oder bitweise verschlüsselt wird.
Inhaltsverzeichnis
Arbeitsweise
Blockchiffre-Verfahren wie AES oder DES arbeiten mit logischen Verknüpfungen wie XOR-Operationen, Substitutionen, Permutationen und arithmetischen Operationen der Dualarithmetik. Um eine unbefugte Entschlüsselung so weit wie möglich zu verhindern, arbeiten Blockchiffre-Verfahren bei der Verschlüsselung in mehreren Runden. Eine Runde soll sowohl für Verwirrung als auch Zerstreuung sorgen, wobei durch die Verwirrung (in der kryptologischen Fachsprache Konfusion genannt) der Zusammenhang zwischen Geheimtext und Schlüssel so komplex wie möglich gemacht wird. Die Zerstreuung (Diffusion genannt) soll die Information an einer Stelle des Klartextblocks über den gesamten Geheimtextblock verteilen; am Ende soll jedes Bit des Schlüsseltextblocks von jedem Bit des Klartextblocks abhängen. Das Durchlaufen mehrerer Runden sorgt für eine weitere Erhöhung von Konfusion und Diffusion.
Deterministische Blockchiffre
Eine deterministische Blockchiffre liegt vor, wenn die Chiffretextblöcke die gleiche Länge wie die Klartextblöcke aufweisen. Gleiche Klartextblöcke ergeben dann auch gleiche Chiffretextblöcke. Dies stellt einen Nachteil dar, da sich dadurch Muster des Klartextes nachvollziehen lassen. Aus diesem Grund wird versucht, eine deterministische Blockchiffre in einem Kryptographischen Modus zu verwenden, der diese in einen indeterministischen Zustand versetzt.
Indeterministische Blockchiffre
Bei einer indeterministischen Blockchiffre sind die Chiffretextblöcke länger als die Klartextblöcke. Es gibt mehr mögliche Chiffretext- als Klartextblöcke, so dass auch bei gleichen Klartextblöcken, die chiffriert werden, unterschiedliche Chiffretextblöcke entstehen können.
Geschichte
Lucifer wird als die erste zivil nutzbare Blockchiffre anerkannt, sie wurde im Jahr 1971 von IBM auf der Grundlage von Horst Feistels kryptographischen Arbeiten entwickelt. Eine revidierte Version von Lucifer wurde vom National Bureau of Standards (NBS) der USA (woraus 1988 das National Institute of Standards and Technology, NIST hervorging) übernommen und zum DES (Data Encryption Standard) erklärt, nachdem Änderungen vom NBS selbst und vom Geheimdienst NSA am Algorithmus vorgenommen worden waren. Der DES wurde 1976 der Öffentlichkeit vorgestellt und fand eine weit verbreitete Anwendung.
Der DES wurde, aufgrund seiner in der Zwischenzeit zu geringen Schlüssellänge von 56 Bit und seiner daraus resultierenden Schwäche für Brute-Force-Angriffe mit heutiger Technologie, im Jahr 2001 nach einer fünfjährigen Ausschreibungsphase durch den AES (Advanced Encryption Standard) ersetzt. Der Auswahlprozess des AES wird weltweit von vielen Kryptographen wegen seiner offenen Gestaltung als vorbildlich angesehen. Der Algorithmus des AES war von Joan Daemen und Vincent Rijmen unter dem Namen Rijndael entwickelt worden.
Feistelchiffre
→ Hauptartikel: Feistelchiffre
Feistelchiffre, auch als Feistelnetzwerk bezeichnet, ist eine allgemeine Struktur, mit der Blockchiffren realisiert werden können. Horst Feistel, ein Mitarbeiter von IBM, der im Jahr 1970 an der Chiffre Lucifer arbeitete, gilt als Erfinder. Der Klartext wird zuerst in einzelne Blöcke geteilt, deren Größe 64 Bit oder Vielfache davon beträgt. Die Blöcke werden in einem weiteren Durchgang in zwei Hälften geteilt und in mehreren Runden mit verschiedenen Schlüsseln chiffriert, ist dieser Schritt abgeschlossen, werden die chiffrierten, geteilten Blöcke wieder zusammengeführt. Feistelnetzwerke ermöglichen eine Entschlüsselung, ohne dass eine Umkehrfunktion der mathematischen Chiffrierfunktion benötigt wird. Die Feistelchiffre diente als Grundlage verschiedener Chiffren zum Beispiel von DES, Twofish und Blowfish.
Produktchiffre
Die Schwierigkeit, eine Blockchiffre zu entwickeln, liegt darin, eine mathematisch umkehrbar eindeutige Transformation zu finden, welche den kryptographischen Anforderungen gerecht wird, und mit wenig Aufwand implementierbar ist. Aus diesem Grund beschränkt man sich meistens auf eine mehrfache Ausführung der Substitutionen und Permutationen, wodurch man versucht, eine möglichst komplexe Verschlüsselungsfunktion zu erhalten. Die Permutation kann mit einer relativ einfachen Struktur implementiert werden. Produktchiffre ist eine Bezeichnung für eine Verschlüsselungsfunktion, die aus Kombinationen von Substitution und Permutation aufgebaut ist.
Kryptographische Modi
Ein kryptographischer Modus legt fest, wie sich die Verschlüsselung mehrerer Klartextblöcke vollzieht, indem er definiert, in welcher Art der Verschlüsselungsalgorithmus auf den Datenstrom angewandt wird. Je nach den Anforderungen der Anwendung variiert die Fehleranfälligkeit und Sicherheit. Der internationale Standard ISO 10116 definiert für blockorientierte Verschlüsselungsalgorithmen vier verschiedenen Betriebsarten: Electronic Code Book (ECB), Cipher Block Chain (CBC), Cipher Feedback (CFB) und Output Feedback (OFB).
ECB – Electronic Code Book
→ Hauptartikel: Electronic Code Book Mode
Wird der Algorithmus blockweise auf den Klartext angewandt, spricht man vom Electronic Code Book Modus (ECB). Dieser Modus kann gut mittels Parallelisierung beschleunigt werden, da keine Rückkopplung erfolgt, er weist aber Schwächen auf, weil gleiche Klartextblöcke stets auf dieselben Chiffretextblöcke abgebildet werden. Zudem kann ein Angreifer innerhalb einer Schlüsselperiode Blöcke durcheinanderbringen oder wieder einspielen, ohne dass dies erkannt wird.
ECB eignet sich gut zur Verschlüsselung zufälliger Daten. Wenn die Daten kurz und zufällig sind (zum Beispiel verschiedene Schlüssel), wirkt sich keiner der Nachteile von ECB aus. In der Praxis wird ECB hauptsächlich für die Chiffrierung von Schlüsseln verwendet.
CBC – Cipher Block Chaining
→ Hauptartikel: Cipher Block Chaining
Der CBC-Modus wird eingesetzt, um die Schwächen des ECB-Modus auszugleichen. Dieser macht Muster im Klartext unkenntlich, indem er einen Klartextblock mit dem vorangegangenen Chiffretextblock mittels einer XOR-Operation verknüpft. Der erste Block wird mit einem Initialisierungsvektor, ein Block zufälliger Bits, verknüpft – die weiteren mit dem vorangehenden Chiffretextblock, dadurch werden zwei identische Klartextblöcke nie auf denselben Chiffretext abgebildet. Der Initialisierungsvektor wird zumeist vor der Nachricht im Klartext übertragen.
Da Muster im Klartext verborgen werden, eignet sich der CBC-Modus am besten für die Verschlüsselung von Dateien.
CFB – Cipher Feedback
→ Hauptartikel: Cipher Feedback Mode
Der CFB-Modus ist dem CBC-Modus ähnlich, da ebenfalls eine Rückkopplung des Chiffretextblockes erfolgt. Allerdings wird bei diesem Algorithmus durch Anwendung des Initialisierungsvektors zuerst ein temporärer Schlüssel erzeugt, der dann mit dem Klartext mittels einer XOR-Operation verknüpft wird. Eine Chiffrierung mittels CFB und nachfolgender OFB Anwendung kann dadurch zum Beispiel ohne Padding verwendet werden, da sie mehr einer Stromchiffre ähnelt.
Wenn alle Zeichen einzeln behandelt werden müssen, stellt der CFB-Modus, insbesondere 8-Bit-CFB, die beste Wahl zur Verschlüsselung von Zeichenströmen dar.
OFB – Output Feedback
→ Hauptartikel: Output Feedback
Der OFB-Modus ist etwas einfacher als der CFB-Modus aufgebaut. Hier ist der Schlüsselstrom nicht vom Datenstrom abhängig, was bedeutet, dass die Verschlüsselung nicht durch Rückkopplung vom Chiffretextblock und Klartextblock abhängig ist. Der Schlüsselstrom wird durch Anwendung des Schlüssels auf den Initialisierungsvektor bzw. auf den Block des vorhergehenden Durchgangs erzeugt.
OFB eignet sich am besten für fehleranfällige Umgebungen, da hier keine Folgefehler in der Ausführungszeit der Implementierung auftreten. Dieser Modus kommt außerdem zum Einsatz, wenn Vorausberechnungen nötig sind.
Weitere kryptographische Modi
Weitere kryptographische Modi sind
- BC (Block Chaining[1]),
- CBCC (Cipher Block Chaining with Checksum[1]),
- CBCPD (Cipher Block Chaining of Plaintext Difference[1]),
- CCM (Counter with CBC MAC),
- CTR (Counter Modus[1]),
- GCM (Galois/Counter Mode),
- OCB (Offset Codebook Mode),
- OCFB (Output Cipher Feedback[2]),
- OFBNLF (Output Feedback with a Nonlinear Function[1]),
- PBC (Plaintext Block Chaining[1]),
- PCBC (Propagating Cipher Block Chaining[1], bzw. Plain Cipher Block Chaining[2]) und
- PFB (Plaintext Feedback[1]).
Mathematische Betrachtung
Eine Blockchiffre ist eine Funktion , die einen Klartext k auf einen Schlüsseltext c abbildet, mit dem Schlüssel s als Parameter. Für jeden möglichen Schlüssel ist die Abbildung injektiv, als Bedingung dafür, dass die Entschlüsselungsfunktion existiert, die zu jedem Schlüsseltext wieder den Klartext berechnet: .
Meist ist K = C, und die Ver- und Entschlüsselungsfunktionen sind dann für jeden Schlüssel aus S bijektiv. Heute verwendet man außerdem meist Bitblockchiffren, die auf Blöcken mit b Bit arbeiten: .
Eine bijektive Abbildung von {0,1}b auf {0,1}b ist eine Permutation von 2b Elementen. Es gibt folglich eine extrem große Zahl (2b!) verschiedener Abbildungen.
Durch den Schlüssel einer Blockchiffre wird von den 2b! möglichen bijektiven Abbildungen genau eine ausgewählt. Da die Schlüssellänge typischer Blockchiffren weit geringer als log 2(2b!) Bits ist, wird durch die Gesamtheit aller Schlüssel nur ein kleiner Teil aller möglichen Abbildungen erfasst. Bei einer Blockgröße von 8 Bit wäre ein 1684-Bit-Schlüssel nötig um alle Permutationen realisieren zu können.
Weblinks
- Klaus Pommerening: Bitblock-Verschlüsselung, Fachbereich Mathematik der Johannes-Gutenberg-Universität
- Stefan Labitzke, Sven Kampfhenkel: Sicherheitsaspekte in der Softwaretechnik, Fakultät IV Informatik der TU-Berlin
Einzelnachweise
Wikimedia Foundation.