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:daten_sca:verschluesselung [2024-05-06 08:33] – [Aufgabe D1] scagf_informatik:daten_sca:verschluesselung [2024-06-08 11:22] (aktuell) sca
Zeile 2: Zeile 2:
  
 ++++Lernziele| ++++Lernziele|
 +
 +<nodisp 2>
 +TO ADD nach Prüfung 2024:
 +
 +   * alle Logikoperatoren
 +
 +</nodisp>
  
 Prüfungsrelevant ist alles, was in den Lektionen und Übungen behandelt wurde. Die Lernziele unten dienen als Gradmesser und sind nicht unbedingt komplett. Prüfungsrelevant ist alles, was in den Lektionen und Übungen behandelt wurde. Die Lernziele unten dienen als Gradmesser und sind nicht unbedingt komplett.
Zeile 623: Zeile 630:
  
 Theorie zu Zeichencodierung, ASCII & Unicode: Theorie zu Zeichencodierung, ASCII & Unicode:
- 
-Siehe Slides {{ :gf_informatik:umgang_inet_sca:2022_umgang_inet_04_verschluesselung.pdf |}} 
  
 ==== Aufgaben D ==== ==== Aufgaben D ====
Zeile 754: Zeile 759:
 === Aufgabe E1 === === Aufgabe E1 ===
  
-   1. Verschlüssle den Binärcode `01101000 01100001 01101100` mit diesem Schlüssel `01010011 01110101 01100111` von Hand.+Berechne *von Hand*, gib Resultate im gleichen Zahlenformat an wie die Zahlen in der Aufgabenstellung: 
 +   - $1011_2 \,^\wedge\, 1110_2=$ 
 +   - $101010_2 \,^\wedge\, 100110_2=$ 
 +   - $11 \,^\wedge\, 9=$ 
 +   - $27 \,^\wedge\, 21=$ 
 +   - $132 \,^\wedge\, 15=$ 
 + 
 +=== Aufgabe E2 === 
 + 
 +Löse nun die Aufgaben von E1 mithilfe von Python. 
 + 
 +Tipps: 
 +   * XOR Operator in Python ist `^` 
 +   * Binärzahl -> Dezimalzahl: `int("1010",2)` 
 +   * Dezimalzahl -> Binärzahl: `bin(42)` 
 +   * Wandelt man Zahl in Binärzahl um mit `bin()`, so hat der Binärstring die Form `'0b101010'`. Das `'0b'` vom String `s` entfernt man mit `s = s[2:]`, siehe auch Bsp. unten: 
 + 
 +<code python> 
 +s = bin(42) 
 +print(s) # -> '0b101010' 
 +s = s[2:] 
 +print(s) # -> '101010' 
 +</code> 
 + 
 +=== Aufgabe E3 === 
 + 
 +   1. Verschlüssle den Binärcode `01101000 01100001 01101100` mit XOR mit dem Schlüssel `01010011 01110101 01100111` *von Hand*.
    1. Schreibe nun einen Code der dieses macht. Falls du Hilfe brauchst, siehe Tipps unten.    1. Schreibe nun einen Code der dieses macht. Falls du Hilfe brauchst, siehe Tipps unten.
  
Zeile 760: Zeile 791:
 ++++Tipps| ++++Tipps|
  
-   1. Entferne die Leerschläge in einem String `s` mit `s = s.replace(' ','')` 
    1. Erstelle einen leeren String, dem du Stelle um Stelle die verschlüsselte Nachricht hinzufügst.    1. Erstelle einen leeren String, dem du Stelle um Stelle die verschlüsselte Nachricht hinzufügst.
-    1. Gehe die Positionen des Binärcodes durch. An jeder Stelle bestimmst du den XOR-Wert mit der zugehörigen Ziffer im Schlüssel. Füge das Resultat dem String für die verschlüsselte Nachricht hinzu.+   1. Gehe die Positionen des Binärcodes durch. An jeder Stelle bestimmst du den XOR-Wert mit der zugehörigen Ziffer im Schlüssel. Füge das Resultat dem String für die verschlüsselte Nachricht hinzu
 +   1. Achtung: Die Leerschläge sollen natürlich *nicht* verschlüsselt werden. Am einfachsten überprüft man zuerst, ob das Zeichen an der aktuellen Position ein Leerschlag ist oder nicht. Falls ja, wird einfach wieder ein Leerschlag eingefügt, falls nicht, wird das Zeichen verschlüsselt.
  
 ++++ ++++
  
  
-=== Aufgabe E2 ===+=== Aufgabe E4 ===
  
 Ziel dieser Aufgabe ist, deinen Code aus der letzten Aufgabe zu verallgemeinern und eine Funktion für die XOR-Verschlüsselung zu schreiben. Ziel dieser Aufgabe ist, deinen Code aus der letzten Aufgabe zu verallgemeinern und eine Funktion für die XOR-Verschlüsselung zu schreiben.
Zeile 780: Zeile 811:
 ++++ ++++
  
-=== Aufgabe E3 (optional) ===+=== Aufgabe E5 (optional) ===
  
    1. Schreibe eine Funktion `encryption_xor(plaintext,key)`, die einen Klartext `plaintext` mit dem Schlüssel `key` mit XOR verschlüsselt. Die Funktion gibt den verschlüsselten Text als Binärstring zurück.    1. Schreibe eine Funktion `encryption_xor(plaintext,key)`, die einen Klartext `plaintext` mit dem Schlüssel `key` mit XOR verschlüsselt. Die Funktion gibt den verschlüsselten Text als Binärstring zurück.
