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
BearbeitenIm 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.
Funktionsweise
BearbeitenWie 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
BearbeitenDie 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
BearbeitenSHA-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:
Siehe auch
BearbeitenDie Algorithmen SHA-1 und SHA-256 sind auch die Basis für die Blockverschlüsselung SHACAL.
Weblinks
Bearbeiten- Beschreibung der Algorithmen SHA-256, SHA-384 und SHA-512 ( vom 15. März 2015 im Internet Archive)
- SHA-1 wird verabschiedet, SHA-2 startet (Update: SHA-3 wird Standard) IT-Security, von Christian Heutger, 6. August 2015.
- csrc.nist.gov – Cryptographic Hash Project
- SHA-256 is not a secure password hashing algorithm – DUSTED CODES abgerufen am 24. Juni 2018
- CSRC Cryptographic Toolkit – Official NIST site for the Secure Hash Standard
- Update für die Unterstützung der SHA-2-Codesignierung für Windows Server 2008 R2, Windows 7 und Windows Server 2008: 23. September 2019 Microsoft-Support
Einzelnachweise
Bearbeiten- ↑ Request Access. Federal Register, abgerufen am 5. April 2023.
- ↑ 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.“
- ↑ BSI TR-02102 Kryptographische Verfahren: Empfehlungen und Schlüssellängen. In: bsi.bund.de. Abgerufen am 5. April 2023.
- ↑ 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).