Blockverschlüsselung

Aus Kryptowiki - Die freie Enzyklopädie der Kryptowährungen
Wechseln zu: Navigation, Suche

Eine Blockverschlüsselung (auch Blockchiffre bzw. auf Englisch block cipher genannt) ist ein deterministisches Verschlüsselungsverfahren, bei dem ein Klartextblock, d. h. ein Klartextabschnitt fester Länge, auf einen Geheim- oder Schlüsseltextblock fester Länge abgebildet wird. Diese Abbildung wird dabei durch einen Schlüssel beeinflusst. Kennt man diesen, kann man aus dem Geheimtext wieder den Klartext berechnen. Ohne Kenntnis des Schlüssels ist dies hingegen praktisch unmöglich.

Im Gegensatz zu einer Stromchiffre kann eine Blockchiffre nur einen einzigen Block verschlüsseln. Zur Verschlüsselung längerer Daten wird ein Betriebsmodus verwendet, der festlegt, wie die Blockchiffre anzuwenden ist. Blockchiffren werden auch als Bausteine zur Konstruktion weiterer kryptografischer Verfahren, z. B. kryptographischer Hashfunktionen, eingesetzt.

Arbeitsweise[Bearbeiten]

Alle modernen Blockchiffren wie AES oder DES sind als iterierte Blockchiffren konzipiert. Das bedeutet, dass die Verarbeitung der Eingabe in mehreren Runden erfolgt, die gleich aufgebaut sind (Rundenfunktion). Dazu werden üblicherweise aus dem Schlüssel mehrere Rundenschlüssel abgeleitet. Der Klartextblock wird zusammen mit dem ersten Rundenschlüssel in die Rundenfunktion eingegeben. Deren Ausgabe wird mit dem zweiten Rundenschlüssel erneut in die Rundenfunktion eingegeben usw.

Bei der Verschlüsselung können zwei Ziele unterschieden werden: Durch Konfusion soll der Zusammenhang zwischen Geheim- und Klartext so komplex wie möglich gemacht werden. Diffusion 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. Bei vielen Blockchiffren besteht deshalb eine Runde aus drei Phasen:

  • Verknüpfung mit dem Rundenschlüssel
  • Substitution (aus S-Boxen aufgebaut) zur Erzeugung von Konfusion
  • Permutation der Textbits, so dass die Ausgabe einer S-Box sich in der nächsten Runde auf mehrere S-Boxen und nach weiteren Runden über den ganzen Textblock verteilt

Geschichte[Bearbeiten]

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.

Definition[Bearbeiten]

Eine Blockchiffre ist eine Funktion

<math>F: S \times K \rightarrow C: (s,k) \mapsto F_s(k) = c</math>,

die einen Klartextblock <math>k \in K</math> auf einen Schlüsseltextblock <math>c \in C</math> abbildet, mit dem Schlüssel <math>s \in S</math> als Parameter. Für jeden möglichen Schlüssel muss die Verschlüsselungsfunktion <math> F_s: K \rightarrow C</math> injektiv sein, da genau dann eine Entschlüsselungsfunktion <math>F^{-1}: S \times C \rightarrow K</math> existiert, die zu jedem Schlüsseltext wieder den Klartext berechnet:

<math>\forall s \in S, k \in K: F^{-1}_s(F_s(k)) = k</math>

Dies ist gleichbedeutend zu der Aussage, dass die Entschlüsselungsfunktion linksinvers zur Verschlüsselungsfunktion ist.

Meist ist <math>K=C</math>, 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: <math>K \!\, =C=\{0,1\}^b</math>.

Eine bijektive Abbildung von <math>\{0,1\}^b</math> auf <math>\{0,1\}^b</math> ist eine Permutation von <math>2^b</math> Elementen. Es gibt folglich eine extrem große Zahl (<math>2^b!</math>) verschiedener Abbildungen (siehe Fakultät).

Durch den Schlüssel einer Blockchiffre wird von den <math>2^b!</math> möglichen bijektiven Abbildungen genau eine ausgewählt. Da die Schlüssellänge typischer Blockchiffren weit geringer als <math>\log_2(2^b!)</math> Bits ist, wird durch die Gesamtheit aller Schlüssel nur ein kleiner Teil aller möglichen Abbildungen erfasst. Bereits bei einer Blockgröße von nur 8 Bit wäre ein 1684 Bit langer Schlüssel nötig, um alle Permutationen zu realisieren.

Entwurfsprinzipien[Bearbeiten]

Produktchiffre[Bearbeiten]

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.

Feistelchiffre[Bearbeiten]

Allgemeine Struktur eines Feistelchiffre

Feistelchiffre, auch als Feistelnetzwerk bezeichnet, ist eine allgemeine Struktur, mit der Blockchiffren realisiert werden können. Horst Feistel, der im Jahr 1970 bei IBM an der Chiffre Lucifer arbeitete, gilt als Erfinder. Ein Klartextblock wird in zwei Hälften geteilt und in mehreren Runden verarbeitet. In jeder Runde wird auf den einen Teil die Ausgabe einer vom Rundenschlüsseln abhängigen Rundenfunktion des anderen Teils addiert. 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.

Substitutions-Permutations-Netzwerk[Bearbeiten]

Ein Substitutions-Permutations-Netzwerk (SPN) ist eine Abfolge von Runden gleichen Aufbaus. In jeder Runde wird zuerst der Rundenschlüssel auf die Eingabe addiert, dann wird eine S-Box angewendet und deren Ergebnis mit einer Permutation vermischt.

Die bekannteste nach dem SPN-Prinzip entworfenen Blockchiffre ist AES.

Kryptographische Betriebsmodi[Bearbeiten]

Ein kryptographischer Betriebsmodus 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.[1] 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 Chaining (CBC), Cipher Feedback (CFB) und Output Feedback (OFB).

Bekannte Blockchiffren[Bearbeiten]

Einige bekannte Blockchiffren sind:

DES Camellia RC2 3DES
FEAL RC6 AES Blowfish
Serpent IDEA Twofish Skipjack
CAST MARS TEA XTEA
SEED SAFER GOST 28147-89

Externe Links[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Bruce Schneier: Applied Cryptography. Protocols, Algorithms and Source Code in C. 2. Auflage. John Wiley & Sons, New York 1996, ISBN 0-471-11709-9, S. 206–208.

Spenden-Adressen:
Bitcoin Icon BTC: 1EoecgUZnAjamUYaKstqwbremQqbucTaoZ
Ethereum Icon ETH: 0x0D2Ab63dfe70a7fA12f9d66eCfEA9dDc8F5173A8
XEM Icon XEM: NBZPMU-XES6ST-ITEBR3-IHAPTR-APGI3Y-RAAMHV-VZFJ
Verge Icon XVG: DGYmzxoe3ryK6MnsR13GqR9r1NThpxPcKs