Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
gf_informatik:daten_sca:hash_tables [2023-05-29 08:46] – [Lösungen] sca | gf_informatik:daten_sca:hash_tables [2023-08-01 10:41] (aktuell) – [Lösungen] sca | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Hashfunktionen ====== | ====== Hashfunktionen ====== | ||
- | Theorie: | + | Theorie:{{ : |
+ | |||
+ | ++++Lernziele| | ||
+ | |||
+ | Prüfungsrelevant ist alles, was in den Lektionen und Übungen behandelt wurde. Die Lernziele unten dienen als Gradmesser und sind nicht unbedingt komplett. | ||
+ | |||
+ | * Erklären, was Hashes und Hash-Funktionen sind uns was die Idee hinter diesen ist. | ||
+ | * Wichtigste Eigenschaften kennen von Hash-Funktionen. | ||
+ | * Beispiele machen für einfache Hash-Funktionen. | ||
+ | * Wissen, welcher Hash-Algorithmus heute der Standard ist. | ||
+ | * Versch. Anwendungsbereiche kennen von Hash-Funktionen. | ||
+ | * Sind Hash-Funktionen für das Verschlüsseln von Nachrichten geeignet? Warum (nicht)? | ||
+ | * Hashes generieren mit Python. | ||
+ | * Erklären, was eine Rainbow-Table ist, wie man sie erstellt, wie Hacker diese verwenden und wie man sich dagegen schützen kann. | ||
+ | |||
+ | ++++ | ||
==== Aufgaben ==== | ==== Aufgaben ==== | ||
Zeile 9: | Zeile 24: | ||
Implementiere die einfache (und nicht sehr brauchbare) Hash-Funktion aus den Slides: | Implementiere die einfache (und nicht sehr brauchbare) Hash-Funktion aus den Slides: | ||
- | * Schreibe eine Funktion `hash_simple(s)`, ... | + | * Schreibe eine Funktion `hash_simple(cleartext)`, ... |
- | * ... die einen String `s` entgegen nimmt und darauf den folgenden ... | + | * ... die einen String `cleartext` entgegen nimmt und darauf den folgenden ... |
* ... Hash-Algorithmus anwendet: | * ... Hash-Algorithmus anwendet: | ||
* Summiere von allen Zeichen von Strings die ASCII-Werte zusammen ... | * Summiere von allen Zeichen von Strings die ASCII-Werte zusammen ... | ||
Zeile 95: | Zeile 110: | ||
1. Erkläre, was ist eine **Rainbow-Table** ist und wozu solche benutzt werden. | 1. Erkläre, was ist eine **Rainbow-Table** ist und wozu solche benutzt werden. | ||
1. Erstelle eine solche Rainbow-Table für die zehn sehr beliebten Passwörter unten mit SHA-256. *Tipp*: Verwende die Passwort-Liste anstelle Copy-Paste. | 1. Erstelle eine solche Rainbow-Table für die zehn sehr beliebten Passwörter unten mit SHA-256. *Tipp*: Verwende die Passwort-Liste anstelle Copy-Paste. | ||
- | 1. Hanna die Hackerin hat die Datenbank von www.feldwaldwiesenshop.ch gehackt. Zum Glück (resp. Pech für Hanna) werden die Passwörter darin nicht im Klartext sondern als Hashes gespeichert. U.a. hat sie folgenden Eintrag erbeutet: mail "gerdiderromantiker@bluewin.ch", | + | 1. Hanna die Hackerin hat die Datenbank von www.feldwaldwiesenshop.ch gehackt. Zum Glück (resp. Pech für Hanna) werden die Passwörter darin nicht im Klartext sondern als Hashes |
Liste sehr beliebter Passwörter: | Liste sehr beliebter Passwörter: | ||
Zeile 115: | Zeile 130: | ||
1. siehe Slides | 1. siehe Slides | ||
- | 1. | + | |
- | 1. Hash sollte | + | 1. Hash kommt in deiner Rainbow-Table |
+ | |||
+ | ^ **Password** ^ **Hash** ^ | ||
+ | | 123456 | 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 | | ||
+ | | qwertz | d482ba4b7d3218f3e841038c407ed1f94e9846a4dd68e56bab7718903962aa98 | | ||
+ | | password | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 | | ||
+ | | admin | 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 | | ||
+ | | a1b2c3 | 4f32044a655f32e8528edea64dbfd11cba810b8790e6e6e23d28ad3a75980734 | | ||
+ | | iloveyou | e4ad93ca07acb8d908a3aa41e920ea4f4ef4f26e7f86cf8291c5db289780a5ae | | ||
+ | | football | 6382deaf1f5dc6e792b76db4a4a7bf2ba468884e000b25e7928e621e27fb23cb | | ||
+ | | monkey | 000c285457fc971f862a79b786476c78812c8897063c6fa9c045f579a3b2d63f | | ||
+ | | abc123 | 6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090 | | ||
+ | | guest | 84983c60f7daadc1cb8698621f802c0d9f9a3c3c295c810748fb048115c186ec | | ||
++++ | ++++ | ||
+ | |||
+ | === Aufgabe 6: Hash von Buch === | ||
+ | |||
+ | Finde heraus, wie man von einem ganzes Buch (z.B. die Bibel) einen Hash berechnen kann. Da ein Buch aus vielen Zeichen besteht, kann man es nicht in einem Durchgang hashen, sondern man muss dies in vielen kleinen ' | ||
+ | |||
==== Lösungen ==== | ==== Lösungen ==== | ||
<nodisp 2> | <nodisp 2> | ||
- | === Aufgabe 1 === | + | ++++Lösung |
- | === Aufgabe 2 === | + | <code python> |
+ | def hash_simple(cleartext): | ||
+ | summe = 0 | ||
+ | for b in cleartext: | ||
+ | summe = summe + ord(b) | ||
+ | return summe % 16 | ||
- | === Aufgabe 3 === | + | print(hash_simple(" |
+ | </ | ||
- | === Aufgabe 4 === | + | ++++ |
- | === Aufgabe 5 === | + | ++++Lösung |
+ | <code python> | ||
+ | import hashlib | ||
- | </ | + | def hash_sha256(key): |
+ | # Convert the string to bytes as hashlib functions expect bytes input | ||
+ | string_bytes = key.encode(' | ||
+ | |||
+ | # Create a SHA-256 hash object, | ||
+ | # different variants are: hashlib.sha256(), | ||
+ | sha2_hash = hashlib.sha256() | ||
+ | |||
+ | # Update the hash object with the string bytes | ||
+ | sha2_hash.update(string_bytes) | ||
+ | |||
+ | # Get the hexadecimal representation of the hash digest | ||
+ | hash_result = sha2_hash.hexdigest() | ||
+ | return hash_result | ||
+ | passwords = [" | ||
+ | |||
+ | print(" | ||
+ | |||
+ | for pw in passwords: | ||
+ | ha = hash_sha256(pw) | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | </ | ||