Bash IT-Security: Verschlüsselung

Das klare Verständnis über die Grundidee und den Ablauf unseres yourschool-Formates ist notwendige Voraussetzung zur Durchführung der Kurse. Bitte hole das jetzt nach, falls bei dir noch Fragen zur Grundidee aufkommen.

Bash IT-Security: Verschlüsselung

Kennenlernen

~5 Minuten

Vorstellungsrunde mit Programmiererfahrung/Motivation

Ihr stellt euch vor und erzählt, wie ihr zur Hacker School und zum Coden gekommen seid.
Nun die Teilnehmer:

  • Wie heißt Du? (Achtet darauf, dass die Kinder sich nur mit Vornamen vorstellen – Datenschutz.)
  • Warum bist Du hier?
  • Hast Du schon mal programmiert?
  • Was willst Du lernen?
Vorstellung interaktiver gestalten? (!Klick mich an!)

In unserem Inspirer Handbuch findet ihr
weitere Spielideen.
Wenn Du ONLINE diese Vorstellung etwas interaktiver gestalten möchtest, empfehlen wir das Spiel “Alle, die”, was im folgenden erklärt wird:

Spielidee und Ziel

Alle Schüler*innen machen ihre Kamera an und kommen locker und leicht ins Gespräch mit den jeweiligen Inspirer.
Außerdem: Erste Diagnose, was die Schüler*innen können.

Ablauf

  1. Fordere die Schüler*innen auf die Kamera anzumachen und checke, ob alle Kameras funktionieren
  2. Fordere die Schüler*innen auf die Kamera mit dem Finger zu verdecken oder sie aus zu machen
  3. Stelle eine “Alle, die”-Frage (z.B: “Alle, die schon einmal programmiert haben?” oder “Alle, die Sport in der Freizeit machen?”)
  4. Alle, die sich angesprochen fühlen, nehmen ihren Finger von der Kamera oder machen die Kamera an
  5. Stelle kurze Rückfragen und komme ins Gespräch
  6. Stelle eine zweite Frage
  7. Stelle kurze Rückfragen und komme ins Gespräch
  8. usw.

Nutze den Chat, wenn die Kameras deaktiviert sind. Viele Schüler*innen kennen das aus dem Gamingbereich.
Zum Beispiel folgendermaßen:

  • “Tippt in den Chat: 1 = Zustimmung , 2 = Ablehnung”

Wenn du den Chat nicht nutzen möchtest, kannst du auch die Reaktionen in Zoom verwenden (z.B. Daumen hoch Emoji für alle, die die Kamera deaktiviert haben.)

Sammlung von möglichen Fragen (!Klick mich an!)

Diese Sammlung ist frei erweiterbar

IT/Programmieren

  • Wer hat schon mal programmiert?
  • Wer kann sich vorstellen etwas mit Programmieren und IT zu machen?

Hobbies

  • Wer von Euch macht Sport in der Freizeit?
  • Wer spielt ein Instrument?
  • Wer spielt Computerspiele?
  • Wer spielt Handyspiele?

Lustiges

  • Wer hat eine Schuhgröße größer als 35?

Programmieren

Zeit: ~ 3h + 30 min Pause
Ort: Kleingruppe
Verantwortlich: Inspirer

Gebt den Teilnehmenden eine kleine Motivation dafür, was ab jetzt passieren wird. Sie werden nachher wissen, was eine Shell ist, und wie sie man sie (grob) bedienen kann. Genauer werden sie:

  • Das Dateisystem eines Computers kennenlernen.
  • Die wichtigsten Shell-Commands kennenlernen.
  • Etwas über sehr grundlegende Verschlüsselungen erfahren.
  • Ihre eigenen kleinen Shell-Skripte schreiben.

Hallo, Shell!

Beantwortet und erläutert die absoluten Basics:

  • Wie ist ein Dateisystem auf einem Computer organisiert?
  • Wie 'bewege' ich mich darin?
  • Wie gebe ich Dinge auf der Kommandozeile aus?

