Zum Hauptinhalt springen

Was ist SHA-3?

SHA-3 ist eine Familie kryptografischer Funktionen, die auf Keccak basiert. Sie wurde 2015 vom US-amerikanischen National Institute of Standards and Technology (NIST) als FIPS 202 standardisiert.

Zur SHA-3-Familie gehören vier kryptografische Hashfunktionen mit fester Hashlänge:

  • SHA3-224
  • SHA3-256
  • SHA3-384
  • SHA3-512

Außerdem definiert FIPS 202 mit SHAKE128 und SHAKE256 zwei sogenannte Extendable-Output Functions (XOFs), deren Ausgabelänge flexibel gewählt werden kann.

Auf den ersten Blick erinnert das stark an SHA-2. Schließlich gibt es dort ebenfalls Varianten mit 224, 256, 384 und 512 Bit langen Hashwerten.

Technisch haben SHA-2 und SHA-3 jedoch einen grundlegend unterschiedlichen Aufbau.

Während die SHA-2-Funktionen Nachrichten blockweise mit Kompressionsfunktionen verarbeiten, basiert SHA-3 auf einer sogenannten Sponge Construction. Daten werden dabei zunächst in einen internen Zustand aufgenommen und anschließend wird aus diesem Zustand die Ausgabe erzeugt.

Genau dieser fundamental andere Aufbau ist einer der Gründe, warum SHA-3 eine interessante Ergänzung zu SHA-2 darstellt.

Wichtig ist dabei:

SHA-3 wurde nicht eingeführt, weil SHA-2 gebrochen oder grundsätzlich unsicher wäre.

SHA-2 und SHA-3 sind zwei unterschiedliche Familien kryptografischer Hashfunktionen, die beide weiterhin verwendet werden können.

Warum wurde SHA-3 entwickelt?​

Um die Entstehung von SHA-3 zu verstehen, müssen wir ein wenig zurückgehen.

In den 2000er-Jahren gab es bedeutende Fortschritte bei der Kryptoanalyse verschiedener Hashfunktionen. Insbesondere Angriffe auf SHA-1 führten zu ernsthaften Bedenken hinsichtlich seiner Kollisionsresistenz.

Das NIST begann deshalb mit der Entwicklung eines neuen kryptografischen Hashstandards.

Statt selbst einen neuen Algorithmus festzulegen, entschied sich das NIST für einen öffentlichen Wettbewerb.

Am 2. November 2007 wurde die SHA-3 Cryptographic Hash Algorithm Competition gestartet.

Das Ziel war die Entwicklung eines neuen kryptografischen Hashalgorithmus, der die bereits standardisierten Hashfunktionen ergänzen sollte.

2008 gingen insgesamt 64 Einreichungen beim NIST ein.

Davon wurden 51 Kandidaten für die erste Runde ausgewählt. 14 Algorithmen erreichten die zweite Runde und schließlich blieben fünf Finalisten übrig:

  • BLAKE
  • Grøstl
  • JH
  • Keccak
  • Skein

Diese fünf Algorithmen wurden anschließend weiter analysiert und öffentlich diskutiert.

Am 2. Oktober 2012 gab das NIST schließlich den Gewinner bekannt:

Keccak.

Keccak wurde von Guido Bertoni, Joan Daemen, Michaël Peeters und Gilles Van Assche entwickelt.

Aus der Auswahl von Keccak entstand anschließend der neue SHA-3-Standard.

Im August 2015 veröffentlichte das NIST schließlich FIPS 202 – SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions.

Damit war die SHA-3-Familie offiziell standardisiert.

SHA-3 ersetzt SHA-2 nicht​

Der Name „SHA-3“ kann leicht den Eindruck vermitteln, dass SHA-3 einfach die neuere und damit bessere Version von SHA-2 sei.

So einfach ist es allerdings nicht.

FIPS 202 beschreibt die SHA-3-Familie ausdrücklich als Ergänzung zu den bereits in FIPS 180-4 spezifizierten Hashfunktionen.

Das ist ein wichtiger Unterschied.

Bei SHA-1 gibt es konkrete kryptografische Gründe, warum der Algorithmus für Anwendungen, die Kollisionsresistenz benötigen, nicht mehr verwendet werden sollte.

Bei SHA-2 besteht diese Situation nicht.

