Hash

Ein Hash ist ein Wert fester Länge, den eine mathematische Funktion aus beliebig langen Eingabedaten berechnet. Er dient als digitaler Fingerabdruck und ist nur in eine Richtung berechenbar.

Auf dieser Seite

Ein Hash ist ein Wert fester Länge, der durch eine mathematische Funktion aus beliebig langen Eingabedaten berechnet wird. Diese sogenannte Hashfunktion erzeugt aus einer Eingabe (etwa einem Passwort, einer Datei oder einem Text) einen eindeutigen Hashwert, vergleichbar mit einem digitalen Fingerabdruck.

Das Besondere an Hashfunktionen: Sie arbeiten nur in eine Richtung. Während du aus einer Eingabe problemlos den Hash berechnen kannst, ist es praktisch unmöglich, aus dem Hashwert die ursprünglichen Daten zurückzugewinnen. Diese Eigenschaft macht Hashes zu einem Grundbaustein der modernen IT-Sicherheit.

Wie funktioniert eine Hashfunktion?

Eine Hashfunktion verarbeitet Eingabedaten beliebiger Größe und erzeugt daraus eine Ausgabe mit immer gleicher, fester Länge. Ob du einen einzelnen Buchstaben oder eine mehrere Gigabyte große Datei hashst, das Ergebnis hat stets dieselbe Anzahl an Zeichen.

Der Berechnungsprozess läuft in mehreren Schritten ab:

  1. Eingabe aufbereiten: Die Daten werden in Blöcke definierter Größe aufgeteilt und bei Bedarf aufgefüllt (Padding)
  2. Initialisierung: Interne Zustandsvariablen werden mit festgelegten Startwerten belegt
  3. Komprimierung: Jeder Datenblock durchläuft mehrere Runden mathematischer Operationen (Bitverschiebungen, logische Verknüpfungen, Additionen)
  4. Finalisierung: Die Zwischenergebnisse werden zum endgültigen Hashwert zusammengeführt

Ein wichtiges Merkmal ist der Avalanche-Effekt (Lawineneffekt): Ändert sich auch nur ein einziges Bit der Eingabe, verändert sich der resultierende Hashwert komplett. Dadurch lassen sich selbst minimale Änderungen zuverlässig erkennen.

Eigenschaften kryptographischer Hashfunktionen

Für sicherheitskritische Anwendungen müssen Hashfunktionen bestimmte Eigenschaften erfüllen. Diese Anforderungen unterscheiden kryptographische Hashfunktionen von einfachen Prüfsummen wie CRC.

Einweg-Eigenschaft (Preimage Resistance)

Aus einem Hashwert darf sich die ursprüngliche Eingabe nicht berechnen lassen. Selbst mit enormer Rechenleistung soll es praktisch unmöglich sein, zu einem gegebenen Hash die passende Eingabe zu finden. Diese Eigenschaft ist essenziell für die sichere Speicherung von Passwörtern.

Kollisionsresistenz

Es soll praktisch unmöglich sein, zwei verschiedene Eingaben zu finden, die denselben Hashwert erzeugen. Eine solche Übereinstimmung nennt man Kollision. Gäbe es einfache Wege, Kollisionen zu berechnen, könnten Angreifer beispielsweise gefälschte Dokumente erstellen, die denselben Hash wie das Original aufweisen.

Determinismus

Dieselbe Eingabe muss immer exakt denselben Hashwert liefern. Diese Vorhersagbarkeit ist notwendig, damit du beispielsweise prüfen kannst, ob ein eingegebenes Passwort mit dem gespeicherten Hash übereinstimmt.

Wichtige Hash-Algorithmen im Überblick

Im Laufe der Zeit wurden verschiedene Hash-Algorithmen entwickelt. Einige davon gelten heute als unsicher und sollten nicht mehr für sicherheitskritische Anwendungen verwendet werden.

MD5

MD5 (Message Digest 5) wurde 1991 von Ronald Rivest entwickelt und erzeugt 128-Bit-Hashes (32 hexadezimale Zeichen). Der Algorithmus war lange Zeit weit verbreitet, gilt jedoch seit 2004 als kryptographisch gebrochen. Sicherheitsforscher konnten nachweisen, dass sich Kollisionen innerhalb von Sekunden berechnen lassen. Für einfache Integritätsprüfungen wird MD5 noch verwendet, für Passwörter oder digitale Signaturen ist es laut IETF RFC 6151 nicht mehr geeignet.

SHA-1

SHA-1 (Secure Hash Algorithm 1) stammt aus dem Jahr 1995 und erzeugt 160-Bit-Hashes (40 Zeichen). Obwohl er lange als sicher galt, demonstrierten Google-Forscher 2017 den ersten praktischen Kollisionsangriff (SHAttered). Seitdem gilt SHA-1 als veraltet. Moderne Browser akzeptieren keine TLS-Zertifikate mehr, die mit SHA-1 signiert wurden.

SHA-2 Familie

Die SHA-2-Familie wurde vom US-amerikanischen NIST standardisiert und umfasst mehrere Varianten mit unterschiedlichen Ausgabelängen. SHA-256 (256 Bit) ist heute der empfohlene Standard für die meisten Anwendungen. Er bietet ein gutes Verhältnis zwischen Sicherheit und Geschwindigkeit. SHA-512 mit 512 Bit bietet noch höheren Schutz, ist aber auch rechenintensiver.

SHA-3

SHA-3 wurde 2015 als Alternative zu SHA-2 standardisiert und basiert auf einem völlig anderen Algorithmus (Keccak). Er bietet ähnliche Sicherheit wie SHA-2, verwendet aber eine andere mathematische Struktur. In der Praxis wird SHA-3 noch selten eingesetzt, steht aber als Backup bereit, falls Schwächen in SHA-2 entdeckt werden sollten.

