Advanced Encryption Standard Rijndael
Advanced Encryption Standard Rijndael
Advanced Encryption Standard Rijndael
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?