Algorithmen wie SHA-256 und SHA-512 können weiterhin für Anwendungen eingesetzt werden, die sichere kryptografische Hashfunktionen benötigen. Auch das NIST sieht derzeit keinen allgemeinen Grund, bestehende Anwendungen von SHA-2 auf SHA-3 umzustellen.

SHA-3 stellt stattdessen eine zusätzliche Familie bereit, deren interner Aufbau sich grundlegend von SHA-2 unterscheidet.

SHA-3 sollte deshalb nicht einfach als „Nachfolger“ verstanden werden, der SHA-2 ersetzt.

SHA-3 basiert auf Keccak​

Alle sechs in FIPS 202 definierten SHA-3-Funktionen basieren auf Keccak.

Keccak unterscheidet sich konzeptionell stark von SHA-2.

Im Zentrum steht eine sogenannte Sponge Construction.

Der Name lässt sich tatsächlich ziemlich anschaulich verstehen.

Ein Schwamm kann zunächst Flüssigkeit aufnehmen und anschließend wieder abgeben.

Eine Sponge Construction funktioniert abstrakt ähnlich:

Input
│
▼
Absorb
│
▼
┌────────────────────┐
│ interner State │
│ │
│ Keccak-Permutation │
└────────────────────┘
│
▼
Squeeze
│
▼
Output

In der Absorbing Phase werden die Eingabedaten schrittweise in einen internen Zustand aufgenommen.

Dieser Zustand wird dabei wiederholt durch eine Permutation transformiert.

Für die SHA-3-Funktionen verwendet FIPS 202 eine Keccak-Permutation mit einem 1600 Bit großen Zustand und 24 Runden.

Nachdem die komplette Eingabe verarbeitet wurde, beginnt die Squeezing Phase.

Nun werden Daten aus dem internen Zustand als Ausgabe entnommen.

Vereinfacht können wir uns also merken:

Absorb → transformieren → Squeeze

Dieses Prinzip ist fundamental für SHA-3.

Wie genau das funktioniert und welche Rolle dabei Begriffe wie State, Rate und Capacity spielen, schauen wir uns im Artikel Wie funktioniert SHA-3? im Detail an.

Welche Hashfunktionen gehören zu SHA-3?​

FIPS 202 definiert vier kryptografische SHA-3-Hashfunktionen mit fester Ausgabelänge:

AlgorithmusHashlänge
SHA3-224224 Bit
SHA3-256256 Bit
SHA3-384384 Bit
SHA3-512512 Bit

Die Zahl im Namen gibt jeweils die Länge des erzeugten Hashwerts an.

SHA3-256 erzeugt beispielsweise immer einen Hashwert mit einer Länge von 256 Bit.

Das entspricht 32 Byte beziehungsweise 64 hexadezimalen Zeichen.

SHA3-512 erzeugt dagegen einen 512 Bit langen Hashwert, also 64 Byte beziehungsweise 128 hexadezimale Zeichen.

Die Namen erinnern damit stark an die SHA-2-Familie.

Das bedeutet allerdings nicht, dass die entsprechenden Algorithmen identisch sind.

SHA-256 und SHA3-256 sind nicht dasselbe​

Sowohl SHA-256 als auch SHA3-256 erzeugen einen 256 Bit langen Hashwert.

Trotzdem handelt es sich um zwei völlig unterschiedliche Hashfunktionen.

Nehmen wir beispielsweise die Eingabe:

hello

SHA-256 erzeugt daraus:

2cf24dba5fb0a30e26e83b2ac5b9e29e
1b161e5c1fa7425e73043362938b9824

SHA3-256 erzeugt dagegen:

3338be694f50c5f338814986cdf06864
53a888b84f424d792af4b9202398f392

Beide Hashwerte sind 256 Bit lang.

Sie sind trotzdem vollkommen unterschiedlich.

Das liegt daran, dass SHA-256 und SHA3-256 intern völlig unterschiedliche Konstruktionen verwenden.

Die Länge eines Hashwerts sagt also nicht aus, welcher Algorithmus ihn erzeugt hat.

SHA-256 vs. SHA3-256

Vergleiche SHA-256 und SHA3-256 für dieselbe Eingabe. Beide liefern 256-Bit-Hashwerte, sind aber völlig unterschiedliche Hashfunktionen.

UTF-8-Bytes: 0

Diese Implementierung dient der Veranschaulichung. Für produktive Kryptografie sollten geprüfte kryptografische Bibliotheken verwendet werden.

SHA3-256 ist nicht einfach eine neue Version von SHA-256.

