Archived: Bash IT-Security Verschlüsselung
- dann gehe nochmal eine Ebene höher und klicke dich dort durch
- und lies dir unseren Blogeintrag zu unserem Mindset durch
Archived: Bash IT-Security Verschlüsselung
Kennenlernen
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 die Vorstellung etwas interaktiver gestalten möchtest, empfehlen wir das Spiel “Alle, die”, was im folgenden erklärt wird:
Spielidee und Ziel
- Wir kommen locker und leicht mit den Teilnehmer*innen ins Gespräch und erfahren, was sie gerne mögen (positiver Beziehungsaufbau).
- Wir können eine erste Diagnose stellen, was die Schülerinnen und Schüler können, was sie gerne mögen.
Ablauf
- Stellt Euch vor die Klasse.
- Ein*e Inspirer sagt: “Alle, die”-Frage z.B: “Alle, die Sport in der Freizeit machen?”.
- Alle, die sich angesprochen fühlen, stehen von ihrem Platz auf.
- Die*der Inspirer stellt Rückfragen und kommt ins Gespräch mit den Teilnehmer*innen, z.B. “Cool, du in der ersten Reihe: Wie heißt du? [Antwort] Welchen Sport machst du denn gerne? [Gespräch entsteht] Super und du in der letzten Reihe…”.
- Die*der Inspirer sagt: "Alle wieder setzen".
- Die*der Inspirer stellt die nächste Frage: z.B. “Alle, die gerne Spiele auf dem Handy oder Computer spielen!”
- Siehe 3.-5.
- Spielt das Ganze etwa 5 min (nach Gefühl)
Sammlung möglicher Fragen (!Klick mich an!)
Diese Sammlung kann gern erweitert oder angepasst werden.
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?
Letzte Frage
- Wer ist schon in repl.it angemeldet?
Programmieren
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.