Cryptography Engineering, Teil 1: Zur Theorie des Advanced Encryption Standard

Seite 4: Fazit

Inhaltsverzeichnis

In den initialen Operationen ist der Aufruf von AddRoundKey() zu sehen; ebenso in den Runden in der Schleife und der Abschlussrunde. AddRoundKey() addiert einen Rundenschlüssel zu state. Die Addition erfolgt bei AES wiederum als bitweises XOR.

Ein Rundenschlüssel hat ebenfalls die Länge von 128 Bit. Zu jeder Runde und zur initialen Operation gehört ein eigener Rundenschlüssel. Diese Schlüssel gewinnt AES durch seine Operation KeyExpansion(). Sie generiert aus dem eigentlichen AES-Schlüssel ein Array von Nr+1 (Index 0 bis Nr) 128-Bit-Werte, die dann als Rundenschlüssel dienen.

Algorithmus zum Erzeugen der Rundenschlüssel (Abb. 4)

Der KeyExpansion-Algorithmus interpretiert sowohl den AES-Schlüssel als auch die Rundenschlüssel als Arrays bestehend aus vier 32-Bit-Words. Schon hier wird klar, dass AES optimal für 32-Bit-Plattformen ausgelegt ist. Abbildung 4 zeigt den Ablauf von KeyExpansion, der im Wesentlichen in zwei Stufen abläuft. Der als Word-Array vorliegende AES-Schlüssel füllt in der ersten Schleife die untersten Plätze im Rundenschlüssel-Array. Wie viele Plätze an der Stelle bereits der ursprüngliche AES-Schlüssel füllt, hängt von dessen Länge ab. Ein 128-Bit-Schlüssel füllt lediglich 4 32-Bit-Words aus, ein 192-Bit-Schlüssel bereits 6 und ein 256-Bit-Schlüssel schließlich 8.

Die folgenden, noch leeren Plätze füllt die zweite Schleife im Anschluss nach einem festgelegten Schema. Hierzu zieht sie vorhergehende Elemente heran und verknüpft diese zu neuen Werten. Zum Einsatz kommen die Funktionen RotWord() und SubWord() sowie ein weiteres Word-Array Rcon. RotWord() rotiert das übergebene Word um 8 Bits, also 1 Byte, nach links. SubWord() fasst das übergebene Word als ein Array von vier Bytes auf und ersetzt die Bytes jeweils durch die entsprechenden Einträge der S-Box. Rcon ist ein Array von Word-Konstanten. Ihre drei höherwertigen Bytes sind durchweg null. Das niederwertigste Byte ist die Potenz des Polynoms x^j in GF(2^8) mit j { 0, 1, 2, ..., 14 }. Sie lassen sich einfach im Voraus berechnen und in einer Tabelle ablegen. (Wer nicht rechnen will, kann sie auch den Beispielen in der Spec ab Seite 27 entnehmen.)

Wer die Mathematik hinter AES verstanden hat, hat beim Umsetzen des Algorithmus grundsätzlich keine großen Hürden mehr zu nehmen. Die Beschreibung der Algorithmen Cipher(), InvCipher() und KeyExpansion() sind mit dem mathematischen Rüstzeug im Gepäck leicht nachzuvollziehen. Nach dieser theorielastigen Einführung geht es im nächsten Beitrag los mit der Implementierung von AES für Workstation- und Serversysteme mit 32-Bit-Integer-Rechenwerken.

Oliver Müller
ist freiberuflicher IT-Berater und -Trainer mit den Schwerpunkten Software Engineering, Kryptografie, Java EE, Linux, Unix, z/OS und OpenVMS.

  1. Johannes Buchmann, Johannes; Einführung in die Kryptographie; Springer, 3. Auflage 2004
  2. Alfred J. Menezes, Paul van Oorschot, Scott Vanstone; Handbook of Applied Cryptography; CRC Press 1997
  3. Darrel Hankerson, Alfred J. Menezes, Scott Vanstone; Guide to Elliptic Curve Cryptography; Springer 2004
  4. National Institute of Standards (Hrsg.); Announcing the Advanced Encyption Standard (AES); Federal Information Processing Standards Publication 197: November 26, 2001
  5. Klaus Schmeh; Kryptografie; Verfahren, Protokolle, Infrastrukturen; dpunkt.verlag 2009

(ane)