17.11.2014 Aufrufe

Advanced Encryption Standard Rijndael

Advanced Encryption Standard Rijndael

Advanced Encryption Standard Rijndael

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Advanced</strong> <strong>Encryption</strong> <strong>Standard</strong><br />

<strong>Rijndael</strong><br />

Wolfgang Gummlich<br />

18. Januar 2007


Inhalt<br />

1 Einführung<br />

2 Spezifikation von <strong>Rijndael</strong><br />

3 Kryptoanalyse


Wie <strong>Rijndael</strong> zu AES wurde..<br />

Frühere <strong>Standard</strong> DES wegen des zu kurzen Schlüssels nicht<br />

mehr sicher gegen Brute-Force-Angriffe und 3DES zu langsam


Wie <strong>Rijndael</strong> zu AES wurde..<br />

Frühere <strong>Standard</strong> DES wegen des zu kurzen Schlüssels nicht<br />

mehr sicher gegen Brute-Force-Angriffe und 3DES zu langsam<br />

September 1997: National Institute of <strong>Standard</strong>s and<br />

Technology (NIST) startete Aufruf für Nachfolger von DES


Wie <strong>Rijndael</strong> zu AES wurde..<br />

Frühere <strong>Standard</strong> DES wegen des zu kurzen Schlüssels nicht<br />

mehr sicher gegen Brute-Force-Angriffe und 3DES zu langsam<br />

September 1997: National Institute of <strong>Standard</strong>s and<br />

Technology (NIST) startete Aufruf für Nachfolger von DES<br />

August 1998: 15 Kandidaten vorgestellt


Wie <strong>Rijndael</strong> zu AES wurde..<br />

Frühere <strong>Standard</strong> DES wegen des zu kurzen Schlüssels nicht<br />

mehr sicher gegen Brute-Force-Angriffe und 3DES zu langsam<br />

September 1997: National Institute of <strong>Standard</strong>s and<br />

Technology (NIST) startete Aufruf für Nachfolger von DES<br />

August 1998: 15 Kandidaten vorgestellt<br />

August 1999: NIST verkündete 5 Finalisten: MARS, RC6,<br />

<strong>Rijndael</strong>, Serpent, Twofish


Wie <strong>Rijndael</strong> zu AES wurde..<br />

Frühere <strong>Standard</strong> DES wegen des zu kurzen Schlüssels nicht<br />

mehr sicher gegen Brute-Force-Angriffe und 3DES zu langsam<br />

September 1997: National Institute of <strong>Standard</strong>s and<br />

Technology (NIST) startete Aufruf für Nachfolger von DES<br />

August 1998: 15 Kandidaten vorgestellt<br />

August 1999: NIST verkündete 5 Finalisten: MARS, RC6,<br />

<strong>Rijndael</strong>, Serpent, Twofish<br />

02. Oktober 2000: NIST ernannte <strong>Rijndael</strong> zum <strong>Advanced</strong><br />

<strong>Encryption</strong> <strong>Standard</strong>


Wie <strong>Rijndael</strong> zu AES wurde..<br />

Frühere <strong>Standard</strong> DES wegen des zu kurzen Schlüssels nicht<br />

mehr sicher gegen Brute-Force-Angriffe und 3DES zu langsam<br />

September 1997: National Institute of <strong>Standard</strong>s and<br />

Technology (NIST) startete Aufruf für Nachfolger von DES<br />

August 1998: 15 Kandidaten vorgestellt<br />

August 1999: NIST verkündete 5 Finalisten: MARS, RC6,<br />

<strong>Rijndael</strong>, Serpent, Twofish<br />

02. Oktober 2000: NIST ernannte <strong>Rijndael</strong> zum <strong>Advanced</strong><br />

<strong>Encryption</strong> <strong>Standard</strong><br />

benannt nach seinen Erfindern V. Rijmen und J. Daemen


Designkriterien<br />

Sicherheit gegen alle bekannten Angriffe


Designkriterien<br />

Sicherheit gegen alle bekannten Angriffe<br />

hohe Geschwindigkeit und geringer Speicherverbrauch auf<br />

vielen gängigen Plattformen


Designkriterien<br />

Sicherheit gegen alle bekannten Angriffe<br />

hohe Geschwindigkeit und geringer Speicherverbrauch auf<br />

vielen gängigen Plattformen<br />

einfache Spezifikation


Designkriterien<br />

Sicherheit gegen alle bekannten Angriffe<br />

hohe Geschwindigkeit und geringer Speicherverbrauch auf<br />

vielen gängigen Plattformen<br />

einfache Spezifikation<br />

einfache Implementierung


Mathematische Grundlagen<br />

Repräsentationsmöglichkeiten eines Bytes:<br />

binär: b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 mit b i ∈ GF (2) = {0, 1}


Mathematische Grundlagen<br />

Repräsentationsmöglichkeiten eines Bytes:<br />

binär: b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 mit b i ∈ GF (2) = {0, 1}<br />

hexadezimal: H 1 H 0 mit H i ∈ {0, . . . , F}


Mathematische Grundlagen<br />

Repräsentationsmöglichkeiten eines Bytes:<br />

binär: b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 mit b i ∈ GF (2) = {0, 1}<br />

hexadezimal: H 1 H 0 mit H i ∈ {0, . . . , F}<br />

Polynom: b(x) = ∑ 7<br />

i=0 b ix i mit b(x) ∈ GF (2)[x]/m(x)


Mathematische Grundlagen<br />

Repräsentationsmöglichkeiten eines Bytes:<br />

binär: b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 mit b i ∈ GF (2) = {0, 1}<br />

hexadezimal: H 1 H 0 mit H i ∈ {0, . . . , F}<br />

Polynom: b(x) = ∑ 7<br />

i=0 b ix i mit b(x) ∈ GF (2)[x]/m(x)<br />

Bsp.: 01010111 = 57 = x 6 + x 4 + x 2 + x + 1


Mathematische Grundlagen<br />

Addition von Bytes:<br />

c(x) = a(x) + b(x) ⇔ c i = a i ⊕ b i


Mathematische Grundlagen<br />

Addition von Bytes:<br />

c(x) = a(x) + b(x) ⇔ c i = a i ⊕ b i<br />

〈BYTES, ⊕〉 ist eine abelsche Gruppe


Mathematische Grundlagen<br />

Multiplikation von Bytes:<br />

c(x) ≡ a(x) · b(x)<br />

mod m(x) = a(x) ⊗ b(x)<br />

mit m(x) = x 8 + x 4 + x 3 + x + 1 = 11B


Mathematische Grundlagen<br />

Multiplikation von Bytes:<br />

c(x) ≡ a(x) · b(x)<br />

mod m(x) = a(x) ⊗ b(x)<br />

mit m(x) = x 8 + x 4 + x 3 + x + 1 = 11B<br />

m(x) ist das erste Polynom einer 1986 von Lidl und Niereiter<br />

publizierten Liste von irreduziblen Polynomen vom Grad 8.


Mathematische Grundlagen<br />

Multiplikation von Bytes:<br />

c(x) ≡ a(x) · b(x)<br />

mod m(x) = a(x) ⊗ b(x)<br />

mit m(x) = x 8 + x 4 + x 3 + x + 1 = 11B<br />

m(x) ist das erste Polynom einer 1986 von Lidl und Niereiter<br />

publizierten Liste von irreduziblen Polynomen vom Grad 8.<br />

〈BYTES, ⊗〉 ist eine abelsche Gruppe


Mathematische Grundlagen<br />

Folgerung<br />

Die 256 möglichen Byte-Werte mit der XOR-Addition und der<br />

Multiplikation modulo m(x) bilden den Körper GF (2 8 ).


Mathematische Grundlagen<br />

Ein 32-Bit-Wort (4-Byte-Array) kann als Polynom über<br />

GF (2 8 ) vom Grad ≤ 3 betrachtet werden.


Mathematische Grundlagen<br />

Ein 32-Bit-Wort (4-Byte-Array) kann als Polynom über<br />

GF (2 8 ) vom Grad ≤ 3 betrachtet werden.<br />

Die Addition erfolgt, wie gewohnt, komponentenweise mittels<br />

XOR.


Mathematische Grundlagen<br />

Ein 32-Bit-Wort (4-Byte-Array) kann als Polynom über<br />

GF (2 8 ) vom Grad ≤ 3 betrachtet werden.<br />

Die Addition erfolgt, wie gewohnt, komponentenweise mittels<br />

XOR.<br />

Bei der Multiplikation wird das (reduzible)<br />

Reduktionspolynom x 4 + 1 verwendet.


Mathematische Grundlagen<br />

c(x) = a(x) · b(x)<br />

c 6 x 6 + c 5 x 5 + c 4 x 4 + c 3 x 3 + c 2 x 2 + c 1 x + c 0 =<br />

(a 3 x 3 + a 2 x 2 + a 1 x + a 0 ) · (b 3 x 3 + b 2 x 2 + b 1 x + b 0 )<br />

c 0 = a 0 ⊗ b 0 c 4 = a 3 ⊗ b 1 ⊕ a 2 ⊗ b 2 ⊕ a 1 ⊗ b 3<br />

c 1 = a 1 ⊗ b 0 ⊕ a 0 ⊗ b 1 c 5 = a 3 ⊗ b 2 ⊕ a 2 ⊗ b 3<br />

c 2 = a 2 ⊗ b 0 ⊕ a 1 ⊗ b 1 ⊕ a 0 ⊗ b 2 c 6 = a 3 ⊗ b 3<br />

c 3 = a 3 ⊗ b 0 ⊕ a 2 ⊗ b 1 ⊕ a 1 ⊗ b 2 ⊕ a 0 ⊗ b 3


Mathematische Grundlagen<br />

c 0 = a 0 ⊗ b 0 c 4 = a 3 ⊗ b 1 ⊕ a 2 ⊗ b 2 ⊕ a 1 ⊗ b 3<br />

c 1 = a 1 ⊗ b 0 ⊕ a 0 ⊗ b 1 c 5 = a 3 ⊗ b 2 ⊕ a 2 ⊗ b 3<br />

c 2 = a 2 ⊗ b 0 ⊕ a 1 ⊗ b 1 ⊕ a 0 ⊗ b 2 c 6 = a 3 ⊗ b 3<br />

c 3 = a 3 ⊗ b 0 ⊕ a 2 ⊗ b 1 ⊕ a 1 ⊗ b 2 ⊕ a 0 ⊗ b 3<br />

Da x j mod (x 4 + 1) ≡ x j mod 4 ergibt sich für d(x) ≡ a(x) · b(x)<br />

mod (x 4 + 1) = d 3 x 3 + d 2 x 2 + d 1 x + d 0 :<br />

d 0 = c 0 ⊕ c 4 = (a 0 ⊗ b 0 ) ⊕ (a 3 ⊗ b 1 ) ⊕ (a 2 ⊗ b 2 ) ⊕ (a 1 ⊗ b 3 )<br />

d 1 = c 1 ⊕ c 5 = (a 1 ⊗ b 0 ) ⊕ (a 0 ⊗ b 1 ) ⊕ (a 3 ⊗ b 2 ) ⊕ (a 2 ⊗ b 3 )<br />

d 2 = c 2 ⊕ c 6 = (a 2 ⊗ b 0 ) ⊕ (a 1 ⊗ b 1 ) ⊕ (a 0 ⊗ b 2 ) ⊕ (a 3 ⊗ b 3 )<br />

d 3 = cc 3 ⊕c 3 = (a 3 ⊗ b 0 ) ⊕ (a 2 ⊗ b 1 ) ⊕ (a 1 ⊗ b 2 ) ⊕ (a 0 ⊗ b 3 )


Mathematische Grundlagen<br />

d 0 = c 0 ⊕ c 4 = (a 0 ⊗ b 0 ) ⊕ (a 3 ⊗ b 1 ) ⊕ (a 2 ⊗ b 2 ) ⊕ (a 1 ⊗ b 3 )<br />

d 1 = c 1 ⊕ c 5 = (a 1 ⊗ b 0 ) ⊕ (a 0 ⊗ b 1 ) ⊕ (a 3 ⊗ b 2 ) ⊕ (a 2 ⊗ b 3 )<br />

d 2 = c 2 ⊕ c 6 = (a 2 ⊗ b 0 ) ⊕ (a 1 ⊗ b 1 ) ⊕ (a 0 ⊗ b 2 ) ⊕ (a 3 ⊗ b 3 )<br />

d 3 = cc 3 ⊕c 3 = (a 3 ⊗ b 0 ) ⊕ (a 2 ⊗ b 1 ) ⊕ (a 1 ⊗ b 2 ) ⊕ (a 0 ⊗ b 3 )<br />

Multiplikation zweier 4-Byte-Arrays mod (x 4 + 1) als<br />

Matrix-Vektor-Multiplikation:<br />

⎛ ⎞ ⎛<br />

⎞ ⎛ ⎞<br />

d 0 a 0 a 3 a 2 a 1 b 0<br />

⎜d 1<br />

⎟<br />

⎝d 2<br />

⎠ = ⎜a 1 a 0 a 3 a 2<br />

⎟<br />

⎝a 2 a 1 a 0 a 3<br />

⎠ × ⎜b 1<br />

⎟<br />

⎝b 2<br />

⎠<br />

d 3 a 3 a 2 a 1 a 0 b 3


Blockchiffren<br />

Eine Blockchiffre ist eine Transformation eines<br />

n-Bit-Klartextes zu einem n-Bit-Chiffretext unter Einfluss<br />

eines Schlüssels k.


Blockchiffren<br />

Eine Blockchiffre ist eine Transformation eines<br />

n-Bit-Klartextes zu einem n-Bit-Chiffretext unter Einfluss<br />

eines Schlüssels k.<br />

Eine iterierte Blockchiffre ist eine Blockchiffre, bei der die<br />

Transformation mehrmals hintereinander ausgeführt wird. Eine<br />

Ausführung dieser Transformation wird Runde genannt. In<br />

jeder Runde wird ein eigener Rundenschlüssel verwendet, der<br />

vorher berechnet wird.


Blockchiffren<br />

Eine schlüsselalternierende Blockchiffre ist eine Blockchiffre<br />

mit folgenden beiden Eigenschaften:


Blockchiffren<br />

Eine schlüsselalternierende Blockchiffre ist eine Blockchiffre<br />

mit folgenden beiden Eigenschaften:<br />

Es werden abwechselnd Rundentransformationen und<br />

Schlüsseladditionen ausgeführt. Der erste Rundenschlüssel wird<br />

vor der ersten Runde und der letzte Rundenschlüssel nach der<br />

letzten Runde addiert.


Blockchiffren<br />

Eine schlüsselalternierende Blockchiffre ist eine Blockchiffre<br />

mit folgenden beiden Eigenschaften:<br />

Es werden abwechselnd Rundentransformationen und<br />

Schlüsseladditionen ausgeführt. Der erste Rundenschlüssel wird<br />

vor der ersten Runde und der letzte Rundenschlüssel nach der<br />

letzten Runde addiert.<br />

Einfache Schlüsseladdition mittels XOR.


Blockchiffren<br />

Eine schlüsselalternierende Blockchiffre ist eine Blockchiffre<br />

mit folgenden beiden Eigenschaften:<br />

Es werden abwechselnd Rundentransformationen und<br />

Schlüsseladditionen ausgeführt. Der erste Rundenschlüssel wird<br />

vor der ersten Runde und der letzte Rundenschlüssel nach der<br />

letzten Runde addiert.<br />

Einfache Schlüsseladdition mittels XOR.<br />

Eine schlüssel-iterierte Blockchiffre ist eine<br />

schlüsselalternierende Blockchiffre, wobei jede Runde (bis auf<br />

vielleicht die erste oder letzte Runde) gleich ist.


Blockchiffren<br />

Eine schlüsselalternierende Blockchiffre ist eine Blockchiffre<br />

mit folgenden beiden Eigenschaften:<br />

Es werden abwechselnd Rundentransformationen und<br />

Schlüsseladditionen ausgeführt. Der erste Rundenschlüssel wird<br />

vor der ersten Runde und der letzte Rundenschlüssel nach der<br />

letzten Runde addiert.<br />

Einfache Schlüsseladdition mittels XOR.<br />

Eine schlüssel-iterierte Blockchiffre ist eine<br />

schlüsselalternierende Blockchiffre, wobei jede Runde (bis auf<br />

vielleicht die erste oder letzte Runde) gleich ist.<br />

<strong>Rijndael</strong> ist eine schlüssel-iterierte Blockchiffre.


Verschlüsselungsmodi<br />

Die zu verschlüsselnde Nachricht wird in Blöcke gleicher<br />

Länge unterteilt.


Verschlüsselungsmodi<br />

Die zu verschlüsselnde Nachricht wird in Blöcke gleicher<br />

Länge unterteilt.<br />

ECB (Electronic Code Book Mode): Die Chiffre wird auf<br />

jedem Block unabhängig voneinander audgeführt.


Verschlüsselungsmodi<br />

Die zu verschlüsselnde Nachricht wird in Blöcke gleicher<br />

