SHA-2
# SHA-2

SHA-2 (von englisch secure hash algorithm, „sicherer Hash-Algorithmus“) ist der Oberbegriff für die kryptologischen Hashfunktionen SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 und SHA-512/256, die vom US-amerikanischen National Institute of Standards and Technology (NIST) als Nachfolger von SHA-1 standardisiert wurden.

## Geschichte

Im August 2002 wurden die Versionen SHA-256, SHA-384 und SHA-512 vorgestellt. Eine vierte Variante, SHA-224, folgte im Februar 2004. Im März 2012 wurde der Standard in FIPS PUB 180-4 um die Hashfunktionen SHA-512/224 und SHA-512/256 ergänzt.

Als Reaktion auf die bekanntgewordenen Angriffe gegen SHA-1 hielt das NIST im Oktober 2005 einen Workshop ab, in dem der aktuelle Stand kryptologischer Hashfunktionen diskutiert wurde. NIST empfahl damals den Übergang von SHA-1 zu Hashfunktionen der SHA-2-Familie.

Um eine Hashfunktion mit einem andersartigen Konstruktionsprinzip zu erhalten, organisierte das NIST eine Ausschreibung für SHA-3 nach Vorbild des Advanced Encryption Standards (AES). Die Wahl fiel im Oktober 2012 auf den Algorithmus Keccak. SHA-2 wird aber weiterhin als sicher betrachtet und zur Benutzung empfohlen. Hiervon ausgenommen ist SHA-224, siehe Empfehlung seitens des Bundesamtes für Sicherheit in der Informationstechnik (BSI). Die Funktionen der SHA3-Familie sind resistent gegen Length-Extension-Attacken im Gegensatz zu einigen SHA-2-Varianten.

## Funktionsweise

Wie der Vorläufer SHA-1 ist SHA-2 eine Merkle-Damgård-Konstruktion mit Davies-Meyer-Kompressionsfunktion. Die Nachricht (zu hashende Quelldaten) wird erst erweitert, wobei eine Kodierung der Nachrichtenlänge angefügt wird, und dann in Blöcke zu je sechzehn Wörtern aufgeteilt. Die Nachrichtenblöcke werden nacheinander (iterativ) verarbeitet. Dazu wird ein Datenblock von acht Wörtern mit dem Nachrichtenblock als Schlüssel verschlüsselt, worauf der entstehende Schlüsseltext noch durch Addition der Klartextwörter modulo $2^{32}$ bzw. $2^{64}$ modifiziert wird. Das Resultat ist der nächste Klartext bzw. ihm wird nach dem letzten Nachrichtenblock der Hashwert entnommen. Der Datenblock wird zu Beginn mit Konstanten initialisiert.

Die Länge der Schlüssel- und Datenwörter beträgt 32 oder 64 Bit, je nach Variante. Die kleineren Versionen SHA-224 und SHA-256 verwenden 32-Bit-Wörter und teilen die Nachricht in Blöcke zu 512 Bit. Sie verschlüsseln in 64 Runden unter Verwendung von vier logischen Funktionen und je Runde einer anderen Konstanten. Bei SHA-224 wird vom Endergebnis das achte 32-Bit-Wort weggelassen.

Die übrigen vier Varianten verwenden 64-Bit-Wörter und 1024-Bit-Nachrichtenblöcke und verschlüsseln in 80 Runden, im Wesentlichen mit dem gleichen Algorithmus. Es werden dafür 80 64-Bit-Konstanten verwendet. Der initiale Datenblock besteht entsprechend aus acht 64-Bit-Konstanten. Für SHA-384 sowie SHA-512/224 und SHA-512/256 wird vom Ergebnis nur ein Anfangsstück von 384, 224 bzw. 256 Bit als Hashwert genommen.

Die Konstanten werden aus den Nachkommastellen der Quadrat- oder Kubikwurzeln der ersten Primzahlen gebildet (siehe Unverdächtige Konstante). Jede der sechs Varianten initialisiert den Datenblock mit unterschiedlichen Konstanten.

Mit den 64-Bit-Varianten können theoretisch Daten bis zu einer Größe von $2^{128}$ Bit verarbeitet werden. In der Praxis sind Dateien mit mehr als $2^{64}$ Bit jedoch unrealistisch.

### Beispiel-Hashes

Die Hashwerte werden hier hexadezimal angegeben, zwei Ziffern stellen ein Byte des Hashes dar. Der Hash einer leeren Zeichenkette ist:

Eine kleine Änderung der Nachricht, beispielsweise in der Länge oder des Inhalts, erzeugt einen ganz anderen Hash. Diese Eigenschaft wird in der Kryptographie auch als Lawineneffekt bezeichnet.

## Normen und Standards

SHA-2 wurde zuerst vom NIST selbst veröffentlicht.

* FIPS PUB 180-2 (PDF; 1,5 MB) Secure Hash Standard (Erste Version 2004)
* FIPS PUB 180-4 (PDF) Secure Hash Standard (aktuelle Version 2015)

… und später auch als RFC veröffentlicht:

* RFC 4634 – US Secure Hash Algorithms (SHA and HMAC-SHA). Juli 2006 (veraltet, englisch).
* RFC 6234 – US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF). Mai 2011 (löst RFC 4634 ab, englisch).
