Zum Hauptinhalt springen

Was ist SHA-256?

SHA-256 gehört zu den bekanntesten kryptografischen Hashfunktionen.

Der Algorithmus begegnet dir an vielen Stellen: bei der Überprüfung von Dateien, in kryptografischen Protokollen, bei digitalen Signaturen oder als Baustein anderer kryptografischer Verfahren.

Aus einer Eingabe beliebiger unterstützter Länge erzeugt SHA-256 einen Hashwert mit genau:

256 Bit.

Zum Beispiel:

Hello World

wird mit SHA-256 zu:

a591a6d40bf420404a011733cfb7b190
d62c65bf0bcda32b57b277d9ad9f146e

Der Hash besteht aus 256 Bit und wird üblicherweise als 64-stellige Hexadezimalzahl dargestellt.

Aber wie kommt SHA-256 eigentlich zu diesem Ergebnis?

In diesem Artikel schauen wir uns zunächst den Aufbau und die wichtigsten Eigenschaften des Algorithmus an. Wie die einzelnen Berechnungsschritte genau funktionieren, erkläre ich anschließend im Artikel Wie funktioniert SHA-256?.

Was bedeutet SHA-256?​

SHA steht für:

Secure Hash Algorithm

Die Zahl 256 bezeichnet die Länge des erzeugten Hashwerts:

SHA-256
↓
256 Bit
↓
32 Byte
↓
64 Hex-Zeichen

Dabei ist die Länge der Eingabe nicht ausschlaggebend für die Länge der Ausgabe.

Ein kurzer Text:

abc

erzeugt ebenso einen 256-Bit-Hash wie eine sehr große Datei.

Was eine Hashfunktion grundsätzlich macht, erkläre ich im Artikel Was ist eine Hashfunktion?.

SHA-256 gehört zur SHA-2-Familie​

SHA-256 ist kein einzelnes, isoliertes Verfahren, sondern gehört zur SHA-2-Familie.

Der Secure Hash Standard von NIST (FIPS 180-4) umfasst unter anderem:

AlgorithmusHashlänge
SHA-224224 Bit
SHA-256256 Bit
SHA-384384 Bit
SHA-512512 Bit
SHA-512/224224 Bit
SHA-512/256256 Bit

Die Namen können dabei etwas irreführend wirken.

SHA-512/256 erzeugt beispielsweise ebenfalls einen 256-Bit-Hash, basiert intern aber auf der SHA-512-Struktur.

Darauf gehe ich ausführlich im Artikel Was sind SHA-512/224 und SHA-512/256? ein.

SHA-256 und SHA-512 unterscheiden sich außerdem nicht einfach nur durch die Länge ihres Ergebnisses. Sie arbeiten unter anderem mit unterschiedlichen Blockgrößen, Wortgrößen und Rundenzahlen.

Diesen Unterschied erkläre ich ausführlich im Artikel SHA-256 vs. SHA-512 – was ist der Unterschied?.

Was passiert grundsätzlich bei SHA-256?​

Auf einer hohen Ebene lässt sich SHA-256 ungefähr so darstellen:

Eingabe
↓
Padding
↓
512-Bit-Blöcke
↓
Message Schedule
↓
64 Runden
↓
interner Hashzustand
↓
256-Bit-Hash

Hinter jedem dieser Schritte steckt eine genau definierte Berechnung.

Für den Einstieg sind zunächst fünf Eigenschaften besonders wichtig:

Blockgröße: 512 Bit
Wortgröße: 32 Bit
Hashwert: 256 Bit
Arbeitsvariablen: 8 × 32 Bit
Runden: 64

Diese Bausteine schauen wir uns nun etwas genauer an.

SHA-256 verarbeitet Daten in 512-Bit-Blöcken​

SHA-256 verarbeitet eine Nachricht nicht einfach als einen beliebig großen Datenblock.

Stattdessen wird die vorbereitete Nachricht in Blöcke von jeweils:

512 Bit
=
64 Byte

aufgeteilt.

Ein solcher Block besteht wiederum aus:

16 × 32 Bit

Diese 32-Bit-Einheiten werden häufig als Words oder Wörter bezeichnet.

Vereinfacht:

512-Bit-Block

┌──────┬──────┬──────┬──────┬─────┬──────┐
│ W₀ │ W₁ │ W₂ │ W₃ │ ... │ W₁₅ │
└──────┴──────┴──────┴──────┴─────┴──────┘

