Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Hashfunktionen und Prüfsummen

Nach dieser Lektion: Ich kann mit einer Hashfunktion prüfen, dass Daten sich nicht verändert haben.

Lektion, 55 Min.8 BefehleLab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Wie prüft man, ob eine Datei unverändert ist?

Eine Hashfunktion macht aus beliebigen Daten einen kurzen Fingerabdruck von fester Länge. Mit diesem Fingerabdruck prüfen Sie, ob Daten sich verändert haben.

Ein Beispiel: Sie laden ein Programm herunter, und die Webseite nennt eine Prüfsumme. Stimmt Ihre Prüfsumme überein, ist die Datei unterwegs nicht beschädigt oder ausgetauscht worden.

Am Ende dieser Lektion

Notiz

Ich kann mit einer Hashfunktion prüfen, dass Daten sich nicht verändert haben.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Hashfunktioneine Rechenvorschrift, die aus beliebig langen Daten einen Wert fester Länge machtSHA-256
Hashwertdas Ergebnis einer Hashfunktion, auch Prüfsumme oder Fingerabdruck genannt
IntegritätDaten sind vollständig und unverändert
Lawineneffekteine winzige Änderung der Eingabe ändert fast den ganzen Hashwert
Kollisionzwei verschiedene Eingaben mit demselben Hashwert
Einwegfunktionleicht zu berechnen, aber praktisch nicht umkehrbar

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Was eine Hashfunktion tut

Sie geben einen Text oder eine ganze Datei hinein. Heraus kommt eine Zeichenfolge, die immer gleich lang ist. Bei SHA-256 sind es 64 Zeichen aus Ziffern und den Buchstaben a bis f.

Dieselbe Eingabe ergibt immer denselben Hashwert. Der Hashwert verrät aber nichts über die Eingabe, die Sie nicht schon wissen.

Den Hashwert von „Hallo“ berechnen

Befehl
printf 'Hallo' | sha256sum

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was das Terminal ausgibt

Das Terminal gibt 64 Zeichen aus. Sie beginnen mit 753692ec. Dahinter folgt ein Leerzeichen und ein Strich, denn die Eingabe kam über die Pipe und nicht aus einer Datei.

Führen Sie den Befehl ein zweites Mal aus. Sie erhalten genau dieselbe Zeichenfolge.

Jetzt mit kleinem h statt großem H

Befehl
printf 'hallo' | sha256sum

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Buchstabe ändert alles

EingabeAnfang des HashwertsGleiche Stellen wie bei „Hallo“
Hallo753692ecVergleichswert
hallod3751d33Keine am Anfang
Hallo!357a57feKeine am Anfang

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

So prüfen Sie die Integrität einer Datei

Wer eine Datei anbietet, veröffentlicht ihren Hashwert. Sie berechnen den Hashwert Ihrer Kopie und vergleichen. Sind beide gleich, ist die Datei unverändert.

Das Werkzeug sha256sum -c liest eine Liste aus Hashwert und Dateiname und prüft jede Zeile für Sie. Gleich legen Sie eine Datei und ihre Liste an. Der Ordner scratch im Lab gehört Ihnen.

Eine Datei anlegen

Befehl
printf 'Hallo' > scratch/gruss.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ihre Prüfsummenliste schreiben

Befehl
sha256sum scratch/gruss.txt > scratch/summen.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Liste prüfen

Befehl
sha256sum -c scratch/summen.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prüfung meldet OK

Das Terminal gibt scratch/gruss.txt: OK aus. Die Datei passt zu ihrer Liste.

Jetzt ändern Sie die Datei um ein einziges Zeichen. Danach prüfen Sie dieselbe Liste noch einmal.

Ein Ausrufezeichen anhängen

Befehl
printf 'Hallo!' > scratch/gruss.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Dieselbe Liste noch einmal prüfen

Befehl
sha256sum -c scratch/summen.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Jetzt meldet die Prüfung FAILED

Das Terminal gibt scratch/gruss.txt: FAILED aus und darunter eine Warnung, dass eine Prüfsumme nicht passte. Ein einziges Zeichen genügt, damit die Prüfung auffällt.

Die Prüfung sagt nur, dass sich etwas geändert hat. Was, und wo, sagt sie nicht.

Welche Hashfunktion ist sicher genug?

Nicht jede Hashfunktion hält stand. Bei MD5 und SHA-1 haben Fachleute Kollisionen gefunden: zwei verschiedene Eingaben mit demselben Hashwert. Wer so etwas absichtlich baut, kann eine Datei austauschen, ohne dass die Prüfsumme sich ändert.

Nutzen Sie darum für alles, was einen Angriff abwehren soll, SHA-256 oder eine neuere Funktion.

Drei bekannte Hashfunktionen im Vergleich

FunktionZeichen im HashwertHeute gegen Angriffe nutzbar?
MD532Nein, Kollisionen sind leicht zu bauen
SHA-140Nein, Kollisionen sind nachgewiesen
SHA-25664Ja

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Zum Vergleich: MD5 von „Hallo“

Befehl
printf 'Hallo' | md5sum

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

MD5 ist kürzer, aber nicht sicher

Das Terminal gibt 32 Zeichen aus, sie beginnen mit d1bf9329. MD5 ist als Prüfung gegen zufällige Übertragungsfehler noch brauchbar.

Gegen eine Person, die Ihre Datei absichtlich austauscht, hilft MD5 nicht.

Ein häufiger Fehler

Warnung

Viele glauben, ein Hashwert sei eine Verschlüsselung, die man wieder öffnen kann. Das stimmt nicht. Aus dem Hashwert kommt der Text nicht zurück, denn ein Hashwert ist eine Einwegfunktion. Wer den Text raten will, rät ihn und hasht jeden Versuch.

Weiterführend: ein Hashwert mit Schlüssel

Ein Hashwert allein schützt nicht, wenn jemand die Datei und ihren Hashwert zusammen austauscht. Dafür gibt es den HMAC: ein Hashwert, in den ein geheimer Schlüssel eingeht.

Berechnen Sie in Python hmac.new(b"schluessel", b"Hallo", hashlib.sha256).hexdigest(). Ändern Sie den Schlüssel um einen Buchstaben und sagen Sie in einem Satz, warum eine fremde Person den neuen Wert nicht nachbauen kann.

Über dieses Lab und seinen Quellcode: Lab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.