Skip to content

Commit

Permalink
Finish block cipher.
Browse files Browse the repository at this point in the history
  • Loading branch information
SilasBerger committed Feb 9, 2025
1 parent cb9d960 commit f7b6fa0
Show file tree
Hide file tree
Showing 4 changed files with 214 additions and 182 deletions.
14 changes: 13 additions & 1 deletion docs/material/Kryptologie-GYM27/06-Symmetrisch/03-XOR.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ Sie erhalten von einem Kollegen folgende verschlüsselte Nachricht:
Als Schlüssel haben Sie das Wort **MACHT** vereinbart.

1. Codieren Sie den Schlüssel mit Pentacode und entschlüsseln Sie die Nachricht.
2. Decodieren Sie die entschlüsselte Pentacode-Bitfolge zu einem Text.
2. Decodieren Sie die entschlüsselte Pentacode-Bitfolge zu einer Zeichenfolge.

:::info[Pentacode Text-Editor]
Sie dürfen für diese Aufgabe den Pentacode Text-Editor verwenden.
Expand All @@ -90,4 +90,16 @@ Geben Sie das Klartext-Ergebnis hier ein und überprüfen Sie es.
<String id="9b1e97dc-6807-4ec3-bc18-182a57b0a2d4" solution="GEIST" />
::::

::::aufgabe[⭐️ Geheime Pixelgrafik austauschen]
<TaskState id="006a36bc-e256-4783-99fd-2c869c601b5b" />
Wählen Sie eine:n Partner:in und erledigen Sie gemeinsam folgende Aufgabe:

1. Einigen Sie sich auf ein geheimes Codewort mit einer Länge von genau 5 Buchstaben (keine Umlaute oder Sonderzeichen).
2. Verwenden Sie den Pentacode Text-Editor um den Schlüssel in eine binäre Bitfolge umzuwandeln.
3. Verwenden Sie beide (versteckt und unabhängig voneinander) den verlinkten Pentacode Pixel-Editor, um je eine geheime 5x5 Pixelgrafik zu erstellen.
4. Sie haben nun beide eine Bitfolge für Ihre jeweilige Pixelgrafik. Verschlüsseln Sie diese Bitfolge mit der XOR-Verschlüsselung, mit der Bitfolge des gemeinsamen Codeworts (Schritte 1 und 2).
5. Senden Sie einander die verschlüsselte Bitfolge via Teams.
6. Entschlüsseln Sie die erhaltene Bitfolge und verwenden Sie den Pentacode Pixel-Editor um das geheime Bild Ihrer Partnerin / Ihres Partners anzuzeigen.
::::

[^1]: Wenn wir mit Bits rechnen, können wir die Ergebnisse einer mathematischen Operation (Addition, Substraktion, XOR, etc) als Tabelle darstellen. Eine solche Tabelle nennen wir eine _Wahrheitstabelle_.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ sidebar_custom_props:
name: ofi.gbsl.website
ref: 'https://ofi.gbsl.website/26e/Kryptologie/Symmetrisch/blockchiffre'
page_id: 9189c66c-98b1-442a-ba83-f636baa34185
draft: true
---

import DefinitionList from "@tdev-components/DefinitionList";
Expand Down
202 changes: 201 additions & 1 deletion docs/material/Kryptologie-GYM27/06-Symmetrisch/05-Block-Chaining.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ sidebar_custom_props:
name: ofi.gbsl.website
ref: 'https://ofi.gbsl.website/26e/Kryptologie/Symmetrisch/block-chaining'
page_id: f588c1fd-086d-44ed-aa30-af28f735434c
draft: true
---

import DefinitionList from "@tdev-components/DefinitionList";
import XORBlockCipher from "@site/src/components/visualization-tools/cryptology/XORBlockCipher";
import TaskState from "@tdev-components/documents/TaskState";
import String from "@tdev-components/documents/String";
import Solution from "@tdev-components/documents/Solution";
import QuillV2 from "@tdev-components/documents/QuillV2";

# Verkettung von Blöcken
Im letzten Kapitel wurde der Geheimtext zur Ver- bzw. Entschlüsselung in Blöcke aufgeteilt, die exakt so lang sind wie der Schlüssel. Die Blöcke werden anschliessend einzeln durch die XOR-Funktion mit dem Schlüssel ver- bzw. entschlüsselt.
Expand Down Expand Up @@ -76,4 +79,201 @@ Beim ECB-Modus weist dementsprechend auch der Geheimtext zwei identische Blöcke
## XOR-Blockchiffre ausprobieren
<XORBlockCipher />

