Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:verschluesselung:symmetrisch [2025-04-01 06:21] – hof | gf_informatik:verschluesselung:symmetrisch [2025-04-01 11:46] (aktuell) – [Vorgehen] hof | ||
|---|---|---|---|
| Zeile 27: | Zeile 27: | ||
| * Statistische Methoden könnten die Entschlüsselung ermöglichen, | * Statistische Methoden könnten die Entschlüsselung ermöglichen, | ||
| * Wiederkehrende Wörter, insbesondere am Anfang der Nachricht, fallen schnell auf. | * Wiederkehrende Wörter, insbesondere am Anfang der Nachricht, fallen schnell auf. | ||
| - | * Die Enigma konnte im zweiten Weltkrieg auch deshalb geknackt werden, weil einige Wörter immer wieder auftauchten, | + | * Die [[wpde> |
| * Ein Angreifer könnte einen verschlüsselten Block in eine Nachricht einfügen, ohne den genauen Klartext zu kennen. Damit könnte er die Nachricht verfälschen. | * Ein Angreifer könnte einen verschlüsselten Block in eine Nachricht einfügen, ohne den genauen Klartext zu kennen. Damit könnte er die Nachricht verfälschen. | ||
| * Fällt dir ein Beispiel ein, wie dies ausgenützt werden könnte? | * Fällt dir ein Beispiel ein, wie dies ausgenützt werden könnte? | ||
| Zeile 158: | Zeile 158: | ||
| ### Verkettung ausprobieren | ### Verkettung ausprobieren | ||
| - | Du benötigst ein Bild, z.B. {{: | + | Wende eine einfache Block-Verschlüsselung im ECB bzw. CBC-Modus an, und dokumentieren den Effekt in einem Dokument (OneNote, Word, Latex...). |
| + | * Wie sieht das verschlüsselte Bild aus? | ||
| + | * Was passiert mit anderen (längeren) Schlüsseln? | ||
| + | * Warum ist ein Schlüssel nur aus Grossbuchstaben ungünstig? | ||
| - | Zudem den folgenden Code. Damit der läuft, muss opencv mit dem Befehl `pip install opencv-python` installiert werden. | + | #### Vorgehen |
| - | Ändere den Code, um den Effekt von verschiedenen Schlüssellängen und von _Chaining_ auf das Chiffrat auszuprobieren! | + | Du benötigst ein Bild, z.B. {{: |
| + | |||
| + | Speichere den folgenden Code in VS Code. Der Code verwendet die OpenCV-Bibliothek zur Bildverarbeitung. Sie muss einmalig im Terminal mit `python -m pip install opencv-python` installiert werden. | ||
| + | |||
| + | * Führe den Code aus - was zeigt das Bild? | ||
| + | * Ändere den Code, um den Effekt von verschiedenen Schlüssellängen und von _Chaining_ auf das Chiffrat auszuprobieren! | ||
| + | * Dokumentiere die Resultate in OneNote / Word / Latex / Jupyter. | ||
| <code python block_coder.py> | <code python block_coder.py> | ||
| Zeile 168: | Zeile 177: | ||
| import numpy as np | import numpy as np | ||
| import math | import math | ||
| + | import random | ||
| def text_to_bytes(text): | def text_to_bytes(text): | ||
| Zeile 207: | Zeile 217: | ||
| return xor(two, one) | return xor(two, one) | ||
| - | def encrypt(plain_bytes, | + | def encrypt(plain_bytes, |
| - | | + | |
| - | iv = text_to_bytes(initialization_vector) | + | iv = random.randbytes(block_size) |
| # ensure our key material is divisible by block_size | # ensure our key material is divisible by block_size | ||
| Zeile 256: | Zeile 266: | ||
| return as_np | return as_np | ||
| - | # Play with different keys | + | # Play with different keys: |
| - | key = " | + | #key = " |
| key = " | key = " | ||
| key_bytes = binary_to_bytes(key) | key_bytes = binary_to_bytes(key) | ||
| - | key_bytes = text_to_bytes(" | + | #key_bytes = text_to_bytes(" |
| key_bytes = text_to_bytes(" | key_bytes = text_to_bytes(" | ||
| - | # Change between ECB and CBC modes | + | # Change between ECB and CBC modes: |
| chaining = False # False: ECB, True: CBC | chaining = False # False: ECB, True: CBC | ||
| - | img = cv.imread(' | + | img = cv.imread(' |
| img_bytes = img.tobytes() | img_bytes = img.tobytes() | ||
| img_encrypted = encrypt(img_bytes, | img_encrypted = encrypt(img_bytes, | ||
| - | # We drop the first block as it only used as initialization vector. | + | # We drop the first block as it' |
| cv.imshow(" | cv.imshow(" | ||
| - | img_decrypted = decrypt(img_encrypted, | ||
| cv.waitKey() | cv.waitKey() | ||
| # Test if decryption works | # Test if decryption works | ||
| + | # img_decrypted = decrypt(img_encrypted, | ||
| # cv.imshow(" | # cv.imshow(" | ||
| # cv.waitKey() | # cv.waitKey() | ||