Lernziele

Die Antworten auf oben genannte Fragen :)
(Geht also mindestens auf die unten genannten Commands ein.)

Code

λ ls
λ ls -l
λ cd
λ pwd
λ echo "Hallo, Shell!"

Veränderung des Dateisystems

Wie erstelle ich einen Ordner, eine Datei auf der Command Line?
Wie kopiere, verschiebe und lösche ich sie?

Lernziel(e)

  • All das oben genannte können – also von mkdir, touch, cp, mv und rm die Basics beherrschen.

Code

λ mkdir <foldername>
λ touch <file1> <file2> <file3> <file4> ...
λ cp <file/folder> <file/folder>
λ cp <file/folder> <file/folder>
λ mv <file/folder> <file/folder>
λ rm <file>
λ rm -rf <folder>

Aufgabe

Um das oben gelernte zu testen, sollen die Teilnehmenden folgende Aufgaben ausführen:

  1. einen neuen Ordner in ihrer Repl erstellen
  2. im Ordner eine neue Datei erstellen
  3. diese gerade erstellte Datei zweifach kopieren
  4. eine der beiden Versionen aus dem Ordner heraus bewegen (also eine Ebene nach oben)
  5. Die gerade aus dem Ordner heraus bewegte Datei löschen
  6. eine der beiden Dateien im Ordner umbenennen
  7. und, zu guter Letzt, den gesamten Ordner mit Inhalt löschen.

Am Ende dessen sollte der Ausgangszustand wiederhergestellt sein – stellt sicher, dass das der Fall ist :)

Unser erstes Skript

Wie kann man automatisiert Dinge aus der Kommandozeile ausführen?
-> Mit Skripten. Und darum kümmern wir uns jetzt.
Erstellt unten stehendes Skript als (neue Datei) hello.sh.
Versucht, es mit ./hello.sh auszuführen.
Geht, da das nicht funktionieren wird, auf chmod und dessen Bedeutung ein – dafür braucht ihr auch wieder ls -l.

Lernziel(e)

  • Erstellen von bash-Skripten (z.B. wieso #!/usr/bin/bash)?
  • Ausführen von Dateien: ./<filename>
  • Berechtigungen und ls -l
  • chmod, Berechtigungen und seine Benutzung.

Code

hello.sh:

1
echo "Hello World"

λ touch hello.sh
λ ./hello.sh
bash: ./hello.sh: Permission denied
λ ls -l
λ chmod 744 hello.sh
λ ./hello.sh
Hello World

Dateien in der Command Line

Wir können Dateien auch in der Command Line selbst anzeigen und bearbeiten.
Das geht mit cat (anzeigen) und nano (bearbeiten).
Fürs Bearbeiten kommen natürlich auch vi, vim und emacs infrage, aber darauf gehen wir hier nicht weiter ein – es sei denn, es gibt Nachfragen in dieser Richtung.

λ cat hello.sh
echo "Hello World"
λ nano hello.sh
# ein nano-Fenster öffnet sich – dort kann man die Datei bearbeiten.

Zeit für eine Pause!

Verschlüsselungen: Anfänge

Soo, dann geht es jetzt ab zum zweiten Teil dieses Kurses: Verschlüsselungen.

Es war schon immer wichtig, Informationen irgendwie geheim übermitteln zu können. Eine der ersten dieser Methoden war die sogenannte Caesar-Verschlüsselung. Bei ihr wird der zu verschlüsselnde Text 'innerhalb des Alphabets verschoben'. Am leichtesten versteht man es an einem Beispiel:
Hallo -> Ibmmp (Bei einer Verschiebung um 1.)
Es wird also in der verschlüsselten Nachricht (bei einer Verschiebung um einen Buchstaben) statt einem A ein B, statt einem B ein C usw. abgebildet. Die Entschlüsselung ist damit auch relativ einfach möglich – man dreht den Prozess um, 'ver'schlüsselt also die erhaltene Nachricht mit einer Verschiebung um -1, und erhält den Text zurück.

Lernziel(e)

  • Die Funktionsweise der Caesar-Verschlüsselung.

Aufgabe

Um das oben gelernte zu testen, sollen die Teilnehmenden folgende Aufgaben ausführen:

  1. Verschlüsselung von Hallo mit v = 3
  2. Entschlüsselung des folgenden Satzes:
    Nhm ljqtgj kjnjwqnhm, ifxx nhm jns Yzsnhmylzy gns. (v = 5)

Und damit wir das nicht weiter von Hand machen müssen, wollen wir das jetzt in der Programmiersprache bash implementieren. Dafür brauchen wir noch ein bisschen bash-Wissen – und das kommt jetzt :)