## Übungen
### ECB-Modus
:::warning[Übungen von Hand lösen]
Lösen Sie diese Übungen **von Hand**! Sie dürfen einzig den [Pentacode Text-Editor](Pentacode#pentacode-text-editor) als Hilfsmittel verwenden.
:::

::::aufgabe[Aufgabe 1]
<TaskState id="3e947bda-93d0-4351-8889-27c715f839f3" />
Verschlüsseln Sie den folgenden Text mit der XOR-Blockchiffre im ECB-Modus.

Text
: `PAKET ZUGESTELLT`
Schlüssel
: `BETA`

1. Codieren Sie zuerst den Text mit Pentacode (Sie dürfen dazu den Pentacode Text-Editor verwenden).
2. Codieren Sie den Schlüssel ebenfalls mit Pentacode.
3. Verschlüsseln Sie den binär dargestellten Text anschliessend mit dem binär dargestellten Schlüssel mittels XOR-Blockchiffre.
4. Decodieren Sie die Pentacode-codierte Geheimtext-Bitfolge zu einer Zeichenfolge.

Geben Sie das Resultat hier ein und überprüfen Sie es:
<String id="c70c7722-6399-416e-941e-8c1e139cc2be" solution="RD@DVENTE GUGIXU" inputWidth="15em" />
::::

:::aufgabe[Aufabe 2]
<TaskState id="7cbdc2a0-fdde-40c6-b0c6-ca053c153c1c" />
Verschlüsseln Sie den Text `BUCHSTABENSPIELE` mit dem Schlüssel `AKRONYM`. Wie lautet der Geheimtext?

<String id="7f132e02-6e16-49f9-b8e4-45f8d99d6710" solution="C?QG.MLCN--?PHMN" inputWidth="15em" />
:::

:::aufgabe[Aufgabe 3]
<TaskState id="d82362c3-0d3c-4b78-b329-cbe4d66b5497" />
Entschlüssen Sie den Geheimtext `XWVJZWEKK,XWVJIK` mit dem Schlüssel `VVXKZ`. Wie lautet der Klartext?

<String id="894e7364-c862-44f5-9a3a-7d15c7bea7aa" solution="NANA ASS ANANAS." inputWidth="15em" />
:::

### CBC-Modus
:::warning[Übungen von Hand lösen]
Lösen Sie diese Übungen **von Hand**! Sie dürfen einzig den [Pentacode Text-Editor](Pentacode#pentacode-text-editor) als Hilfsmittel verwenden.
:::

:::aufgabe[Aufgabe 1]
<TaskState id="f854d6bd-092a-46b3-9e70-9ba3e79fd4a6" />
Verschlüsseln Sie den Text `WINTER` mit dem Schlüssel `NY` und dem IV `AZ`. Wie lautet der Pentacode-Geheimtext?

<String id="3d6aafc5-96af-41ea-bfd5-87466b8e8f04" solution="XJXGSL" />

<Solution id="a8b43d9d-2022-4cac-a61c-a761ecbc1ad7">
**Block 1:**
- p: `10111 01001`
- IV: `00001 11010`
- nach XOR mit IV: `10110 10011`
- k: `01110 11001`
- c: `11000 01010`

**Block 2:**
- p: `01110 10100`
- IV: `11000 01010`
- nach XOR mit IV: `10110 11110`
- c: `11000 00111`

**Block 3:**
- p: `00101 10010`
- IV: `11000 00111`
- nach XOR mit IV: `11101 10101`
- c: `10011 01100`

**Resultat:**<br/>
`XJXGSL`
</Solution>
:::

::::aufgabe[Aufgabe 2]
<TaskState id="baa15ab5-cf91-4880-b84e-3ed46050b2a2" />
Entschlüsseln Sie den Text `NNHDFBA` mit dem Schlüssel `BE` und beliebigem IV.

Geben Sie Ihre Lösung hier ein und kontrollieren Sie anschliessend mit der Musterlösung.

<QuillV2 id="d96cb4fc-a20c-439b-91d9-3a570db36704" />

<Solution id="1270a4c9-8cad-42f1-93b3-b6b2eb5342e0">
**Block 1:**
- c: `01110 01110`
- k: `00010 00101`
- nach XOR mit Schlüssel: `01100 01011`
- IV: beliebig...
- p: abhängig von IV

**Block 2:**
- c: `01000 00100`
- nach XOR mit Schlüssel: `01010 00001`
- IV: `01110 01110`
- p: `00100 01111`

**Block 3:**
- c: `00110 00010`
- nach XOR mit Schlüssel: `00100 00111`
- IV: `01000 00100`
- p: `01100 00011`

**Block 4:**
- c: `00001`
- nach XOR mit Schlüssel: `00011`
- IV: `00110`
- p: `00101`

**Resultat:**<br/>
`??DOLCE` (die ersten beiden Zeichen sind unbekannt)
</Solution>
::::

### Vertiefungsaufgaben
:::aufgabe[ECB und CBC im Vergleich]
<TaskState id="2fc0dca8-356b-4a69-a20a-d91d3f70b6c9" />
Verschlüsseln Sie den Klartext `BORABORA` mit dem Schlüssel `RABE`. Verwenden Sie dazu die [XOR-Blockchiffre](Block-Chaining#xor-blockchiffre-ausprobieren), und zwar zuerst im **ECB-Modus** und dann im **CBC-Modus**. Verwenden Sie beim CBC-Modus der Vergleichbarkeit halber den Initialvektor `ABCD`.

Beantworten Sie anschliessend der Reihe nach die unten stehenden Fragen. Notieren Sie zuerst Ihre Antwort und klappen Sie anschliessend die Frage auf, um den Lösungsvorschlag anzusehen.

<details>
<summary>Frage 1: Hier passieren einige interessante Dinge. Was fällt Ihnen auf?</summary>
<div>
**Beobachtung 1:** Im ECB-Modus erhalten wir den Geheimtext `PNPDPNPD` - also zweimal hintereinander die Buchstabenfolge `PNPD`. Auch im Klartext `BORABORA` finden wir zweimal hintereinander die Buchstabenfolge `BORA`. Im CBC-Modus sehen wir diese Symmetrie nicht mehr.

**Beobachtung 2:** Dafür taucht beim CBC-Modus im zweiten Block plötzlich der Initialvektor wieder auf - und zwar egal, mit welchen Initialvektor wir es versuchen.
</div>
</details>
<QuillV2 id="64c07b9a-e591-45af-9ba9-d1a4a7faef7e" />

---

<details>
<summary>Frage 2: Wie erklären Sie sich die **Beobachtung 1** aus der Antwort zur ersten Frage?</summary>
<div>
Im ECB-Modus wird jeder Block mit den gleichen Schlüssel verschlüsselt. Wenn also zwei Klartextblöcke identisch sind, dann werden auch die resultierenden Geheimtextblöcke identisch sein. Da der Schlüssel `RABE` genau halb so lang ist wie der Klartext `BORABORA` verschlüsseln wir also zweimal den Klartextblock `BORA` mit dem Schlüssel `RABE` und erhalten somit zweimal den Geheimtextblock `PNPD`.

Beim CBC-Modus sehen wir dieses Verhalten nicht mehr, weil wir dort für jeden Block $n$ den Output des vorangehenden Blocks $n-1$ als zusätzlichen Input verwenden. Tatsächlich ist dies genau die Idee hinter diesem Verknüpfen von Blöcken.
</div>
</details>
<QuillV2 id="e1cc7c8b-3744-410e-9201-09ebd655d900" />

---

<details>
<summary>⭐️ Frage 3: Wie erklären Sie sich die **Beobachtung 2** aus der Antwort zur ersten Frage?</summary>
<div>
Für diese Erklärung verwenden wir für die XOR-Operation das mathematische Symbol $\oplus$. Der Leserlichkeit halber verzichten wir zudem darauf, den Text jeweils explizit ins Binärformat umzuwandeln. Tatsächlich ist die XOR-Funktion aber natürlich nicht für Buchstaben, sonder nur für Binärzahlen definiert!

Mithilfe der [Wahrheitstabelle für die XOR-Verschlüsselung](XOR) können Sie sich leicht davon überzeugen, dass folgende Gesetze gelten:

- $x \oplus x = 0$
- $x \oplus 0 = 0 \oplus x = x$

Wenn wir nun das Resultat für den ersten Block berechnen wollen, so nehmen wir zuerst den Klartextblock `BORA` und den Initialvektor `ABCD` und rechnen $\text{ BORA } \oplus \text{ ABCD }$. Diesen Input verschlüsseln wir mit der XOR-Verschlüsselung mit dem Schlüsse `RABE` und erhalten somit insgesamt

$$\text{ BORA } \oplus \text{ ABCD } \oplus \text{ RABE }$$

Für den zweiten Block verwenden wir diesen Output des ersten Blocks nun aber auch wieder als Input. Auch hier ist der Klartextblock wieder `BORA` und der Schlüssel wieder `RABE`. Also erhalten wir für den zweiten Block folgenden Geheimtext:

$$\text{ BORA } \oplus (\text{ BORA } \oplus \text{ ABCD } \oplus \text{ RABE }) \oplus \text{ RABE }$$

Wenn wir die Klammern entfernen (die dienen lediglich der Übersicht), so erhalten wir folgende Berechnung:

$$\text{ BORA } \oplus \text{ BORA } \oplus \text{ ABCD } \oplus \text{ RABE } \oplus \text{ RABE }$$

Weil aber $x \oplus x = 0$ gilt, können wir diese Berechnung wie folgt kürzen:

$$0 \oplus \text{ ABCD } \oplus 0$$

Und weil wir wissen, dass $x \oplus 0 = 0 \oplus x = x$ gilt, so ergibt sich:

$$0 \oplus \text{ ABCD } \oplus 0 = \text{ ABCD }$$

Dieses Phänomen tritt also nur deshalb auf, weil wir als Verschlüsselungsmechanismus die XOR-Verschlüsselung verwenden, die "zufällig" auch für die Verkettung verwendet wird. Bei echten Anwendungen von CBC verwenden wir andere, sicherere Verschlüsselungsmechanismen und werden diese Regelmässigkeit deshalb dort nicht antreffen.
</div>
</details>
<QuillV2 id="9ec49105-fdeb-43ed-8d27-151ea4109539" />
:::

:::aufgabe[CBC: Initialvektor bei der Entschlüsselung]
<TaskState id="ed330dac-0b39-4b82-a28f-f459bfb29b8d" />
Auf den ersten Blick erstaunlich ist die Tatsache, dass die **Ent**schlüsselung mit falschem Initialvektor (IV) nur dazu führt, dass der erste Klartext-Block unleserlich ist, während die restlichen Blöcke korrekt entschlüsselt werden. Weshalb ist das so?

Notieren Sie zuerst Ihre Antwort und vergleichen Sie anschliessend mit der Musterlösung.

<QuillV2 id="284f2ffd-b348-4470-8ffb-864362687ef3" />

<Solution id="cbec53de-1a5e-4e59-906d-dce1bb986f01">
Bei der **ver**schlüsselung verwenden wir den IV als zusätzlichen Input, wenn wir den ersten Block verschlüsseln. Da wir für jeden weiteren Block $n$ den Output des vorangehenden Blocks $n-1$ als zusätzlichen Input verwenden, zieht sich bei der Verschlüsselung jede Veränderung am IV durch die gesamte Kette hindurch.
<br/>
Bei der **ent**schlüsselung passiert alles in umgekehrter Reihenfolge. Den Klartext eines Blocks $n$ erhalten wir, indem wir den Geheimtext dieses Blocks zuerst mit dem Schlüssel entschlüsseln und das Resultat anschliessend mit dem **Geheimtext des vorangehenden Blocks** $n-1$ (und nicht etwa mit dem Resultat seiner Entschlüsselung) XOR-verrechnen. Der ursprünglich verwendete IV ist in den beiden Geheimtexten bei der Verschlüsselung "hineingerechnet" worden und wir müssen ihn in diesem Moment für die Entschlüsselung nicht kennen.
<br/>
Lediglich für den ersten Block haben wir keinen solchen vorangehenden Block $n-1$. Hier müssen wir den ursprünglich verwendeten IV kennen und anwenden. Wenn wir hier den falschen IV verwenden, dann wir der erste Block unleserlich - jedoch hat dies eben keinen Einfluss auf alle anderen Blocks.
</Solution>
:::

---
Loading

0 comments on commit f7b6fa0

Please # to comment.