lehrkraefte:blc:informatik:glf19:hashing:hashing

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf19:hashing:hashing [2020/04/26 15:26]
Werner Winkelmann [Ablauf Lektion]
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://youtu.be/OI7RBBSx510?t=72|Video]] (1min) von Ubique und obige Zusammenfassung wird vorgestellt)   - Zunächst ein Einstieg von der Lehrperson in das Thema ([[https://youtu.be/OI7RBBSx510?t=72|Video]] (1min) von Ubique und obige Zusammenfassung wird vorgestellt)
-  - Sie haben nun 15 Minuten Zeit um den Artikel vertieft zu studieren (lesen Sie insbesondere die "Ich wills genauer wissen" Abschnitte). Falls Sie noch Zeit haben, können Sie noch die Leserkommentare zum Republik Artikel lesen oder diesen [[https://www.watson.ch/digital/schweiz/752276286-so-kannst-du-die-schweizer-corona-warn-app-schon-jetzt-herunterladen|Watson Artikel]]. +  - 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 [[https://www.watson.ch/digital/schweiz/752276286-so-kannst-du-die-schweizer-corona-warn-app-schon-jetzt-herunterladen|Watson Artikel]]. 
   - Sie öffnen nun [[https://webtigerjython.ethz.ch/]]   - Sie öffnen nun [[https://webtigerjython.ethz.ch/]]
   - Kopieren Sie diesen {{ :lehrkraefte:blc:informatik:glf19:hashing:badhash.py |Python-code}} Code nach WebTigerJython.   - Kopieren Sie diesen {{ :lehrkraefte:blc:informatik:glf19:hashing:badhash.py |Python-code}} Code nach WebTigerJython.
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://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")
 +    
 +
 +</code>
  • lehrkraefte/blc/informatik/glf19/hashing/hashing.1587907588.txt.gz
  • Last modified: 2020/04/26 15:26
  • by Werner Winkelmann