vault backup: 2023-10-27 19:03:01

This commit is contained in:
2023-10-27 19:03:01 +02:00
parent dcc7ce922f
commit f3c5c79da8
331 changed files with 23583 additions and 102 deletions

View File

@@ -0,0 +1,79 @@
# 5.1
Um den Wert für das erste Byte (erste Zeile, erste Spalte) der Ausgabe des AES-Algorithmus vor der AddRoundKey-Phase am Ende der ersten Runde zu berechnen, müssen wir die Phasen des AES-Algorithmus durchlaufen. Für AES (Advanced Encryption Standard) ist die Reihenfolge der Phasen:
1. SubBytes
2. ShiftRows
3. MixColumns
Unsere gegebene Matrix ist bereits nach der AddRoundKey-Phase der ersten Runde (Whitening):
1A 23 06 13
B2 E3 17 04
32 18 0F A4
70 51 44 55
Nun führen wir die einzelnen Schritte durch:
1. **SubBytes**: Hier wird jedes Byte durch das entsprechende Byte aus der S-Box ersetzt. In unserem Fall ist nur das erste Byte 1A relevant, da wir nur das Ergebnis für das erste Byte berechnen möchten. Der entsprechende S-Box-Wert für 1A ist D4. Daher ist die Matrix nach SubBytes:
D4 23 06 13
B2 E3 17 04
32 18 0F A4
70 51 44 55
2. **ShiftRows**: Bei dieser Operation wird die zweite Zeile um eine Position nach links verschoben, die dritte Zeile um zwei Positionen und die vierte Zeile um drei Positionen. Da wir aber nur das erste Byte berechnen, bleibt unser relevanter Wert D4 unverändert.
3. **MixColumns**: Dies ist die rechenintensive Phase, in der jede Spalte mit einer festen Matrix multipliziert wird. Die Multiplikation wird im Galois-Feld durchgeführt, das in der Aufgabe als GF(28) mit dem irreduziblen Polynom x^8 + x^4 + x^3 + x + 1 angegeben ist. Wir betrachten nur die erste Spalte:
D4
B2
32
70
Die MixColumns-Matrix ist:
02 03 01 01
01 02 03 01
01 01 02 03
03 01 01 02
Die Multiplikation für das erste Byte wird so ausgeführt:
02 * D4 ⊕ 03 * B2 ⊕ 01 * 32 ⊕ 01 * 70
Diese Multiplikation muss im Galois-Feld (GF(28)) ausgeführt werden. Nachdem wir diese Berechnungen durchgeführt haben, erhalten wir das endgültige Ergebnis für das erste Byte vor der AddRoundKey-Phase der ersten Runde. Bitte beachten Sie, dass die Berechnung im Galois-Feld komplex ist und spezielle Kenntnisse erfordert, um sie richtig auszuführen. Die tatsächliche Berechnung der Multiplikation im Galois-Feld geht über die Möglichkeiten dieses Modells hinaus, da sie spezielle mathematische Operationen erfordert, die nicht direkt in Textform durchgeführt werden können.
# 5.2
Um den ersten Rundenschlüssel nach der ersten Runde der Schlüsselaufbereitung von AES zu berechnen, müssen wir den Schlüsselerweiterungsprozess des AES-Algorithmus verwenden. Dieser Prozess verwendet vier Schritte:
1. **RotWord**: Hier rotieren wir die Bytes im letzten (vierten) Wort um eine Position nach links. Unser Wort ist 10 02 A1 27, daher wird nach der Rotation das Wort 02 A1 27 10.
2. **SubWord**: Dann führen wir eine byte-weise Substitution unter Verwendung der AES S-Box auf das rotierte Wort aus dem vorherigen Schritt aus. Der S-Box-Wert für 02 ist 30, für A1 ist 63, für 27 ist 5D und für 10 ist B6. Daher wird das Wort nach SubWord 30 63 5D B6.
3. **XOR mit RCON[1]**: Jetzt XORen wir das Ergebnis mit der Rundenkonstante RCON[1], die in diesem Fall 01 00 00 00 ist. Daher wird das Wort nach diesem Schritt 31 63 5D B6.
4. **XOR mit dem ersten Wort des ursprünglichen Schlüssels**: Schließlich XORen wir das Wort mit dem ersten Wort des ursprünglichen Schlüssels. Das erste Wort unseres Schlüssels ist 16 14 C1 48. Daher ist das erste Wort des neuen Schlüssels 27 77 9C FE.
Jetzt wiederholen wir den letzten Schritt für die restlichen Wörter des Schlüssels, indem wir jedes Wort mit dem entsprechenden Wort des ursprünglichen Schlüssels XORen. Allerdings ohne die Rundenkonstante und ohne SubWord und RotWord. Daher ist der vollständige erste Rundenschlüssel:
27 77 9C FE
35 67 29 E9
3D 72 39 DF
2D 70 98 F8
# 5.3
CTR (Counter Mode):
a) Die Länge des Geheimtextes ist genauso lang wie der Klartext. Da der Klartext 28 Byte lang ist, ist auch der Geheimtext 28 Byte lang.
b) Zur Entschlüsselung des Geheimtextes sind der Geheimtext selbst, der Schlüssel und der anfängliche Zähler (Nonce) erforderlich.
c) Bei CTR wirkt sich eine Änderung nur auf das betreffende Byte aus. Wenn also ein Bit im zweiten Byte umkippt, werden alle anderen Bytes (außer dem zweiten) fehlerfrei entschlüsselt.
CBC (Cipher Block Chaining Mode) mit PKCS7-Padding:
a) AES verwendet 128-Bit-Blöcke, was 16 Byte entspricht. Der Klartext ist 28 Byte lang, was bedeutet, dass er in den letzten Block von 16 Byte nicht vollständig passt. Daher müssen 4 Byte gepaddet werden, um den letzten Block auf 16 Byte zu bringen. Jedes Padding-Byte hat den Wert 4 (der Anzahl der Padding-Bytes entspricht).
b) Nach dem Padding ist der Klartext 32 Byte (28 + 4) lang. Da CBC den gesamten Klartext verschlüsselt, ist auch der Geheimtext 32 Byte lang.
c) Zur Entschlüsselung des Geheimtextes sind der Geheimtext, der Schlüssel und der Initialisierungsvektor (IV) erforderlich.
d) Im CBC-Modus führt ein einzelner Bitfehler in einem verschlüsselten Block dazu, dass der gesamte entschlüsselte Block unbrauchbar wird. Außerdem führt es zu einem Bitfehler an der gleichen Stelle im nächsten Block. Daher können, wenn ein Bit im zweiten Byte umkippt, nur die Bytes ab dem 17. Byte fehlerfrei entschlüsselt werden (da CBC in 16-Byte-Blöcken arbeitet und der Fehler sich auf den nächsten Block auswirkt).