bash: eine Programmiersprache

bash ist nicht nur eine Kommandozeile, sondern auch eine Programmiersprache. Das Skript, das wir bisher geschrieben haben, war schon ein Programm in der Sprache bash, allerdings haben wir dort noch keines der Konstrukte, die die Sprache hat, spezifisch genutzt. Das wollen wir jetzt ändern.
Erstellt eine neue Datei namens greet.sh.
Deklariert gemeinsam mit den Teilnehmenden eine Variable.
Gebt diese Variable mit echo ${VAR} aus.

Lernziel(e)

  • Variablen: Deklaration und Nutzung verstehen
  • for in-loop benutzen können
  • Slices verstehen und benutzen können
  • Die Pipe (|) benutzen können
  • tr benutzen können

Code

greet.sh:

1
2
3
4

#!/usr/bin/bash

name=Beat echo "Hallo, ich bin" $name

greet_all.sh:

1
2
3
4
5
6
7

#!/usr/bin/bash

names=(inspirer tn1 tn2 tn3 tn4 tn5 tn6)
for name in "${names[@]}"
do
echo "Hallo," $name
done

bash: Part 2

Das waren schon einmal die wichtigeren Programmierkonstrukte, die wir für die Implementierung der Caesar-Verschlüsselung brauchen werden – drei weitere Dinge kommen hier noch dazu. Slices, tr sowie pipes.

Slices

Erstellt eine neue Datei namens slice.sh.
Deklariert gemeinsam mit den Teilnehmenden eine Variable, die eine Zeichenkette enthält.
Gebt diese Variable mit echo ${VAR} (oder echo $VAR) aus, nur dass wir diesmal auswählen, welchen Teil der Zeichenkette wir 'herausschneiden' wollen.
Das funktioniert mit ${VAR:start:länge} – siehe unten im Beispiel.

tr

tr ist eines der Standard-Kommandozeilenprogramme. Es eignet sich sehr gut dafür, einzelne Buchstaben in einer Zeichenkette zu ersetzen.
tr a b ersetzt zum Beispiel alle Buchstaben 'a' (nur die kleinen) mit dem Buchstaben 'b'.

Pipes

Nun zu den pipes. Pipes sind etwas, das man auch in der Kommandozeile regelmäßig benutzt. Die Grundidee ist, dass man bestimmte Programme/Funktionalitäten hintereinander auf den gleichen Daten ausführen möchte. Die Kommandozeilenausgabe des vorderen Programms wird dabei zum Input des nächsten. Das sieht dann folgendermaßen aus:

λ echo aabb | tr a b
bbbb
λ echo Maus | tr a-z A-Z
MAUS

Lernziel(e)

  • Slices verstehen und benutzen können
  • Die Pipe (|) benutzen können
  • tr benutzen können

Code

slice.sh:

1
2
3
4

#!/usr/bin/bash

name=dasistmeinname echo ${name:0:3}

Aufgabe

Um das oben gelernte zu testen, sollen die Teilnehmenden folgende Aufgaben ausführen:

  1. Ändert das Skript slice.sh so ab, dass es alle Worte eurer Zeichenkette nacheinander ausgibt.
  2. Ersetzt in folgendem Satz alle Groß- mit Kleinbuchstaben:
    Ich gelobe feierlich, dass ich ein Tunichtgut bin.