jeweils 32 Bit

Diese ersten 16 Wörter bilden später die Grundlage für das sogenannte Message Schedule.

Warum braucht SHA-256 Padding?​

Eine Nachricht besitzt normalerweise nicht zufällig genau eine Länge, die in das von SHA-256 benötigte Blockformat passt.

Deshalb wird sie vor der eigentlichen Verarbeitung erweitert.

Dieser Vorgang heißt Padding.

Vereinfacht passiert Folgendes:

ursprüngliche Nachricht
↓
ein 1-Bit anhängen
↓
0-Bits ergänzen
↓
ursprüngliche Nachrichtenlänge anhängen
↓
Vielfaches von 512 Bit

Die Länge der ursprünglichen Nachricht wird dabei in einem 64-Bit-Feld am Ende der vorbereiteten Nachricht kodiert.

Nehmen wir beispielsweise:

abc

Die drei ASCII-Zeichen benötigen:

3 × 8 Bit
=
24 Bit

Nach dem Padding besitzt die Nachricht eine Länge, die sich vollständig in 512-Bit-Blöcke zerlegen lässt.

Wie dieses Padding Bit für Bit aussieht, zeige ich im Artikel „SHA-256 Schritt für Schritt“ anhand einer echten Eingabe.

Was ist das Message Schedule?​

Aus jedem 512-Bit-Nachrichtenblock entstehen zunächst 16 Wörter mit jeweils 32 Bit.

SHA-256 arbeitet während seiner Kompressionsberechnung allerdings mit insgesamt:

64 Wörtern

Deshalb werden aus den ursprünglichen 16 Wörtern weitere Wörter berechnet.

Am Ende entsteht:

W₀
W₁
W₂
...
W₁₅

aus dem Nachrichtenblock und anschließend:

W₁₆
W₁₇
...
W₆₃

durch die im SHA-256-Standard definierten Operationen.

Zusammen bilden diese 64 Wörter das Message Schedule.

Jede der 64 Runden verwendet eines dieser Wörter.

64 Runden pro Block​

Für jeden 512-Bit-Block führt SHA-256 insgesamt:

64 Runden

durch.

Dabei arbeitet der Algorithmus mit acht 32-Bit-Arbeitsvariablen:

a
b
c
d
e
f
g
h

Zu Beginn der Verarbeitung eines Blocks werden sie aus dem aktuellen internen Hashzustand initialisiert.

Während jeder Runde werden die Werte mithilfe verschiedener Operationen verändert.

Dazu gehören unter anderem:

  • bitweise logische Operationen,
  • Rotationen,
  • Verschiebungen,
  • Additionen modulo 2³²,
  • ein Wort aus dem Message Schedule,
  • eine für die jeweilige Runde festgelegte Konstante.

Das Ergebnis einer Runde beeinflusst die nächste Runde.

Nach 64 Runden werden die resultierenden Werte mit dem bisherigen Hashzustand kombiniert.

Bei mehreren Nachrichtenblöcken wird dieser neue Zustand anschließend für den nächsten Block verwendet.

Der interne Zustand von SHA-256​

SHA-256 besitzt einen internen Zustand von insgesamt 256 Bit.

Er besteht aus acht 32-Bit-Werten:

H₀
H₁
H₂
H₃
H₄
H₅
H₆
H₇

Bevor der erste Nachrichtenblock verarbeitet wird, besitzen diese Werte fest definierte Initialwerte.

Nach der Verarbeitung eines Blocks entsteht daraus ein neuer Zustand:

Block 1
↓
Hashzustand 1
↓
Block 2
↓
Hashzustand 2
↓
Block 3
↓
...

Nach dem letzten Block werden die acht 32-Bit-Werte zusammengefügt:

H₀ || H₁ || H₂ || H₃ || H₄ || H₅ || H₆ || H₇

Acht Werte mit jeweils 32 Bit ergeben:

8 × 32 Bit
=
256 Bit

Das ist der endgültige SHA-256-Hashwert.

Woher kommen die Initialwerte und Konstanten?​

Die Werte, mit denen SHA-256 arbeitet, wurden nicht einfach willkürlich ausgewählt.

Die acht Initialwerte werden aus den Nachkommabits der Quadratwurzeln der ersten acht Primzahlen abgeleitet.

