Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:encryption2 [2024-04-25 06:32] – [Aufgabe 4B – Vigenère-Funktion erweitern] gragf_informatik:encryption2 [2024-06-06 11:38] (aktuell) gra
Zeile 1: Zeile 1:
 ====== Symmetrische Verschlüsselung ====== ====== Symmetrische Verschlüsselung ======
 +<nodisp 2>
 +++++HIDDEN – Verbesserungsvorschläge:
 +  * **Problem:** Schüler:innen kommen grösstenteils nicht von selbst auf Vigenere- oder XOR-Funktion: Trotz vieler Tipps und ausgehend von der zuvor sehr genau betrachteten Caesar-Funktion, scheinen die meisten nicht die geringste Ahnung zu haben, wie sie die Aufgabe angehen könnten. Auch eine vorgängige gemeinsame Besprechung und Zusammentragung der nötigen Änderungen gegenüber Ceasar half bei den meisten nur wenig. Sind die Tipps und anleitende Hilfestellungen eher verwirrend?
 +  * **Lösungen:**
 +    * Möglichst viele Übungsaufgaben vor und zwischen den Aufgaben einfügen: For-Schleifen üben, Veränderungen von Zeichenketten (mit eckigen Klammern) üben, evtl. eine Funktion für die zufällige monoalphabetische Sub. analog Caesar, zwei Zeichenketten parallell durchgehen üben etc. Sie müssen die nötigen Elemente sehr gut kennen.
 +    * Evtl. Lernziel ändern: Funktionen Vigenere, XOR und Caesar müssen am Ende nur //verstanden// werden. Selbst programmieren können müssen sie die Übungen, welche die einzelnen Teile dieser Funktionen vertiefen.
 +    * Das gemeinsam besprochene Vorgehen (erst Schritte in normaler Sprache (als Kommentare) notieren, dann diese in Code wandeln) muss ebenfalls früh geübt werden.
 +    * Möglichst viel auf einzelne Schüler:innen zugehen und ihnen dann helfen (getrauen sich oft nicht, zu fragen). 
 +++++
 +</nodisp>
 +
 ===== Übersicht ===== ===== Übersicht =====
 Das Ver- und Entschlüsseln von Nachrichten wird schon seit der Antike betrieben. Das Ver- und Entschlüsseln von Nachrichten wird schon seit der Antike betrieben.
Zeile 10: Zeile 21:
   * die **Vigenère-Chiffre** als Beispiel einer //polyalphabetischen Substitution//.   * die **Vigenère-Chiffre** als Beispiel einer //polyalphabetischen Substitution//.
   * Ausserdem betrachten wir die **XOR-Verschlüsselung** als Beispiel einer modernen symmetrischen Verschlüsselung. Modern ist sie insofern, als sie mit Einsen und Nullen operiert und damit auf sämtliche Daten in digitaler Form anwendbar ist.   * Ausserdem betrachten wir die **XOR-Verschlüsselung** als Beispiel einer modernen symmetrischen Verschlüsselung. Modern ist sie insofern, als sie mit Einsen und Nullen operiert und damit auf sämtliche Daten in digitaler Form anwendbar ist.
 +
 +\\
  
 ===== Begriffe ===== ===== Begriffe =====
