Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
material:mbpasswd [2016/11/15 15:29] – angelegt administrator | — | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ===== Kryptografie ===== | ||
- | Immer wieder hörst du davon, dass bei großen Anbietern [[https:// | ||
- | |||
- | Um alles möglichst gut zu verstehen, musst du auf jeden Fall die beiden oben verlinkten Artikel lesen oder wenigstens überfliegen. | ||
- | |||
- | ==== Aufgabe 1: ==== | ||
- | |||
- | Nimm eines deiner Passwörter und lasse es laufen (z.B. auf [[https:// | ||
- | <code python> | ||
- | # wir weisen Python an, Kryptografiefunktionen zu laden | ||
- | import hashlib | ||
- | # wir fragen nach einem Passwort | ||
- | crypted_phrase = input() | ||
- | # Und geben den Hash des Passworts als MD5-Hash aus | ||
- | print(" | ||
- | print(hashlib.md5(crypted_phrase.encode(' | ||
- | </ | ||
- | Nimm jetzt den Hash und kopiere ihn [[https:// | ||
- | |||
- | Wiederhole das Verfahren mit einem deiner Passwörter und folgendem Programm (mit " | ||
- | <code python> | ||
- | # wir weisen Python an, Kryptografiefunktionen zu laden | ||
- | import hashlib | ||
- | # wir fragen nach einem Passwort | ||
- | crypted_phrase = input() | ||
- | # Und geben den Hash des Passworts als MD5-Hash aus | ||
- | print(" | ||
- | # wir nutzen hier einen anderen Hashalogorithmus " | ||
- | print(hashlib.sha512(crypted_phrase.encode(' | ||
- | </ | ||
- | |||
- | Wenn dein Passwort auch im zweiten Fall " | ||
- | |||
- | Informiere dich jetzt über den Unterschied zwischen dem md5- und dem sha512-Verschlüsselungsverfahren. Python kann folgende Verfahren "von Natur aus": md5, sha1, sha224, sha256, sha384, sha512. | ||
- | |||
- | ==== Aufgabe 2 ==== | ||
- | |||
- | Das Problem ist schon lange gelöst - mit nur wenigen Codezeilen mehr. Informiere dich über den Begriff " | ||
- | |||
- | <code python> | ||
- | import hashlib | ||
- | # Statt " | ||
- | salt = " | ||
- | crypted_phrase = input() | ||
- | salted_password = crypted_phrase + salt | ||
- | print(hashlib.md5(salted_password.encode(' | ||
- | </ | ||
- | |||
- | Wenn du jetzt versuchst, den Hash cracken zu lassen, klappt das nicht mehr, weil ein sogenanntest " | ||
- | |||
- | Auch dafür gibt es eine Lösung: | ||
- | |||
- | <code python> | ||
- | import hashlib, uuid | ||
- | # Python schreibt nun für dich wirres Zeug hier hinein | ||
- | salt = uuid.uuid4().hex | ||
- | crypted_phrase = input() | ||
- | salted_password = crypted_phrase + salt | ||
- | print(hashlib.md5(salted_password.encode(' | ||
- | </ | ||
- | |||
- | Hätten LinkedIn und andere die Benutzerpasswörter mit einem sicheren Algorithmus (z.B. sha512) gehasht und mit einem Salt versehen, wäre der Diebstahl der Datenbanken nicht so ein großes Problem, da es sehr lange dauern würde, die Passwörter aus den Hashes zu errechnen. | ||
- | |||
- | In der Praxis speichert man die Salts im Klartext zusammen mit den Hashes, meist durch ein Trennzeichen abgesetzt. Du kannst ja einmal überlegen, warum das **kein Problem** darstellt. | ||
- | |||
- | ==== Aufgabe 3: ==== | ||
- | |||
- | Schreibe folgende Programme: | ||
- | |||
- | - Es wird zweimal ein Passwort abgefragt und dazu ein Hash berechnet. Stimmen beide Hashes (und damit die Passwörter) überein, soll das Programm die Ausgabe " | ||
- | - Ein Programm fragt nach einem " | ||
- | |||
- | ==== Ergänzender Kommentar ==== | ||
- | Das vorliegende Beispiel zeigt – finde ich – ganz gut, dass Medienkompetenz und Informatik sich sehr gut ergänzen können, teilweise vielleicht sogar einander bedingen. Das Problem der Passwortlänge und dem Passwortaufbau wird hier bewusst nicht angesprochen, | ||
- | Weiterhin ist natürlich auch das sha-2-Verschlüsselungsverfahren moderneren Entwicklungen wie z.B. pbkdf2 weit unterlegen, aber auch programmiertechnisch wesentlich beherrschbarer. sha512 ist schon ganz ok, auch wenn heutige Grafikkarten ca. 200 Millionen Schlüssel pro Sekunde berechnen. |