SHA-3 enthält auch SHAKE128 und SHAKE256​

FIPS 202 definiert neben den vier SHA-3-Hashfunktionen noch zwei weitere Funktionen:

  • SHAKE128
  • SHAKE256

Dabei handelt es sich um sogenannte Extendable-Output Functions, kurz XOFs.

Der entscheidende Unterschied zu einer klassischen Hashfunktion liegt in der Ausgabelänge.

SHA3-256 erzeugt immer genau 256 Bit.

Bei SHAKE wird dagegen die gewünschte Ausgabelänge angegeben.

Eine SHAKE-Funktion kann beispielsweise Ausgaben mit folgenden Längen erzeugen:

256 Bit
512 Bit
1024 Bit
2048 Bit
...

Die Ausgabe ist also nicht auf eine einzige feste Länge beschränkt.

Das funktioniert besonders gut mit der Sponge Construction, weil während der Squeezing Phase weitere Output-Bits erzeugt werden können, bis die gewünschte Länge erreicht ist.

Eine Besonderheit der Namen sollte man dabei beachten:

Bei SHA3-256 steht die Zahl 256 für die Länge des Hashwerts.

Bei SHAKE128 und SHAKE256 bezeichnen 128 beziehungsweise 256 dagegen die Sicherheitsstärke, die diese Funktionen grundsätzlich unterstützen sollen – nicht ihre Ausgabelänge.

SHAKE128 und SHAKE256 werden wir deshalb später noch separat betrachten.

Wie funktioniert SHA-3 grundsätzlich?​

Der genaue Aufbau von SHA-3 ist deutlich komplexer, als ich ihn in einem einzigen Übersichtsartikel sinnvoll erklären könnte.

Das grundlegende Prinzip lässt sich aber bereits auf wenige Schritte reduzieren.

1. Die Eingabe wird vorbereitet​

Zunächst muss die Nachricht für die Verarbeitung vorbereitet werden.

Bei den vier SHA-3-Hashfunktionen wird an die Nachricht zunächst ein Zwei-Bit-Suffix 01 angehängt. Dieses Suffix unterstützt die sogenannte Domain Separation.

Anschließend kommt das Keccak-Padding pad10*1 zum Einsatz.

2. Die Daten werden absorbiert​

Die vorbereitete Nachricht wird blockweise in den internen Zustand aufgenommen.

Diese Phase wird Absorbing Phase genannt.

3. Der interne Zustand wird transformiert​

Während der Verarbeitung wird der interne Zustand durch die Keccak-Permutation transformiert.

Die SHA-3-Funktionen aus FIPS 202 verwenden dafür KECCAK-p[1600,24]: einen 1600 Bit großen Zustand und 24 Permutationsrunden.

4. Die Ausgabe wird erzeugt​

Nachdem die Eingabe vollständig verarbeitet wurde, beginnt die Squeezing Phase.

Dabei werden Bits aus dem internen Zustand als Ausgabe entnommen.

Bei SHA3-256 geschieht das so lange, bis 256 Output-Bits erzeugt wurden.

Bei SHA3-512 werden entsprechend 512 Bit erzeugt.

Bei SHAKE kann dieser Prozess dagegen fortgesetzt werden, bis die gewünschte Ausgabelänge erreicht wurde.

Rate und Capacity​

Der interne Zustand einer Sponge Construction wird konzeptionell in zwei Bereiche aufgeteilt:

Rate und Capacity.

Dabei gilt:

State = Rate + Capacity

Bei den SHA-3-Funktionen beträgt die Größe des verwendeten Zustands 1600 Bit.

Die Rate bestimmt unter anderem, wie viele Bits pro Schritt mit der Eingabe beziehungsweise Ausgabe interagieren.

Die Capacity ist der verbleibende Teil des internen Zustands und ist eng mit den Sicherheitseigenschaften der Sponge Construction verbunden.

Für die vier SHA-3-Hashfunktionen legt FIPS 202 die Capacity auf das Doppelte der jeweiligen Digest-Länge fest.

Für SHA3-256 ergibt sich beispielsweise:

Rate = 1088 Bit
Capacity = 512 Bit
-------------------
State = 1600 Bit

Für SHA3-512 sieht die Aufteilung so aus:

Rate = 576 Bit
Capacity = 1024 Bit
-------------------
State = 1600 Bit

Je nach SHA-3-Variante ändern sich also Rate und Capacity, während die Größe des internen Zustands gleich bleibt.

