Bash IT-Security: Verschlüsselung
Genereller Kursablauf
Unsere Kurse laufen nach dem Schema ab, das auf den folgenden Bildern dargestellt ist. Da wir mit Schulen arbeiten und es in Schulen trotz guter Absprachen im Vorfeld am Kurstag zu unvorhergesehenen Schwierigkeiten kommen kann, kann es in den Kursen immer mal Abweichungen vom Ablauf geben. Dies hängt meistens von den folgenden Faktoren ab:
- Anzahl der Pausen: Das hängt von der Schule ab, dies teilt die Team Inspiress oder der Team Inspirer am Anfang des Kurses mit.
- Technik der Schule: Leider haben wir immer wieder technische Probleme auf Seiten der Schulen. Daher wird häufig der Ablaufplan "durchgerüttelt".
- Vorwissen der Schüler*innen: Dies versuchen wir über das Kahoot und das "Alle, die"-Spiel zu diagnostizieren, um grob einzuschätzen, wie viel Erfahrungen die Schüler*innen haben.
- Engagement und Rolle der Lehrkraft: Je engagierter die Lehrkraft im Klassenraum, desto erfolgreicher der Kurs.


Programmieren 1 "WE INSPIRE"
Hier geht es darum, dass ihr als Inspiress oder Inspirer in das Programmieren einführt und die Basics erklärt.
Programmieren 2 "INSPIRE ME"
Im zweiten Programmierteil sind die Rollen sozusagen vertauscht. Denn jetzt kommt der proaktive Teil aus Sicht der Schülerinnen und Schüler. Nun sind diese an der Reihe und inspirieren sozusagen dich als Inspir*ess! Du hilfst, begeisterst und inspirierst aber natürlich entsprechen auf deine Art und Weise weiter.
Kursziele und Hinweise
Kursziele
- Verständnis schaffen: Wo spielt Programmieren im Alltag eine Rolle? Welches Mindset verkörpern Programmier*innen?
- Selbst probieren: Einblicke ins praktische Programmieren durch Programmieren eines Spiels oder einer Webseite geben
- Fragen stellen: Berufsorientierung mit euch als Expert*innen aus der IT-Branche
Drei letzte Tipps
- Denkt immer daran: Uns geht es um die Haltung "WE INSPIRE". Wie das bei euch konkret aussieht, ist euch überlassen. Haben die Teilnehmenden Lust, mit euch etwas länger über Roboter zu reden? Macht das gerne.
- Lasst die Teilnehmenden auch bewusst Fehler machen und helft dabei herauszufinden, wieso ihr Ansatz nicht funktioniert.
- Dieses Konzept ist unser Vorschlag, wie man Kinder und Jugendliche begeistern könnte. Seht es also als groben Leitfaden und weniger als festen Lehrplan, der von oben nach unten durchgearbeitet werden muss.
Feedback und Fragen immer an kurskonzepte@hacker-school.de oder einfach hier links neben den Text klicken.
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
- Fordere die Schüler*innen auf die Kamera anzumachen und checke, ob alle Kameras funktionieren
- Fordere die Schüler*innen auf die Kamera mit dem Finger zu verdecken oder sie aus zu machen
- Stelle eine “Alle, die”-Frage (z.B: “Alle, die schon einmal programmiert haben?” oder “Alle, die Sport in der Freizeit machen?”)
- Alle, die sich angesprochen fühlen, nehmen ihren Finger von der Kamera oder machen die Kamera an
- Stelle kurze Rückfragen und komme ins Gespräch
- Stelle eine zweite Frage
- Stelle kurze Rückfragen und komme ins Gespräch
- 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?
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
undrm
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:
- einen neuen Ordner in ihrer Repl erstellen
- im Ordner eine neue Datei erstellen
- diese gerade erstellte Datei zweifach kopieren
- eine der beiden Versionen aus dem Ordner heraus bewegen (also eine Ebene nach oben)
- Die gerade aus dem Ordner heraus bewegte Datei löschen
- eine der beiden Dateien im Ordner umbenennen
- 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:
- Verschlüsselung von
Hallo
mitv = 3
- 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 |
|
greet_all.sh
:
1 2 3 4 5 6 7 |
|
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 |
|
Aufgabe
Um das oben gelernte zu testen, sollen die Teilnehmenden folgende Aufgaben ausführen:
- Ändert das Skript
slice.sh
so ab, dass es alle Worte eurer Zeichenkette nacheinander ausgibt. - 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
undDUAL
? - Was macht der erste
tr
-Aufruf? - Was der zweite?
Code
enc_caesar.sh
:
1 2 3 4 5 6 7 |
|
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 |
|
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
- 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.
- 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