Länge unterteilt.<br />

ECB (Electronic Code Book Mode): Die Chiffre wird auf<br />

jedem Block unabhängig voneinander audgeführt.<br />

Nachteil: Wenn die Nachricht zwei identische Blöcke enthält,<br />

sind die zugehörigen Cryptogramme ebenfalls gleich.


Verschlüsselungsmodi<br />

Die zu verschlüsselnde Nachricht wird in Blöcke gleicher<br />

Länge unterteilt.<br />

ECB (Electronic Code Book Mode): Die Chiffre wird auf<br />

jedem Block unabhängig voneinander audgeführt.<br />

Nachteil: Wenn die Nachricht zwei identische Blöcke enthält,<br />

sind die zugehörigen Cryptogramme ebenfalls gleich.<br />

CBC (Cipher Block Chaining Mode): Bevor ein Block<br />

verschlüsselt wird, wird er mit dem Cryptogramm des<br />

vorherigen Blockes XOR-verknüpft.


Verschlüsselungsmodi<br />

Die zu verschlüsselnde Nachricht wird in Blöcke gleicher<br />

Länge unterteilt.<br />

ECB (Electronic Code Book Mode): Die Chiffre wird auf<br />

jedem Block unabhängig voneinander audgeführt.<br />

Nachteil: Wenn die Nachricht zwei identische Blöcke enthält,<br />

sind die zugehörigen Cryptogramme ebenfalls gleich.<br />

CBC (Cipher Block Chaining Mode): Bevor ein Block<br />

verschlüsselt wird, wird er mit dem Cryptogramm des<br />

vorherigen Blockes XOR-verknüpft.<br />

Wenn die Länge der Nachricht kein ganzzahliges Vielfaches<br />

der Blocklänge ist, muss die Nachricht aufgefüllt werden bis<br />

die gewünschte Länge erreicht ist. Dadurch wird das<br />

Cryptogramm länger als die Nachricht, was in einigen Fällen<br />

ein Nachteil sein kann.


Inhalt<br />

1 Einführung<br />

2 Spezifikation von <strong>Rijndael</strong><br />

3 Kryptoanalyse


AES - Parameter<br />

Block-/Schlüssellängen: 128, 160, 192, 224, 256 bit


AES - Parameter<br />

Block-/Schlüssellängen: 128, 160, 192, 224, 256 bit<br />

N b = Blocklänge<br />

32


AES - Parameter<br />

Block-/Schlüssellängen: 128, 160, 192, 224, 256 bit<br />

N b = Blocklänge<br />

32<br />

N k = Schlüssellänge<br />

32


AES - Parameter<br />

Block-/Schlüssellängen: 128, 160, 192, 224, 256 bit<br />

N b = Blocklänge<br />

32<br />

N k = Schlüssellänge<br />

32<br />

N r = max{N b , N r } + 6


AES - Parameter<br />

Block-/Schlüssellängen: 128, 160, 192, 224, 256 bit<br />

N b = Blocklänge<br />

32<br />

N k = Schlüssellänge<br />

32<br />

N r = max{N b , N r } + 6<br />

N b = 4 N b = 5 N b = 6 N b = 7 N b = 8<br />

N k = 4 10 11 12 13 14<br />

N k = 5 11 11 12 13 14<br />

N k = 6 12 12 12 13 14<br />

N k = 7 13 13 13 13 14<br />

N k = 8 14 14 14 14 14


Der Zustand<br />

Die Objekte, auf denen <strong>Rijndael</strong> arbeitet, sind 4 × N b -Arrays<br />

(4 × 4 bei AES), dessen Elemente Bytes sind.


Der Zustand<br />

Die Objekte, auf denen <strong>Rijndael</strong> arbeitet, sind 4 × N b -Arrays<br />

(4 × 4 bei AES), dessen Elemente Bytes sind.<br />

s 0,0 s 0,1 s 0,2 s 0,3<br />

s 1,0 s 1,1 s 1,2 s 1,3<br />

s 2,0 s 2,1 s 2,2 s 2,3<br />

s 3,0 s 3,1 s 3,2 s 3,3<br />

mit s i,j ∈ GF (2 8 ).


Ein- und Ausgabe<br />

Sei t 0 t 1 . . . t 15 der Eingabetext und k 0 k 1 . . . k 23 der Schlüssel.


Ein- und Ausgabe<br />

Sei t 0 t 1 . . . t 15 der Eingabetext und k 0 k 1 . . . k 23 der Schlüssel.<br />

t 0 t 4 t 8 t 12<br />

k 0 k 4 k 8 k 12 k 16 k 20<br />

t 3 t 7 t 11 t 15 k 3 k 7 k 11 k 15 k 19 k 23<br />

t 1 t 5 t 9 t 13<br />

k 1 k 5 k 9 k 13 k 17 k 21<br />

t 2 t 6 t 10 t 14<br />

k 2 k 6 k 10 k 14 k 18 k 22


Ein- und Ausgabe<br />

Sei t 0 t 1 . . . t 15 der Eingabetext und k 0 k 1 . . . k 23 der Schlüssel.<br />

t 0 t 4 t 8 t 12<br />

k 0 k 4 k 8 k 12 k 16 k 20<br />

t 3 t 7 t 11 t 15 k 3 k 7 k 11 k 15 k 19 k 23<br />

t 1 t 5 t 9 t 13<br />

k 1 k 5 k 9 k 13 k 17 k 21<br />

t 2 t 6 t 10 t 14<br />

k 2 k 6 k 10 k 14 k 18 k 22<br />

Eingabe: a i,j = t i+4j , 0 ≤ i < 4, 0 ≤ j < N b<br />

Ausgabe: t i = a i mod 4,⌊i/4⌋ , 0 ≤ i < 4 · N b


Der Algorithmus<br />

<strong>Rijndael</strong><br />

{<br />

KeyExpansion(CipherKey, RoundKey);<br />

AddRoundKey(State, RoundKey[0]);<br />

for i = 1 to Nr-1 do Round(State, RoundKey[i]);<br />

FinalRound(State, RoundKey[Nr]);<br />

}


Der Algorithmus<br />

<strong>Rijndael</strong><br />

{<br />

KeyExpansion(CipherKey, RoundKey);<br />

AddRoundKey(State, RoundKey[0]);<br />

for i = 1 to Nr-1 do Round(State, RoundKey[i]);<br />

FinalRound(State, RoundKey[Nr]);<br />

}<br />

Inv<strong>Rijndael</strong><br />

{<br />

KeyExpansion(CipherKey, RoundKey);<br />

InvFinalRound(State, RoundKey[Nr]);<br />

for i = 1 to Nr-1 do InvRound(State, RoundKey[i]);<br />

InvAddRoundKey(State, RoundKey[0]);<br />

}


Die Runden<br />

Round(State, RoundKey[i])<br />

{<br />

SubBytes(State);<br />

ShiftRows(State);<br />

MixColumns(State);<br />

AddRoundKey(State, RoundKey[i]);<br />

}


Die Runden<br />

Round(State, RoundKey[i])<br />

{<br />

SubBytes(State);<br />

ShiftRows(State);<br />

MixColumns(State);<br />

AddRoundKey(State, RoundKey[i]);<br />

}<br />

FinalRound(State, RoundKey[Nr])<br />

{<br />

SubBytes(State);<br />

ShiftRows(State);<br />

AddRoundKey(State, RoundKey[Nr]);<br />

}


Die Runden<br />

InvRound(State, RoundKey[i])<br />

{<br />

InvAddRoundKey(State, RoundKey[i]);<br />

InvMixColumns(State);<br />

InvShiftRows(State);<br />

InvSubBytes(State);<br />

}<br />

InvFinalRound(State, RoundKey[0])<br />

{<br />

InvAddRoundKey(State, RoundKey[0]);<br />

InvShiftRows(State);<br />

InvSubBytes(State);<br />

}


SubBytes


S-Box<br />

S-Box 0 1 2 3 4 5 6 7 8 9 A B C D E F<br />

0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76<br />

1 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0<br />

2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15<br />

3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75<br />

4 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84<br />

5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF<br />

6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8<br />

7 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2<br />

8 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73<br />

9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB<br />

A E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79<br />

B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08<br />

C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A<br />

D 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E<br />

E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF<br />

F 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16


SubBytes<br />

SBox(x) = f (g(x)) mit


SubBytes<br />

SBox(x) = f (g(x)) mit<br />