Warum das so ist und welche Auswirkungen diese Parameter auf Verarbeitung und Sicherheit haben, schauen wir uns im Artikel über die Sponge Construction genauer an.

SHA-2 und SHA-3 funktionieren grundlegend unterschiedlich​

SHA-2 und SHA-3 verfolgen unterschiedliche Konstruktionsprinzipien.

Vereinfacht können wir einige Unterschiede so gegenüberstellen:

EigenschaftSHA-2SHA-3
StandardFIPS 180FIPS 202
Grundkonstruktionblockweise Verarbeitung mit KompressionsfunktionenSponge Construction
Interner KernSHA-2-KompressionsfunktionenKeccak-Permutation
256-Bit-VarianteSHA-256SHA3-256
512-Bit-VarianteSHA-512SHA3-512
Extendable Outputnicht Teil von SHA-2SHAKE128 / SHAKE256

Das bedeutet auch:

SHA-256 ≠ SHA3-256

und:

SHA-512 ≠ SHA3-512

Die gleiche Zahl im Namen beschreibt lediglich dieselbe Länge des jeweiligen Hashwerts.

Sie bedeutet nicht, dass die Algorithmen intern gleich funktionieren.

Ist SHA-3 sicherer als SHA-2?​

„Ist SHA-3 sicherer als SHA-2?“ klingt zunächst nach einer einfachen Frage.

Eine pauschale Antwort wie:

SHA-3 ist neuer und deshalb sicherer.

wäre allerdings irreführend.

SHA-2 und SHA-3 stellen unterschiedliche kryptografische Konstruktionen bereit.

Die vier SHA-3-Hashfunktionen sind wie die SHA-2-Funktionen für Anwendungen vorgesehen, die sichere kryptografische Hashalgorithmen benötigen.

Ein wesentlicher Vorteil von SHA-3 liegt darin, dass die Familie eine strukturell andere Alternative zu SHA-2 bereitstellt.

SHA-3 basiert nicht einfach auf einer leicht veränderten SHA-2-Konstruktion.

Die beiden Familien unterscheiden sich fundamental.

Deshalb sollte man SHA-3 eher als alternative kryptografische Konstruktion verstehen und nicht als „SHA-2, nur sicherer“.

Das NIST sieht derzeit auch keinen allgemeinen Grund, bestehende Anwendungen allein deshalb von SHA-2 auf SHA-3 umzustellen.

SHA-3 und Keccak sind nicht einfach austauschbare Begriffe​

Hier gibt es eine wichtige Besonderheit, die insbesondere für Entwickler relevant ist.

SHA-3 basiert auf Keccak. Trotzdem ist eine Funktion, die eine Bibliothek oder ein Protokoll als Keccak-256 bezeichnet, nicht automatisch identisch mit der standardisierten Funktion SHA3-256.

FIPS 202 definiert SHA3-256 konkret als eine bestimmte Keccak-basierte Konstruktion.

Für die SHA-3-Hashfunktionen wird an die Nachricht unter anderem das Zwei-Bit-Suffix 01 angehängt. Dieses Suffix dient der Domain Separation.

SHAKE128 und SHAKE256 verwenden beispielsweise ein anderes Suffix (1111).

Solche Details der konkreten Funktionsdefinition sind entscheidend: Zwei Funktionen können dieselbe zugrunde liegende Keccak-Konstruktion verwenden und trotzdem für dieselbe Eingabe unterschiedliche Ergebnisse liefern.

Deshalb gilt für das üblicherweise als Keccak-256 bezeichnete Verfahren beispielsweise:

SHA3-256("hello") ≠ Keccak-256("hello")

Das ist in der Praxis relevant, weil Bibliotheken und Protokolle teilweise ausdrücklich von Keccak-256 sprechen.

Ein bekanntes Beispiel dafür findet sich im Ethereum-Ökosystem.

Wer kryptografische Funktionen implementiert oder eine Bibliothek auswählt, sollte deshalb genau darauf achten, welche konkrete Funktion ein Standard oder Protokoll verlangt.

„Keccak“ und „SHA-3“ sollten nicht pauschal als austauschbare Bezeichnungen behandelt werden.

Wann sollte ich SHA-3 verwenden?​

SHA-3 kann beispielsweise sinnvoll oder erforderlich sein, wenn ein Standard oder Protokoll ausdrücklich eine SHA-3-Funktion verlangt.

