Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
| lehrkraefte:blc:informatik:glf20:robotik:modernecrypto:hashes:hashes [2021/06/02 18:55] – Ivo Blöchliger | lehrkraefte:blc:informatik:glf20:robotik:modernecrypto:hashes:hashes [2021/06/02 18:57] (current) – [Gewünschte Eigenschaften einer kryptographischen Hashfunktion] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Kryptographische Hashfunktionen ====== | ||
| + | |||
| + | ===== Übersicht ===== | ||
| + | * Der Input ist eine Folge von Bytes von beliebiger Länge, z.B. der Inhalt einer beliebigen Datei oder eines Passworts. | ||
| + | * Der Output ist eine Folge von Bytes von konstanter Länge, z.B. 16 Bytes. | ||
| + | * Meistens werden Hashwerte hexadezimal notiert, z.B. 5f4dcc3b5aa765d61d8327deb882cf99 (also mit Ziffern 0-9 und Buchstaben a-f). | ||
| + | * Bekannte gute Hash-Algorithmen sind heute SHA-2 Algorithmen, | ||
| + | * Weitere bekannte Hash-Algorithmen, | ||
| + | |||
| + | Mit folgendem Python-Code können Hashwerte berechnet werden: | ||
| + | <code python hashing-howto.py> | ||
| + | import hashlib | ||
| + | print(" | ||
| + | print(hashlib.algorithms) | ||
| + | # Liefert (' | ||
| + | # md5 und sha1 dürfen für sicherheitsrelevante Dinge nicht mehr verwendet werden. | ||
| + | |||
| + | daten = " | ||
| + | hashwert = hashlib.sha256(daten).hexdigest() | ||
| + | print(hashwert) | ||
| + | </ | ||
| + | <WRAP todo> | ||
| + | Ändern Sie im zu «hashenden» Text im Python-Code oben ein Kleinbuchstaben in den entsprechenden Grossbuchstaben (damit ändern Sie genau 1 Bit). Vergleichen Sie die beiden Hashwerte. | ||
| + | </ | ||
| + | ===== Gewünschte Eigenschaften einer kryptographischen Hashfunktion ===== | ||
| + | * «Man kann nicht zurückrechnen». Es soll praktisch unmöglich sein, zu einem gegebenen Hashwert einen Input zu konstruieren, | ||
| + | * Die Hashwerte sind statistisch von Zufall nicht zu unterscheiden. | ||
| + | * Alle möglichen Hashwerte können theoretisch auch erzeugt werden. | ||
| + | * Ändert man auch nur ein Bit im Input, sollte sich durchschnittlich die Hälfte der Bits im Output ändern (und zwar statistisch von Zufall nicht zu unterscheiden). | ||
| + | * Die Funktion sollte (auf modernen Computern) effizient zu berechnen sein. | ||
| + | |||
| + | <WRAP todo> | ||
| + | * Wie viele mögliche Hashwerte gibt es bei einer Hashfunktion die einen Hashwert mit 256 Bits (32 Bytes) produziert? | ||
| + | * Wenn man pro Sekunde eine Milliarde ($10^9$) Hashwerte berechnen kann, wie lange muss man durchschnittlich Input durchprobieren, | ||
| + | </ | ||
| + | |||
| + | ==== Anwendungen ==== | ||
| + | * Überprüfen von Downloads | ||
| + | * Man berechnet einen Hash über die Datei. | ||
| + | * Nach dem Download berechnet man selbst den gleichen Hash und vergleicht. | ||
| + | * Warum schützt das nicht gegen böswillige Hacker? | ||
| + | * Existenz eines Dokuments zu einem bestimmten Zeitpunkt beweisen. | ||
| + | * Man hinterlegt an «öffentlicher Stelle» den Hashwert seines Dokuments. Message-Boards, | ||
| + | * Covid-19 Tracing App. | ||
| + | * Block-Chain «proof of work». | ||
| + | |||