Advanced Encryption Standard (AES)

Dozent:

Prof. Dr. Michael Eichberg

Version:
2024-05-09
Basierend auf:

Cryptography and Network Security - Principles and Practice, 8th Edition, William Stallings

Quellen:

NIST FIPS PUB 197, "Advanced Encryption Standard (AES)"

Folien:

https://delors.github.io/sec-aes/folien.rst.html

https://delors.github.io/sec-aes/folien.rst.html.pdf

Fehler auf Folien melden:

https://github.com/Delors/delors.github.io/issues

Arithmetik endlicher Körper

Arithmetik endlicher Körper

Arithmetik endlicher Körper in Hinblick auf AES

AES Schlüsseleigenschaften

AES Verschlüsselungsprozess

AES Verschlüsselungsprozess

AES Parameter

Schlüsselgröße (words/bytes/bits)

4/16/128

6/24/192

8/32/256

Blockgröße (Block Size) (words/bytes/bits)

4/16/128

4/16/128

4/16/128

Anzahl der Runden

10

12

14

Größe des Rundenschlüssels (RoundKeys) (words/bytes/bits)

4/16/128

4/16/128

4/16/128

Expandierte Schlüsselgröße (words/bytes)

44/176

52/208

60/240

AES - Ver-/Entschlüsselungsprozess
(Key Size 128bits ⇒ 10 Runden)

AES Encryption and Decryption Process

AES Detaillierter Aufbau

AES verwendet vier verschiedene Stufen

Substitute Bytes:

verwendet eine S-Box, um eine byteweise Ersetzung des Blocks vorzunehmen.

ShiftRows:

ist eine einfache Permutation.

MixColumns:

ist eine Substitution, mit Hilfe von Polynomarithmetik über \(GF(2^8)\).

AddRoundKey:

ist ein einfaches bitweises XOR des aktuellen Blocks mit einem Teil des expandierten Schlüssels.

AES Substitute Byte Transformation

AES substitute byte tansformation

AES S-box

\(_x\\^y\)

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0

63

7C

77

7B

F2

6B

6F

C5

30

01

67

2B

FE

D7

AB

76

1

CA

82

C9

7D

FA

59

47

FO

AD

D4

A2

AF

9C

A4

72

CO

2

B7

FD

93

26

36

3F

F7

CC

34

A5

E5

F1

71

D8

31

15

3

04

C7

23

C3

18

96

05

9A

07

12

80

E2

EB

27

B2

75

4

09

83

2C

1A

1B

6E

5A

A0

52

3B

D6

B3

29

E3

2F

84

5

53

D1

00

ED

20

FC

B1

5B

6A

CB

BE

39

4A

4C

58

CF

6

DO

EF

AA

FB

43

4D

33

85

45

F9

02

7F

50

3C

9F

A8

7

51

A3

40

8F

92

9D

38

F5

BC

B6

DA

21

10

FF

F3

D2

8

CD

0C

13

EC

5F

97

44

17

C4

A7

7E

3D

64

5D

19

73

9

60

81

4F

DC

22

2A

90

88

46

EE

B8

14

DE

5E

0B

DB

A

E0

32

3A

0A

49

06

24

5C

C2

D3

AC

62

91

95

E4

79

B

E7

C8

37

6D

8D

D5

4E

A9

6C

56

F4

EA

65

7A

AE

08

C

BA

78

25

2E

1C

A6

B4

C6

E8

DD

74

1F

4B

BD

8B

8A

D

70

3E

B5

66

48

03

F6

0E

61

35

57

B9

86

C1

1D

9E

E

E1

F8

98

11

69

D9

8E

94

9B

1E

87

E9

CE

55

28

DF

F

8C

A1

89

OD

BF

E6

42

68

41

99

2D

OF

BO

54

BB

16

Jedes einzelne Byte des Zustands (State) wird auf folgende Weise auf ein neues Byte abgebildet: Die äußersten linken 4 Bits des Bytes werden als Zeilenwert und die äußersten rechten 4 Bits als Spaltenwert verwendet. Diese beiden Werte dienen als Indizes in der S-Box.

AES Inverse S-box

\(_x\\^y\)

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0