Auch wenn bewusst eine standardisierte kryptografische Hashkonstruktion verwendet werden soll, die sich strukturell von SHA-2 unterscheidet, bietet SHA-3 eine Alternative.

SHAKE128 und SHAKE256 eröffnen zusätzlich Anwendungen, bei denen eine flexibel wählbare Ausgabelänge benötigt wird.

Die Existenz von SHA-3 bedeutet allerdings nicht, dass bestehende Anwendungen automatisch von SHA-256 auf SHA3-256 umgestellt werden müssen.

Wenn ein System SHA-256 korrekt für einen geeigneten Anwendungsfall verwendet, ist eine Migration allein aufgrund der höheren Zahl im Namen von SHA-3 nicht notwendig.

Welche Funktion geeignet ist, hängt vom konkreten Anwendungsfall und den jeweiligen Anforderungen beziehungsweise Standards ab.

SHA-3 ist keine Passwort-Hashfunktion​

Eine kryptografisch sichere Hashfunktion ist nicht automatisch eine geeignete Funktion zum Speichern von Passwörtern.

Das gilt für SHA-2 genauso wie für SHA-3.

SHA3-256 direkt auf ein Passwort anzuwenden und lediglich den resultierenden Hashwert zu speichern, ist kein moderner Ansatz für eine sichere Passwortspeicherung.

Für diesen Zweck existieren spezielle Password-Hashing-Verfahren wie beispielsweise:

  • Argon2
  • scrypt
  • bcrypt

Diese Verfahren verfolgen andere Ziele als allgemeine kryptografische Hashfunktionen und sind bewusst so konstruiert, dass das massenhafte Testen von Passwortkandidaten für Angreifer aufwendiger wird.

Das Thema Passwort-Hashing schauen wir uns deshalb separat an.

Das Wichtigste in Kürze​

SHA-3 ist eine Familie kryptografischer Funktionen, die auf Keccak basiert und vom NIST in FIPS 202 standardisiert wurde.

Die wichtigsten Punkte, die du dir merken solltest:

  • SHA-3 basiert auf Keccak, dem Gewinner des SHA-3-Wettbewerbs.
  • Keccak wurde 2012 vom NIST als Gewinner ausgewählt.
  • FIPS 202 wurde 2015 veröffentlicht.
  • SHA-3 verwendet eine Sponge Construction und unterscheidet sich damit grundlegend von SHA-2.
  • SHA3-224 erzeugt einen 224 Bit langen Hashwert.
  • SHA3-256 erzeugt einen 256 Bit langen Hashwert.
  • SHA3-384 erzeugt einen 384 Bit langen Hashwert.
  • SHA3-512 erzeugt einen 512 Bit langen Hashwert.
  • SHAKE128 und SHAKE256 sind Extendable-Output Functions mit flexibel wählbarer Ausgabelänge.
  • Die Zahlen 128 und 256 in SHAKE128 und SHAKE256 bezeichnen nicht die feste Ausgabelänge.
  • SHA-3 ersetzt SHA-2 nicht einfach.
  • SHA3-256 und SHA-256 sind unterschiedliche Hashfunktionen.
  • SHA3-256 und das üblicherweise als Keccak-256 bezeichnete Verfahren sind ebenfalls nicht identisch.
  • SHA-3 ist wie SHA-2 keine spezielle Passwort-Hashfunktion.

Damit kennen wir die wichtigsten Bestandteile der SHA-3-Familie.

Der nächste Schritt ist jetzt, uns anzusehen, wie SHA-3 intern funktioniert – insbesondere, was beim Absorbieren und Ausgeben der Daten passiert und welche Rolle State, Rate, Capacity und die Keccak-Permutation dabei spielen.

Quellen und weiterführende Standards​

  1. NIST FIPS 202 – SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions Der zentrale NIST-Standard für SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128 und SHAKE256.

  2. NIST IR 7896 – Third-Round Report of the SHA-3 Cryptographic Hash Algorithm Competition Der Abschlussbericht zum SHA-3-Wettbewerb mit dem Auswahlverfahren, den fünf Finalisten und der Entscheidung für Keccak.

  3. NIST – SHA-3 Project NIST-Übersicht zur SHA-3 Competition und zur Auswahl von Keccak.

  4. NIST – Policy on Hash Functions Aktuelle NIST-Einordnung zur Verwendung von SHA-2 und SHA-3, einschließlich der Aussage, dass derzeit kein allgemeiner Übergang von SHA-2 zu SHA-3 erforderlich ist.