SHA-2

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von SHA-256)

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

Funktionsweise

Rundenfunktion von SHA-224 und SHA-256
  Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)}
  Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)}
  Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)}
  Fehler beim Parsen (Konvertierungsfehler. Der Server („https://wikimedia.org/api/rest_“) hat berichtet: „Cannot get mml. Server problem.“): {\displaystyle \Sigma _{1}(E)=(E\!\ggg \!6)\oplus (E\!\ggg \!11)\oplus (E\!\ggg \!25)}
Die Varianten mit 64-Bit-Wörtern nutzen die gleiche Rundenfunktion, nur mit anderen Rotationsweiten für Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \Sigma_0} und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \Sigma_1}

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

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

SHA224("") =
d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f
SHA256("") =
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
SHA384("") =
38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
SHA512("") =
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.

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

Normen und Standards

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

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

  • RFC 4634 — (Juli 2006, erste Version, veraltet): US Secure Hash Algorithms (SHA and HMAC-SHA)
  • RFC 6234 — (Mai 2011, Nachfolger): US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)

Siehe auch

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

Weblinks

Einzelnachweise

  1. Federal Register Notice 2012-5400, Announcing Approval of FIPS Publication 180-4
  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. Bundesamt für Sicherheit in der Informationstechnik Technische Richtlinien – BSI TR-02102 Kryptographische Verfahren: Empfehlungen und Schlüssellängen
  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).