Zeile 804: Zeile 835:
    * Beachte weiter, dass die resultierende Binärzahl 7 oder 8 Bits haben kann, was zu Problemen führen kann. Tipp: Stelle sicher, dass jede Binärzahl 8 Bits hat. Hänge also wenn nötig noch Nullen an.    * Beachte weiter, dass die resultierende Binärzahl 7 oder 8 Bits haben kann, was zu Problemen führen kann. Tipp: Stelle sicher, dass jede Binärzahl 8 Bits hat. Hänge also wenn nötig noch Nullen an.
  
-=== Aufgabe E4 (optional) ===+=== Aufgabe E6 (optional) ===
  
 Entschlüssle das folgende Bild mit einem *eigenen Code*. Der verwendete Schlüsselt findest du unten. Entschlüssle das folgende Bild mit einem *eigenen Code*. Der verwendete Schlüsselt findest du unten.
Zeile 827: Zeile 858:
  
 ++++ ++++
 +
 +
  
 ===== - Advanced Encryption System (AES) ===== ===== - Advanced Encryption System (AES) =====
Zeile 883: Zeile 916:
 01010010 01001111 01001101 01000001 01001110 01010011 01001000 01001111 01010010 01001110  01010010 01001111 01001101 01000001 01001110 01010011 01001000 01001111 01010010 01001110 
 </code> </code>
-Anstelle betrachtet man gerne die zugehörigen Darstellung im **Hexadezimalsystem** (Zahlensystem mit Basis $16$, Nennwerte $0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f"), denn eine Umrechnung zwischen den beiden ist sehr einfach:+Anstelle betrachtet man gerne die zugehörigen Darstellung im **Hexadezimalsystem** (Zahlensystem mit Basis $16$, Nennwerte $0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f$), denn eine Umrechnung zwischen den beiden ist sehr einfach:
  
 Betrachten wir dazu das zweite Byte von oben: `01001111`. Die ersten vier Bits `0100` stehen für die Dezimalzahl $4$, was im Hexadezimalsystem ebenfalls $4$ ist. Die zweiten vier Bits `1111` stehen für $15$, im Hexadezimalsystem ist das `F`. Somit gilt: $$01001111_2 = 4F_{16}$$ Betrachten wir dazu das zweite Byte von oben: `01001111`. Die ersten vier Bits `0100` stehen für die Dezimalzahl $4$, was im Hexadezimalsystem ebenfalls $4$ ist. Die zweiten vier Bits `1111` stehen für $15$, im Hexadezimalsystem ist das `F`. Somit gilt: $$01001111_2 = 4F_{16}$$
Zeile 900: Zeile 933:
  
 === Aufgabe F4 === === Aufgabe F4 ===
 +
 +Ziele: Mit dem Online-Tool [[https://cryptii.com/pipes/aes-encryption]] kann man Nachrichten mit AES verschlüsseln und entschlüsseln. Dazu benötigt man aber einen geheimen 128 bit Schlüssel (Key) und einen 128 bit Initialization Vector (IV), die man mit der Person teilt, mit der man kommunizieren will. In dieser Aufgabe soll ein einfacher Code erstellt werden, mit der man solche Keys/IVs generieren kann.
  
    1. Schreibe einen Code (einfach!), der dir einen 16 Byte (128 Bit) langen Zufallsstring mit Hexadezimalzahlen erstellt in der Form `e9 50 33 f9 99 81 a1 b8 6c 47 82 3d 84 59 9a bc`. Tipp: Mit `hex(132)[2:]` wandelst du eine Dezimalzahl ins Hexadezimalsystem um und entfernst den Präfix.    1. Schreibe einen Code (einfach!), der dir einen 16 Byte (128 Bit) langen Zufallsstring mit Hexadezimalzahlen erstellt in der Form `e9 50 33 f9 99 81 a1 b8 6c 47 82 3d 84 59 9a bc`. Tipp: Mit `hex(132)[2:]` wandelst du eine Dezimalzahl ins Hexadezimalsystem um und entfernst den Präfix.
Zeile 1312: Zeile 1347:
  
 ++++Lösungen E| ++++Lösungen E|
 +
  
 ==== Aufgabe E1 ==== ==== Aufgabe E1 ====
  
-`00111011 00010100 00001011`+Lösungen: 
 +   - $101_2$ 
 +   - $1100_2$ 
 +   - $2$ 
 +   - $14$ 
 +   - $139$
  
 ==== Aufgabe E2 ==== ==== Aufgabe E2 ====
 +
 +siehe E1
 +
 +==== Aufgabe E3 ====
 +
 +`00111011 00010100 00001011`
 +
 +==== Aufgabe E4 ====
  
 <code python> <code python>
Zeile 1348: Zeile 1397:
 </code> </code>
  
-=== Aufgabe E3 ===+=== Aufgabe E5 ===
  
 <code python> <code python>
  • gf_informatik/daten_sca/verschluesselung.1714984421.txt.gz
  • Zuletzt geändert: 2024-05-06 08:33
  • von sca