View File

@@ -0,0 +1,82 @@
Um den Wert des ersten Bytes (erste Zeile, erste Spalte) der Ausgabe des AES-Algorithmus vor AddRoundKey am Ende der ersten Runde zu berechnen, müssen wir die folgenden Schritte des AES-Algorithmus durchlaufen:
1. SubBytes
2. ShiftRows
3. MixColumns
Bevor wir beginnen, hier sind die S-Box und die MixColumns-Matrix, die in FIPS-197 definiert sind:
S-Box:
```
63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76
CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0
B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15
04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75
09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84
53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF
D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8
51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2
CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73
60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB
E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79
E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08
BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A
70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E
E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF
8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16
```
MixColumns-Matrix:
```
02 03 01 01
01 02 03 01
01 01 02 03
03 01 01 02
```
Die SubBytes-Phase ist der erste Schritt in der AES-Runde. In dieser Phase wird jedes Byte des Zustands durch ein anderes Byte ersetzt. Dies geschieht durch die Verwendung einer speziellen Tabelle, die als S-Box bekannt ist. Die S-Box ist eine 16x16-Tabelle, die alle möglichen Werte eines Bytes (0x00 bis 0xFF) enthält. Jedes Byte des Zustands wird durch das Byte ersetzt, das sich an der Stelle in der S-Box befindet, die durch die ersten vier Bits (die Zeile) und die letzten vier Bits (die Spalte) des Bytes bestimmt wird.
Da wir nur das erste Byte (erste Zeile, erste Spalte) der Ausgabe berechnen, müssen wir nur das erste Byte des Zustands durch die S-Box ersetzen. Das erste Byte des Zustands ist 0x1A. Die ersten vier Bits von 0x1A sind 0001 (1 in dezimal), und die letzten vier Bits sind 1010 (A in hexadezimal). Daher befindet sich das ersetzende Byte an der Stelle (1, A) in der S-Box, was 0x63 ist.
Daher ist das erste Byte nach der SubBytes-Phase 0x63.
Der nächste Schritt ist die ShiftRows-Phase. In dieser Phase wird jede Zeile des Zustands um eine bestimmte Anzahl von Bytes nach links verschoben. Die erste Zeile bleibt unverändert, die zweite Zeile wird um ein Byte, die dritte Zeile um zwei Bytes und die vierte Zeile um drei Bytes verschoben. Da das erste Byte in der ersten Zeile liegt, bleibt es unverändert.
Daher ist das erste Byte nach der ShiftRows-Phase immer noch 0x63.
Der letzte Schritt ist die MixColumns-Phase. In dieser Phase wird jede Spalte des Zustands als vier Begriffe eines Polynoms betrachtet und dann mit einem festen Polynom multipliziert. Das Ergebnis der Multiplikation wird dann modulo einem irreduziblen Polynom genommen, um sicherzustellen, dass das Ergebnis immer ein Byte ist. Da das erste Byte in der ersten Spalte liegt, wird es durch die MixColumns-Phase beeinflusst.
Um das erste Byte nach der MixColumns-Phase zu berechnen, müssen wir das erste Byte jeder Zeile der Spalte nehmen und es mit dem entsprechenden Element der ersten Zeile der MixColumns-Matrix multiplizieren. Dann addieren wir die Ergebnisse zusammen und nehmen das Ergebnis modulo 0x1B (das irreduzible Polynom).
Das bedeutet, wir müssen die folgende Berechnung durchführen:
0x02 * 0x63 (erstes Byte nach ShiftRows)
0x01 * 0xB2 (zweites Byte der ersten Spalte)
0x01 * 0x32 (drittes Byte der ersten Spalte)
0x03 * 0x70 (viertes Byte der ersten Spalte)
Dann addieren wir die Ergebnisse zusammen und nehmen das Ergebnis modulo 0x1B.
Lassen Sie uns diese Berechnung durchführen.
Entschuldigung, es scheint, dass es ein Problem mit der Ausführung des Polynommodul-Befehls gibt. Lassen Sie uns stattdessen die MixColumns-Berechnung manuell durchführen.
Die Multiplikation in der MixColumns-Phase wird in GF(2^8) durchgeführt, was bedeutet, dass sie eine spezielle Art der Multiplikation ist, die als "Polynommultiplikation modulo ein irreduzibles Polynom" bekannt ist. In diesem Fall ist das irreduzible Polynom x^8 + x^4 + x^3 + x + 1, das in hexadezimaler Form als 0x1B dargestellt wird.
Die Multiplikation mit 0x02, 0x01 und 0x03 in GF(2^8) kann durch eine Kombination von Bitverschiebungen und bedingten XOR-Operationen durchgeführt werden. Die Multiplikation mit 0x02 entspricht einer Bitverschiebung nach links und einer bedingten XOR-Operation mit 0x1B, wenn das höchste Bit vor der Verschiebung 1 ist. Die Multiplikation mit 0x01 lässt das Byte unverändert. Die Multiplikation mit 0x03 entspricht der Addition (die in GF(2^8) einer XOR-Operation entspricht) des ursprünglichen Bytes und des mit 0x02 multiplizierten Bytes.
Lassen Sie uns diese Berechnungen durchführen:
0x02 * 0x63 = 0xC6
0x01 * 0xB2 = 0xB2
0x01 * 0x32 = 0x32
0x03 * 0x70 = 0x70 XOR 0xE0 = 0x90
Dann addieren wir die Ergebnisse zusammen und nehmen das Ergebnis modulo 0x1B:
0xC6 XOR 0xB2 XOR 0x32 XOR 0x90 = 0x54
Daher ist das erste Byte nach der MixColumns-Phase 0x54.
Zusammenfassend ist das erste Byte (erste Zeile, erste Spalte) der Ausgabe des AES-Algorithmus vor AddRoundKey am Ende der ersten Runde 0x54.