Advanced Encryption Standard/Arbeitsweise: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „Kryptografies“ durch „Kryptografie“ |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 30: | Zeile 30: | ||
* Schlüsselexpansion | * Schlüsselexpansion | ||
* AddRoundKey(Rundenschlüssel[0]) | * AddRoundKey(Rundenschlüssel[0]) | ||
* '' | * ''Kryptografierunden r = 1 bis R-1:'' | ||
** SubBytes() | ** SubBytes() | ||
** ShiftRows() | ** ShiftRows() | ||
Zeile 82: | Zeile 82: | ||
[[Datei:AES-AddRoundKey.svg|mini|Bitweise XOR-Verknüpfung zwischen dem Block und dem aktuellen Rundenschlüssel]] | [[Datei:AES-AddRoundKey.svg|mini|Bitweise XOR-Verknüpfung zwischen dem Block und dem aktuellen Rundenschlüssel]] | ||
Vor der ersten und nach jeder | Vor der ersten und nach jeder Kryptografierunde wird der Datenblock mit einem der Rundenschlüssel XOR-verknüpft. | ||
* Dies ist die einzige Funktion in AES, in die der Benutzerschlüssel eingeht. | * Dies ist die einzige Funktion in AES, in die der Benutzerschlüssel eingeht. | ||
Zeile 162: | Zeile 162: | ||
* Durch die vielen [[Kontravalenz|XOR-Verknüpfungen]] unterscheiden sich die meisten Funktionen zum Entschlüsseln nicht von denen zum Verschlüsseln. | * Durch die vielen [[Kontravalenz|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 originalen S-Box berechnen lässt) und die Zeilenverschiebungen erfolgen in die andere Richtung. | * Jedoch muss eine andere S-Box genutzt werden (die sich aus der originalen S-Box berechnen lässt) und die Zeilenverschiebungen erfolgen in die andere Richtung. | ||
[[Kategorie:AES]] |
Aktuelle Version vom 27. Juli 2024, 10:36 Uhr
Arbeitsweise
- Rijndael ist eine als Substitutions-Permutations-Netzwerk entworfene Blockchiffre.
- Bei Rijndael können Blocklänge und Schlüssellänge unabhängig voneinander die Werte 128, 160, 192, 224 oder 256 Bits erhalten, während bei AES die Blockgröße auf 128 Bit festgelegt ist und die Schlüsselgröße 128, 192 oder 256 Bit betragen kann.
- Rijndael ist eine iterierte Blockchiffre
- d. h. der Block wird in mehreren aufeinanderfolgenden Runden verschlüsselt, die bis auf die verwendeten Rundenschlüssel gleich sind.
- Für jede Runde wird ein anderer Rundenschlüssel aus dem Originalschlüssel berechnet (Schlüsselexpansion).
- Die Anzahl der Runden variiert und ist vom Maximum der Blockgröße und der Schlüssellänge abhängig (beim AES also nur von der Schlüssellänge):
max(b, k) | 128 | 160 | 192 | 224 | 256 |
---|---|---|---|---|---|
Rundenzahl R | 10 | 11 | 12 | 13 | 14 |
Der Datenblock, der ver- oder entschlüsselt werden soll, wird zunächst in eine zweidimensionale Tabelle geschrieben, deren Zellen ein Byte groß sind und die vier Zeilen und je nach Blockgröße 4 bis 8 Spalten hat.
Ablauf
- Schlüsselexpansion
- AddRoundKey(Rundenschlüssel[0])
- Kryptografierunden r = 1 bis R-1:
- SubBytes()
- ShiftRows()
- MixColumns()
- AddRoundKey(Rundenschlüssel[r])
- Schlussrunde:
- SubBytes()
- ShiftRows()
- AddRoundKey(Rundenschlüssel[R])
S-Box
Rijndael verwendet eine S-Box, um bei der Operation SubBytes() jedes Byte des Datenblocks durch ein anderes zu ersetzen, und sie wird auch bei der Schlüsselexpansion eingesetzt.
- Eine S-Box (Substitutionsbox) dient zur monoalphabetischen Kryptografie.
- Sie bewirkt vor allem die Verwischung der Beziehung zwischen Klar- und Geheimtext, was in der kryptologischen Fachsprache Konfusion genannt wird, kann aber auch zur Umsetzung des Shannon’schen Prinzips der Diffusion beitragen.
Die S-Box von Rijndael ist nach Kriterien konstruiert, die die Anfälligkeit für die Methoden der linearen und der differentiellen Kryptoanalyse sowie für algebraische Attacken minimieren sollen.
- Sie besteht aus 256 Bytes, die erzeugt werden, indem jedes Byte außer der Null, aufgefasst als Vertreter des endlichen Körpers , durch sein multiplikatives Inverses ersetzt wird, worauf noch eine affine Transformation erfolgt.[1] Es ist
- .
Dabei steht für das multiplikative Inverse von in , oder für 0, falls . bezeichnet die Linksrotation des Bytes um Bitpositionen und das bitweise XOR.
Die Werte der S-Box und der zum Entschlüsseln benötigten inversen S-Box können entweder für jedes substituierte Byte erneut (dynamisch) berechnet werden, um Speicher zu sparen, oder vorberechnet und in einem Array gespeichert werden.
Schlüsselexpansion
Zunächst müssen aus dem Schlüssel Teilschlüssel (auch Rundenschlüssel genannt) erzeugt werden, die jeweils die gleiche Größe wie ein Datenblock haben.
- Somit muss der Benutzerschlüssel auf die Länge expandiert werden, wobei die Blockgröße in Bit angibt.
- Der Schlüssel wird in eine zweidimensionale Tabelle mit vier Zeilen und Zellen der Größe 1 Byte abgebildet.
- Fasst man jede Spalte als 32-bit-Wort auf, ergibt das ein eindimensionales Array mit Elementen.
Sei die Länge des Benutzerschlüssels in Wörtern.
- Dieser wird zunächst in die ersten Wörter des Arrays eingetragen.
- Dann werden in einer Iteration die weiteren Wörter jeweils durch bitweises XOR von und berechnet.
- Für jedes -te Wort wird zuvor rotiert, byteweise substituiert und mit einer von abhängigen Konstanten verknüpft.
- Falls ist, wird dazwischen alle Wörter noch eine weitere Substitution ausgeführt.
Für :
bezeichnet die Substitution jedes Bytes in durch die gleiche S-Box, die auch beim Verschlüsseln eines Datenblocks eingesetzt wird. ist die Rotation von um 8 Bitpositionen nach links.
- Die Konstanten werden gebildet, indem , berechnet im Körper , in das höchste Byte von eingetragen wird, während die übrigen Bytes 0 sind.
AddRoundKey
Vor der ersten und nach jeder Kryptografierunde wird der Datenblock mit einem der Rundenschlüssel XOR-verknüpft.
- Dies ist die einzige Funktion in AES, in die der Benutzerschlüssel eingeht.
SubBytes
Im ersten Schritt jeder Runde wird jedes Byte im Block durch den Eintrag der S-Box ersetzt.
- Somit werden die Daten byteweise monoalphabetisch verschlüsselt.
ShiftRows
Wie oben erwähnt, liegt ein Block in Form einer zweidimensionalen Tabelle mit vier Zeilen vor.
- In diesem zweiten Schritt jeder Runde 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:
r | b=128 | b=160 | b=192 | b=224 | b=256 |
---|---|---|---|---|---|
Zeile 1 | 0 | 0 | 0 | 0 | 0 |
Zeile 2 | 1 | 1 | 1 | 1 | 1 |
Zeile 3 | 2 | 2 | 2 | 2 | 3 |
Zeile 4 | 3 | 3 | 3 | 4 | 4 |
Je nach Blocklänge b und Zeile in der Datentabelle wird die Zeile um 1 bis 4 Spalten verschoben.
Für den AES sind nur die fett markierten Werte relevant.
MixColumns
Als dritte Operation jeder Runde außer der Schlussrunde werden die Daten innerhalb der Spalten vermischt.
- Zur Berechnung eines Bytes der neuen Spalte wird jedes Byte der alten mit einer Konstanten (1, 2 oder 3) multipliziert.
- Dies geschieht modulo des irreduziblen Polynoms im Galois-Körper .
- Dann werden die Ergebnisse XOR-verknüpft:
In Matrixschreibweise:
Nach den Rechengesetzen in diesem Galois-Körper gilt für die Multiplikation:
Dabei bezeichnet die normale Multiplikation von a mit 2 und die bitweise XOR-Verknüpfung.
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 originalen S-Box berechnen lässt) und die Zeilenverschiebungen erfolgen in die andere Richtung.