Die 64 Rundenkonstanten stammen entsprechend aus den Nachkommabits der Kubikwurzeln der ersten 64 Primzahlen.

Für die Verwendung von SHA-256 musst du diese Werte normalerweise nicht selbst berechnen – sie sind im Standard fest vorgegeben.

Für das Verständnis des Algorithmus ist aber interessant, dass es sich um öffentlich nachvollziehbare Konstanten handelt.

Im Artikel Wie funktioniert SHA-256? schauen wir uns einige dieser Werte direkt an.

Wie sicher ist SHA-256?​

Hier ist eine Unterscheidung wichtig, die wir bereits bei den Grundlagen kennengelernt haben.

SHA-256 besitzt eine 256 Bit lange Ausgabe.

Das bedeutet aber nicht, dass jede Sicherheitseigenschaft ebenfalls eine Stärke von 256 Bit besitzt.

NIST gibt für SHA-256 unter anderem folgende Sicherheitsstärken an:

EigenschaftSecurity Strength
Preimage Resistance256 Bit
Collision Resistance128 Bit

Bei einer generischen Preimage-Suche liegt der Arbeitsaufwand damit in der Größenordnung von:

2²⁵⁶

Bei der generischen Suche nach einer Collision greift dagegen der Birthday-Effekt.

Der Aufwand liegt deshalb in der Größenordnung von:

2¹²⁸

Das ist kein spezieller Fehler von SHA-256, sondern die erwartete generische Kollisionssicherheit einer idealen Hashfunktion mit 256 Bit Ausgabe.

Warum das so ist, erkläre ich in:

Die Second-Preimage Resistance steht bewusst nicht in dieser vereinfachten Tabelle: NIST gibt ihre Stärke für SHA-256 abhängig von der Nachrichtenlänge an. Warum das so ist, erkläre ich im Artikel Was ist Second-Preimage Resistance?.

Was passiert bei einer kleinen Änderung der Eingabe?​

Eine weitere wichtige Eigenschaft kryptografischer Hashfunktionen lässt sich mit SHA-256 sehr gut beobachten.

Ändern wir:

Hello World

zu:

hello World

ändert sich nur ein Zeichen.

Die resultierenden SHA-256-Hashwerte unterscheiden sich trotzdem stark voneinander.

Dieses Verhalten wird als Avalanche Effect bezeichnet.

Eine kleine Änderung der Eingabe führt typischerweise zu Änderungen an vielen Bits der Ausgabe.

Im Artikel Was ist der Avalanche Effect? kannst du dieses Verhalten mit dem interaktiven Avalanche-Tool selbst ausprobieren.

Wofür wird SHA-256 verwendet?​

Kryptografische Hashfunktionen wie SHA-256 sind Bausteine für zahlreiche Sicherheitsmechanismen.

Hashwerte können beispielsweise verwendet werden, um Daten auf Veränderungen zu prüfen.

Wenn zu einer Datei ein vertrauenswürdig bezogener SHA-256-Hash veröffentlicht wurde, kannst du den Hash der heruntergeladenen Datei berechnen und beide Werte vergleichen.

erwarteter Hash
↓
Vergleich
↑
Hash der heruntergeladenen Datei

Sind die Werte unterschiedlich, ist die Datei nicht identisch mit der erwarteten Eingabe.

Ein übereinstimmender Hash allein beweist allerdings nicht automatisch die Authentizität einer Datei. Dafür muss insbesondere auch der Referenzwert aus einer vertrauenswürdigen Quelle stammen.

Hashfunktionen werden außerdem als Bausteine anderer kryptografischer Konstruktionen eingesetzt, beispielsweise im Zusammenhang mit digitalen Signaturen, Message Authentication Codes und weiteren kryptografischen Verfahren.

Dabei ist wichtig:

SHA-256 selbst ist keine Verschlüsselung und besitzt keinen geheimen Schlüssel.

Ist SHA-256 für Passwörter geeignet?​

Eine häufige Frage lautet:

Kann ich Passwörter einfach mit SHA-256 hashen und anschließend den Hash speichern?

Für die sichere Passwortspeicherung ist ein einzelner schneller SHA-256-Hash nicht das geeignete Verfahren.

Das Problem besteht nicht darin, dass SHA-256 als kryptografische Hashfunktion grundsätzlich unsicher wäre.