Zeile 24: Zeile 37:
     * Der Schlüsselraum für die Caesar-Verschlüsselung ist 25, also knapp 5 Bit.     * Der Schlüsselraum für die Caesar-Verschlüsselung ist 25, also knapp 5 Bit.
   * <color #00a2e8>Geheimalphabet</color> – Ordnet die Klartextbuchstaben den Geheimtextbuchstaben zu – gibt es so nur bei der monoalphabetischen Substitution   * <color #00a2e8>Geheimalphabet</color> – Ordnet die Klartextbuchstaben den Geheimtextbuchstaben zu – gibt es so nur bei der monoalphabetischen Substitution
 +
 +\\
 ===== Caesar-Verschlüsselung (monoalphabetische Substitution) ===== ===== Caesar-Verschlüsselung (monoalphabetische Substitution) =====
 Die Caesar-Verschlüsselung ist eine sehr einfache Form der **monoalphabetischen Substitution**. Bei der Substitution werden Buchstaben durch andere Buchstaben **ersetzt** (lat. //substituere// = "ersetzen"). Monoalphabetisch ist sie deshalb, weil sie nur ein (mono) //Geheim-Alphabet// benutzt. Bei der Caesar-Verschlüsselung ergibt sich das Geheimalphabet durch Verschiebung. Ist der Schlüssel 3, so wird jeder Buschstabe um 3 Stellen verschoben: Was im Geheim-Alphabet ein D ist, ist im richtigen Alphabet ein A usw.: Die Caesar-Verschlüsselung ist eine sehr einfache Form der **monoalphabetischen Substitution**. Bei der Substitution werden Buchstaben durch andere Buchstaben **ersetzt** (lat. //substituere// = "ersetzen"). Monoalphabetisch ist sie deshalb, weil sie nur ein (mono) //Geheim-Alphabet// benutzt. Bei der Caesar-Verschlüsselung ergibt sich das Geheimalphabet durch Verschiebung. Ist der Schlüssel 3, so wird jeder Buschstabe um 3 Stellen verschoben: Was im Geheim-Alphabet ein D ist, ist im richtigen Alphabet ein A usw.:
Zeile 31: Zeile 46:
 Der Name der Caesar-Verschlüsselung geht auf den römischen Feldherrn Gaius Julius Caesar zurück, der diese Methode zur Verschlüsselung vertaulicher Botschaften benutzte. Sicher ist die Methode heute keineswegs: Am Geheimtext lässt sich anhand von Mustern leicht erkennen, dass es sich um ein Substitutions-Verfahren mit Verschiebung des Alphabets handelt. Und es sind nur 25 verschiedene Schlüssel (Verschiebewerte) möglich. So geht es sehr schnell, diese durchzuprobieren und auf den richtigen Schlüssel zu kommen. Der Name der Caesar-Verschlüsselung geht auf den römischen Feldherrn Gaius Julius Caesar zurück, der diese Methode zur Verschlüsselung vertaulicher Botschaften benutzte. Sicher ist die Methode heute keineswegs: Am Geheimtext lässt sich anhand von Mustern leicht erkennen, dass es sich um ein Substitutions-Verfahren mit Verschiebung des Alphabets handelt. Und es sind nur 25 verschiedene Schlüssel (Verschiebewerte) möglich. So geht es sehr schnell, diese durchzuprobieren und auf den richtigen Schlüssel zu kommen.
  
 +\\
 ==== Caesar-Verschlüsselung mit python programmieren ==== ==== Caesar-Verschlüsselung mit python programmieren ====
 Programmiere einen Verschlüsselsungs-Algorithmus mit python!  Programmiere einen Verschlüsselsungs-Algorithmus mit python! 
Zeile 106: Zeile 122:
   - Verbessere das Programm so, dass Leerschläge nicht verschoben werden, sodass das Chiffrat an den gleichen Stellen Leerschläge enthält wie der Klartext. Dein Programm soll erst den Klartext, dann das Chiffrat ausgeben.   - Verbessere das Programm so, dass Leerschläge nicht verschoben werden, sodass das Chiffrat an den gleichen Stellen Leerschläge enthält wie der Klartext. Dein Programm soll erst den Klartext, dann das Chiffrat ausgeben.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python caesar_01.py> <code python caesar_01.py>
Zeile 136: Zeile 152:
   - Nutze die Funktion caesar(), um aus dem Chifrat wieder den Klartext zu generieren. Ergänze dein Programm, sodass es auch noch den dechiffrierten Klartext ausgibt.   - Nutze die Funktion caesar(), um aus dem Chifrat wieder den Klartext zu generieren. Ergänze dein Programm, sodass es auch noch den dechiffrierten Klartext ausgibt.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python> <code python>
Zeile 186: Zeile 202:
 Du kannst diese Entschlüsselungsmethode [[https://studio.code.org/s/frequency_analysis/lessons/1/levels/1|hier]] ausprobieren: Du kannst diese Entschlüsselungsmethode [[https://studio.code.org/s/frequency_analysis/lessons/1/levels/1|hier]] ausprobieren:
   * Wähle oben links unter Message ''Sample Message (easy)'' für die Caesar-Substitution und ''Sample Message (hard)'' für die zufällige monoalphabetishe Substitution. Bei letzterer kannst du die Buchstaben erst nach Häufigkeit ordnen und dann einzeln herumschieben.   * Wähle oben links unter Message ''Sample Message (easy)'' für die Caesar-Substitution und ''Sample Message (hard)'' für die zufällige monoalphabetishe Substitution. Bei letzterer kannst du die Buchstaben erst nach Häufigkeit ordnen und dann einzeln herumschieben.
 +
 +\\
 +
 ===== Vigenère-Verschlüsselung (polyalphabetische Substitution) ===== ===== Vigenère-Verschlüsselung (polyalphabetische Substitution) =====
 Die Vigenère-Chiffre funktioniert ähnlich wie die Caesar-Verschlüsselung; es wird aber nicht jeder Buchstabe um eine feste Anzahl Stellen verschoben. Der Verschiebungswert ändert sich fortlaufend, abhängig von einem Schlüsselwort. Anders als bei der monoalphabetischen Subsitution wird hier also nicht jedem Klartext-Buchstaben ein Geheimtext-Buchstabe zugeordnet. Stattdessen hängt der Geheimtext-Buchstabe von der Kombination aus Schlüsselwort- und Klartextbuchstabe ab. Dadurch entsteht nicht //ein// Geheimalphabet, sondern mehrere: Je nach Kombination, können für den Klartext-Buchstaben 'A' verschiedene Geheimtextbuchstaben entstehen. Die Vigenère-Chiffre funktioniert ähnlich wie die Caesar-Verschlüsselung; es wird aber nicht jeder Buchstabe um eine feste Anzahl Stellen verschoben. Der Verschiebungswert ändert sich fortlaufend, abhängig von einem Schlüsselwort. Anders als bei der monoalphabetischen Subsitution wird hier also nicht jedem Klartext-Buchstaben ein Geheimtext-Buchstabe zugeordnet. Stattdessen hängt der Geheimtext-Buchstabe von der Kombination aus Schlüsselwort- und Klartextbuchstabe ab. Dadurch entsteht nicht //ein// Geheimalphabet, sondern mehrere: Je nach Kombination, können für den Klartext-Buchstaben 'A' verschiedene Geheimtextbuchstaben entstehen.
Zeile 211: Zeile 230:
  
 **Auch das Vigenère-Verfahren (mit wiederholt verwendeten Schlüsselwörtern) gilt angesichts heutiger Entschlüsselungsmethoden als unsicher**. **Auch das Vigenère-Verfahren (mit wiederholt verwendeten Schlüsselwörtern) gilt angesichts heutiger Entschlüsselungsmethoden als unsicher**.
 +\\
 +
 \\ \\
  
Zeile 224: Zeile 245:
   - Welche Änderungen bzw. Ergänzungen musst du an der Caesar-Funktion vornehmen, damit sie zur Vigenere-Funktion wird und obige Anforderungen erfüllt? Notiere deine Ideen als Kommentare im Code.   - Welche Änderungen bzw. Ergänzungen musst du an der Caesar-Funktion vornehmen, damit sie zur Vigenere-Funktion wird und obige Anforderungen erfüllt? Notiere deine Ideen als Kommentare im Code.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
   - Der Name der Funktion und die Namen der Argumente ändern sich.   - Der Name der Funktion und die Namen der Argumente ändern sich.
Zeile 243: Zeile 264:
 ++++ ++++
  
-++++Test:|+++++Testcode:|
 Teste die Vigenere-Funktion mit folgendem Code: Teste die Vigenere-Funktion mit folgendem Code:
  
Zeile 258: Zeile 279:
 ++++ ++++
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python> <code python>
Zeile 285: Zeile 306:
   * Hierzu könnte ''encrypt'' einfach als Faktor verwendet werden, dann bräuchte es keine if-Abfrage.   * Hierzu könnte ''encrypt'' einfach als Faktor verwendet werden, dann bräuchte es keine if-Abfrage.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python> <code python>
Zeile 403: Zeile 424:
 \\ \\
 === Aufgabe 7 – XOR-Verschlüsselung in python programmieren === === Aufgabe 7 – XOR-Verschlüsselung in python programmieren ===
-Schreibe eine Funktion ''cryptXOR(plainTextkeyWord)'': +Schreibe eine Funktion ''crypt\_xor(message\_inkey\_word)'': 
-  * Der Funktion übergibt man die Nachricht (Klartext) und das Schlüsselwort.+  * Der Funktion übergibt man die Nachricht und das Schlüsselwort.
   * Die Funktion gibt den ver- bzw. entschlüsselten Text zurück.   * Die Funktion gibt den ver- bzw. entschlüsselten Text zurück.
   * Auch Satzzeichen und Leerschläge werden verschlüsselt.   * Auch Satzzeichen und Leerschläge werden verschlüsselt.
Zeile 413: Zeile 434:
   * Der XOR-Operator in python ist ein ''^'' (auf deiner Tastatur rechts neben dem Fragezeichen):   * Der XOR-Operator in python ist ein ''^'' (auf deiner Tastatur rechts neben dem Fragezeichen):
  
 +<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 **Ausführliche Version:** **Ausführliche Version:**
 <code python> <code python>
-def cryptXOR(plainTextkeyWord): +def crypt_xor(message_inkey_word): 
-    kCount 0 +    message_out "" 
-    cipherText "" +    key_count 0 
-    for letter in plainText+    for letter in message_in
-        asciiClear = ord(letter) # ASCII-Code vom Klartextbuchstaben ermitteln  +        code_message_in = ord(letter) 
-        asciiKey = ord(keyWord[kCount]) # ASCII-Code vom Schlüsselwort-Buchstaben ermitteln +        code_key = ord(key_word[key_count]) 
-        asciiResult asciiClear asciiKey # Beide Codes verXORen +        code_message_out code_message_in code_key 
-        letter = chr(asciiResult# Zeichen zu diesem neuen ASCII-Code ermitteln +        letter = chr(code_message_out
-        kCount = (kCount + 1) % len(keyWord) +        message_out = message_out + letter 
-        cipherText = cipherText + letter +        key_count = (key_count + 1) % len(key_word
-    return cipherText+    return message_out
 </code> </code>
  
 **Kompakte Version:** **Kompakte Version:**
 <code python> <code python>
-def cryptXOR(plainTextkeyWord): +def crypt_xor(message_inkey_word): 
-    kCount 0 +    message_out "" 
-    cipherText "" +    key_count 0 
-    for letter in plainText+    for letter in message_in
-        letter = chr(ord(letter) ^ ord(keyWord[kCount])) +        letter = chr(ord(letter) ^ ord(key_word[key_count])) 
-        kCount = (kCount + 1) % len(keyWord) +        message_out = message_out + letter 
-        cipherText = cipherText + letter +        key_count = (key_count + 1) % len(key_word
-    return cipherText+    return message_out
 </code> </code>
 ++++ ++++
 +</nodisp>
 \\ \\
 === Aufgabe 8 – Funktion cryptXOR testen === === Aufgabe 8 – Funktion cryptXOR testen ===
Zeile 448: Zeile 470:
 <code python> <code python>
 key = "WOLF" key = "WOLF"
-cipher = cryptXOR("Nur ein garstiges Aschenputtel ist noch da. Das sitzt unten in der Asche, dem kann der Pantoffel nicht passen!", key)+cipher = crypt_xor("Nur ein garstiges Aschenputtel ist noch da. Das sitzt unten in der Asche, dem kann der Pantoffel nicht passen!", key)
 print(cipher) print(cipher)
-print(cryptXOR(cipher, key))+print(crypt_xor(cipher, key))
 </code> </code>
  
  • gf_informatik/encryption2.1714026734.txt.gz
  • Zuletzt geändert: 2024-04-25 06:32
  • von gra