Caesar: Verschlüsseln

So, dann geht es jetzt ans Zusammenführen. Schreibt ganz langsam untenstehendes Programm, und erklärt bei jedem winzigen Schritt warum ihr ihn gerade geht.

Eine neue Sache kommt hier noch mit dazu, und das sind die (implizite) Kommandozeilenargumente $1 und $2. Sie stellen das Argument an erster respektive zweiter Stelle im Aufruf dar.
Bei einem Aufruf mit:

λ ./enc_caesar.sh 1 Hallo
Ibmmp

würden in unserem Skript $1=1 und $2=Hallo gelten.

Lernziel(e)

Ein Verständnis dessen, was unser Programm macht.

  • Was machen dual und DUAL?
  • Was macht der erste tr-Aufruf?
  • Was der zweite?

Code

enc_caesar.sh:

1
2
3
4
5
6
7

#!/usr/bin/bash

dual=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz DUAL=ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ encrypted=$(echo $2 | tr "${dual:0:26}" "${dual:$1:26}" | tr "${DUAL:0:26}" "${DUAL:$1:26}")
echo ${encrypted}

Caesar: Entschlüsseln

Nachrichten zu verschlüsseln ist schön und gut, aber irgendwie wollen wir jetzt ja auch gegenseitig unsere geheimen Nachrichten lesen können – oder gar die der anderen abfangen und entschlüsseln?
Wenn wir wissen, was der Schüssel ist, können wir das jetzt sogar schon sehr einfach. Wir müssen die Nachricht nur 'noch einmal' verschlüsseln, nun aber mit dem 'gegenteiligen' Schlüssel. Wenn wir also Hallo mit 1 verschlüsselt haben, müssten wir es jetzt mit 25 (also 26 - v) verschlüsseln – und wir erhalten unseren alten Text zurück.

λ ./enc_caesar.sh 1 Hallo
Ibmmp
λ ./enc_caesar.sh 25 Ibmmp
Hallo

Da das aber ziemlich mühselig wird, wenn man die Verschiebung der Nachricht nicht kennt, bietet sich wieder einmal ein Programm als Lösung an. Einen solchen Ansatz, bei dem man einfach stumpf alle Möglichkeiten ausprobiert, nennt man brute force (rohe Gewalt).
Das geht in diesem Fall folgendermaßen:

Code

dec_caesar.sh:

1
2
3
4
5
6
7
8
9

#!/usr/bin/bash

dual=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz DUAL=ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ for i in {1..26}
do
decrypted=$(echo $1 | tr "${dual:0:26}" "${dual:$i:26}" | tr "${DUAL:0:26}" "${DUAL:$i:26}") echo ${decrypted}
done

Wir schreiben also einfach einen for in-loop, der uns die Arbeit des 'alle Zahlen von 1 bis 26 ausprobieren' abnimmt.

Berufsorientierung und Feedback

~30 Minuten

In eurer Gruppe:
~5 min
  • Wenn ihr eurer Gruppe am Ende noch Feedback geben wollt, dann nehmt euch gerne jetzt Zeit dafür.
  • Fragt nach, ob jemand (in der Abschlussrunde im großen Plenum) vorstellen möchte, was ihr so gemacht habt.
Im Plenum:
~25 min
  • Die Teilnehmenden, die möchten, stellen ihre Projekte vor
  • Die Berufsorientierung wird von der Team Inspiress oder dem Team Inspirer eingeleitet
  • Hier erzählt ihr in einem Gespräch mit dem Team Inspirer oder der Team Inspiress davon, wie ihr in die IT gekommen seid und was euch daran Spaß macht.
  • In unserem Inspirer Handbuch findet ihr noch weitere Tipps für eine spannende Berufsorientierung
  • (Wenn erwünscht, bekommt der*die Lehrer*in kurz das Wort)
  • Feedbacklinks werden von den Team-Inspirern geteilt