Hashfunktionen

🎯 Um was geht es? 

Eine Hashfunktion erzeugt effizient aus einem Eingabewert, etwa einer Nachricht, einen Ausgabewert fester Länge: den Hashwert. Es ist eine Einwegfunktion! (d.h zwar sehr einfach zu berechnen, jedoch schwierig umzukehren). 

Passwörter 

Passwörter können sicher sein, aber auch sehr unsicher. Ausschlaggebend ist die Länge des Passwortes. 

Einstiegsaufgabe I

Nutze den Online-Dienst https://www.passwortcheck.ch. Gib unterschiedliche Passwörter ein. Teste Passwörter, welche kurz und lang sind, nur Buchstaben beinhalten, Zahlen, Zeichen, ...

Sammle deine Beobachtungen mit deinem Banknachbarn, deiner Banknachbarin. 

Brute Force Attack 

Ein Brute-Force-Angriff ist ein Versuch, ein Kennwort herauszufinden, indem systematisch alle möglichen Kombinationen von Buchstaben, Zahlen und Symbolen ausprobiert werden, bis die eine richtige Kombination gefunden wird, die funktioniert. 

Einstiegsaufgabe II

Lösung


Passwörter erstellen 

Passwortmanager

Am sicherstent ist es, zufällige Passwörter zu verwenden, welche du in einem Passwortmanager verwaltest. So musst du dir nur ein Passwort merken, dasjenige für den Passwortmanager. Im Manager kannst du für jeden Dienst automatisch ein sicheres Passwort erzeugen lassen.

Passwörter Speichern 

Wie speichern Google, Instagram, Amazon, OrellFüssli, ... deine Passwörter?  Etwa so? 

hanna.meier:12345

max.mueller:keinpasswort

sepp.blumewiese:seppli

Es gibt immer weider Hackerangriffe, welche zu grösseren Datenlecks führen und so die Zugangsdaten von Nutzern öffentlich machen. Da das eine tatsächlcihe Gefahr ist, wäre die obige Variante, wie Utnernehmen deine Passwöerter speichern würden, unglaublich fahrlässig. 

Um die Sicherheit von Passwörtern zu erhöhen, werden diese nicht im Klartext abgelegt. Stattdessen wird nur quasi ein Fingerabdruck des Passworts, ein sogenannter Hash gespeichert. Damit geht das ursprüngliche Passwort zwar verloren und ist nicht mehr wiederherstellbar, jedoch kann es immer noch überprüft werden. Dazu wird vom eingegebenen Passwort zuerst der Hash-Code berechnet und dieser dann mit dem Code in der Passwortablage verglichen. 

hanna.meier:827ccb0eea8a706c4c34a16891f84e7b

max.mueller:2e1e9ab1fb615c2176f4ea84dca08353

sepp.blumewiese:a8e1118f9711b4909a917a878666afbf

Das tönt jetzt alles sehr abstrakt, lass uns die Idee von einem Hash an einem einfacheren Beispiel erarbeiten. 

Idee

Anstelle des Passwortes im Klartext, sollte eine Prüfsumme gespeichert werden. 

Die iterierte Quersumme ist die Quersumme, die entsteht, wenn man solange immer wieder die Quersumme ausrechnet, bis nur noch eine einzige Ziffer übrig bleibt. Für die Zahl 97 lautet die normale Quersumme 16, berechnet man davon wiederum die Quersumme, so entsteht die iterierte Quersumme: 7.

Die Alternierende Quersumme entsteht durch abwechslungweises Addieren und Subtrahieren der einzelnen Ziffern (für 1234 lautet diese 1 - 2 + 3 - 4 = -2).

Aufgabe 

Lösung

2. Die zweite Funktion. Bei der iterierten Quersumme sind nur 10 verschiedene Werte möglich (Ziffern 0-9). 

Aufgabe

Wenn jetzt ein Anbieter überprüfen möchte, ob es tatsächlich dein Passwort ist, welches Du eingegeben hast, macht er folgendes: Dazu wird vom eingegebenen Passwort zuerst der Hash-Code berechnet und dieser dann mit dem Code in der Passwortablage verglichen. D.h. in unserem Beispiel, würde vom eingegebenen Passwort die iterierte Quersumme oder die alternierende Quersumme berechnet werden und dann in der Passwortablage verglichen. 

Was für ein Problem haben wir dann? 

Hashfunktion

Eine Hashfunktion ist eine Einwegfunktion ("leicht" berechenbar, aber "schwer" umzukehren) sowie ist sie kollisionsresistent (d.h.  wenn es „schwer“ ist, verschiedene Eingaben zu finden, die auf denselben Wert abgebildet werden), weiter muss sie für dieselben Eingaben immer denselben Hashwert generieren. 

