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/27 11:10]
Werner Winkelmann
lehrkraefte:blc:informatik:glf19:hashing:hashing [2020/04/28 17:19]
Ivo Blöchliger
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.txt
  • Last modified: 2020/04/28 17:19
  • by Ivo Blöchliger