52

09

6A

D5

30

36

A5

38

BF

40

A3

9E

81

F3

D7

FB

1

7C

E3

39

82

9B

2F

FF

87

34

8E

43

44

C4

DE

E9

CB

2

54

7B

94

32

A6

C2

23

3D

EE

4C

95

0B

42

FA

C3

4E

3

08

2E

A1

66

28

D9

24

B2

76

5B

A2

49

6D

8B

D1

25

4

72

F8

F6

64

86

68

98

16

D4

A4

5C

CC

5D

65

B6

92

5

6C

70

48

50

FD

ED

B9

DA

5E

15

46

57

A7

8D

9D

84

6

90

D8

AB

00

8C

BC

D3

0A

F7

E4

58

05

B8

B3

45

06

7

DO

2C

1E

8F

CA

3F

OF

02

C1

AF

BD

03

01

13

8A

6B

8

3A

91

11

41

4F

67

DC

EA

97

F2

CF

CE

FO

B4

E6

73

9

96

AC

74

22

E7

AD

35

85

E2

F9

37

E8

1C

75

DF

6E

A

47

FI

1A

71

1D

29

C5

89

6F

B7

62

0E

AA

18

BE

1B

B

FC

56

3E

4B

C6

D2

79

20

9A

DB

CO

FE

78

CD

5A

F4

C

1F

DD

A8

33

88

07

C7

31

B1

12

10

59

27

80

EC

5F

D

60

51

7F

A9

19

B5

4A

OD

2D

E5

7A

9F

93

С9

9C

EF

E

A0

E0

3B

4D

AE

2A

F5

BO

C8

EB

BB

83

53

99

61

F

17

2B

04

7E

BA

77

D6

26

E1

69

14

63

55

21

0C

7D

Beispiel

Der (Hex)Wert 0xA3 (x=A und y=3) wird von der S-Box auf den (Hex)Wert 0x0A abgebildet.

Die inverse S-Box bildet den Wert 0x0A (x=0 und y=A) wieder auf den ursprünglichen Wert ab.

S-Box Design Grundlagen

Shift Row Transformation

Shift Row Transformation

Shift Row Transformation - Begründung

Mix Column Transformation

Mix Column Transformation

Inverse Mix Column Transformation

Inverse Mix Column Transformation

Mix Colum Transformation - Beispiel

Gegeben

87

F2

4D

97

6E

4C

90

EC

46

E7

4A

C3

A6

8C

D8

95

Ergebnis

47

40

A3

4C

37

D4

70

9F

94

E4

3A

42

ED

A5

A6

BC

