|
Der Advanced Encryption Standard (AES) ist ein symmetrisches Kryptosystem, welches als Nachfolger für DES bzw. 3DES im
Oktober 2000 vom National Institute of Standards and Technology (NIST) als Standard bekannt
gegeben wurde. Nach seinen Entwicklern Joan Daemen und Vincent Rijmen wird er auch Rijndael-Algorithmus genannt.
| Inhaltsverzeichnis |
|
1 Entstehung
1.1 Auswahl eines Nachfolgers
2 Arbeitsweise
2.1 S-Box
2.2 Ablauf
2.3 Schlüsselexpansion
2.4 KeyAddition
2.5 Substitution
2.6 ShiftRow
2.7 MixColumn
2.8 Entschlüsselung
3 Anwendung
4 Literatur
5 Weblinks
|
Entstehung
Bisher war der Data Encryption Standard (DES)
der am häufigsten genutzte symmetrische Algorithmus zur Verschlüsselung von Daten. Trotzdem wurde er oft stark kritisiert. Da er lange Zeit nicht vollständig
veröffentlicht war, wurden sogar Hintertüren der amerikanischen National Security Agency (NSA) vermutet, die allerdings nie gefunden wurden. Zweifel an der
Sicherheit von DES waren jedoch begründet (schließlich benutzt DES nur einen 56 Bit langen Schlüssel) und wurden durch die
Electronic Frontier Foundation (EFF)
bestätigt, die 1998 eine Maschine zur Entschlüsselung von DES
mittels Brute-Force-Verfahren bauten. 3DES bot sich als eine vorübergehende Lösung an, ist jedoch recht langsam und die verwendete Blocklänge von 64 Bit ist
ein potenzielles Sicherheitsrisiko. Es musste also ein neuer Verschlüsselungsstandard entwickelt werden, der nicht die Fehler
seiner Vorgänger besitzt.
Auswahl eines Nachfolgers
Das US-amerikanische National Institute of Standards and Technology (NIST) hat Anfang 1997 zu einem offenen Wettbewerb aufgerufen, dessen Sieger als Advanced Encryption Standard (AES)
festgelegt werden soll. Dabei wurden folgende Kriterien aufgestellt, die von den Algorithmen zu erfüllen sind:
- AES muss ein symmetrischer Algorithmus sein, und zwar eine Blockchiffre.
- AES muss mindestens 128 Bit lange Blöcke verwenden und Schlüssel von 128, 192 und 256 Bit Länge einsetzen können.
- AES soll gleichermaßen leicht in Hard- und Software zu implementieren sein.
- AES soll in Hardware wie Software
eine überdurchschnittliche Performanz haben.
- AES soll allen bekannten Methoden der Kryptoanalyse (die Kunst, einen
Geheimtext ohne Kenntnis des Schlüssels zu dechiffrieren) widerstehen
können, insbesondere Power- und Timing-Attacken.
- Speziell für den Einsatz in Smartcards sollen geringe Ressourcen erforderlich sein (kurze Codelänge, niedriger Speicherbedarf).
- Der Algorithmus muss frei von patentrechtlichen Ansprüchen sein und darf von
jedermann unentgeltlich genutzt werden.
Im August 1998 sind 15 Algorithmen beim NIST eingegangen und werden nun öffentlich
diskutiert und auf die Erfüllung der genannten Kriterien geprüft. Die engere Wahl ist im April 1999 beendet und die fünf besten
Kandidaten (MARS, RC6,
Rijndael, Serpent, Twofish) kommen in die nächste Runde.
Alle fünf Kandidaten erfüllen die Forderungen. Daher werden ab nun weitere Kriterien hinzugezogen: Die Algorithmen sollen auf
theoretische Schwachstellen überprüft werden, durch die ein Algorithmus möglicherweise irgendwann einmal unsicher werden kann.
Dies klingt sehr weit hergeholt, ist aber notwendig. Denn leider kann man heute nicht sagen, wie sich der Technologie-Fortschritt
in den nächsten Jahren entwickelt. Vorgehensweisen die heute als unmöglich erklärt sind können in einigen Jahren schon alltäglich
sein. Ein solches Risiko darf nicht eingegangen werden.
Eindeutiger ist jedoch die Staffelung der Kandidaten nach Ressourcenverbrauch
und Performance. Als einziger Algorithmus ist Rijndael als Hardware- und Software-Implementierung überdurchschnittlich schnell. Andere Kandidaten haben jeweils
in unterschiedlichen Bereichen kleinere Schwächen.
Im Mai 2000 wurden die Analysen und öffentlichen Diskussionen abgeschlossen und
schließlich am 2. Oktober 2000 der Sieger
bekannt gegeben: Der belgische Algorithmus Rijndael wird neuer Standard. Sicherlich
entspricht das nicht der üblichen Sicherheitspolitik in den USA, dass man sich künftig auf
einen europäischen Algorithmus berufen soll. Aber Rijndael hat insbesondere durch seine
Einfachheit (die Referenz-Implementierung umfasst weniger als 500 Zeilen C-Code) und Performance überzeugt.
Der Auswahlprozess überzeugte insbesondere durch seine offene Gestaltung viele Kryptografen weltweit. Bis heute wird dieser
Wettbewerb als sehr vorbildlich dargestellt.
Arbeitsweise
AES (in Zukunft ist mit AES der Algorithmus Rijndael gemeint) ist, wie bereits erwähnt, ein Blockchiffre, dessen Blocklänge und Schlüssellänge unabhängig voneinander die Werte 128, 192 oder 256
Bit erhalten kann. Jeder Block wird zunächst in eine zweidimensionale Tabelle mit
vier Zeilen geschrieben, dessen Zellen ein Byte groß sind. Die Anzahl der Spalten variiert
somit je nach Blockgröße von 4 (128 Bit) bis 8 (256 Bit). Jeder Block wird nun nacheinander bestimmten Transformationen unterzogen. Aber anstatt jeden Block einmal mit dem Schlüssel
zu verschlüsseln, wendet AES verschiedene Teile des Schlüssels
nacheinander auf den Klartext-Block an. Die Anzahl dieser Runden (r) variiert und ist von Schlüssellänge (k) und Blockgröße (b)
abhängig:
Je nach Blocklänge b und Schlüssellänge k wird die Anzahl der Runden bestimmt (10, 12 oder 14)
| r |
b=128 |
b=192 |
b=256 |
| k=128 |
10 |
12 |
14 |
| k=192 |
12 |
12 |
14 |
| k=256 |
14 |
14 |
14 |
S-Box
Eine Substitutionsbox (S-Box) dient als Basis für eine monoalphabetische Verschlüsselung.
Sie ist meist als Array implementiert und gibt an, welches Byte wie getauscht wird. Die S-Box in AES basiert auf einem mathematischen Zusammenhang und ist somit fest im
Algorithmus implementiert. Doch dies ist kein Schwachpunkt, da die S-Box lediglich zur Vermischung der Bytes in Kombination mit
weiteren Operationen und dem Schlüssel genutzt wird.
Ablauf
- Schlüsselexpansion
- Vorrunde
- Verschlüsselungsrunden (wiederhole solange runde<r)
- Substitution()
- ShiftRow()
- MixColumn()
- KeyAddition()
- Schlussrunde
- Substitution()
- ShiftRow()
- KeyAddition()
Schlüsselexpansion
Zunächst muss der Schlüssel in r + 1 Teilschlüssel (auch Rundenschlüssel genannt)
aufgeteilt werden. Die Rundenschlüssel müssen die gleiche Länge, wie die Blöcke erhalten. Somit muss der Benutzerschlüssel auf
die Länge b * (r + 1) expandiert werden. Die Schlüssel werden wieder in
zweidimensionalen Tabellen mit vier Zeilen und Zellen der Größe 1 Byte gebildet. Der erste Rundenschlüssel ist identisch mit dem
Benutzerschlüssel. Die weiteren Schlüssel werden wie folgt berechnet: Um die Werte für die Zellen in der ersten Spalte eines
Rundenschlüssels zu erhalten, wird zunächst das Byte, welches sich in der letzten (je nach Blockgröße: vierten, sechsten oder
achten) Spalte befindet und drei Zeilen zurückliegt, durch die S-Box verschlüsselt und anschließend mit dem um eine
Schlüssellänge zurückliegendem Byte XOR verknüpft. Befindet sich das zu berechnende Byte an
einer Position, die ein ganzzahliger Teiler der Schlüssellänge ist, so wird das berechnete Byte zusätzlich mit einem Eintrag aus
der rcon-Tabelle XOR verknüpft. Hierfür wird als Index eine fortlaufende Nummer verwendet. Die rcon-Tabelle ist ähnlich wie die
S-Box eine Tabelle in Form eines Arrays, das konstante Werte enthält die auf einem mathematischen Zusammenhang beruhen. Jedes
weitere Byte (das sich nicht in der ersten Spalte befindet) wird aus einer XOR-Verknüpfung des vorherigen Bytes (wi - 1) mit dem Byte einer Schlüssellänge vorher (wi - k / 32) gebildet.
KeyAddition
In der Vorrunde und nach jeder weiteren Verschlüsselungsrunde wird die KeyAddition ausgeführt. Hierbei wird eine bitweise
XOR-Verknüpfung zwischen dem Block und dem aktuellen Rundenschlüssel vorgenommen. Dies ist die einzige Funktion in AES, die den
Algorithmus vom Benutzerschlüssel abhängig macht.
Substitution
Im ersten Schritt jeder Runde wird für jedes Byte im Block ein Äquivalent in der S-Box gesucht. Somit werden die Daten
monoalphabetisch
verschlüsselt.
ShiftRow
Wie oben erwähnt, liegt ein Block in Form einer zweidimensionalen Tabelle mit vier Zeilen vor. In diesem Schritt werden die
Zeilen um eine bestimmte Anzahl von Spalten nach links verschoben. Überlaufende Zellen werden von rechts fortgesetzt. Die Anzahl
der Verschiebungen ist zeilen- und blocklängenabhängig:
Je nach Blocklänge b und Zeile in der Datentabelle wird die Zeile um 1 bis 4 Spalten verschoben
| r |
b=128 |
b=192 |
b=256 |
| Zeile 0 |
0 |
0 |
0 |
| Zeile 1 |
1 |
1 |
1 |
| Zeile 2 |
2 |
2 |
2 |
| Zeile 3 |
3 |
3 |
4 |
MixColumn
Schließlich werden die Spalten vermischt. Es wird zunächst jede Zelle einer Spalte mit einer Konstanten multipliziert und
anschließend die Ergebnisse XOR verknüpft. Hinter dieser Vorgehensweise steckt ein komplizierter mathematischer Zusammenhang, der
hier nicht näher erläutert wird. Die Konstante wird folgendermaßen bestimmt:
Zeile 1: 2
Zeile 2: 3
Zeile 3: 1
Zeile 4: 1
Entschlüsselung
Bei der Entschlüsselung von Daten wird genau rückwärts vorgegangen. Die Daten werden zunächst wieder in zweidimensionale
Tabellen gelesen und die Rundenschlüssel generiert. Allerdings wird nun mit der Schlussrunde angefangen und alle Funktionen in
jeder Runde in der umgekehrten Reihenfolge aufgerufen. Durch die vielen XOR-Verknüpfungen unterscheiden sich die meisten Funktionen zum Entschlüsseln nicht von denen zum
Verschlüsseln. Jedoch muss eine andere S-Box genutzt werden (die sich aus der original S-Box berechnen lässt) und die
Zeilenverschiebungen erfolgen in die andere Richtung.
Anwendung
AES wird u. a. von WPA, dem Verschlüsselungsprotokoll für Wireless LAN, bei SSH und bei IPsec genutzt.
Literatur
- Joan Daemen, Vincent Rijmen - The Design of Rijndael. The Wide Trail Strategy ISBN 3540425802 (Englisch)
Weblinks
- http://csrc.nist.gov/CryptoToolkit/aes/ - Offizielle AES-Website vom NIST
- http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ - Website vom
Rijndael-Autor Vincent Rijmen
- http://www.axondata.se/ - AxCrypt, ein
open source Verschlüsselungsprogramm das AES verwende
|