Vergleich gängiger Hash-Algorithmen

Die folgende Tabelle gibt einen Überblick über die wichtigsten Eigenschaften der gängigen Hash-Algorithmen:

AlgorithmusAusgabelängeSicherheitsstatusEmpfehlung
MD5128 Bit (32 Zeichen)GebrochenNur für nicht-sicherheitskritische Anwendungen
SHA-1160 Bit (40 Zeichen)GebrochenNicht mehr verwenden
SHA-256256 Bit (64 Zeichen)SicherEmpfohlener Standard
SHA-512512 Bit (128 Zeichen)SicherFür höchste Sicherheitsanforderungen
SHA-3224–512 BitSicherAlternative zu SHA-2

Für neue Projekte solltest du SHA-256 oder stärker verwenden. Die Geschwindigkeitsvorteile von MD5 sind in den meisten Anwendungsfällen vernachlässigbar und rechtfertigen das Sicherheitsrisiko nicht.

Einsatzgebiete von Hashfunktionen

Hashfunktionen sind in der IT allgegenwärtig. Die wichtigsten Anwendungsbereiche zeigen, warum du als IT-Fachkraft dieses Konzept verstehen solltest.

Passwortspeicherung

Passwörter werden niemals im Klartext gespeichert. Stattdessen berechnet das System beim Anlegen eines Kontos den Hash des Passworts und speichert nur diesen. Bei der Anmeldung wird das eingegebene Passwort erneut gehasht und mit dem gespeicherten Wert verglichen. Stimmen beide überein, ist das Passwort korrekt, ohne dass es jemals lesbar abgelegt werden musste.

Moderne Systeme verwenden dabei spezialisierte Passwort-Hashfunktionen wie bcrypt, scrypt oder Argon2. Diese sind absichtlich langsam und erhöhen den Aufwand für Brute-Force-Angriffe erheblich. Zusätzlich wird ein zufälliger Wert (Salt) zum Passwort hinzugefügt, um Rainbow-Table-Angriffe zu verhindern.

Integritätsprüfung und Checksummen

Mit Hashes kannst du prüfen, ob eine Datei unverändert ist. Softwarehersteller veröffentlichen die SHA-256-Hashes ihrer Downloads. Nach dem Herunterladen berechnest du den Hash der Datei und vergleichst ihn mit dem veröffentlichten Wert. Stimmen sie überein, ist die Datei authentisch und wurde nicht manipuliert. Mehr dazu erfährst du im Lexikoneintrag zur Checksum (Prüfsumme).

Digitale Signaturen

Bei digitalen Signaturen wird nicht das gesamte Dokument verschlüsselt, sondern nur dessen Hash. Der Absender signiert den Hashwert mit seinem privaten Schlüssel. Der Empfänger kann die Signatur mit dem öffentlichen Schlüssel verifizieren und gleichzeitig prüfen, ob das Dokument unverändert ist. Dieses Verfahren ist deutlich schneller als das Signieren großer Dateien und wird unter anderem bei der TLS-Verschlüsselung eingesetzt.

Datenstrukturen in der Programmierung

Auch abseits der Kryptographie spielen Hashfunktionen eine wichtige Rolle. Hashtabellen (Hash Maps) nutzen Hashfunktionen, um Daten effizient zu speichern und abzurufen. Der Hash des Schlüssels bestimmt die Speicherposition. Dadurch können Werte in konstanter Zeit O(1) gefunden werden, statt eine ganze Liste durchsuchen zu müssen.

Hashes in der Praxis berechnen

Als Fachinformatiker für Systemintegration oder Anwendungsentwicklung wirst du regelmäßig mit Hashes arbeiten. Hier siehst du, wie du SHA-256-Hashes unter verschiedenen Betriebssystemen berechnest.

Linux und macOS

# SHA-256-Hash einer Datei berechnen
sha256sum datei.iso

# SHA-256-Hash eines Strings berechnen
echo -n "Hallo Welt" | sha256sum

# Ausgabe: a1d0c6e83f027327d8461063f4ac58a6

Windows PowerShell

# SHA-256-Hash einer Datei berechnen
Get-FileHash datei.iso -Algorithm SHA256

# Ausgabe enthaelt Algorithmus, Hash und Pfad

Python

import hashlib

# SHA-256-Hash berechnen
text = "Hallo Welt"
hash_object = hashlib.sha256(text.encode())
hash_hex = hash_object.hexdigest()
print(hash_hex)  # 64 Zeichen hexadezimal

Sicherheitshinweise

Beim Einsatz von Hashfunktionen gibt es einige wichtige Punkte zu beachten:

  • Keine veralteten Algorithmen für sicherheitskritische Anwendungen: MD5 und SHA-1 sind für Passwörter, Signaturen oder Zertifikate ungeeignet
  • Salting bei Passwörtern: Füge jedem Passwort vor dem Hashen einen zufälligen Salt hinzu
  • Spezialisierte Passwort-Hashes verwenden: bcrypt, scrypt oder Argon2 statt SHA-256 für Passwörter
  • Timing-Attacken vermeiden: Verwende konstante Vergleichsfunktionen, die unabhängig vom Inhalt gleich lange brauchen

Ein weit verbreiteter Fehler ist die Verwendung eines einfachen SHA-256-Hashes für Passwörter ohne Salt. Ein Angreifer könnte dann vorgefertigte Tabellen (Rainbow Tables) nutzen, um häufige Passwörter schnell zu knacken.

Prüfungsbezug

Passt zu deiner Prüfungsvorbereitung

Wenn dir dieser Begriff in Aufgaben, Projektdokumentation oder Fachgespräch begegnet, ordne ihn direkt in den Prüfungsstoff ein.