{ x<br />

g(x) =<br />

−1 in GF (2 8 ) , x ≠ 0<br />

0 , x = 0


SubBytes<br />

SBox(x) = f (g(x)) mit<br />

{ x<br />

g(x) =<br />

−1 in GF (2 8 ) , x ≠ 0<br />

0 , x = 0<br />

⎛<br />

⎞ ⎛ ⎞ ⎛ ⎞<br />

1 1 1 1 1 0 0 0 a 7 0<br />

0 1 1 1 1 1 0 0<br />

a 6<br />

1<br />

0 0 1 1 1 1 1 0<br />

a 5<br />

1<br />

f (a) =<br />

0 0 0 1 1 1 1 1<br />

1 0 0 0 1 1 1 1<br />

×<br />

a 4<br />

a 3<br />

⊕<br />

0<br />

0<br />

⎜1 1 0 0 0 1 1 1<br />

⎟ ⎜a 2<br />

⎟ ⎜0<br />

⎟<br />

⎝1 1 1 0 0 0 1 1⎠<br />

⎝a 1<br />

⎠ ⎝1⎠<br />

1 1 1 1 0 0 0 1 a 0 1


SubBytes<br />

Mittels Lagrange-Interpolation kann man zeigen:<br />

SBox(x) = 05 · x 254 + 09 · x 253 + F9 · x 251 + 25 · x 247<br />

+ F4 · x 239 + 01 · x 223 + B5 · x 191 + 8F · x 127 + 63


S −1 -Box<br />

S −1 -Box 0 1 2 3 4 5 6 7 8 9 A B C D E F<br />

0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB<br />

1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB<br />

2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E<br />

3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 25<br />

4 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 92<br />

5 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 84<br />

6 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 06<br />

7 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B<br />

8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 73<br />

9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DF 6E<br />

A 47 F1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1B<br />

B FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4<br />

C 1F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5F<br />

D 60 51 7F A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 9C EF<br />

E A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C 83 53 99 61<br />

F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D


InvSubBytes<br />

S −1 Box(x) = g −1 (f −1 (x)) = g(f −1 (x)) mit<br />

⎛<br />

⎞ ⎛ ⎞ ⎛ ⎞<br />

0 1 0 1 0 0 1 0 a 7 0<br />

0 0 1 0 1 0 0 1<br />

a 6<br />

0<br />

1 0 0 1 0 1 0 0<br />

a 5<br />

0<br />

f −1 (a) =<br />

0 1 0 0 1 0 1 0<br />

0 0 1 0 0 1 0 1<br />

×<br />

a 4<br />

a 3<br />

⊕<br />

0<br />

0<br />

⎜1 0 0 1 0 0 1 0<br />

⎟ ⎜a 2<br />

⎟ ⎜1<br />

⎟<br />

⎝0 1 0 0 1 0 0 1⎠<br />

⎝a 1<br />

⎠ ⎝0⎠<br />

1 0 1 0 0 1 0 0 a 0 1


ShiftRows


ShiftRows<br />

s ′ r,c = s r,c+Ci<br />

mod N b<br />

N b C 0 C 1 C 2 C 3<br />

4 0 1 2 3<br />

5 0 1 2 3<br />

6 0 1 2 3<br />

7 0 1 2 4<br />

8 0 1 3 4


ShiftRows<br />

s ′ r,c = s r,c+Ci<br />

mod N b<br />

N b C 0 C 1 C 2 C 3<br />

4 0 1 2 3<br />

5 0 1 2 3<br />

6 0 1 2 3<br />

7 0 1 2 4<br />

8 0 1 3 4<br />

Bei InvShiftRows wird C i durch N b − C i ersetzt, aber C 0<br />

bleibt 0.


MixColumns


MixColumns<br />

b 0 + b 1 x + b 2 x 2 + b 3 x 3 ≡<br />

(02+01x +01x 2 +03x 3 )·(a 0 +a 1 x +a 2 x 2 +a 3 x 3 ) mod x 4 +1


MixColumns<br />

b 0 + b 1 x + b 2 x 2 + b 3 x 3 ≡<br />

(02+01x +01x 2 +03x 3 )·(a 0 +a 1 x +a 2 x 2 +a 3 x 3 ) mod x 4 +1<br />

⇒ Matrixmultiplikation:<br />

⎛ ⎞ ⎛<br />

⎞ ⎛ ⎞<br />

b 0 02 03 01 01 a 0<br />

⎜b 1<br />

⎟<br />

⎝b 2<br />

⎠ = ⎜01 02 03 01<br />

⎟<br />

⎝01 01 02 03⎠ × ⎜a 1<br />

⎟<br />

⎝a 2<br />

⎠<br />

b 3 03 01 01 02 a 3


InvMixColumns<br />

c(x) = (02 + 01x + 01x 2 + 03x 3 )<br />

Da ggT (c(x), x 4 + 1) = 1, gibt es ein Polynom d(x) mit<br />

c(x) · d(x) ≡ 1 mod (x 4 + 1)


InvMixColumns<br />

c(x) = (02 + 01x + 01x 2 + 03x 3 )<br />

Da ggT (c(x), x 4 + 1) = 1, gibt es ein Polynom d(x) mit<br />

c(x) · d(x) ≡ 1 mod (x 4 + 1)<br />

Mit dem erw. Euklidischen Algorithmus für Polynome erhält<br />

man<br />

d(x) = 0Bx 3 + 0Dx 2 + 09x + 0E<br />

⎛ ⎞ ⎛<br />

⎞ ⎛ ⎞<br />

b 0 0E 0B 0D 09 a 0<br />

⇒ ⎜b 1<br />

⎟<br />

⎝b 2<br />

⎠ = ⎜09 0E 0B 0D<br />

⎟<br />

⎝0D 09 0E 0B⎠ × ⎜a 1<br />

⎟<br />

⎝a 2<br />

⎠<br />

b 3 0B 0D 09 0E a 3


AddRoundKey


KeyExpansion<br />

Die Spalten des Key-Arrays werden als 32-bit-Wörter<br />

aufgefasst und mit w[i] bezeichnet.


KeyExpansion<br />

Die Spalten des Key-Arrays werden als 32-bit-Wörter<br />

aufgefasst und mit w[i] bezeichnet.<br />

SubWord(w[i]) wendet die S-Box auf jedes einzelne Byte aus<br />

w[i] an.


KeyExpansion<br />

Die Spalten des Key-Arrays werden als 32-bit-Wörter<br />

aufgefasst und mit w[i] bezeichnet.<br />

SubWord(w[i]) wendet die S-Box auf jedes einzelne Byte aus<br />

w[i] an.<br />

RotWord(w[i]) nimmt ein Wort [a, b, c, d] und gibt das<br />

Wort [b, c, d, a] zurück.


KeyExpansion<br />

Die Spalten des Key-Arrays werden als 32-bit-Wörter<br />

aufgefasst und mit w[i] bezeichnet.<br />

SubWord(w[i]) wendet die S-Box auf jedes einzelne Byte aus<br />

w[i] an.<br />

RotWord(w[i]) nimmt ein Wort [a, b, c, d] und gibt das<br />

Wort [b, c, d, a] zurück.<br />

Rcon[i] = [2 i−1 , 0, 0, 0] für 1 ≤ i ≤ N r


KeyExpansion<br />

w[1] w[2] w[3] . . .<br />

k 0 k 4 k 8 k 12 k 16 k 20 . . .<br />

k 1 k 5 k 9 k 13 k 17 k 21 . . .<br />

k 2 k 6 k 10 k 14 k 18 k 22 . . .<br />

k 3 k 7 k 11 k 15 k 19 k 23 . . .


KeyExpansion<br />

k i−N k<br />

0<br />

k i−N k<br />

1<br />

k i−N k<br />

2<br />

k i−N k<br />

3<br />

⊕<br />

k i−1<br />

0<br />

k i−1<br />

1<br />

k i−1<br />

2<br />

k i−1<br />

3<br />

=<br />

k i 0<br />

k i 1<br />

k i 2<br />

k i 3


KeyExpansion<br />

Wenn i mod N k = 0:<br />

k i−1<br />

0<br />

k i−1<br />

1<br />

k i−1<br />

2<br />

k i−1<br />

3


KeyExpansion<br />

Wenn i mod N k = 0:<br />

k i−1<br />

1<br />

k i−1<br />

2<br />

k i−1<br />

3<br />

k i−1<br />

0


KeyExpansion<br />

Wenn i mod N k = 0:<br />

S(k1 i−1 )<br />

S(k2 i−1 )<br />

S(k3 i−1 )<br />

S(k0 i−1 )


KeyExpansion<br />

Wenn i mod N k = 0:<br />

k i−N k<br />

0<br />

k i−N k<br />

1<br />

k i−N k<br />

2<br />

k i−N k<br />

3<br />

⊕<br />

S(k1 i−1 )<br />

S(k2 i−1 )<br />

S(k3 i−1 )<br />

S(k0 i−1 )


KeyExpansion<br />

Wenn i mod N k = 0:<br />

k i−N k<br />

0<br />

k i−N k<br />

1<br />

k i−N k<br />

2<br />

k i−N k<br />

3<br />

⊕<br />

S(k1 i−1 )<br />

S(k2 i−1 )<br />

S(k3 i−1 )<br />

S(k0 i−1 )<br />

⊕ 2i/N k<br />

0<br />

0<br />

0


KeyExpansion<br />

Wenn i mod N k = 0:<br />

k i−N k<br />

0<br />

k i−N k<br />

1<br />

k i−N k<br />

2<br />

k i−N k<br />

3<br />

⊕<br />

S(k1 i−1 )<br />

S(k2 i−1 )<br />

S(k3 i−1 )<br />

S(k0 i−1 )<br />

⊕ 2i/N k<br />

0<br />

0<br />

0<br />

=<br />

k i 0<br />

k i 1<br />

k i 2<br />

k i 3


KeyExpansion<br />

Wenn N k > 6 und i mod N k = 4:<br />

k i−N k<br />

0<br />

k i−N k<br />

1<br />

k i−N k<br />

2<br />

k i−N k<br />

3<br />

⊕<br />

S(k0 i−1 )<br />

S(k1 i−1 )<br />

S(k2 i−1 )<br />

S(k3 i−1 )<br />

=<br />

k i 0<br />

k i 1<br />

k i 2<br />

k i 3


KeyExpansion<br />

RoundKey[0]<br />

RoundKey[1]<br />

w[1] w[2] w[3] w[4] w[5] w[6] w[7] w[8] · · ·


KeyExpansion<br />

KeyExpansion<br />

{<br />

for i = 0 to Nk-1 do<br />

w[i] = k[i];<br />

for i = Nk to Nb(Nk+1) do<br />

{<br />

temp = w[i-1]<br />

if (i mod Nk = 0)<br />

temp = SubWord(RotWord(temp)) XOR Rcon[i/Nk];<br />

else if (Nk > 6 and i mod Nk = 4)<br />

temp = SubWord(temp);<br />

}<br />

}<br />

w[i] = w[i-Nk] XOR temp;


KeyExpasion<br />

Da die Konstante der affinen Abbildung der<br />

S-Box-Transformation auf jedes Byte des Zustands addiert<br />

wird, kann man diese in eine leicht modifizierte KeyExpansion<br />

verlagern.


KeyExpasion<br />

Da die Konstante der affinen Abbildung der<br />

S-Box-Transformation auf jedes Byte des Zustands addiert<br />

wird, kann man diese in eine leicht modifizierte KeyExpansion<br />

verlagern.<br />

Die Schritte der KeyExpansion lassen sich auch invertieren,<br />

d.h. mit Kenntnis eines beliebigen Blocks von N k<br />

benachbarten Spalten können alle anderen Rundenschlüssel<br />

berechnet werden.


KeyExpasion<br />

Da die Konstante der affinen Abbildung der<br />

S-Box-Transformation auf jedes Byte des Zustands addiert<br />

wird, kann man diese in eine leicht modifizierte KeyExpansion<br />

verlagern.<br />

Die Schritte der KeyExpansion lassen sich auch invertieren,<br />

d.h. mit Kenntnis eines beliebigen Blocks von N k<br />

benachbarten Spalten können alle anderen Rundenschlüssel<br />

berechnet werden.<br />

Nur den CipherKey selbst wählen, nicht die ganzen<br />

Rundenschlüssel!


KeyExpasion<br />

Da die Konstante der affinen Abbildung der<br />

S-Box-Transformation auf jedes Byte des Zustands addiert<br />

wird, kann man diese in eine leicht modifizierte KeyExpansion<br />

verlagern.<br />

Die Schritte der KeyExpansion lassen sich auch invertieren,<br />

d.h. mit Kenntnis eines beliebigen Blocks von N k<br />

benachbarten Spalten können alle anderen Rundenschlüssel<br />

berechnet werden.<br />

Nur den CipherKey selbst wählen, nicht die ganzen<br />

Rundenschlüssel!<br />

keine weak-keys wie in DES


Inhalt<br />

1 Einführung<br />

2 Spezifikation von <strong>Rijndael</strong><br />

3 Kryptoanalyse


Arten der Kryptoanalyse<br />

Brute-Force-Angriff: vollständiges Durchsuchen des<br />

Schlüsselraumes


Arten der Kryptoanalyse<br />

Brute-Force-Angriff: vollständiges Durchsuchen des<br />

Schlüsselraumes<br />

known-plaintext-Angriff: Der Angreifer hat Zugriff auf eine<br />

bestimmte Anzahl von Klartexten und zugehörigen<br />

Chiffretexten bzgl. eines (unbekannten) Schlüssels.


Arten der Kryptoanalyse<br />

Brute-Force-Angriff: vollständiges Durchsuchen des<br />

Schlüsselraumes<br />

known-plaintext-Angriff: Der Angreifer hat Zugriff auf eine<br />

bestimmte Anzahl von Klartexten und zugehörigen<br />

Chiffretexten bzgl. eines (unbekannten) Schlüssels.<br />

chosen-plaintext-Angriff: Der Angreifer hat die Möglichkeit,<br />

eine bestimmte Anzahl an Klartexten frei zu wählen und die<br />

zugehörigen Chiffretexte bzgl. eines (unbekannten) Schlüssels<br />

zu bestimmen.


Inhalt<br />

1 Einführung<br />

2 Spezifikation von <strong>Rijndael</strong><br />

3 Kryptoanalyse<br />

Differentielle Kryptoanalyse<br />

Lineare Kryptoanalyse<br />

Algebraische Angriffe


Differentielle Kryptoanalyse<br />

wurde 1990 von Biham und Shamir entwickelt, wurde<br />

allerdings schon in den 70er Jahren bei der Entwicklung von<br />

DES berücksichtigt


Differentielle Kryptoanalyse<br />

wurde 1990 von Biham und Shamir entwickelt, wurde<br />

allerdings schon in den 70er Jahren bei der Entwicklung von<br />

DES berücksichtigt<br />

chosen-plaintext-Angriff: Der Angreifer wählt Klartextpaare<br />

(P, P ′ ) mit der selben Differenz ∆P = P ⊕ P ′ , und versucht<br />

damit den letzten Rundenschlüssel zu berechnen. (ist<br />

N k > N b , werden die letzten beiden Rundenschlüssel benötigt)


Differentielle Kryptoanalyse<br />

wurde 1990 von Biham und Shamir entwickelt, wurde<br />

allerdings schon in den 70er Jahren bei der Entwicklung von<br />

DES berücksichtigt<br />

chosen-plaintext-Angriff: Der Angreifer wählt Klartextpaare<br />

(P, P ′ ) mit der selben Differenz ∆P = P ⊕ P ′ , und versucht<br />

damit den letzten Rundenschlüssel zu berechnen. (ist<br />

N k > N b , werden die letzten beiden Rundenschlüssel benötigt)<br />

Um an den letzten Rundenschlüssel zu kommen wird versucht,<br />

die Differenz ∆Z am Ende der letzten Runde (vor der<br />

Schlüsseladdition) mit einer hohen Wahrscheinlichkeit zu<br />

bestimmen.


Differentielle Kryptoanalyse<br />

wurde 1990 von Biham und Shamir entwickelt, wurde<br />

allerdings schon in den 70er Jahren bei der Entwicklung von<br />

DES berücksichtigt<br />

chosen-plaintext-Angriff: Der Angreifer wählt Klartextpaare<br />

(P, P ′ ) mit der selben Differenz ∆P = P ⊕ P ′ , und versucht<br />

damit den letzten Rundenschlüssel zu berechnen. (ist<br />

N k > N b , werden die letzten beiden Rundenschlüssel benötigt)<br />

Um an den letzten Rundenschlüssel zu kommen wird versucht,<br />

die Differenz ∆Z am Ende der letzten Runde (vor der<br />

Schlüsseladdition) mit einer hohen Wahrscheinlichkeit zu<br />

bestimmen.<br />

Aus ∆Z und ∆C lässt sich dann der letzte Rundenschlüssel<br />

berechnen (und damit der ganze Schlüssel).


Differentielle Kryptoanalyse<br />

wurde 1990 von Biham und Shamir entwickelt, wurde<br />

allerdings schon in den 70er Jahren bei der Entwicklung von<br />

DES berücksichtigt<br />

chosen-plaintext-Angriff: Der Angreifer wählt Klartextpaare<br />

(P, P ′ ) mit der selben Differenz ∆P = P ⊕ P ′ , und versucht<br />

damit den letzten Rundenschlüssel zu berechnen. (ist<br />

N k > N b , werden die letzten beiden Rundenschlüssel benötigt)<br />

Um an den letzten Rundenschlüssel zu kommen wird versucht,<br />

die Differenz ∆Z am Ende der letzten Runde (vor der<br />

Schlüsseladdition) mit einer hohen Wahrscheinlichkeit zu<br />

bestimmen.<br />

Aus ∆Z und ∆C lässt sich dann der letzte Rundenschlüssel<br />

berechnen (und damit der ganze Schlüssel).<br />

perfekt zufällige Chiffre: P(∆Z | ∆X ) = 1/2 n (mathematisch<br />

nicht möglich)


Differentielle Kryptoanalyse<br />

wurde 1990 von Biham und Shamir entwickelt, wurde<br />

allerdings schon in den 70er Jahren bei der Entwicklung von<br />

DES berücksichtigt<br />

chosen-plaintext-Angriff: Der Angreifer wählt Klartextpaare<br />

(P, P ′ ) mit der selben Differenz ∆P = P ⊕ P ′ , und versucht<br />

damit den letzten Rundenschlüssel zu berechnen. (ist<br />

N k > N b , werden die letzten beiden Rundenschlüssel benötigt)<br />

Um an den letzten Rundenschlüssel zu kommen wird versucht,<br />

die Differenz ∆Z am Ende der letzten Runde (vor der<br />

Schlüsseladdition) mit einer hohen Wahrscheinlichkeit zu<br />

bestimmen.<br />

Aus ∆Z und ∆C lässt sich dann der letzte Rundenschlüssel<br />

berechnen (und damit der ganze Schlüssel).<br />

perfekt zufällige Chiffre: P(∆Z | ∆X ) = 1/2 n (mathematisch<br />

nicht möglich)<br />

Es wird versucht, Paare (∆X , ∆Z) zu finden mit<br />

P(∆Z | ∆X ) ≫ 1/2 n


Differentielle Kryptoanalyse - Die linearen Schritte<br />

Für eine Lineare Abbildung L gilt: L(x) ⊕ L(y) = L(x ⊕ y)


Differentielle Kryptoanalyse - Die linearen Schritte<br />

Für eine Lineare Abbildung L gilt: L(x) ⊕ L(y) = L(x ⊕ y)<br />

Also gilt für zwei Zustände X , X ′ mit X ′ = X ⊕ ∆X :<br />

SR(X ) ⊕ SR(X ′ ) = SR(X ⊕ X ′ ) = SR(∆X )


Differentielle Kryptoanalyse - Die linearen Schritte<br />

Für eine Lineare Abbildung L gilt: L(x) ⊕ L(y) = L(x ⊕ y)<br />

Also gilt für zwei Zustände X , X ′ mit X ′ = X ⊕ ∆X :<br />

SR(X ) ⊕ SR(X ′ ) = SR(X ⊕ X ′ ) = SR(∆X )<br />

MC(X ) ⊕ MC(X ′ ) = MC(X ⊕ X ′ ) = MC(∆X )


Differentielle Kryptoanalyse - Die linearen Schritte<br />

Für eine Lineare Abbildung L gilt: L(x) ⊕ L(y) = L(x ⊕ y)<br />

Also gilt für zwei Zustände X , X ′ mit X ′ = X ⊕ ∆X :<br />

SR(X ) ⊕ SR(X ′ ) = SR(X ⊕ X ′ ) = SR(∆X )<br />

MC(X ) ⊕ MC(X ′ ) = MC(X ⊕ X ′ ) = MC(∆X )<br />

(X ⊕ K) ⊕ (X ′ ⊕ K) = X ⊕ X ′ = ∆X


Differentielle Kryptoanalyse - Eine einfache S-Box<br />

X Y<br />

000 011<br />

001 111<br />

010 101<br />

011 001<br />

100 100<br />

101 010<br />

110 000<br />

111 110


Differentielle Kryptoanalyse - Eine einfache S-Box<br />

X Y<br />

000 011<br />

001 111<br />

010 101<br />

011 001<br />

100 100<br />

101 010<br />

110 000<br />

111 110<br />

∆Y<br />

∆X = 010 ∆X = 011 ∆X = 111 ∆X = . . .<br />

110 010 101 . . .<br />

110 010 111 . . .<br />

110 010 111 . . .<br />

110 010 101 . . .<br />

100 010 101 . . .<br />

100 010 111 . . .<br />

100 010 111 . . .<br />

100 010 101 . . .<br />

4 × 110 8 × 010 4 × 111 . . .<br />

4 × 100 4 × 101 . . .


Differenzenverteilungstabelle<br />

∆Y = 000 001 010 011 100 101 110 111<br />

∆X = 000 8 0 0 0 0 0 0 0<br />

001 0 0 0 0 4 0 4 0<br />

010 0 0 0 0 4 0 4 0<br />

011 0 0 8 0 0 0 0 0<br />

100 0 0 0 0 0 4 0 4<br />

101 0 4 0 4 0 0 0 0<br />

110 0 4 0 4 0 0 0 0<br />

111 0 0 0 0 0 4 0 4


Differenzenverteilungstabelle<br />

Zeilensumme = 2 n = 8


Differenzenverteilungstabelle<br />

Zeilensumme = 2 n = 8<br />

Spaltensumme = 2 n = 8


Differenzenverteilungstabelle<br />

Zeilensumme = 2 n = 8<br />

Spaltensumme = 2 n = 8<br />

Eine Eingangsdifferenz ∆X = 0 wird mit jedem Schlüssel auf<br />

eine Ausgangsdifferenz ∆Y = 0 abgebildet, deswegen ist das<br />

linke obere Element 8 und die restlichen Elemente in der 1.<br />

Zeile und 1. Spalte 0.


Differenzenverteilungstabelle<br />

Zeilensumme = 2 n = 8<br />

Spaltensumme = 2 n = 8<br />

Eine Eingangsdifferenz ∆X = 0 wird mit jedem Schlüssel auf<br />

eine Ausgangsdifferenz ∆Y = 0 abgebildet, deswegen ist das<br />

linke obere Element 8 und die restlichen Elemente in der 1.<br />

Zeile und 1. Spalte 0.<br />

Alle Elemente sind gerade, weil ∆X = X ⊕ X ′ = X ′ ⊕ X .


Differenzenverteilungstabelle<br />

Zeilensumme = 2 n = 8<br />

Spaltensumme = 2 n = 8<br />

Eine Eingangsdifferenz ∆X = 0 wird mit jedem Schlüssel auf<br />

eine Ausgangsdifferenz ∆Y = 0 abgebildet, deswegen ist das<br />

linke obere Element 8 und die restlichen Elemente in der 1.<br />

Zeile und 1. Spalte 0.<br />

Alle Elemente sind gerade, weil ∆X = X ⊕ X ′ = X ′ ⊕ X .<br />

nur 1 oder 2 mögliche Ausgangsdifferenzen pro<br />

Eingangsdifferenz (wenig benötigte Klartextpaare)


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

(Ausschnitt)<br />

∆Y = 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F . . .<br />

∆X = 00 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . .<br />

01 0 2 0 0 2 0 2 0 2 2 2 2 2 2 2 2 . . .<br />

02 0 0 0 2 2 2 2 2 0 0 0 2 2 2 0 2 . . .<br />

03 0 0 2 0 2 2 0 0 2 0 2 2 2 0 0 0 . . .<br />

04 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 . . .<br />

05 0 0 0 0 2 0 0 0 4 2 0 0 2 2 0 0 . . .<br />

06 0 2 0 0 2 2 0 0 0 2 0 2 4 0 2 0 . . .<br />

07 0 2 0 0 0 0 2 0 2 2 2 0 0 0 0 0 . . .<br />

08 0 0 2 2 0 0 0 0 0 2 0 2 2 0 0 2 . . .<br />

09 0 0 2 2 0 0 2 2 0 0 0 0 2 0 2 0 . . .<br />

0A 0 0 2 2 4 0 2 2 0 2 2 0 2 0 0 2 . . .<br />

0B 0 2 0 0 0 0 0 2 2 2 0 0 2 2 2 2 . . .<br />

0C 0 0 2 2 0 0 2 2 2 2 2 0 0 2 0 2 . . .<br />

0D 0 2 2 0 0 0 2 2 2 2 2 2 0 0 0 2 . . .<br />

0E 0 0 2 2 2 2 0 2 2 0 2 2 0 0 0 0 . . .<br />

0F 0 0 2 2 2 0 0 0 2 0 2 0 2 0 0 2 . . .<br />

. . . . . . . . . . . . . . . . .<br />

. ..


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

Zeilensumme = 2 n = 256<br />

Spaltensumme = 2 n = 256


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

Zeilensumme = 2 n = 256<br />

Spaltensumme = 2 n = 256<br />

pro Eingangsbelegung 127 mögliche Ausgangsbelegungen


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

Zeilensumme = 2 n = 256<br />

Spaltensumme = 2 n = 256<br />

pro Eingangsbelegung 127 mögliche Ausgangsbelegungen<br />

126 mit Wahrscheinlichkeit<br />

2<br />

256


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

Zeilensumme = 2 n = 256<br />

Spaltensumme = 2 n = 256<br />

pro Eingangsbelegung 127 mögliche Ausgangsbelegungen<br />

2<br />

126 mit Wahrscheinlichkeit<br />

256<br />

4<br />

1 mit Wahrscheinlichkeit<br />

256


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

Zeilensumme = 2 n = 256<br />

Spaltensumme = 2 n = 256<br />

pro Eingangsbelegung 127 mögliche Ausgangsbelegungen<br />

2<br />

126 mit Wahrscheinlichkeit<br />

256<br />

4<br />

1 mit Wahrscheinlichkeit<br />

256<br />

128 mit Wahrscheinlichkeit 0


Differenzenverteilungstabelle der <strong>Rijndael</strong>-S-Box<br />

Zeilensumme = 2 n = 256<br />

Spaltensumme = 2 n = 256<br />

pro Eingangsbelegung 127 mögliche Ausgangsbelegungen<br />

2<br />

126 mit Wahrscheinlichkeit<br />

256<br />

4<br />

1 mit Wahrscheinlichkeit<br />

256<br />

128 mit Wahrscheinlichkeit 0<br />

außer für ∆X = 0


Differentielle Kryptoanalyse<br />

Um Informationen über ∆Z (der Eingang der lezten<br />

Rundenschlüsseladdition) zu erhalten, wird eine beliebige feste<br />

Differenz ∆P gewählt. (alle ∆P ≠ 0 gleichwertig)


Differentielle Kryptoanalyse<br />

Um Informationen über ∆Z (der Eingang der lezten<br />

Rundenschlüsseladdition) zu erhalten, wird eine beliebige feste<br />

Differenz ∆P gewählt. (alle ∆P ≠ 0 gleichwertig)<br />

Mittels einer sog. Charakteristik<br />

Q = (q (0) , q (1) , . . . , q (r−1) , q (r) ) wird das ∆Z mit der<br />

höchsten Wahrscheinlichkeit ermittelt.


Differentielle Kryptoanalyse<br />

Um Informationen über ∆Z (der Eingang der lezten<br />

Rundenschlüsseladdition) zu erhalten, wird eine beliebige feste<br />

Differenz ∆P gewählt. (alle ∆P ≠ 0 gleichwertig)<br />

Mittels einer sog. Charakteristik<br />

Q = (q (0) , q (1) , . . . , q (r−1) , q (r) ) wird das ∆Z mit der<br />

höchsten Wahrscheinlichkeit ermittelt.<br />

q (i) = Differenz nach der i-ten Runde, also q (0) = ∆P und<br />

q (r) = ∆Z


Differentielle Kryptoanalyse<br />

Um Informationen über ∆Z (der Eingang der lezten<br />

Rundenschlüsseladdition) zu erhalten, wird eine beliebige feste<br />

Differenz ∆P gewählt. (alle ∆P ≠ 0 gleichwertig)<br />

Mittels einer sog. Charakteristik<br />

Q = (q (0) , q (1) , . . . , q (r−1) , q (r) ) wird das ∆Z mit der<br />

höchsten Wahrscheinlichkeit ermittelt.<br />

q (i) = Differenz nach der i-ten Runde, also q (0) = ∆P und<br />

q (r) = ∆Z<br />

q (i+1) ist dasjenige Byte, das bzgl. q (i) die maximale<br />

4<br />

Wahrscheinlichkeit<br />

256 = 1<br />

64 aufweist.


Differentielle Kryptoanalyse<br />

Um Informationen über ∆Z (der Eingang der lezten<br />

Rundenschlüsseladdition) zu erhalten, wird eine beliebige feste<br />

Differenz ∆P gewählt. (alle ∆P ≠ 0 gleichwertig)<br />

Mittels einer sog. Charakteristik<br />

Q = (q (0) , q (1) , . . . , q (r−1) , q (r) ) wird das ∆Z mit der<br />

höchsten Wahrscheinlichkeit ermittelt.<br />

q (i) = Differenz nach der i-ten Runde, also q (0) = ∆P und<br />

q (r) = ∆Z<br />

q (i+1) ist dasjenige Byte, das bzgl. q (i) die maximale<br />

4<br />

Wahrscheinlichkeit<br />

256 = 1<br />

64 aufweist.<br />

Dann werden auf q (i+1) die linearen Operationen inkl. der<br />

Schlüsseladdition ausgeführt.


Differentielle Kryptoanalyse<br />

P(Q) =<br />

( ) 1 (4·Nb ) Nr<br />

64


Differentielle Kryptoanalyse<br />

P(Q) =<br />

( ) 1 (4·Nb ) Nr<br />

64<br />

Die Anzahl der benötigten Klartextpaare (mit den<br />

dazugehörigen Chiffretextpaaren) ist proportional zu<br />

1<br />

P(Q) .


Differentielle Kryptoanalyse<br />

P(Q) =<br />

( ) 1 (4·Nb ) Nr<br />

64<br />

Die Anzahl der benötigten Klartextpaare (mit den<br />

dazugehörigen Chiffretextpaaren) ist proportional zu<br />

1<br />

P(Q) .<br />

Das ist viel zu viel, um gespeichert und verwaltet zu werden.


Differentielle Kryptoanalyse<br />

P(Q) =<br />

( ) 1 (4·Nb ) Nr<br />

64<br />

Die Anzahl der benötigten Klartextpaare (mit den<br />

dazugehörigen Chiffretextpaaren) ist proportional zu<br />

1<br />

P(Q) .<br />

Das ist viel zu viel, um gespeichert und verwaltet zu werden.<br />

Die Anzahl steigt exponentiell mit der Anzahl der Runden N r .


Inhalt<br />

1 Einführung<br />

2 Spezifikation von <strong>Rijndael</strong><br />

3 Kryptoanalyse<br />

Differentielle Kryptoanalyse<br />

Lineare Kryptoanalyse<br />

Algebraische Angriffe


Lineare Kryptoanalyse<br />

1993 von Matsui entwickelt


Lineare Kryptoanalyse<br />

1993 von Matsui entwickelt<br />

known-plaintext-Angriff


Lineare Kryptoanalyse<br />

1993 von Matsui entwickelt<br />

known-plaintext-Angriff<br />

braucht für DES nur 2 43 Klartexte


Lineare Kryptoanalyse<br />

1993 von Matsui entwickelt<br />

known-plaintext-Angriff<br />

braucht für DES nur 2 43 Klartexte<br />

Idee: nichtlinearen Teil der Chiffre durch eine lineare Funktion<br />

approximieren


Lineare Kryptoanalyse - kleines Beispiel<br />

Sei F (a, b, c) = abc ⊕ bc ⊕ b ⊕ c eine binäre nichtlineare<br />

Funktion.


Lineare Kryptoanalyse - kleines Beispiel<br />

Sei F (a, b, c) = abc ⊕ bc ⊕ b ⊕ c eine binäre nichtlineare<br />

Funktion.<br />

a b c F a ⊕ b a ⊕ c b ⊕ c a ⊕ b ⊕ c ⊕ 1<br />

0 0 0 0 0 0 0 1<br />

0 0 1 1 0 1 1 0<br />

0 1 0 1 1 0 1 0<br />

0 1 1 1 1 1 0 1<br />

1 0 0 0 1 1 0 0<br />

1 0 1 1 1 0 1 1<br />

1 1 0 1 0 1 1 1<br />

1 1 1 0 0 0 0 0<br />

3 5 5 8 5 5 7 5


Lineare Kryptoanalyse<br />

S-Box, die n Bit substituiert, also<br />

X = X 1 . . . X n → Y = Y 1 . . . Y n


Lineare Kryptoanalyse<br />

S-Box, die n Bit substituiert, also<br />

X = X 1 . . . X n → Y = Y 1 . . . Y n<br />

Es werden Gleichungen der Form<br />

X i1 ⊕ X i2 ⊕ · · · ⊕ X iu ⊕ Y j1 ⊕ Y j2 ⊕ · · · ⊕ Y jv = 0


Lineare Kryptoanalyse<br />

S-Box, die n Bit substituiert, also<br />

X = X 1 . . . X n → Y = Y 1 . . . Y n<br />

Es werden Gleichungen der Form<br />

bzw.<br />

X i1 ⊕ X i2 ⊕ · · · ⊕ X iu ⊕ Y j1 ⊕ Y j2 ⊕ · · · ⊕ Y jv = 0<br />

X i1 ⊕ X i2 ⊕ · · · ⊕ X iu = Y j1 ⊕ Y j2 ⊕ · · · ⊕ Y jv<br />

mit 1 ≤ i k , j k ≤ n aufgestellt.


Lineare Kryptoanalyse<br />

S-Box, die n Bit substituiert, also<br />

X = X 1 . . . X n → Y = Y 1 . . . Y n<br />

Es werden Gleichungen der Form<br />

bzw.<br />

X i1 ⊕ X i2 ⊕ · · · ⊕ X iu ⊕ Y j1 ⊕ Y j2 ⊕ · · · ⊕ Y jv = 0<br />

X i1 ⊕ X i2 ⊕ · · · ⊕ X iu = Y j1 ⊕ Y j2 ⊕ · · · ⊕ Y jv<br />

mit 1 ≤ i k , j k ≤ n aufgestellt.<br />

Wir haben sowohl für die Belegung der i k als auch der j k<br />

jeweils 2 n = 256 Möglichkeiten.


Lineare Kryptoanalyse<br />

Bezeichne Γ I den n-Bitvektor, der die Belegung der i k<br />

markiert und Γ O den n-Bitvektor für die j k -Belegung.


Lineare Kryptoanalyse<br />

Bezeichne Γ I den n-Bitvektor, der die Belegung der i k<br />

markiert und Γ O den n-Bitvektor für die j k -Belegung.<br />

Nun lässt man Γ I und Γ O von 0 bis 255 durchlaufen und zählt<br />

für jede Gleichung X Γ I ⊕ Y Γ O = 0, wie oft sie wahr ist.


Lineare Kryptoanalyse<br />

Bezeichne Γ I den n-Bitvektor, der die Belegung der i k<br />

markiert und Γ O den n-Bitvektor für die j k -Belegung.<br />

Nun lässt man Γ I und Γ O von 0 bis 255 durchlaufen und zählt<br />

für jede Gleichung X Γ I ⊕ Y Γ O = 0, wie oft sie wahr ist.<br />

Für eine perfekt zufällige Chiffre ist jede dieser Gleichungen<br />

mit Wahrscheinlichkeit 1 2 wahr.


Lineare Kryptoanalyse<br />

Bezeichne Γ I den n-Bitvektor, der die Belegung der i k<br />

markiert und Γ O den n-Bitvektor für die j k -Belegung.<br />

Nun lässt man Γ I und Γ O von 0 bis 255 durchlaufen und zählt<br />

für jede Gleichung X Γ I ⊕ Y Γ O = 0, wie oft sie wahr ist.<br />

Für eine perfekt zufällige Chiffre ist jede dieser Gleichungen<br />

mit Wahrscheinlichkeit 1 2 wahr.<br />

Ziel ist es Gleichungen zu finden, die mit einer<br />

Wahrscheinlichkeit wahr werden, die möglichst stark von 1 2<br />

abweichen.


Lineare Kryptoanalyse<br />

Bezeichne Γ I den n-Bitvektor, der die Belegung der i k<br />

markiert und Γ O den n-Bitvektor für die j k -Belegung.<br />

Nun lässt man Γ I und Γ O von 0 bis 255 durchlaufen und zählt<br />

für jede Gleichung X Γ I ⊕ Y Γ O = 0, wie oft sie wahr ist.<br />

Für eine perfekt zufällige Chiffre ist jede dieser Gleichungen<br />

mit Wahrscheinlichkeit 1 2 wahr.<br />

Ziel ist es Gleichungen zu finden, die mit einer<br />

Wahrscheinlichkeit wahr werden, die möglichst stark von 1 2<br />

abweichen.


Lineare Approximationstabelle der <strong>Rijndael</strong>-S-Box<br />

(Ausschnitt)<br />

Γ O = 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F . . .<br />

Γ I = 00 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . .<br />

01 0 12 0 12 14 6 2 -6 12 0 8 12 2 10 2 -6 . . .<br />

02 0 2 8 -6 2 -8 2 0 6 -4 -6 0 8 2 12 -2 . . .<br />

03 0 6 8 -2 12 2 0 -2 -6 12 10 -4 6 0 10 12 . . .<br />

04 0 -8 2 -2 6 2 -4 -12 6 -6 -8 8 12 -4 10 -2 . . .<br />

05 0 8 10 6 -12 12 -2 2 14 -14 -4 12 -14 6 8 16 . . .<br />

06 0 6 6 8 8 -2 2 4 12 -6 6 -8 -4 2 -6 -12 . . .<br />

07 0 -10 2 0 -6 -4 -8 -10 -4 10 2 4 6 -16 12 -6 . . .<br />

08 0 2 2 4 4 6 2 4 0 -10 -14 8 4 -6 10 16 . . .<br />

09 0 -10 -2 4 6 8 4 -10 8 2 2 12 -2 -4 -16 14 . . .<br />

0A 0 -4 -10 2 14 6 8 -8 -6 14 -12 -8 8 -8 -10 -2 . . .<br />

0B 0 0 2 2 -4 4 10 6 -6 2 -4 4 -2 6 8 -8 . . .<br />

0C 0 -6 4 10 10 0 -2 8 -6 -12 6 4 12 -6 8 2 . . .<br />

0D 0 -14 0 -2 12 -10 8 6 -2 8 10 8 -6 12 2 16 . . .<br />

0E 0 8 12 8 -4 4 8 -12 12 16 12 12 8 4 0 -8 . . .<br />

0F 0 8 -8 -12 -14 -10 6 14 8 4 8 16 -6 2 14 2 . . .<br />

. . . . . . . . . . . . . . . .<br />

. ..


Lineare Approximationstabelle der <strong>Rijndael</strong>-S-Box<br />

Die Einträge der Tabelle beschreiben, wie oft X Γ I ⊕ Y Γ O = 0<br />

gilt, minus 128.


Lineare Approximationstabelle der <strong>Rijndael</strong>-S-Box<br />

Die Einträge der Tabelle beschreiben, wie oft X Γ I ⊕ Y Γ O = 0<br />

gilt, minus 128.<br />

Damit gilt<br />

P(Γ I , Γ O ) =<br />

1<br />

∣2 − Tabelleneintrag<br />

256 ∣


Lineare Approximationstabelle der <strong>Rijndael</strong>-S-Box<br />

Die Einträge der Tabelle beschreiben, wie oft X Γ I ⊕ Y Γ O = 0<br />

gilt, minus 128.<br />

Damit gilt<br />

P(Γ I , Γ O ) =<br />

1<br />

∣2 − Tabelleneintrag<br />

256 ∣<br />

In jeder Zeile (bis auf die 1.) ist der maximale Betrag 16.


Lineare Approximationstabelle der <strong>Rijndael</strong>-S-Box<br />

Die Einträge der Tabelle beschreiben, wie oft X Γ I ⊕ Y Γ O = 0<br />

gilt, minus 128.<br />

Damit gilt<br />

P(Γ I , Γ O ) =<br />

1<br />

∣2 − Tabelleneintrag<br />

256 ∣<br />

In jeder Zeile (bis auf die 1.) ist der maximale Betrag 16.<br />

Um von einer S-Box auf eine ganze Runde zu schließen, ist<br />

nicht schwer, da die linearen Transformationen einfach auf Y<br />

übertragen werden können.


Lineare Approximationstabelle der <strong>Rijndael</strong>-S-Box<br />

Die Einträge der Tabelle beschreiben, wie oft X Γ I ⊕ Y Γ O = 0<br />

gilt, minus 128.<br />

Damit gilt<br />

P(Γ I , Γ O ) =<br />

1<br />

∣2 − Tabelleneintrag<br />

256 ∣<br />

In jeder Zeile (bis auf die 1.) ist der maximale Betrag 16.<br />

Um von einer S-Box auf eine ganze Runde zu schließen, ist<br />

nicht schwer, da die linearen Transformationen einfach auf Y<br />

übertragen werden können.<br />

Um von einer Runde auf mehrere schließen zu können,<br />

braucht man das Piling-Up Lemma.


Piling-Up Lemma<br />

Seien X 1 und X 2 binäre Zufallsvariablen mit<br />

P(X 1 = i) =<br />

P(X 2 = i) =<br />

{<br />

p1 , i = 0<br />

1 − p 1 , i = 1<br />

{<br />

p2 , i = 0<br />

1 − p 2 , i = 1


Piling-Up Lemma<br />

Seien X 1 und X 2 binäre Zufallsvariablen mit<br />

P(X 1 = i) =<br />

P(X 2 = i) =<br />

{<br />

p1 , i = 0<br />

1 − p 1 , i = 1<br />

{<br />

p2 , i = 0<br />

1 − p 2 , i = 1<br />

Wenn X 1 und X 2 unabhängig:<br />

⎧<br />

p 1 p 2 , i = 0, j = 0<br />

⎪⎨<br />

p<br />

P(X 1 = i, X 2 = j) = 1 (1 − p 2 ) , i = 0, j = 1<br />

(1 − p ⎪⎩<br />

1 )p 2 , i = 1, j = 0<br />

(1 − p 1 )(1 − p 2 ) , i = 1, j = 1


Piling-Up Lemma<br />

Daraus folgt:<br />

P(X 1 ⊕ X 2 = 0) = P(X 1 = X 2 )


Piling-Up Lemma<br />

Daraus folgt:<br />

P(X 1 ⊕ X 2 = 0) = P(X 1 = X 2 )<br />

= P(X 1 = 0, X 2 = 0) + P(X 1 = 1, X 2 = 1)


Piling-Up Lemma<br />

Daraus folgt:<br />

P(X 1 ⊕ X 2 = 0) = P(X 1 = X 2 )<br />

= P(X 1 = 0, X 2 = 0) + P(X 1 = 1, X 2 = 1)<br />

= p 1 p 2 + (1 − p 1 )(1 − p 2 )


Piling-Up Lemma<br />

Daraus folgt:<br />

P(X 1 ⊕ X 2 = 0) = P(X 1 = X 2 )<br />

= P(X 1 = 0, X 2 = 0) + P(X 1 = 1, X 2 = 1)<br />

= p 1 p 2 + (1 − p 1 )(1 − p 2 )<br />

Mit p 1 = 1 2 + ε 1 und p 2 = 1 2 + ε 2 ergibt sich:<br />

P(X 1 ⊕ X 2 = 0) = ( 1 2 + ε 1)( 1 2 + ε 2) + ( 1 2 − ε 1)( 1 2 − ε 2)


Piling-Up Lemma<br />

Daraus folgt:<br />

P(X 1 ⊕ X 2 = 0) = P(X 1 = X 2 )<br />

= P(X 1 = 0, X 2 = 0) + P(X 1 = 1, X 2 = 1)<br />

= p 1 p 2 + (1 − p 1 )(1 − p 2 )<br />

Mit p 1 = 1 2 + ε 1 und p 2 = 1 2 + ε 2 ergibt sich:<br />

P(X 1 ⊕ X 2 = 0) = ( 1 2 + ε 1)( 1 2 + ε 2) + ( 1 2 − ε 1)( 1 2 − ε 2)<br />

= 1 4 + 1 2 (ε 1 + ε 2 ) + ε 1 ε 2 +<br />

1<br />

4 − 1 2 (ε 1 + ε 2 ) + ε 1 ε 2


Piling-Up Lemma<br />

Daraus folgt:<br />

P(X 1 ⊕ X 2 = 0) = P(X 1 = X 2 )<br />

= P(X 1 = 0, X 2 = 0) + P(X 1 = 1, X 2 = 1)<br />

= p 1 p 2 + (1 − p 1 )(1 − p 2 )<br />

Mit p 1 = 1 2 + ε 1 und p 2 = 1 2 + ε 2 ergibt sich:<br />

P(X 1 ⊕ X 2 = 0) = ( 1 2 + ε 1)( 1 2 + ε 2) + ( 1 2 − ε 1)( 1 2 − ε 2)<br />

= 1 4 + 1 2 (ε 1 + ε 2 ) + ε 1 ε 2 +<br />

1<br />

4 − 1 2 (ε 1 + ε 2 ) + ε 1 ε 2<br />

= 1 2 + 2ε 1ε 2


Piling-Up Lemma<br />

Sei ε 12 die Abweichung für X 1 ⊕ X 2 = 0, dann gilt also:<br />

ε 12 = 2ε 1 ε 2 .


Piling-Up Lemma<br />

Sei ε 12 die Abweichung für X 1 ⊕ X 2 = 0, dann gilt also:<br />

ε 12 = 2ε 1 ε 2 .<br />

Das lässt sich für n binäre Zufallsvariablen erweitern:<br />

P(X 1 ⊕ · · · ⊕ X n = 0) = 1 2 + 2n−1<br />

n∏<br />

i=1<br />

ε i


Piling-Up Lemma<br />

Sei ε 12 die Abweichung für X 1 ⊕ X 2 = 0, dann gilt also:<br />

ε 12 = 2ε 1 ε 2 .<br />

Das lässt sich für n binäre Zufallsvariablen erweitern:<br />

P(X 1 ⊕ · · · ⊕ X n = 0) = 1 2 + 2n−1<br />

n∏<br />

i=1<br />

ε i<br />

bzw.<br />

ε 1...n = 2 n−1<br />

n∏<br />

i=1<br />

ε i


Lineare Kryptoanalyse<br />

PΓ I ⊕ CΓ O = KΓ K


Lineare Kryptoanalyse<br />

PΓ I ⊕ CΓ O = KΓ K<br />

(Γ I , Γ O ) unkorreliert ⇒ P(KΓ K = 0) = P(KΓ K = 1) = 1 2


Lineare Kryptoanalyse<br />

PΓ I ⊕ CΓ O = KΓ K<br />

(Γ I , Γ O ) unkorreliert ⇒ P(KΓ K = 0) = P(KΓ K = 1) = 1 2<br />

Wird die linke Seite mit einer signifikant höheren<br />

Wahrscheinlichkeit als 1 2 wahr, so kann ich raten“, dass<br />

”<br />

KΓ K = 0,


Lineare Kryptoanalyse<br />

PΓ I ⊕ CΓ O = KΓ K<br />

(Γ I , Γ O ) unkorreliert ⇒ P(KΓ K = 0) = P(KΓ K = 1) = 1 2<br />

Wird die linke Seite mit einer signifikant höheren<br />

Wahrscheinlichkeit als 1 2 wahr, so kann ich raten“, dass<br />

”<br />

KΓ K = 0,<br />

und bei einer sehr niedrigen Wahrscheinlichkeit KΓ K = 1.


Lineare Kryptoanalyse<br />

PΓ I ⊕ CΓ O = KΓ K<br />

(Γ I , Γ O ) unkorreliert ⇒ P(KΓ K = 0) = P(KΓ K = 1) = 1 2<br />

Wird die linke Seite mit einer signifikant höheren<br />

Wahrscheinlichkeit als 1 2 wahr, so kann ich raten“, dass<br />

”<br />

KΓ K = 0,<br />

und bei einer sehr niedrigen Wahrscheinlichkeit KΓ K = 1.<br />

Sei ε die Abweichung für die gesamte Chiffre. Dann berechnet<br />

sich die Erfolgswahrscheinlichkeit zum Raten eines Bits<br />

Schlüsselinformation:<br />

∫ ∞<br />

−2 √ N|ε|<br />

1<br />

√<br />

2π<br />

e −x2 /2 dx<br />

wobei N die Anzahl der bekannten Klartexte ist.


Lineare Kryptoanalyse<br />

PΓ I ⊕ CΓ O = KΓ K<br />

(Γ I , Γ O ) unkorreliert ⇒ P(KΓ K = 0) = P(KΓ K = 1) = 1 2<br />

Wird die linke Seite mit einer signifikant höheren<br />

Wahrscheinlichkeit als 1 2 wahr, so kann ich raten“, dass<br />

”<br />

KΓ K = 0,<br />

und bei einer sehr niedrigen Wahrscheinlichkeit KΓ K = 1.<br />

Sei ε die Abweichung für die gesamte Chiffre. Dann berechnet<br />

sich die Erfolgswahrscheinlichkeit zum Raten eines Bits<br />

Schlüsselinformation:<br />

∫ ∞<br />

−2 √ N|ε|<br />

1<br />

√<br />

2π<br />

e −x2 /2 dx<br />

wobei N die Anzahl der bekannten Klartexte ist.<br />

N ∼ 1/ε 2


Lineare Kryptoanalyse<br />

Erfolgsrate für eine AES-Runde mit ε i = 1<br />

16 :<br />

1/4|ε i | −2 1/2|ε i | −2 |ε i | −2 2|ε i | −2<br />

N = 64 = 128 = 256 = 512<br />

Erfolgsrate 81.4% 92.1% 97.7% 99.8%


Lineare Kryptoanalyse<br />

Da die S-Boxen parallel ausgeführt werden und sich nicht<br />

beeinflussen, können für jede S-Box die gleichen Bits<br />

approximiert werden.


Lineare Kryptoanalyse<br />

Da die S-Boxen parallel ausgeführt werden und sich nicht<br />

beeinflussen, können für jede S-Box die gleichen Bits<br />

approximiert werden.<br />

Da für jede S-Box eine Gleichung mit ε = 16<br />

16 gefunden<br />

werden kann, ergibt sich für die gesamte i-te Runde eine<br />

Abweichung von ε i = 1<br />

16 .<br />

256 = 1


Lineare Kryptoanalyse<br />

Da die S-Boxen parallel ausgeführt werden und sich nicht<br />

beeinflussen, können für jede S-Box die gleichen Bits<br />

approximiert werden.<br />

Da für jede S-Box eine Gleichung mit ε = 16<br />

16 gefunden<br />

werden kann, ergibt sich für die gesamte i-te Runde eine<br />

Abweichung von ε i = 1<br />

16 .<br />

Unter der Annahme, dass die Inputs zu den einzelnen Runden<br />

stochastisch unabhängig sind, kann man mit Hilfe des<br />

Piling-Up Lemmas nun die Abweichung ε für eine gesamte<br />

AES-Verschlüsselung berechnen:<br />

P = 1 2 + 29 10∑<br />

i=1<br />

256 = 1<br />

1<br />

16 = 1 ( ) 1 10<br />

2 + 1<br />

29 ·<br />

16 2 + 29<br />

(2 4 ) 10 = 1 2 + 2−31


Lineare Kryptoanalyse<br />

Daraus folgt, dass N = 2 · ε 2 = 2 · (2 −31 ) 2 = 2 65 Klartexte<br />

benötigt werden für eine Erfolgsrate von 99.8%.<br />

AES-256: ε = 2 −43 ⇒ N ≈ 2 87


Lineare Kryptoanalyse<br />

Daraus folgt, dass N = 2 · ε 2 = 2 · (2 −31 ) 2 = 2 65 Klartexte<br />

benötigt werden für eine Erfolgsrate von 99.8%.<br />

AES-256: ε = 2 −43 ⇒ N ≈ 2 87<br />

N steigt exponentiell mit der Anzahl der Runden.


Inhalt<br />

1 Einführung<br />

2 Spezifikation von <strong>Rijndael</strong><br />

3 Kryptoanalyse<br />

Differentielle Kryptoanalyse<br />

Lineare Kryptoanalyse<br />

Algebraische Angriffe


AES als Kettenbruch<br />

2001 fanden Leute vom Twofish-Team eine elegante<br />

algebraische Repräsentation für AES, welche als Kettenbruch<br />

aufgefasst werden kann.


AES als Kettenbruch<br />

2001 fanden Leute vom Twofish-Team eine elegante<br />

algebraische Repräsentation für AES, welche als Kettenbruch<br />

aufgefasst werden kann.<br />

Dazu betrachten wir die S-Box:<br />

SBox(x) = 05 · x 254 + 09 · x 253 + F9 · x 251 + 25 · x 247<br />

+F4 · x 239 + 01 · x 223 + B5 · x 191 + 8F · x 127 + 63


AES als Kettenbruch<br />

2001 fanden Leute vom Twofish-Team eine elegante<br />

algebraische Repräsentation für AES, welche als Kettenbruch<br />

aufgefasst werden kann.<br />

Dazu betrachten wir die S-Box:<br />

SBox(x) = 05 · x 254 + 09 · x 253 + F9 · x 251 + 25 · x 247<br />

+F4 · x 239 + 01 · x 223 + B5 · x 191 + 8F · x 127 + 63<br />

7∑<br />

SBox(x) = w 8 + w d x 255−2d<br />

d=0


AES als Kettenbruch<br />

7∑<br />

SBox(x) = w 8 + w d x 255−2d<br />

d=0<br />

Die Konstante w 8 = 63 wird in die KeyExpansion verlagert.


AES als Kettenbruch<br />

7∑<br />

SBox(x) = w 8 + w d x 255−2d<br />

d=0<br />

Die Konstante w 8 = 63 wird in die KeyExpansion verlagert.<br />

∀x ≠ 0 ∈ GF (2 8 ) : x k k mod 255<br />

≡ x


AES als Kettenbruch<br />

7∑<br />

SBox(x) = w 8 + w d x 255−2d<br />

d=0<br />

Die Konstante w 8 = 63 wird in die KeyExpansion verlagert.<br />

∀x ≠ 0 ∈ GF (2 8 ) : x k k mod 255<br />

≡ x<br />

⇒ ∀x ≠ 0 : x 255 ≡ 1


AES als Kettenbruch<br />

7∑<br />

SBox(x) = w 8 + w d x 255−2d<br />

d=0<br />

Die Konstante w 8 = 63 wird in die KeyExpansion verlagert.<br />

∀x ≠ 0 ∈ GF (2 8 ) : x k k mod 255<br />

≡ x<br />

⇒ ∀x ≠ 0 : x 255 ≡ 1<br />

7∑<br />

SBox(x) = w d x −2d<br />

d=0


AES als Kettenbruch<br />

Sei a (r)<br />

i,j<br />

das Byte an Pos. (i, j) im Input von Runde r


AES als Kettenbruch<br />

Sei a (r)<br />

i,j<br />

s (r)<br />

i,j<br />

das Byte an Pos. (i, j) im Input von Runde r<br />

das Byte an Pos. (i, j) im Zustand nach SubBytes


AES als Kettenbruch<br />

Sei a (r)<br />

i,j<br />

s (r)<br />

i,j<br />

t (r)<br />

i,j<br />

das Byte an Pos. (i, j) im Input von Runde r<br />

das Byte an Pos. (i, j) im Zustand nach SubBytes<br />

das Byte an Pos. (i, j) im Zustand nach ShiftRows


AES als Kettenbruch<br />

Sei a (r)<br />

i,j<br />

s (r)<br />

i,j<br />

t (r)<br />

i,j<br />

m (r)<br />

i,j<br />

das Byte an Pos. (i, j) im Input von Runde r<br />

das Byte an Pos. (i, j) im Zustand nach SubBytes<br />

das Byte an Pos. (i, j) im Zustand nach ShiftRows<br />

das Byte an Pos. (i, j) im Zustand nach MixColumns


AES als Kettenbruch<br />

Sei a (r)<br />

i,j<br />

s (r)<br />

i,j<br />

t (r)<br />

i,j<br />

m (r)<br />

i,j<br />

v i,j<br />

das Byte an Pos. (i, j) im Input von Runde r<br />

das Byte an Pos. (i, j) im Zustand nach SubBytes<br />

das Byte an Pos. (i, j) im Zustand nach ShiftRows<br />

das Byte an Pos. (i, j) im Zustand nach MixColumns<br />

Koeffizienten der MixColumns-Matrix


AES als Kettenbruch<br />

Sei a (r)<br />

i,j<br />

s (r)<br />

i,j<br />

t (r)<br />

i,j<br />

m (r)<br />

i,j<br />

v i,j<br />

k (r)<br />

i,j<br />

das Byte an Pos. (i, j) im Input von Runde r<br />

das Byte an Pos. (i, j) im Zustand nach SubBytes<br />

das Byte an Pos. (i, j) im Zustand nach ShiftRows<br />

das Byte an Pos. (i, j) im Zustand nach MixColumns<br />

Koeffizienten der MixColumns-Matrix<br />

das Byte an Pos. (i, j) im Rundenschlüssel


AES als Kettenbruch<br />

s (r)<br />

i,j<br />

= SBox(a (r)<br />

i,j ) =<br />

7∑<br />

d r =0<br />

w dr (a (r)<br />

i,j )−2dr


AES als Kettenbruch<br />

s (r)<br />

i,j<br />

= SBox(a (r)<br />

i,j ) =<br />

t (r)<br />

i,j<br />

= s (r)<br />

i,i+j =<br />

7∑<br />

d r =0<br />

7∑<br />

d r =0<br />

w dr (a (r)<br />

i,j )−2dr<br />

w dr (a (r)<br />

i,i+j )−2dr


AES als Kettenbruch<br />

s (r)<br />

i,j<br />

= SBox(a (r)<br />

i,j ) =<br />

t (r)<br />

i,j<br />

= s (r)<br />

i,i+j =<br />

m (r)<br />

i,j<br />

=<br />

3∑<br />

e r =0<br />

7∑<br />

d r =0<br />

v i,er t (r)<br />

e r ,j<br />

7∑<br />

d r =0<br />

w dr (a (r)<br />

i,j )−2dr<br />

w dr (a (r)<br />

i,i+j )−2dr


AES als Kettenbruch<br />

s (r)<br />

i,j<br />

= SBox(a (r)<br />

i,j ) =<br />

t (r)<br />

i,j<br />

= s (r)<br />

i,i+j =<br />

m (r)<br />

i,j<br />

=<br />

=<br />

3∑<br />

e r =0<br />

3∑<br />

7∑<br />

d r =0<br />

v i,er t (r)<br />

e r ,j<br />

7∑<br />

v i,er<br />

e r =0 d r =0<br />

7∑<br />

d r =0<br />

w dr (a (r)<br />

i,j )−2dr<br />

w dr (a (r)<br />

i,i+j )−2dr<br />

w dr (a (r)<br />

e r ,e r+j<br />

) −2dr


AES als Kettenbruch<br />

s (r)<br />

i,j<br />

= SBox(a (r)<br />

i,j ) =<br />

t (r)<br />

i,j<br />

= s (r)<br />

i,i+j =<br />

m (r)<br />

i,j<br />

=<br />

=<br />

=<br />

3∑<br />

e r =0<br />

3∑<br />

7∑<br />

d r =0<br />

v i,er t (r)<br />

e r ,j<br />

v i,er<br />

e r =0 d r =0<br />

3∑<br />

7∑<br />

e r =0 d r =0<br />

7∑<br />

7∑<br />

d r =0<br />

w dr (a (r)<br />

i,j )−2dr<br />

w dr (a (r)<br />

i,i+j )−2dr<br />

w dr (a (r)<br />

e r ,e r+j<br />

) −2dr<br />

w i,er ,d r<br />

(a (r)<br />

e r ,e r+j<br />

) −2dr


AES als Kettenbruch<br />

a (r+1)<br />

i,j<br />

= m (r)<br />

i,e r<br />

+ k (r)<br />

e r ,j


AES als Kettenbruch<br />

a (r+1)<br />

i,j<br />

= m (r)<br />

i,e r<br />

+ k (r)<br />

e r ,j<br />

= k (r)<br />

i,j<br />

+ ∑ e r ∈E<br />

d r ∈D<br />

mit E = {0, . . . , 3} und D = {0, . . . , 7}<br />

w i,er ,d r<br />

(a (r)<br />

e r ,e r+j<br />

) −2dr


AES als Kettenbruch<br />

a (r+1)<br />

i,j<br />

= m (r)<br />

i,e r<br />

+ k (r)<br />

e r ,j<br />

= k (r)<br />

i,j<br />

+ ∑ e r ∈E<br />

d r ∈D<br />

mit E = {0, . . . , 3} und D = {0, . . . , 7}<br />

= k (r)<br />

i,j<br />

+ ∑ e r ∈E<br />

d r ∈D<br />

w i,er ,d r<br />

(a (r)<br />

e r ,e r+j<br />

) −2dr<br />

w i,er ,d r<br />

(a (r)<br />

e r ,e r+j<br />

) 2dr


AES als Kettenbruch<br />

Gleichung für 2 Runden:<br />

a (3)<br />

i,j<br />

= k (2)<br />

i,j<br />

+ ∑ e 2 ∈E<br />

d 2 ∈D<br />

⎛<br />

⎜<br />

⎝ k(1) e 2 ,e 2 +j + ∑ e 1 ∈E<br />

d 1 ∈D<br />

w i,e2 ,d 2<br />

w e2 ,e 1 ,d 1<br />

(<br />

a (1)<br />

e 1 ,e 1 +e 2 +j<br />

⎞<br />

⎟<br />

) 2 d 1 ⎠<br />

2 d 2


AES als Kettenbruch<br />

Gleichung für 2 Runden:<br />

a (3)<br />

i,j<br />

= k (2)<br />

i,j<br />

+ ∑ e 2 ∈E<br />

d 2 ∈D<br />

⎛<br />

⎜<br />

⎝ k(1) e 2 ,e 2 +j + ∑ e 1 ∈E<br />

d 1 ∈D<br />

w i,e2 ,d 2<br />

w e2 ,e 1 ,d 1<br />

(<br />

a (1)<br />

e 1 ,e 1 +e 2 +j<br />

⎞<br />

⎟<br />

) 2 d 1 ⎠<br />

Da wir in einem Körper mit Charakteristik 2 arbeiten, können wir<br />

Freshman’s Dream (a + b) 2 = a 2 + b 2 anwenden:<br />

2 d 2<br />

a (3)<br />

i,j<br />

= k (2)<br />

i,j<br />

+ ∑ e 2 ∈E<br />

d 2 ∈D<br />

(<br />

k (1)<br />

e 2 ,e 2 +j<br />

w i,e2 ,d 2<br />

) 2 d 2<br />

+<br />

∑<br />

e 1 ∈E<br />

d 1 ∈D<br />

w e2 ,e 1 ,d 1<br />

) 2 d 1 +d 2<br />

(<br />

a (1)<br />

e 1 ,e 1 +e 2 +j


AES als Kettenbruch<br />

Da alle Indizes und Exponenten bekannt (berechenbar) und<br />

unabhängig vom Klartext und Schlüssel sind, werden sie der<br />

Einfachheit halber durch ∗ ersetzt.


AES als Kettenbruch<br />

Da alle Indizes und Exponenten bekannt (berechenbar) und<br />

unabhängig vom Klartext und Schlüssel sind, werden sie der<br />

Einfachheit halber durch ∗ ersetzt.<br />

Alle (verschiedenen, aber bekannten) Konstanten w er ,e r−1 ,d r−1<br />

werden durch C ersetzt


AES als Kettenbruch<br />

Da alle Indizes und Exponenten bekannt (berechenbar) und<br />

unabhängig vom Klartext und Schlüssel sind, werden sie der<br />

Einfachheit halber durch ∗ ersetzt.<br />

Alle (verschiedenen, aber bekannten) Konstanten w er ,e r−1 ,d r−1<br />

werden durch C ersetzt<br />

und alle Schlüssel-Bytes k (r)<br />

i,j<br />

durch K.


AES als Kettenbruch<br />

Da alle Indizes und Exponenten bekannt (berechenbar) und<br />

unabhängig vom Klartext und Schlüssel sind, werden sie der<br />

Einfachheit halber durch ∗ ersetzt.<br />

Alle (verschiedenen, aber bekannten) Konstanten w er ,e r−1 ,d r−1<br />

werden durch C ersetzt<br />

und alle Schlüssel-Bytes k (r)<br />

i,j<br />

durch K.<br />

Da a (1)<br />

i,j<br />

= p 4j+i + k (0)<br />

i,j<br />

, wobei die p i ’s die Klartext-Bytes sind,<br />

ergibt sich:


AES als Kettenbruch<br />

Da alle Indizes und Exponenten bekannt (berechenbar) und<br />

unabhängig vom Klartext und Schlüssel sind, werden sie der<br />

Einfachheit halber durch ∗ ersetzt.<br />

Alle (verschiedenen, aber bekannten) Konstanten w er ,e r−1 ,d r−1<br />

werden durch C ersetzt<br />

und alle Schlüssel-Bytes k (r)<br />

i,j<br />

durch K.<br />

Da a (1)<br />

i,j<br />

= p 4j+i + k (0)<br />

i,j<br />

, wobei die p i ’s die Klartext-Bytes sind,<br />

ergibt sich:<br />

a (3)<br />

i,j<br />

= K + ∑ e 2 ∈E<br />

d 2 ∈D<br />

C<br />

K ∗ + ∑ e 1 ∈E<br />

d 1 ∈D<br />

C<br />

P ∗ ∗ + K ∗


AES als Kettenbruch<br />

Gleichung für 5 Runden:<br />

a (6)<br />

i,j<br />

= K+ ∑ e 5 ∈E<br />

d 5 ∈D<br />

K ∗ + ∑ e 4 ∈E<br />

d 4 ∈D<br />

K ∗ + ∑ e 3 ∈E<br />

d 3 ∈D<br />

C<br />

C<br />

K ∗ + ∑ e 2 ∈E<br />

d 2 ∈D<br />

C<br />

C<br />

K ∗ + ∑ e 1 ∈E<br />

d 1 ∈D<br />

C<br />

K ∗ + P ∗ ∗


AES als Kettenbruch<br />

Wenn man diese Gleichung ausmultipliziert, erhält man eine<br />

Gleichung mit 2 25 Termen (|E| · |D| = 32 = 2 5 Terme pro<br />

Runde) der Form C/(K ∗ + p ∗ ∗).


AES als Kettenbruch<br />

Wenn man diese Gleichung ausmultipliziert, erhält man eine<br />

Gleichung mit 2 25 Termen (|E| · |D| = 32 = 2 5 Terme pro<br />

Runde) der Form C/(K ∗ + p ∗ ∗).<br />

Für 10 Runden würde der Kryptoanalytiker diese Gleichung<br />

nehmen und 2 mal hintereinander ausführen. (2 26 Terme)


AES als Kettenbruch<br />

Wenn man diese Gleichung ausmultipliziert, erhält man eine<br />

Gleichung mit 2 25 Termen (|E| · |D| = 32 = 2 5 Terme pro<br />

Runde) der Form C/(K ∗ + p ∗ ∗).<br />

Für 10 Runden würde der Kryptoanalytiker diese Gleichung<br />

nehmen und 2 mal hintereinander ausführen. (2 26 Terme)<br />

Man braucht 2 26 /16 = 2 22 Klartext-Chiffretext-Paare, um<br />

genug Information zu haben, um die Gleichung lösen zu<br />

können.


AES als Kettenbruch<br />

Wenn man diese Gleichung ausmultipliziert, erhält man eine<br />

Gleichung mit 2 25 Termen (|E| · |D| = 32 = 2 5 Terme pro<br />

Runde) der Form C/(K ∗ + p ∗ ∗).<br />

Für 10 Runden würde der Kryptoanalytiker diese Gleichung<br />

nehmen und 2 mal hintereinander ausführen. (2 26 Terme)<br />

Man braucht 2 26 /16 = 2 22 Klartext-Chiffretext-Paare, um<br />

genug Information zu haben, um die Gleichung lösen zu<br />

können.<br />

Für AES-128 würde ein O(n 4 )- und für AES-256 ein<br />

O(n 7 )-Algorithmus reichen, um schneller als Brute-Force zu<br />

sein.


AES als Kettenbruch<br />

Wenn man diese Gleichung ausmultipliziert, erhält man eine<br />

Gleichung mit 2 25 Termen (|E| · |D| = 32 = 2 5 Terme pro<br />

Runde) der Form C/(K ∗ + p ∗ ∗).<br />

Für 10 Runden würde der Kryptoanalytiker diese Gleichung<br />

nehmen und 2 mal hintereinander ausführen. (2 26 Terme)<br />

Man braucht 2 26 /16 = 2 22 Klartext-Chiffretext-Paare, um<br />

genug Information zu haben, um die Gleichung lösen zu<br />

können.<br />

Für AES-128 würde ein O(n 4 )- und für AES-256 ein<br />

O(n 7 )-Algorithmus reichen, um schneller als Brute-Force zu<br />

sein.<br />

Es ist ein offenes Problem, ob Gleichungen dieser Form<br />

effizient berechnet werden können.


AES und das MQ-Problem


AES und das MQ-Problem<br />

MQ-Problem<br />

Eingabe: System von m multivariaten, quadratischen Gleichungen<br />

mit n Variablen x 1 , . . . , x n der Form<br />

∑<br />

a i,j,k x i x j + ∑ b k x i + c k = 0 mit a i,j,k , b i , c k ∈ K<br />

i,j<br />

i<br />

Ausgabe: Belegung für {x 1 , . . . , x n }, so dass jede Gleichung erfüllt<br />

ist.


AES und das MQ-Problem<br />

MQ-Problem<br />

Eingabe: System von m multivariaten, quadratischen Gleichungen<br />

mit n Variablen x 1 , . . . , x n der Form<br />

∑<br />

a i,j,k x i x j + ∑ b k x i + c k = 0 mit a i,j,k , b i , c k ∈ K<br />

i,j<br />

i<br />

Ausgabe: Belegung für {x 1 , . . . , x n }, so dass jede Gleichung erfüllt<br />

ist.<br />

Satz<br />

Die Entscheidungsvariante des MQ-Problems ist NP-vollständig.


AES und das MQ-Problem<br />

Das MQ-Problem ist schon länger Gegenstand der<br />

Kryptoanalyse, jedoch bisher nur für Public-Key-Systeme wie<br />

z.B. das HFE-Kryptosystem (Hidden Field Equations)


AES und das MQ-Problem<br />

Das MQ-Problem ist schon länger Gegenstand der<br />

Kryptoanalyse, jedoch bisher nur für Public-Key-Systeme wie<br />

z.B. das HFE-Kryptosystem (Hidden Field Equations)<br />

Klassische Algorithmen (z.B. Buchberger’s Algorithmus, F4<br />

und F5) versuchen das MQ-Problem mit Hilfe von<br />

Gröbner-Basen zu lösen.


AES und das MQ-Problem<br />

Das MQ-Problem ist schon länger Gegenstand der<br />

Kryptoanalyse, jedoch bisher nur für Public-Key-Systeme wie<br />

z.B. das HFE-Kryptosystem (Hidden Field Equations)<br />

Klassische Algorithmen (z.B. Buchberger’s Algorithmus, F4<br />

und F5) versuchen das MQ-Problem mit Hilfe von<br />

Gröbner-Basen zu lösen.<br />

Diese Algorithmen laufen im Allgemeinen in exponentieller<br />

Zeit und sind für quadratische Gleichungssysteme mit mehr<br />

als 15 Variablen nicht mehr praktikabel.


AES und das MQ-Problem<br />

Das MQ-Problem ist schon länger Gegenstand der<br />

Kryptoanalyse, jedoch bisher nur für Public-Key-Systeme wie<br />

z.B. das HFE-Kryptosystem (Hidden Field Equations)<br />

Klassische Algorithmen (z.B. Buchberger’s Algorithmus, F4<br />

und F5) versuchen das MQ-Problem mit Hilfe von<br />

Gröbner-Basen zu lösen.<br />

Diese Algorithmen laufen im Allgemeinen in exponentieller<br />

Zeit und sind für quadratische Gleichungssysteme mit mehr<br />

als 15 Variablen nicht mehr praktikabel.<br />

Wenn das Gleichungssystem allerdings hinreichend<br />

überbestimmt ist (m > n), gibt es effizientere Algorithmen<br />

zum lösen dieser Gleichungssysteme.


AES und das MQ-Problem<br />

Das MQ-Problem ist schon länger Gegenstand der<br />

Kryptoanalyse, jedoch bisher nur für Public-Key-Systeme wie<br />

z.B. das HFE-Kryptosystem (Hidden Field Equations)<br />

Klassische Algorithmen (z.B. Buchberger’s Algorithmus, F4<br />

und F5) versuchen das MQ-Problem mit Hilfe von<br />

Gröbner-Basen zu lösen.<br />

Diese Algorithmen laufen im Allgemeinen in exponentieller<br />

Zeit und sind für quadratische Gleichungssysteme mit mehr<br />

als 15 Variablen nicht mehr praktikabel.<br />

Wenn das Gleichungssystem allerdings hinreichend<br />

überbestimmt ist (m > n), gibt es effizientere Algorithmen<br />

zum lösen dieser Gleichungssysteme.<br />

Die Autoren der XSL-Attacke (später) haben für eine<br />

AES-Verschlüsselung ein dünnbesetztes (sparse),<br />

quadratisches Gleichungssystem aus m = 8000 Gleichungen<br />

mit n = 1600 Variablen aus GF (2) konstruiert.


Linearisierung<br />

Das Prinzip der Linearisierung ist leicht zu verstehen: Wir<br />

können gut lineare Gleichungssysteme lösen (O(n 3 ) mit<br />

Gauss-Elimination), aber schlecht quadratische<br />

Gleichungssysteme.


Linearisierung<br />

Das Prinzip der Linearisierung ist leicht zu verstehen: Wir<br />

können gut lineare Gleichungssysteme lösen (O(n 3 ) mit<br />

Gauss-Elimination), aber schlecht quadratische<br />

Gleichungssysteme.<br />

( ) n + 1<br />

Wenn das System m = quadratische Gleichungen<br />

2<br />

mit n Variablen hat, ersetzen wir Terme der Form x i x j durch<br />

neue Variablen y ij und<br />

(<br />

erhalten<br />

)<br />

so ein Lineares<br />

( )<br />

n + 1<br />

n + 1<br />

Gleichungssystem mit Gleichungen und<br />

2<br />

2<br />

y-Variablen, die wir mit Gauss-Elimination bestimmen können.


Linearisierung<br />

Das Prinzip der Linearisierung ist leicht zu verstehen: Wir<br />

können gut lineare Gleichungssysteme lösen (O(n 3 ) mit<br />

Gauss-Elimination), aber schlecht quadratische<br />

Gleichungssysteme.<br />

( ) n + 1<br />

Wenn das System m = quadratische Gleichungen<br />

2<br />

mit n Variablen hat, ersetzen wir Terme der Form x i x j durch<br />

neue Variablen y ij und<br />

(<br />

erhalten<br />

)<br />

so ein Lineares<br />

( )<br />

n + 1<br />

n + 1<br />

Gleichungssystem mit Gleichungen und<br />

2<br />

2<br />

y-Variablen, die wir mit Gauss-Elimination bestimmen können.<br />

√<br />

yii , i = 1, . . . , n liefert 2 mögliche Lösungen für die x i . Mit<br />

Hilfe der y ij kann dann die eindeutige Lösung bestimmt<br />

werden.


Linearisierung<br />

Das Prinzip der Linearisierung ist leicht zu verstehen: Wir<br />

können gut lineare Gleichungssysteme lösen (O(n 3 ) mit<br />

Gauss-Elimination), aber schlecht quadratische<br />

Gleichungssysteme.<br />

( ) n + 1<br />

Wenn das System m = quadratische Gleichungen<br />

2<br />

mit n Variablen hat, ersetzen wir Terme der Form x i x j durch<br />

neue Variablen y ij und<br />

(<br />

erhalten<br />

)<br />

so ein Lineares<br />

( )<br />

n + 1<br />

n + 1<br />

Gleichungssystem mit Gleichungen und<br />

2<br />

2<br />

y-Variablen, die wir mit Gauss-Elimination bestimmen können.<br />

√<br />

yii , i = 1, . . . , n liefert 2 mögliche Lösungen für die x i . Mit<br />

Hilfe der y ij kann dann die eindeutige Lösung bestimmt<br />

werden. ( ) 1601<br />

Da für AES-128 = 1280800 ≫ 8000, schlägt der<br />

2<br />

Algorithmus fehl.


Relinearisierung<br />

1999 wurde der Algorithmus verfeinert, indem man ausnutzte,<br />

dass die y ij nicht unabhängig sind.


Relinearisierung<br />

1999 wurde der Algorithmus verfeinert, indem man ausnutzte,<br />

dass die y ij nicht unabhängig sind.<br />

Denn für 1 ≤ a, b, c, d ≤ n gilt:<br />

(x a x b )(x c x d ) = (x a x c )(x b x d ) = (x a x d )(x b x c )


Relinearisierung<br />

1999 wurde der Algorithmus verfeinert, indem man ausnutzte,<br />

dass die y ij nicht unabhängig sind.<br />

Denn für 1 ≤ a, b, c, d ≤ n gilt:<br />

(x a x b )(x c x d ) = (x a x c )(x b x d ) = (x a x d )(x b x c )<br />

y ab y cd = y ac y bd = y ad y bc


Relinearisierung<br />

1999 wurde der Algorithmus verfeinert, indem man ausnutzte,<br />

dass die y ij nicht unabhängig sind.<br />

Denn für 1 ≤ a, b, c, d ≤ n gilt:<br />

(x a x b )(x c x d ) = (x a x c )(x b x d ) = (x a x d )(x b x c )<br />

y ab y cd = y ac y bd = y ad y bc<br />

Daraus werden zusätzliche Gleichungen generiert.


Relinearisierung<br />

1999 wurde der Algorithmus verfeinert, indem man ausnutzte,<br />

dass die y ij nicht unabhängig sind.<br />

Denn für 1 ≤ a, b, c, d ≤ n gilt:<br />

(x a x b )(x c x d ) = (x a x c )(x b x d ) = (x a x d )(x b x c )<br />

y ab y cd = y ac y bd = y ad y bc<br />

Daraus werden zusätzliche Gleichungen generiert.<br />

Dies kann erweitert werden für höhere Grade, z.B. Grad 6:<br />

y ab y cd y ef = y ad y be y cf = . . .


Relinearisierung<br />

1999 wurde der Algorithmus verfeinert, indem man ausnutzte,<br />

dass die y ij nicht unabhängig sind.<br />

Denn für 1 ≤ a, b, c, d ≤ n gilt:<br />

(x a x b )(x c x d ) = (x a x c )(x b x d ) = (x a x d )(x b x c )<br />

y ab y cd = y ac y bd = y ad y bc<br />

Daraus werden zusätzliche Gleichungen generiert.<br />

Dies kann erweitert werden für höhere Grade, z.B. Grad 6:<br />

y ab y cd y ef = y ad y be y cf = . . .<br />

Relinearisierung funktioniert für Gleichungssysteme aus εn 2<br />

Gleichungen mit n Variablen für 0 ≤ ε ≤ 1 2


XL-Algorithmus<br />

1 Jahr später wurde gezeigt, dass viele der Gleichungen<br />

höheren Grades, die durch Relinearisierung erzeugt werden,<br />

linear abhängig sind und somit eliminiert werden können.


XL-Algorithmus<br />

1 Jahr später wurde gezeigt, dass viele der Gleichungen<br />

höheren Grades, die durch Relinearisierung erzeugt werden,<br />

linear abhängig sind und somit eliminiert werden können.<br />

Deshalb wurde XL (eXtended Linearisation) entwickelt, eine<br />

erweiterte Version der Relinearisierung.


XL-Algorithmus<br />

1 Wähle einen Parameter D und bilde alle Produkte<br />

mit k ≤ D − 2 und l i die i-te Gleichung des Systems<br />

2 Gauss-Elimination<br />

k∏<br />

x ij · l i<br />

3 Hoffe, dass mindestens eine univariate Gleichung entsteht und<br />

löse diese über dem Körper K.<br />

4 Vereinfache die Gleichungen und wiederhole den Algorithmus<br />

mit dem reduzierten Gleichungssystem.<br />

5 Linearisierung<br />

j=1


Wie ist D zu wählen?<br />

Ein größeres D bringt mehr (linear unabhängige) Gleichungen,<br />

aber auch mehr Terme.


Wie ist D zu wählen?<br />

Ein größeres D bringt mehr (linear unabhängige) Gleichungen,<br />

aber auch mehr Terme.<br />

Ein zu kleines D bringt nicht genug linear unabhängige<br />

Gleichungen für eine Lösung mit Gauss-Elimination.


Wie ist D zu wählen?<br />

Ein größeres D bringt mehr (linear unabhängige) Gleichungen,<br />

aber auch mehr Terme.<br />

Ein zu kleines D bringt nicht genug linear unabhängige<br />

Gleichungen für eine Lösung mit Gauss-Elimination.<br />

Wenn D zu groß ist, haben wir nichts anderes als<br />

Relinearisierung.


Wie ist D zu wählen?<br />

In Schritt 1 erhalten wir R ≈<br />

( n<br />

mit T ≈ Termen.<br />

D)<br />

( ) n<br />

· m neue Gleichungen<br />

D − 2


Wie ist D zu wählen?<br />

In Schritt 1 erhalten wir R ≈<br />

( n<br />

mit T ≈ Termen.<br />

D)<br />

Wir wählen ( das ) kleinste ( D, so dass<br />

n n<br />

R = m ≥ = T .<br />

D − 2 D)<br />

( ) n<br />

· m neue Gleichungen<br />

D − 2


Wie ist D zu wählen?<br />

In Schritt 1 erhalten wir R ≈<br />

( n<br />

mit T ≈ Termen.<br />

D)<br />

Wir wählen ( das ) kleinste ( D, so dass<br />

n n<br />

R = m ≥ = T .<br />

D − 2 D)<br />

( n<br />

D)<br />

( ) n<br />

· m neue Gleichungen<br />

D − 2<br />

R ≥ T ⇒ m ≥<br />

( ) ≈ n2<br />

n D 2 ⇒ D ≈<br />

D − 2<br />

n √ m


Wie ist D zu wählen?<br />

In Schritt 1 erhalten wir R ≈<br />

( n<br />

mit T ≈ Termen.<br />

D)<br />

Wir wählen ( das ) kleinste ( D, so dass<br />

n n<br />

R = m ≥ = T .<br />

D − 2 D)<br />

( n<br />

D)<br />

( ) n<br />

· m neue Gleichungen<br />

D − 2<br />

R ≥ T ⇒ m ≥<br />

( ) ≈ n2<br />

n D 2 ⇒ D ≈<br />

D − 2<br />

n √ m<br />

Für AES-128 mit m = 8000 und n = 1600 ergibt sich D = 18.


Komplexität von XL<br />

Die Komplexität von XL entspricht ( dem Lösen eines ( Linearen ) ω n n<br />

Gleichungssystems mit T = Variablen, also ,<br />

D)<br />

D<br />

wobei ω der Exponent der Lösungsmethode für lineare<br />

Gleichungssysteme ist (für Gauss-Elimination: ω = 3)


Komplexität von XL<br />

Die Komplexität von XL entspricht ( dem Lösen eines ( Linearen ) ω n n<br />

Gleichungssystems mit T = Variablen, also ,<br />

D)<br />

D<br />

wobei ω der Exponent der Lösungsmethode für lineare<br />

Gleichungssysteme ist (für Gauss-Elimination: ω = 3)<br />

Das sieht zwar subexponentiell aus, aber selbst mit der derzeit<br />

besten bekannten Methode mit ω = 2.3766 ist<br />

( ) 2.3766 1600<br />

≈ 2 330 ,<br />

18<br />

was wesentlich langsamer als ein Brute-Force-Angriff ist.


Komplexität von XL<br />

2002 entdeckt man, dass man XL noch verbessern kann,<br />

indem man die Dünnbesetztheit des AES-Gleichungssystems<br />

ausnutzt.


Komplexität von XL<br />

2002 entdeckt man, dass man XL noch verbessern kann,<br />

indem man die Dünnbesetztheit des AES-Gleichungssystems<br />

ausnutzt.<br />

eXtended Sparse Linearisation“<br />


Komplexität von XL<br />

2002 entdeckt man, dass man XL noch verbessern kann,<br />

indem man die Dünnbesetztheit des AES-Gleichungssystems<br />

ausnutzt.<br />

eXtended Sparse Linearisation“<br />

”<br />

multiply(X) by Selected monomials and Linearise“<br />


Komplexität von XL<br />

2002 entdeckt man, dass man XL noch verbessern kann,<br />

indem man die Dünnbesetztheit des AES-Gleichungssystems<br />

ausnutzt.<br />

eXtended Sparse Linearisation“<br />

”<br />

multiply(X) by Selected monomials and Linearise“<br />

”<br />

Idee: nicht mit allen möglichen Termen vom Grad ≤ D − 2<br />

multiplizieren, sondern mit einer sorgfältig ausgewählten“<br />

”<br />

Menge an schon existierenden Termen


XSL<br />

1 Stelle für jede S-Box das zugehörige Gleichungssystem auf.<br />

2 Wähle Parameter P. Wähle eine ”<br />

aktive“ S-Box,<br />

multiplizieren jede Gleichung dieser S-Box mit allen Termen<br />

von P − 1 ”<br />

passiven“ S-Boxen und wiederhole das, bis jede<br />

S-Box genau einmal aktiv war.<br />

3 Wenn noch nicht genug linear unabhänige Gleichungen<br />

entstanden sind, wende die sog. T ′ -Methode an.<br />

4 Linearisierung


T ′ -Methode<br />

1 Sei T die Menge der Terme in den Gleichungen. Bestimme<br />

T 1 ′ := {t ∈ T | x 1 · t ∈ T } und T 2 ′ := {t ∈ T | x 2 · t ∈ T }<br />

2 Stelle das Gleichungssystem so um, dass jede Variable in<br />

T − T 1 ′ eine Linearkombination von Variablen aus T 1 ′ ist und<br />

wiederhole das für T 2 ′.<br />

C 1 := Menge der Gleichungen, die nur aus Termen aus T 1<br />

′<br />

bestehen<br />

C 2 := Menge der Gleichungen, die nur aus Termen aus T 2<br />

′<br />

bestehen<br />

3 Multipliziere C 1 mit x 1 und ersetze die Terme durch<br />

Kombinationen von Termen aus T 2 ′ . Kombiniere diese<br />

Gleichungen mit C 2 und multipliziere sie mit x 2<br />

4 Jetzt haben wir mehr linear unabhängige Gleichungen ohne<br />

die Anzahl der Terme zu erhöhen. Wenn Free < T − 1, wird<br />

Schritt 3 wiederholt, oder wenn das nicht zum Erfolg führt,<br />

Schritt 1 mit einer anderen Wahl von T<br />

i ′ und T<br />

j ′.


Wie ist P zu wählen?<br />

Wenn P zu groß gewählt wird, haben wir den<br />

XL-Algorithmus.


Wie ist P zu wählen?<br />

Wenn P zu groß gewählt wird, haben wir den<br />

XL-Algorithmus.<br />

Sei Free( die)<br />

Anzahl der linear unabhängigen Gleichungen,<br />

S<br />

T ≈ t P die Anzahl der Terme und<br />

P<br />

( ) S − 1<br />

T ′ ≈ t ′ t P−1 mit S = Anzahl der im Angriff<br />

P − 1<br />

verwendeten S-Boxen und t ′ = |T 1 ′ | (für AES: t′ = 25)


Wie ist P zu wählen?<br />

Wenn P zu groß gewählt wird, haben wir den<br />

XL-Algorithmus.<br />

Sei Free( die)<br />

Anzahl der linear unabhängigen Gleichungen,<br />

S<br />

T ≈ t P die Anzahl der Terme und<br />

P<br />

( ) S − 1<br />

T ′ ≈ t ′ t P−1 mit S = Anzahl der im Angriff<br />

P − 1<br />

verwendeten S-Boxen und t ′ = |T 1 ′ | (für AES: t′ = 25)<br />

Dann wird das kleinste P gewählt, so dass<br />

Free<br />

T − T ′ ≥ 1


Wie ist P zu wählen?<br />

Wenn P zu groß gewählt wird, haben wir den<br />

XL-Algorithmus.<br />

Sei Free( die)<br />

Anzahl der linear unabhängigen Gleichungen,<br />

S<br />

T ≈ t P die Anzahl der Terme und<br />

P<br />

( ) S − 1<br />

T ′ ≈ t ′ t P−1 mit S = Anzahl der im Angriff<br />

P − 1<br />

verwendeten S-Boxen und t ′ = |T 1 ′ | (für AES: t′ = 25)<br />

Dann wird das kleinste P gewählt, so dass<br />

Free<br />

T − T ′ ≥ 1<br />

für AES-128: P = 8 und<br />

Free<br />

T −T ′ = 1.005


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P<br />

Das wird allerdings von einigen Experten angezweifelt.


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P<br />

Das wird allerdings von einigen Experten angezweifelt.<br />

Optimistische Schätzungen für AES-128 ergeben T ω ≈ 2 230 ,<br />

besser als XL, aber immernoch schlechter als Brute-Force.


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P<br />

Das wird allerdings von einigen Experten angezweifelt.<br />

Optimistische Schätzungen für AES-128 ergeben T ω ≈ 2 230 ,<br />

besser als XL, aber immernoch schlechter als Brute-Force.<br />

Für AES-256 haben wir P = 8,<br />

Free<br />

T −T ′ = 1.006 und T ω ≈ 2 255


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P<br />

Das wird allerdings von einigen Experten angezweifelt.<br />

Optimistische Schätzungen für AES-128 ergeben T ω ≈ 2 230 ,<br />

besser als XL, aber immernoch schlechter als Brute-Force.<br />

Für AES-256 haben wir P = 8,<br />

Free<br />

T −T ′ = 1.006 und T ω ≈ 2 255<br />

offenes Problem, ob XSL für das AES-System funktioniert


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P<br />

Das wird allerdings von einigen Experten angezweifelt.<br />

Optimistische Schätzungen für AES-128 ergeben T ω ≈ 2 230 ,<br />

besser als XL, aber immernoch schlechter als Brute-Force.<br />

Für AES-256 haben wir P = 8,<br />

Free<br />

T −T ′ = 1.006 und T ω ≈ 2 255<br />

offenes Problem, ob XSL für das AES-System funktioniert<br />

kubische Gleichungen: r = 471, t = 697, t ′ = 242, AES-256:<br />

T ω ≈ 2 195 für ω = 2.3766 und T ω ≈ 2 242 für ω = 3


Komplexität von XSL<br />

Die Komplexität von XSL ist, wenn die Abschätzungen der<br />

Autoren über die Anzahl ( linear ) unabhängiger Gleichungen<br />

ω<br />

S<br />

stimmen, T ω = t Pω · .<br />

P<br />

Das wird allerdings von einigen Experten angezweifelt.<br />

Optimistische Schätzungen für AES-128 ergeben T ω ≈ 2 230 ,<br />

besser als XL, aber immernoch schlechter als Brute-Force.<br />

Für AES-256 haben wir P = 8,<br />

Free<br />

T −T ′ = 1.006 und T ω ≈ 2 255<br />

offenes Problem, ob XSL für das AES-System funktioniert<br />

kubische Gleichungen: r = 471, t = 697, t ′ = 242, AES-256:<br />

T ω ≈ 2 195 für ω = 2.3766 und T ω ≈ 2 242 für ω = 3<br />

Vincent Rijmen: ”<br />

The XSL attack is not an attack. It is a<br />

dream.“


Wird der Traum wahr?<br />

Fast gleichzeitig zur XSL-Attacke wurde eine Blockchiffre<br />

(BES), die statt auf 128-Bit-Blöcken auf 128-Byte-Blöcken<br />

arbeitet, vorgestellt.


Wird der Traum wahr?<br />

Fast gleichzeitig zur XSL-Attacke wurde eine Blockchiffre<br />

(BES), die statt auf 128-Bit-Blöcken auf 128-Byte-Blöcken<br />

arbeitet, vorgestellt.<br />

BES (Big <strong>Encryption</strong> System) hat eine noch einfachere und<br />

elegantere algebraische Struktur als AES.


Wird der Traum wahr?<br />

Fast gleichzeitig zur XSL-Attacke wurde eine Blockchiffre<br />

(BES), die statt auf 128-Bit-Blöcken auf 128-Byte-Blöcken<br />

arbeitet, vorgestellt.<br />

BES (Big <strong>Encryption</strong> System) hat eine noch einfachere und<br />

elegantere algebraische Struktur als AES.<br />

AES-128 lässt sich so in BES einbetten, dass jede<br />

AES-Operation einer BES-Operation entspricht bezüglich<br />

einer Abbildung von 128 Bit auf 128 Byte.


BES<br />

Bezeichnungen:<br />

F = GF (2 8 )


BES<br />

Bezeichnungen:<br />

F = GF (2 8 )<br />

A = F 16


BES<br />

Bezeichnungen:<br />

F = GF (2 8 )<br />

A = F 16<br />

B = F 128


BES<br />

Bezeichnungen:<br />

F = GF (2 8 )<br />

A = F 16<br />

B = F 128<br />

B A = Teilmenge von F 128


BES<br />

Bezeichnungen:<br />

F = GF (2 8 )<br />

A = F 16<br />

B = F 128<br />

B A = Teilmenge von F 128<br />

Inverses: wie üblich mit 0 −1 = 0<br />

für Vektor a = (a 0 , . . . , a n−1 ) ∈ F n komponentenweise:<br />

a −1 = (a0 −1 , . . . , a−1 n−1 )


BES<br />

Definition<br />

Die Vektor-Konjugation ã für a ∈ F sei definiert als<br />

ã =<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)


BES<br />

Definition<br />

Die Vektor-Konjugation ã für a ∈ F sei definiert als<br />

ã =<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

Dafür benutzen wir eine Abbildung φ mit<br />

ã = φ(a) =<br />

(a 20 , . . . , a 27)


BES<br />

Definition<br />

Die Vektor-Konjugation ã für a ∈ F sei definiert als<br />

ã =<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

Dafür benutzen wir eine Abbildung φ mit<br />

ã = φ(a) =<br />

(a 20 , . . . , a 27)<br />

φ lässt sich für n-dim. Vektoren a ∈ F n erweitern:<br />

ã = φ(a) = (φ(a 0 ), . . . , φ(a n−1 ))


BES<br />

Definition<br />

Die Vektor-Konjugation ã für a ∈ F sei definiert als<br />

ã =<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

Dafür benutzen wir eine Abbildung φ mit<br />

ã = φ(a) =<br />

(a 20 , . . . , a 27)<br />

φ lässt sich für n-dim. Vektoren a ∈ F n erweitern:<br />

ã = φ(a) = (φ(a 0 ), . . . , φ(a n−1 ))<br />

Es gilt: φ(a + a ′ ) = φ(a) + φ(a ′ ) und φ(a −1 ) = φ(a) −1


BES<br />

Definition<br />

Wenn jede aufeinanderfolgende Menge von 8 Komponenten in<br />

a ∈ F 8n von der Form<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

ist, hat a die Konjugations-Eigenschaft.


BES<br />

Definition<br />

Wenn jede aufeinanderfolgende Menge von 8 Komponenten in<br />

a ∈ F 8n von der Form<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

ist, hat a die Konjugations-Eigenschaft.<br />

Jeder Klartext, Chiffretext, Zustand und Schlüssel für<br />

AES-128 ist aus A und für BES aus B.


BES<br />

Definition<br />

Wenn jede aufeinanderfolgende Menge von 8 Komponenten in<br />

a ∈ F 8n von der Form<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

ist, hat a die Konjugations-Eigenschaft.<br />

Jeder Klartext, Chiffretext, Zustand und Schlüssel für<br />

AES-128 ist aus A und für BES aus B.<br />

B A = φ(A) ⊂ B die AES-Teilmenge von BES


BES<br />

Definition<br />

Wenn jede aufeinanderfolgende Menge von 8 Komponenten in<br />

a ∈ F 8n von der Form<br />

(a 20 , a 21 , a 22 , a 23 , a 24 , a 25 , a 26 , a 27)<br />

ist, hat a die Konjugations-Eigenschaft.<br />

Jeder Klartext, Chiffretext, Zustand und Schlüssel für<br />

AES-128 ist aus A und für BES aus B.<br />

B A = φ(A) ⊂ B die AES-Teilmenge von BES<br />

Jedes Element aus B A erfüllt die Konjugations-Eigenschaft.


BES<br />

Wir fassen jeden Zustand als Spaltenvektor auf. Für a ∈ A:<br />

a =<br />

a 00 a 01 a 02 a 03<br />

a 10 a 11 a 12 a 13<br />

a 20 a 21 a 22 a 23<br />

a 30 a 31 a 32 a 33<br />

= (a 00 , . . . , a 30 , a 01 , . . . , a 31 , . . . , a 33 ) T<br />

Für b ∈ B:<br />

b = (b 000 , . . . , b 007 , b 100 , . . . , b 107 , . . . , . . . , b 330 , . . . , b 337 ) T<br />

Es gilt:<br />

φ(a ij ) = (b ij0 , . . . , b ij7 )


BES<br />

Man kann jede AES-Operation so in BES übertragen, dass bei<br />

jedem Schritt äquivalente Operationen in B A gemacht werden<br />

(unter Beibehaltung der Konjugations-Eigenschaft).


BES<br />

Man kann jede AES-Operation so in BES übertragen, dass bei<br />

jedem Schritt äquivalente Operationen in B A gemacht werden<br />

(unter Beibehaltung der Konjugations-Eigenschaft).<br />

φ<br />

→<br />

A B A<br />

↓ ↓<br />

k → AES BES ← φ(k)<br />

↓ ↓<br />

A<br />

φ<br />

←<br />

B A


BES<br />

Dabei können wir wieder die Additions-Konstante der S-Box<br />

in die KeyExpansion packen


BES<br />

Dabei können wir wieder die Additions-Konstante der S-Box<br />

in die KeyExpansion packen<br />

den linearen Teil der S-Box-Transformation, die ShiftRowsund<br />

die MixColumns-Transformation zu einer Matrix<br />

M B ∈ F 128×128 zusammenfassen.


BES<br />

Dabei können wir wieder die Additions-Konstante der S-Box<br />

in die KeyExpansion packen<br />

den linearen Teil der S-Box-Transformation, die ShiftRowsund<br />

die MixColumns-Transformation zu einer Matrix<br />

M B ∈ F 128×128 zusammenfassen.<br />

Für die letzte Runde bezeichnen wir mit M ∗ B die Matrix M B<br />

ohne MixColumns.


BES<br />

Dabei können wir wieder die Additions-Konstante der S-Box<br />

in die KeyExpansion packen<br />

den linearen Teil der S-Box-Transformation, die ShiftRowsund<br />

die MixColumns-Transformation zu einer Matrix<br />

M B ∈ F 128×128 zusammenfassen.<br />

Für die letzte Runde bezeichnen wir mit M ∗ B die Matrix M B<br />

ohne MixColumns.<br />

Round B (b, (k B ) i ) = M B · (b −1 ) + (k B ) i


BES<br />

Dabei können wir wieder die Additions-Konstante der S-Box<br />

in die KeyExpansion packen<br />

den linearen Teil der S-Box-Transformation, die ShiftRowsund<br />

die MixColumns-Transformation zu einer Matrix<br />

M B ∈ F 128×128 zusammenfassen.<br />

Für die letzte Runde bezeichnen wir mit M ∗ B die Matrix M B<br />

ohne MixColumns.<br />

Round B (b, (k B ) i ) = M B · (b −1 ) + (k B ) i<br />

Round A (a, (k A ) i ) = φ −1 (Round B (φ(a), φ((k A ) i )))


BES<br />

Bezeichnungen:<br />

p Klartext<br />

c Chiffretext


BES<br />

Bezeichnungen:<br />

p Klartext<br />

c Chiffretext<br />

w i Zustands-Vektor der i-ten Runde vor Inversion<br />

x i Zustands-Vektor der i-ten Runde nach Inversion


BES<br />

Bezeichnungen:<br />

p Klartext<br />

c Chiffretext<br />

w i Zustands-Vektor der i-ten Runde vor Inversion<br />

x i Zustands-Vektor der i-ten Runde nach Inversion<br />

k i der i-te Rundenschlüssel


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0<br />

x i = w −1<br />

i<br />

für i = 0, . . . , 9


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0<br />

x i = w −1<br />

i<br />

für i = 0, . . . , 9<br />

w i = M B ⊗ x i−1 ⊕ k i für i = 1, . . . , 9


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0<br />

x i = w −1<br />

i<br />

für i = 0, . . . , 9<br />

w i = M B ⊗ x i−1 ⊕ k i für i = 1, . . . , 9<br />

c = M ∗ B ⊗ x 9 ⊕ k 10


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0<br />

x i = w −1<br />

i<br />

für i = 0, . . . , 9<br />

w i = M B ⊗ x i−1 ⊕ k i für i = 1, . . . , 9<br />

c = M ∗ B ⊗ x 9 ⊕ k 10<br />

Betrachten wir die Gleichungen komponentenweise und<br />

bezeichnen die (8j + m)-te Komponente von x i , w i , k i , p und<br />

c mit x i,(j,m) , w i,(j,m) , k i,(j,m) , p (j,m) und c (j,m) ,


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0<br />

x i = w −1<br />

i<br />

für i = 0, . . . , 9<br />

w i = M B ⊗ x i−1 ⊕ k i für i = 1, . . . , 9<br />

c = M ∗ B ⊗ x 9 ⊕ k 10<br />

Betrachten wir die Gleichungen komponentenweise und<br />

bezeichnen die (8j + m)-te Komponente von x i , w i , k i , p und<br />

c mit x i,(j,m) , w i,(j,m) , k i,(j,m) , p (j,m) und c (j,m) ,<br />

addieren bzw. multiplizieren die linken Seiten rüber


Die Gleichungen für BES<br />

Für BES ergeben sich folgende Gleichungen:<br />

w 0 = p ⊕ k 0<br />

x i = w −1<br />

i<br />

für i = 0, . . . , 9<br />

w i = M B ⊗ x i−1 ⊕ k i für i = 1, . . . , 9<br />

c = M ∗ B ⊗ x 9 ⊕ k 10<br />

Betrachten wir die Gleichungen komponentenweise und<br />

bezeichnen die (8j + m)-te Komponente von x i , w i , k i , p und<br />

c mit x i,(j,m) , w i,(j,m) , k i,(j,m) , p (j,m) und c (j,m) ,<br />

addieren bzw. multiplizieren die linken Seiten rüber<br />

und bezeichnen M B mit (α) und MB ∗ mit (β), erhalten wir für<br />

j = 0, . . . , 15 und m = 0, . . . , 7:


Die Gleichungen für BES<br />

0 = w 0,(j,m) ⊕ p (j,m) ⊕ k 0,(j,m)<br />

0 = x i,(j,m) ⊗ w i,(j,m) ⊕ 1 für i = 0, . . . , 9<br />

0 = w i,(j,m) ⊕ k i,(j,m) ⊕ ∑<br />

α (j,m),(j ′ ,m ′ ) ⊗ x i−1,(j ′ ,m ′ )<br />

(j ′ ,m ′ )<br />

für i = 1, . . . , 9<br />

0 = c (j,m) ⊕ k 10,(j,m) ⊕ ∑<br />

(j ′ ,m ′ )<br />

β (j,m),(j ′ ,m ′ ) ⊗ x 9,(j ′ ,m ′ )


Die Gleichungen für BES<br />

2688 Gleichungen (1280 quadratische und 1408 lineare)


Die Gleichungen für BES<br />

2688 Gleichungen (1280 quadratische und 1408 lineare)<br />

5248 Terme (aus 2560 Zustands- und 1408 Schlüsselvariablen)


Die Gleichungen für BES<br />

2688 Gleichungen (1280 quadratische und 1408 lineare)<br />

5248 Terme (aus 2560 Zustands- und 1408 Schlüsselvariablen)<br />

Aus der Konjugations-Eigenschaft erhalten wir noch weitere<br />

multivariate quadratische Gleichungen:<br />

0 = w 0,(j,m) ⊕ p (j,m) ⊕ k 0,(j,m)<br />

0 = w i,(j,m) ⊕ k i,(j,m) ⊕ ∑<br />

α (j,m),(j ′ ,m ′ ) ⊗ x i−1,(j ′ ,m ′ )<br />

(j ′ ,m ′ )<br />

für i = 1, . . . , 9<br />

0 = c (j,m) ⊕ k 10,(j,m) ⊕ ∑<br />

(j ′ ,m ′ )<br />

β (j,m),(j ′ ,m ′ ) ⊗ x 9,(j ′ ,m ′ )<br />

0 = x i,(j,m) ⊗ w i,(j,m) ⊕ 1 für i = 0, . . . , 9<br />

0 = x 2 i,(j,m) ⊕ x i,(j,m+1) für i = 0, . . . , 9<br />

0 = w 2 i,(j,m) ⊕ w i,(j,m+1) für i = 0, . . . , 9


Die Gleichungen für BES, Komplexität<br />

komplette AES-Verschlüsselung: 5248 Gleichungen über F<br />

(3840 quadratische und 1408 lineare) aus 7808 Termen


Die Gleichungen für BES, Komplexität<br />

komplette AES-Verschlüsselung: 5248 Gleichungen über F<br />

(3840 quadratische und 1408 lineare) aus 7808 Termen<br />

KeyExpansion: zusätzlich 2560 Gleichungen (960 quadratische<br />

und 1600 lineare) aus 2368 Termen


Die Gleichungen für BES, Komplexität<br />

komplette AES-Verschlüsselung: 5248 Gleichungen über F<br />

(3840 quadratische und 1408 lineare) aus 7808 Termen<br />

KeyExpansion: zusätzlich 2560 Gleichungen (960 quadratische<br />

und 1600 lineare) aus 2368 Termen<br />

Das GF (2 8 )-System ist viel einfacher als das GF (2)-System<br />

aus dem vorigen Abschnitt.


Die Gleichungen für BES, Komplexität<br />

komplette AES-Verschlüsselung: 5248 Gleichungen über F<br />

(3840 quadratische und 1408 lineare) aus 7808 Termen<br />

KeyExpansion: zusätzlich 2560 Gleichungen (960 quadratische<br />

und 1600 lineare) aus 2368 Termen<br />

Das GF (2 8 )-System ist viel einfacher als das GF (2)-System<br />

aus dem vorigen Abschnitt.<br />

Wenn die Abschätzungen für die XSL-Komplexität stimmen,<br />

wird erwartet, dass man das


Die Gleichungen für BES, Komplexität<br />

komplette AES-Verschlüsselung: 5248 Gleichungen über F<br />

(3840 quadratische und 1408 lineare) aus 7808 Termen<br />

KeyExpansion: zusätzlich 2560 Gleichungen (960 quadratische<br />

und 1600 lineare) aus 2368 Termen<br />

Das GF (2 8 )-System ist viel einfacher als das GF (2)-System<br />

aus dem vorigen Abschnitt.<br />

Wenn die Abschätzungen für die XSL-Komplexität stimmen,<br />

wird erwartet, dass man das GF (2 8 )-System mit nur 2 100<br />

AES-Verschlüsselungen lösen kann, was erheblich schneller als<br />

Brute-Force wäre.


Die Gleichungen für BES, Komplexität<br />

komplette AES-Verschlüsselung: 5248 Gleichungen über F<br />

(3840 quadratische und 1408 lineare) aus 7808 Termen<br />

KeyExpansion: zusätzlich 2560 Gleichungen (960 quadratische<br />

und 1600 lineare) aus 2368 Termen<br />

Das GF (2 8 )-System ist viel einfacher als das GF (2)-System<br />

aus dem vorigen Abschnitt.<br />

Wenn die Abschätzungen für die XSL-Komplexität stimmen,<br />

wird erwartet, dass man das GF (2 8 )-System mit nur 2 100<br />

AES-Verschlüsselungen lösen kann, was erheblich schneller als<br />

Brute-Force wäre.<br />

leider immernoch zu aufwendig, um es praktisch zu<br />

implementieren :-(


Vielen Dank!<br />

Noch Fragen?

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!