lehrkraefte:blc:informatik:glf20:robotik:modernecrypto:hashes:hashes

Kryptographische Hashfunktionen

  • 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, wovon es mehrere mit unterschiedlicher Länge gibt (224, 256, 384 und 512 Bits). Mehr dazu auf Wikipedia.
    • Weitere bekannte Hash-Algorithmen, die heute nicht mehr als sicher gelten sind MD5 und SHA-1.

Mit folgendem Python-Code können Hashwerte berechnet werden:

hashing-howto.py
import hashlib
print("Vorhandene Hash-Funktionen:")
print(hashlib.algorithms)
# Liefert ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
# md5 und sha1 dürfen für sicherheitsrelevante Dinge nicht mehr verwendet werden.
 
daten = "Nobody inspects the spammish repetition"
hashwert = hashlib.sha256(daten).hexdigest()
print(hashwert)

Ä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.

  • «Man kann nicht zurückrechnen». Es soll praktisch unmöglich sein, zu einem gegebenen Hashwert einen Input zu konstruieren, d.h. ohne einen Aufwand zu betreiben, der vergleichbar ist mit dem Aufwand, so viele Inputs durchzuprobieren, wie es wie mögliche Hashwerte gibt.
  • 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.
  • 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, um einen Input zu finden, der einen gegebenen Hashwert hat?
  • Ü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, Zeitungsanzeige, etc.
  • Covid-19 Tracing App.
  • Block-Chain «proof of work».
  • lehrkraefte/blc/informatik/glf20/robotik/modernecrypto/hashes/hashes.txt
  • Last modified: 2021/06/02 20:57
  • by Ivo Blöchliger