lehrkraefte:blc:informatik:glf19:hashing:hashing

So funktioniert eine Corona-Tracing-App, die Ihre Privatsphäre schützt

Diese Lektion basiert auf diesem Artikel von Republik.ch. Denselben Artikel als pdf download .

Zusammenfassung Zeitungsartikel

Dank Kryptografie lassen sich Begegnungen anonym und dezentral aufzeichnen und auswerten. Der Artikel zeigt, wie das funktioniert – in acht Schritten.

1. Schlüssel generieren
2. Sich bemerkbar machen
3. Nach Angaben bitten
	○ einen Zeit­stempel
	○ eine Prüfsumme
4. Prüfsumme ausrechnen
	HMAC (Schlüssel + Zeitstempel) = Prüfsumme
5. Angaben austauschen und z.B. 14 Tage speichern
6. Bei Infektion: Infektion melden
	○ Nutzerin wählt die Option «Ich wurde infiziert». 
	○ Die App A schickt den geheimen Schlüssel, an einen zentralen Server. 
	○ Das ist bzgl. Datenschutz unproblematisch, denn der Schlüssel ist nur eine zufällige Zeichen­kette und lässt keine Rückschlüsse zu.
7. Schlüssel von Infizierten in alle Apps herunterladen
8. Schlüssel und Schlösser abgleichen
	○ Wer die infizierte Person ist und ob sie sich beim Kontakt angesteckt haben könnte, muss sich die Anwenderin selbst überlegen.

Fazit

Die Frage, ob digitales Contact Tracing (nicht Contact Tracking) mit den Grund­rechten vereint werden kann, hat somit eine eindeutige Antwort: ja. Rüstet man Smart­phones mit Epidemie­-Software aus, so landet man also nicht zwingend in einem Überwachungsstaat. Also Entscheidend ist, dass die Apps von Grund auf mit dem Ziel entwickelt werden, die Privat­sphäre zu schützen (ohne Nennung von Namen oder zentraler Speicherung von persönlichen Daten). Und dass der Quellcode offen liegt, so dass Software­entwickler:innen die Funktions­weise überprüfen können.

  1. Zunächst ein Einstieg von der Lehrperson in das Thema (Video (1min) von Ubique und obige Zusammenfassung wird vorgestellt)
  2. Sie haben nun 20 Minuten Zeit um die Thematik vertieft zu studieren (lesen Sie insbesondere die “Ich wills genauer wissen” Abschnitte des Artikels der Republik). Falls Sie noch Zeit haben, können Sie noch die Leserkommentare zum Republik Artikel lesen oder diesen Watson Artikel.
  3. Kopieren Sie diesen Python-code Code nach WebTigerJython.
  4. Folgen Sie der Aufgabenstellung in dieser Datei
  5. Nun folgt eine Demonstration der Simulation einer Corona-Tracing App
  6. Nachdem wir die Simulaton zur Corona-App gemeinsam abgeschlossen haben, werden Sie sich einen Video (8 Minuten) zu Hashing, Salz & Pfeffer und Regenbogentabellen anschauen.
  7. Nun folgt ein kahoot zum Thema “Hashing”.
  8. Falls wir noch Zeit haben, beginnen wir noch mit dem eigentlichen Einstieg in die Kryptographie
####################################################################################
###  Aufgabe 0: Öffnen Sie https://webtigerjython.ethz.ch/ und kopieren Sie      ###
###  diesen Code dorthin.                                                        ###
####################################################################################
 
 
 
# Ganz ganz schlechter Hash weil
#   viel zu kurz (8 Stellen Hexadezimal -> nur 32 Bits)
#   wahrscheinlich einfach zurückrechenbar 
#     (man braucht nicht alles auszuprobieren, was aber auch schon praktikabel wäre)
def badHash(text):
    modulo = 2**31-1  # 8. Mersenne prime
    summe = 1234567
    counter = 12345
    for c in text:
        summe = summe*(ord(c)+counter) % modulo
        counter = (counter+65001)%modulo
 
    return "%08x" % summe
 
####################################################################################
###  Aufgabe 1: Wählen Sie ein Geheimnis, das Sie danach **nicht** mehr ändern.  ###
####################################################################################
 
geheimnis = "12345678"  # <- Das hier auf eine "zufällige" 8-stellige Zeichenkette ändern
 
####################################################################################
###  Aufgabe 2: "Treffen" Sie sich per Chat auf Teams mit einer Mitschülerin     ###
###  oder einem Mitschüler. Einigen Sie sich auf einen Zeitstempel HH:MM:SS      ###
###  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 = "12:34:56"
 
pruefsumme = badHash(zeitstempel+geheimnis)
print("Zeitstempel und Prüfsumme, die Sie so als ganze Zeile im privaten Chat übermitteln.")
print("['"+zeitstempel+"', '"+pruefsumme+"'],")
 
###
# Hier alle Zeitstempel und Prüfsummen Paare eintragen, die Sie übermittelt bekommen haben. 
###
logs = [
    ['12:34:56', '330c8639'],
]
 
 
####################################################################################
###  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 = "12345678"  # Das Geheimnis einer als infiziert gemeldeten Person eintragen
 
 
if infiziert != "12345678":
    print
    print("Überprüfung...")
    risk = False
    for l in logs:
        pruefsumme = badHash(l[0]+infiziert)
        if pruefsumme==l[1]:
            print("Oops! Sie hatten um %s Kontakt mit einer jetzt infiziert gemeldeten Person" % l[0])
            risk = True
 
    if not risk:
        print("Keine problematischen Kontakte gefunden")
  • lehrkraefte/blc/informatik/glf19/hashing/hashing.txt
  • Last modified: 2020/04/28 17:19
  • by Ivo Blöchliger