Im Gegenteil: Seine hohe Berechnungsgeschwindigkeit ist bei vielen Anwendungen erwünscht.

Bei Passwortangriffen hilft genau diese Geschwindigkeit allerdings dem Angreifer, weil sehr viele Passwortkandidaten ausprobiert werden können.

Für Passwörter werden deshalb geeignete Password-Hashing-Verfahren eingesetzt, die unter anderem mit Salt und einem Kostenfaktor arbeiten und Rateversuche gezielt verteuern. Auch NIST sieht in SP 800-63B für gespeicherte Passwörter ein geeignetes Password-Hashing-Schema mit Salt und Kostenfaktor vor.

Warum ein starker allgemeiner Hashalgorithmus deshalb trotzdem nicht automatisch ein guter Passwort-Hash ist, behandle ich später ausführlich im Bereich Passwortsicherheit.

Probier SHA-256 selbst aus​

Die Eigenschaften von SHA-256 lassen sich am besten nachvollziehen, wenn du verschiedene Eingaben selbst ausprobierst.

Nutze den HashGenerator und berechne beispielsweise nacheinander:

Hello World
hello World
Hello World!

Achte dabei auf zwei Dinge:

Die Länge bleibt immer gleich.

Jeder SHA-256-Hash besitzt 256 Bit beziehungsweise 64 Hex-Zeichen.

Der Inhalt verändert sich stark.

Schon kleine Änderungen an der Eingabe erzeugen völlig anders aussehende Hashwerte.

AlgorithmusSHA-256

Im nächsten Schritt werden wir nicht mehr nur das Ergebnis betrachten, sondern den Algorithmus selbst öffnen.

Das Wichtigste in Kürze​

SHA-256 ist eine kryptografische Hashfunktion aus der SHA-2-Familie.

Die wichtigsten Eigenschaften:

  • SHA-256 erzeugt einen Hashwert mit 256 Bit.
  • Der Hash wird üblicherweise als 64 Hex-Zeichen dargestellt.
  • SHA-256 verarbeitet vorbereitete Nachrichten in 512-Bit-Blöcken.
  • Der Algorithmus arbeitet mit 32-Bit-Wörtern.
  • Jeder Nachrichtenblock durchläuft 64 Runden.
  • Dabei werden acht 32-Bit-Arbeitsvariablen verwendet.
  • Aus 16 Wörtern des Nachrichtenblocks wird ein Message Schedule mit 64 Wörtern erzeugt.
  • Der interne Hashzustand besteht aus acht 32-Bit-Werten.
  • Nach dem letzten Block ergeben diese zusammen den 256-Bit-Digest.
  • SHA-256 besitzt laut NIST 256 Bit Preimage Resistance und 128 Bit Collision Resistance.
  • SHA-256 ist keine Verschlüsselung.
  • Ein einfacher SHA-256-Hash allein ist nicht das geeignete Verfahren zur Passwortspeicherung.

Wie geht es weiter?​

Bis hierhin haben wir SHA-256 hauptsächlich von außen betrachtet.

Wir wissen jetzt, aus welchen großen Bausteinen der Algorithmus besteht:

Padding
↓
512-Bit-Blöcke
↓
Message Schedule
↓
64 Runden
↓
Hashzustand
↓
256-Bit-Digest

Im nächsten Artikel öffnen wir diese Blackbox.

Dabei schauen wir uns die Bitoperationen, Funktionen, Konstanten und einzelnen Berechnungsschritte genauer an:

Wie funktioniert SHA-256?

Danach kannst du in SHA-256 Schritt für Schritt deinen eigenen Text durch den Algorithmus verfolgen.

Quellen und weiterführende Standards​

Die folgenden Primär- und Normquellen bilden die Grundlage für die technischen Aussagen dieses Artikels:

  1. National Institute of Standards and Technology (NIST), FIPS 180-4 – Secure Hash Standard (SHS) Spezifikation von SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 und SHA-512/256 (Update vom August 2015).

  2. National Institute of Standards and Technology (NIST), Hash Functions Sicherheitseigenschaften und Security Strengths der zugelassenen Hashfunktionen.

  3. National Institute of Standards and Technology (NIST), SP 800-63B – Digital Identity Guidelines Anforderungen an die sichere Speicherung von Passwörtern.