Beispiel für die Berechnung von \(S'_{0,0}\):

\begin{equation*} \begin{matrix} S'_{0,0} = & 02 \times S_{0,0} & \oplus & 03 \times S_{1,0} & \oplus & 01 \times S_{2,0} & \oplus & 01 \times S_{3,0} & \\ & (02 \times 87) & \oplus & (03 \times 6E) & \oplus & (46) & \oplus & (A6) & = 47. \end{matrix} \end{equation*}

Mix Column Transformation - Begründung

AddRoundKey Transformation

Eingabe für eine einzelne AES-Verschlüsselungsrunde

Eingabe für eine einzelne AES-Verschlüsselungsrunde

AES Schlüsselexpansion

AES Schlüsselexpansion - Visualisiert

AES Schlüsselexpansion

AES Round Key Berechnung

\begin{equation*} \begin{matrix} r_i & = & (r_{c_i},00,00,00) \\ r_{c_1} & = & 01 \\ r_{c_{i+1}} & = & xtime(r_{c_i}) \end{matrix} \end{equation*}

Die \(xtime\) Funktion ist eine Multiplikation im endlichen Körper \(GF(2^8)\) und ist die Polynommultiplikation mit dem Polynom \(x\).

AES Schlüsselexpansion - Beispiel (Runde 1)

Gegeben sei:

\(w[0] = (54,68,61,74)\)

\(w[1] = (73,20,6D,79)\)

\(w[2] = (20,4B,75,6E)\)

\(w[3] = (67,20,46,75)\)

AES Schlüsselexpansion - Begründung

Designziele:

Lawineneffekt in AES: Änderung im Klartext

Round

# unterschiedlicher Bits

0123456789abcdeffedcba9876543210 0023456789abcdeffedcba9876543210

1

0

0e3634aece7225b6f26b174ed92b5588 0f3634aece7225b6f26b174ed92b5588

1

1

657470750fc7ff3fc0e8e8ca4dd02a9c c4a9ad090fc7ff3fc0e8e8ca4dd02a9c

20

2

5c7bb49a6b72349b05a2317ff46d1294 fe2ae569f7ee8bb8c1f5a2bb37ef53d5

58

3

7115262448dc747e5cdac7227da9bd9c ec093dfb7c45343d6890175070485e62

59

4

f867aee8b437a5210c24c1974cffeabc 43efdb697244df808e8d9364ee0ae6f5

61

5

721eb200ba06206dcbd4bce704fa654e 7b28a5d5ed643287e006c099bb375302

68

6

0ad9d85689f9f77bc1c5f71185e5fb14 3bc2d8b6798d8ac4fe36ald891ac181a

64

7

db18a8ffa16d30d5f88b08d777ba4eaa 9fb8b5452023c70280e5c4bb9e555a4b

67

8

f91b4fbfe934c9bf8f2f85812b084989 20264e1126b219aef7feb3f9b2d6de40

65

9

cca104a13e678500f£59025f3bafaa34 b56a0341b2290ba7dfdfbddcd8578205

61

10

ff0b844a0853bf7c6934ab4364148fb9 612b89398d0600cde116227ce72433f0

58

Lawineneffekt in AES: Änderung im Schlüssel

Runde

# unterschiedlicher Bits

0123456789abcdeffedcba9876543210 0123456789abcdeffedcba9876543210

0

0

0e3634aece7225b6f26b174ed92b5588 0f3634aece7225b6f26b174ed92b5588

1

1

657470750fc7ff3fc0e8e8ca4dd02a9c c5a9ad090ec7ff3fcle8e8ca4cd02a9c

22

2

5c7bb49a6b72349b05a2317ff46d1294 90905fa9563356d15f3760f3b8259985

58

3

7115262448dc747e5cdac7227da9bd9c 18aeb7aa794b3b66629448d575c7cebf

67

4

f867aee8b437a5210c24c1974cffeabc f81015f993c978a876ae017cb49e7eec

63

5

721eb200ba06206dcbd4bce704fa654e 5955c91b4e769f3cb4a94768e98d5267

81

6

0ad9d85689f9f77bc1c5f71185e5fb14 dc60a24d137662181e45b8d3726b2920

70

7

db18a8ffa16d30d5f88b08d777ba4eaa fe8343b8f88bef66cab7e977d005a03c

74

8

f91b4fbfe934c9bf8f2f85812b084989 da7dad581d1725c5b72fa0f9d9d1366a

67

9

cca104a13e678500ff59025f3bafaa34 Occb4c66bbfd912f4b511d72996345e0

59

10

ff0b844a0853bf7c6934ab4364148fb9 fc8923ee501a7d207ab670686839996b

53

Äquivalente inverse Chiffre

AES-Entschlüsselung ist nicht identisch mit der Verschlüsselung.

Zwei unabhängige, separate Änderungen sind erforderlich, um die Entschlüsselungsstruktur mit der Verschlüsselungsstruktur in Einklang zu bringen:

  1. Die ersten beiden Stufen der Entschlüsselungsrunde müssen vertauscht werden.

  2. Die zweiten beiden Stufen der Entschlüsselungsrunde müssen vertauscht werden.

Vertausch von InvShiftRows und InvSubBytes

InvShiftRows:

beeinflusst die Reihenfolge der Bytes im Zustand (State), ändert aber nicht den Inhalt der Bytes und ist nicht vom Inhalt der Bytes abhängig, um seine Transformation durchzuführen.

InvSubBytes:

beeinflusst den Inhalt von Bytes im Zutand (State), ändert aber nicht die Byte-Reihenfolge und hängt nicht von der Byte-Reihenfolge ab, um seine Transformation durchzuführen.

Diese beiden Operationen sind kommutativ und soweit vertauschbar.

Vertausch von AddRoundKey und InvMixColumns

Äquivalente Inverse Chiffre

drawings/aes/equivalent_inverse_cipher.svg

Aspekte der Umsetzung auf 8-bit Prozessoren

AES kann sehr effizient auf einem 8-Bit-Prozessor implementiert werden:

AddRoundKey:

ist eine byteweise XOR-Operation.

ShiftRows:

ist eine einfache Byte-Verschiebeoperation.

SubBytes:

arbeitet auf Byte-Ebene und benötigt nur eine Tabelle von 256 Bytes.

MixColumns:

erfordert eine Matrixmultiplikation im Körper \(GF(2^8)\), was bedeutet, dass alle Operationen mit Bytes durchgeführt werden.

Aspekte der Umsetzung auf 32-bit Prozessoren

AES kann effizient auf einem 32-Bit-Prozessor implementiert werden:

Vorberechnung von MixColumns

Link auf Diskussion der Tabellen: https://crypto.stackexchange.com/questions/19175/efficient-aes-use-of-t-tables

Übung (AES-128) - Berechnung des RoundKey

Sei der folgende RoundKey gegeben:

\(rc_1=w[4]\,||\,w[5]\,||\,w[6]\,||\,w[7]\) \(=\)

-w[4]------ -w[5]------ -w[6]------ -w[7]------

E2 32 FC F1 91 12 91 88 B1 59 E4 E6 D6 79 A2 93

In Hinblick auf die Berechnung von \(rc_2\); d. h. den Rundschlüssel (Roundkey) für die zweite Runde, führe folgende Schritte durch.

Formeln für die Berechnung des RoundKey

Bevor Sie die konkrete Berechnung durchführen, schreiben Sie zunächst die Formeln für: \(w[8] = \ldots \oplus \ldots \quad w[9]= \ldots \oplus \ldots \quad w[10]= \ldots \oplus \ldots \quad w[11]= \ldots \oplus \ldots\) auf.

MTAwMDAw:iQLEPG6DyjkcS1q4Tf3zPiVdYLL+sVc8SPiNcPfQsnk=:EXgAbgEq4pJGAeyu:OdpmCmiDPbCYcoXa5GT14m8rBnusHQMchedGWuMTSxIMJeVjF4yXddBMadcmvBNn0YF91VpFGFozL9VqlMvm0zuMozVklZ6d769nxXUawu6eRr+QJXSBQoYB+rT1QKgdmyAEv7/h3fu1jePyJ17JtnbngT9UxfXQXNGULewa/ffcYK2sSx20N4cEpzb51muIkz7weOW5oCw/x16BdjQGJKr57G2hoTmLE40VXVmrXMkXpCHWFDiPLVPxIboLntW5uQcrn5KZDt6Hu/LwyacOqB2tTMbs3ekui4WyS9RyaOpKzeu4sf3cdSUt3kYprfokW2FplvnEIh30gZJvOVTgzYHIEo0iO6oit61f3JGOEhpbUR4gaJCXhrXmEwWffEXBI4gvH2H4A0aV8NChI85wOrTT74NjXgXw1JeKC6B3fJnrSi6QOMMuJdofTatYSnEOUDrCOl3bzta3sb219jocxUem+yjHhfcKHtTSxwt+2kdebHDjQnIPwGUrWZuTojL2U1KWEIbnqhJeCtkQDW4InlcjCbClJzh8SgvLx4VHnQ==

Berechne \(w[8]\) und \(w[9]\).

MTAwMDAw:9JwaJ0nAybAvGivUzD0vvc83XwgmPiWOjA/z7pQGBvw=:0nHpq9vvqlaWgdvp:fpFiNpGH6FZsQySM+koE/n49iRfvfH/O1eGL3WR4usNarbMG8Nja6RsZ6hy3Y/gX+FWSLipeJIGSSoJERA5lMHACPK3C1QODoxCxl0nRrsG5iIgfOlEucVmH36VhfSCn1wWn5tbIrXK9rtYJQgiTx685hU57zfLEzOi0XxbvB/1x8vNXavqWfqkxCeu10gfdSfwWcxA0Ptb1F7UfgTkzcOQrm/xofFwvk62toEVSNZGXVs5jA3cTd4Wk38t5MS/HS/IJeJSXBZs9T4chZ6R+pjptV+ddV+Lpl0b/+guZvpDhGWsu4frBE2OY+L+Pr8f0oNpudHTeNd0RduK/08v9gJTLJqJaMylf7c5f1ZutkLNAAs2vLf8uy42tfrN3LnczkrKx78UBXP+mGxr4vuH7vRTT5pUCkzJDgeEyFfE7vU16QfqQlGH8NG1NV7YX64z+Z51UkctrH/NUFcDttW7BURviqBu/SODaExfhw2UNZSjrYP/PFFqb9ZOljzRgB53dkUPmk0xn1xthAhn2MjuhEua0BmvvyCSHkKAdECn5a3UoH0lEB3CLz7neP/s=

Übung (AES-128)

Nehmen wir an, dass der Zustand (State) folgendermaßen sei:

00 3C 6E 47
1F 4E 22 74
0E 08 1B 31
54 59 0B 1A

Führen Sie den Substitute Bytes Schritt durch (Anwendung der S-box Transformation).

MTAwMDAw:hxitZu4bT8alxTlU79xhEpcAoImpjejPRVAkgRXvhtg=:Q27Fl26d6fNbCnG5:tusFXcpXrKYwqK4VmKggGypR97uE5qrO169k9rvUFnKnmzM/MMK4KQxDvoWGdNwxo3MJpmTDnGv2hP60WP3Iy9SjeVOcgQ31FPPwT7NH3SFuigCpc3B4CjEYySkijc+FelVZkEOjjkYi4hCd8RKPm4T+oQsHXsEQ+g==

Führen Sie die Shift Rows Transformation auf dem Ergebnis des vorherigen Schrittes durch.

MTAwMDAw:MF3qffk8jMJdHGnclLmrOItF7HX4L0tQP871BU81J0A=:s2TUVeZWdD72U25B:5XyqzAdYbDlXgMHbKTxszPL30+o4sHYLyuqaMzOmfNMfAtqf07JuLFVndKsMKXHtrkcIs0wvv0QLqcPIiiHZQEdEMRZzjYU8anlrdTIYx3dw8yaYkO3aYwXo7YrxQuvr3w==

Übung (AES-128)

Mix Columns Transformation

Nehmen wir an, dass der Zustand (State) folgendermaßen sei:

6A 59 CB BD
4E 48 12 A0
98 9E 30 9B
8B 3D F4 9B

Führen Sie die Mix Columns Transformation durch für das fehlende Feld (\(S'_{0,0}\)):

?? C9 7F 9D
CE 4D 4B C2
89 71 BE 88
65 47 97 CD
MTAwMDAw:qAR3+ZOwRocJrg/Y2Bq2H9GfgAUe/OPZsHhect3HFlg=:rZO4lfbINv08WgF3:OlTJrMPzDqHpXDJJ8EXRxFoCw6LpMYVfZWkn/r7mn7WUHN8KHQYvN76ej7+3Uu2YRhm7fADFVaDs4nM6C17VmXLrDFOdpe3rUHIs1cUq97U1DkBfliClU6KBdA/j4IOEX5S80Y08a7g2rl+KCTCeML7bxb2wy5Ox3LMEmklJOKyFjh2vDIG2wlDavEWs/hYgatHd0D+DiNY8htq5DiLILSeWiUAHglnGG9d/MAoxdiKSBsfTvRVDCZ9enwpTjzXI7kfyXFpYq9jK3Nv2bNHGnUiPrbQVh1y9hXtcs/RgIM0kFwxniVVAQGZ7JljA8Tn0Yyh4ABQoiTiKKXMmkqJt/jDhitOSZXJ2kNi9Gb1HA/SadPG4HbkKo03nlPQ66l3YWqMimuzaOManBkMs6mXEcajl90XrV2Sh3psva4fUQVnwDMwcgvGg1g8vIiH+IK71/OO1lIBnb9Kj5HUIxevmRqD8NBLoTFsDbG/2NVazJQD0XvSYnSpbup9ur2Au1XCC+EhRM3ZLwh+Oa0LMramEDSMFb0C4mtMl707C+2vAe8n3U6QmuglR24sBlxt7o7iQUS/VGhFYc3jvgA==

Übung (AES-128)

RoundKey Anwendung

Wenden Sie den folgenden RoundKey:

-w[x]------ -w[x+1]---- -w[x+2]---- -w[x+3]----

D2 60 0D E7 15 7A BC 68 63 39 E9 01 C3 03 1E FB

auf die folgende Zustandsmatrix (State):

AA 65 FA 88
16 0C 05 3A
3D C1 DE 2A
B3 4B 5A 0A
MTAwMDAw:1A3WaG3ecwjxyC8sSv0JvB+mUeoWHajntOcYL5AZdXE=:MqPHY8xvWQCaKQTV:v60B7UlgNIQxHk/uwwRwmdmNNNUBp7AYeKuKggcrxSjAW3OJvjJD3icmBeg+cYBLKuXBo46NK3jyFd0csOlhOXCFH9KB6ftabi6mqZrMoHc2vmsPr6p1pdnHw+T5hs7ZDA6pcamMasW6sWYAJXsduCIiRdwlhtIhwkNfaPkYGBAS/qAaairg4wnVHDOr2HCGiKr3AKocqvwdiCzAOCo/Oncq0VlT/h2oEfa0viiT0XZHCRJlWZpMN+ZT81PjP+m1FBpXWImUEeS0MTAx8sWL

Übung (AES-128)

Nachgehakt

Fragen Sie sich, was passiert, wenn Sie einen Block, der nur aus 0x00 Werten besteht, mit einem Schlüssel verschlüsseln, der ebenfalls nur aus 0x00 Werten besteht?

MTAwMDAw:yxJH7ONC7c4H64lTzTfXqix55KASO4tkziWIHQrRELA=:M5gu+zI2FTljFycA:ofepBNtV+fee2XQHncSZKjHlDBOlNvi1QPe6dKDQeR+Tsq0tpDHGsG0WFJt9wFeMIqR7QrlhC1nq+K04GIxBG6t/ny2CAOjIhRQYlW2LLYc4T4VBU06n2k6ZVw8+1N+48BZUOmYY3nG4G0D6rqMZc+ShubcdnSW3xstHHvP3/qal6zt+A+q+zoCV0OY7h/HMIq59ixMT/arKax8SbCnXkUOix7+K5InPrrdMOOgjvfXrlV7OcLc8ju/+GVvb3tniKnWhJMjYTfik457GkgJgwYOfBsZj7QGvz/ZPQya2FZIhgrbpss9kOBtVnlNOSEx41cD5fT9TYyggX4xOFe28On6qKmo7bm1QAKB9Ihit8rJWrsEMo/LjV3mwqGbfwdIMjL7qXV3RLfXPXtG+Jq/RJocHbjcOBmKUdvXzwAhDz9OVAiq7VgrigyBKNMVi3G1DcQFPIW4l0+TLKhEHBBmTQIAyCy6FTSQUqfiIiMtD/kiQQ5uUJZO803VrCDbIHk1NVcnYCaKyWK/IoaGl0AcBnM+BMPsoYyPE49puWhy5+T3wAeIHd1YCEzwWEMVuYbv1DkN4tjo0maxjEbA3GlWj30wnHzCGdCQluAjUuhiDtClNbBN0nyvPRTMT937tGa5Y2p2QFCakl2e7Gfli1RVjVaMOACpr2PoROqYkIlF0ZWZYWbek3ou64j45KZmNloTjnmhmC8//718ZvJ9+Xro8PBEqaGEAJjhLkKgc1aK+3fgOGGMlbEXSq94H3DLbLOw01r2XR3NkKLe1/0dTB0aIO6IjGF5mKnCBCjL5+ZQH6fRB3lXY2dYqyiMJcsp2rag2pTPBUu3PaJYL/8ADwCHmSCP5+EkpNGoQEwC90zeHmMS6sx9fZVgBtK5Pi1/dB1P+JAzyHrviYnrMaQpLQQ==