#################################################################################### ### 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")