SHA-2

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von SHA256)
Zur Navigation springen Zur Suche springen

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.

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.[1]

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.[2] Hiervon ausgenommen ist SHA-224, siehe Empfehlung seitens des Bundesamtes für Sicherheit in der Informationstechnik (BSI).[3] Die Funktionen der SHA3-Familie sind resistent gegen Length-Extension-Attacken im Gegensatz zu einigen SHA-2-Varianten.

Rundenfunktion von SHA-224 und SHA-256.
A bis H sind die Wörter des Datenblocks, der verschlüsselt wird, sind aus dem Nachrichtenblock berechnete Rundenschlüssel und Konstanten.
  
  
  
  
Die Varianten mit 64-Bit-Wörtern nutzen die gleiche Rundenfunktion, nur mit anderen Rotationsweiten:
  
  

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 232 bzw. 264 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.[4]

Mit den 64-Bit-Varianten können theoretisch Daten bis zu einer Größe von 2128 Bit verarbeitet werden. In der Praxis sind Dateien mit mehr als 264 Bit jedoch unrealistisch.

Beispiel-Hashes

[Bearbeiten | Quelltext bearbeiten]

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

SHA-224("") =
d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f
SHA-256("") =
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
SHA-512/224("") =
6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4
SHA-512/256("") =
c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a
SHA-384("") =
38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
SHA-512("") =
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e

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.

SHA-224("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") =
49b08defa65e644cbf8a2dd9270bdededabc741997d1dadd42026d7b
SHA-224("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") =
58911e7fccf2971a7d07f93162d8bd13568e71aa8fc86fc1fe9043d1

Normen und Standards

[Bearbeiten | Quelltext bearbeiten]

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

… 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).

Die Algorithmen SHA-1 und SHA-256 sind auch die Basis für die Blockverschlüsselung SHACAL.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Request Access. Federal Register, abgerufen am 5. April 2023.
  2. NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition. NIST, 2. Oktober 2012, abgerufen am 6. Dezember 2017 (englisch): „NIST considers SHA-2 to be secure and suitable for general use.“
  3. BSI TR-02102 Kryptographische Verfahren: Empfehlungen und Schlüssellängen. In: bsi.bund.de. Abgerufen am 5. April 2023.
  4. FIPS PUB 180-4 – Secure Hash Standard (SHS). (PDF) NIST, August 2015, abgerufen am 30. Juni 2021 (englisch, S. 11, Abs. 4.2.2 SHA-224 and SHA-256 Constants; S. 12, Abs. 4.2.3 SHA-384, SHA-512, SHA-512/224 and SHA-512/256 Constants).