Als Analogie kann man das klassische Papier-Telefonbuch einer grösseren Stadt vorstellen: Kennt man den Namen, dann findet man sehr schnell die dazugehörige Telefonnummer. Kennt man jedoch nur die Telefonnummer, so ist es sehr aufwändig, den zugehörigen Namen zu finden. 

Es gibt verschiedene kryptographische Algorithmen, z.B. MD5, SHA-256, SHA-512, SHA-384,...

Aufgabe 

Damit die Passwörter aus geklauten Passwortdateien nicht ohne weiteres über Wörterbücher oder ähnliches geknackt werden könne, werden Passwörter erst einmal künstlich mit einem Vorspann verlängert. Man spricht von salting. Erst dann wird das Passwort gehasht: 

i Passwort    : MeiNPassWor1

ii Modifikation  : $1$89kkfmeu39r$MeiNPassWor1

iii Md5          : 9428843ab1b2ae548e0edb3e4fc6fba9

 iv Ablage       : $1$89kkfmeu39r$9428843ab1b2ae548e0edb3e4fc6fba9

Das salting von Hash-Codes hat den Vorteil, das zwei Benutzer mit dem gleichen Passwortunterschiedliche Zufallswerte und damit unterschiedliche Hash-Werte zugewiesen bekommen, mit dem Ergebnis, dass am Hash nicht zu erkennen ist, ob die Passwörter gleich sind. Lies dazu: Salted_Hash 

Führe die obigen vier Schritte (i-iv) mit einem Passwort und Salt deiner Wahl selber durch.

Für Schnelle und Interessierte noch dieses Video

Datenintegrität

Wie können wir sicher sein, dass die Daten bei z.B. einer Datenübertragung nicht verändert wurden? 

Eine wichtige Rolle in der Realität spielen dabei Prüfziffern oder Prüfsummen.

Prüfsumme

In der Informationstechnik ist eine Prüfsumme (englisch checksum) ein Wert, mit dem die Integrität von Daten überprüft werden kann.

Grundsätzlich ist eine Prüfsumme ein Wert, der aus den Ausgangsdaten berechnet wurde und in der Lage ist, bestimmte Fehler in den Daten zu erkennen. Je nachdem wie komplex die Berechnungsvorschrift für die Prüfsumme ist, können mehrere Fehler erkannt oder auch korrigiert werden.

Prüfsummen werden typischerweise dazu verwendet, um zu plausibilisieren, dass zwei Datensätze übereinstimmen oder ein einziger Datensatz in sich konsistent ist. Sie haben verschiedene Anwendungsgebiete:


Alltagsbeispiel

Die Schweizer Identitätskarte entählt einige Informationen über uns. Wie wir heissen, wie gross wir sind, was unser Heimatort ist und vieles mehr. 

Doch es gibt auch einige Zahlen, bei denen nicht auf den ersten Blick klar ist, was sie bedeuten - z.B. die letzte Zahl in der zweiten Reihe. 

Diese Zahl ist eine Prüfziffer. Sie stellt sicher, dass beim Einlesen der Karte, keine Fehler aufgetreten sind. Die Berechnung ist ziemlich einfach: 

Schweizer Identitäskarte: 

Ausweisnummer: S1A00A00, Prüfziffer 9

Geburtsdatum (JJMMTT): 950801, Prüfziffer 5

Gültig Bis (JJMMTT): 330322, Prüfziffer 8

Globale Prüfziffer 2


Prüfziffern Ausweisnummer, Geburtsdatum, Gültigkeitsdatum: 

Das Prinzip ist sehr einfach, um auf die Prüfziffern zu kommen für Geburtsdatum sowie Gültigkeitsdatum: alle Zahlen werden nacheinander mit 7, 3, 1 multipliziert und dann alles zusammengezählt, die letzte Stelle der Summe ist die Prüfziffer. 

Bsp. Geburtsdatum ist 950801 (01.08.95). 9*7 + 5*3 + 0*1 + 8*7 + 0*3 + 1*1 = 135. 5 ist die Prüfziffer. 

Für die Ausweisnummer funktioniert es nach demselben Prinzip, nur dass für Buchstaben ein numerischer Wert eingesetzt werden muss, und zwar nach dem Prinzip A = 0, B =  1, C = 2, etc. 


Globale Prüfsumme:

Das Prinzip ist genau dasselbe, nur muss man alle Daten nehmen und miteinander verrechnen. Wichtig dabei ist, dass bei der Ausweisnummer ein > die Prüfziffer von der Nummer trennt. Dieses > muss bei der Ausführung durch eine 0 ersetzt werden. Ansonsten ist das Prinzip genau gleich: 

Aufgabe 

Berechne die globale Prüfziffer auf deiner ID. Kommst Du auf dasselbe Resultat?