Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf19:hashing:hashing [2020/04/26 14:50] Werner Winkelmann [So funktioniert eine Corona-Tracing-App, die Ihre Privatsphäre schützt] |
lehrkraefte:blc:informatik:glf19:hashing:hashing [2020/04/28 17:19] (current) Ivo Blöchliger |
||
---|---|---|---|
Line 26: | Line 26: | ||
===== Ablauf Lektion ===== | ===== Ablauf Lektion ===== | ||
- Zunächst ein Einstieg von der Lehrperson in das Thema ([[https:// | - Zunächst ein Einstieg von der Lehrperson in das Thema ([[https:// | ||
- | - Sie haben dann 15 Minuten Zeit um den Artikel | + | - Sie haben nun 20 Minuten Zeit um die Thematik |
- Sie öffnen nun [[https:// | - Sie öffnen nun [[https:// | ||
- Kopieren Sie diesen {{ : | - Kopieren Sie diesen {{ : | ||
Line 35: | Line 35: | ||
- Falls wir noch Zeit haben, beginnen wir noch mit dem eigentlichen Einstieg in die Kryptographie | - Falls wir noch Zeit haben, beginnen wir noch mit dem eigentlichen Einstieg in die Kryptographie | ||
+ | |||
+ | ===== Corona-Tracing Python-Code ===== | ||
+ | |||
+ | <code python> | ||
+ | #################################################################################### | ||
+ | ### Aufgabe 0: Öffnen Sie https:// | ||
+ | ### diesen Code dorthin. | ||
+ | #################################################################################### | ||
+ | |||
+ | |||
+ | |||
+ | # Ganz ganz schlechter Hash weil | ||
+ | # viel zu kurz (8 Stellen Hexadezimal -> nur 32 Bits) | ||
+ | # | ||
+ | # (man braucht nicht alles auszuprobieren, | ||
+ | def badHash(text): | ||
+ | modulo = 2**31-1 | ||
+ | summe = 1234567 | ||
+ | counter = 12345 | ||
+ | for c in text: | ||
+ | summe = summe*(ord(c)+counter) % modulo | ||
+ | counter = (counter+65001)%modulo | ||
+ | | ||
+ | return " | ||
+ | |||
+ | #################################################################################### | ||
+ | ### Aufgabe 1: Wählen Sie ein Geheimnis, das Sie danach **nicht** mehr ändern. | ||
+ | #################################################################################### | ||
+ | |||
+ | geheimnis = " | ||
+ | |||
+ | #################################################################################### | ||
+ | ### Aufgabe 2: " | ||
+ | ### oder einem Mitschüler. Einigen Sie sich auf einen Zeitstempel HH: | ||
+ | ### tragen Sie diesen unten ein und berechnen Sie die Prüfsumme. Tauschen | ||
+ | ### Sie die Ihre Prüfsummen (Output vom Programm) aus und tragen Sie diese ### | ||
+ | ### unten in den Logs ein. ### | ||
+ | ### Wiederholen Sie das mit mindestens 5 weiteren Personen. | ||
+ | #################################################################################### | ||
+ | |||
+ | zeitstempel = " | ||
+ | |||
+ | pruefsumme = badHash(zeitstempel+geheimnis) | ||
+ | print(" | ||
+ | print(" | ||
+ | |||
+ | ### | ||
+ | # Hier alle Zeitstempel und Prüfsummen Paare eintragen, die Sie übermittelt bekommen haben. | ||
+ | ### | ||
+ | logs = [ | ||
+ | [' | ||
+ | ] | ||
+ | |||
+ | |||
+ | #################################################################################### | ||
+ | ### Aufgabe 3: Auf dem Chat wird das Geheimnis von jemandem publiziert. Tragen | ||
+ | ### Sie dieses hier ein. Das Programm berechnet alle Prüfsummen damit und wird ### | ||
+ | ### ausgeben, ob Sie mit dieser Person Kontakt hatten oder nicht. | ||
+ | ### Nur mit den Daten in diesem Programm können Sie die infizierte Person nicht ### | ||
+ | ### identifizieren. Mit den zusätzlichen Daten im Chat natürlich schon. Darum ### | ||
+ | ### muss eine solche App OpenSource sein, damit überprüft werden kann, dass ### | ||
+ | ### keine zusätzlichen Daten gespeichert werden. | ||
+ | #################################################################################### | ||
+ | |||
+ | infiziert = " | ||
+ | |||
+ | |||
+ | if infiziert != " | ||
+ | |||
+ | print(" | ||
+ | risk = False | ||
+ | for l in logs: | ||
+ | pruefsumme = badHash(l[0]+infiziert) | ||
+ | if pruefsumme==l[1]: | ||
+ | print(" | ||
+ | risk = True | ||
+ | | ||
+ | if not risk: | ||
+ | print(" | ||
+ | | ||
+ | |||
+ | </ |