SHA-256

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

Inhaltsverzeichnis

GeschichteBearbeiten

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 (SHA-224, SHA-256, SHA-384, SHA-512). Um eine Hashfunktion mit einem andersartigen Konstruktionsprinzip zu erhalten, rief das NIST nach Vorbild des Advanced Encryption Standard (AES) zu einer Ausschreibung für SHA-3 auf. Die endgültige Wahl und Benennung fiel dann im Oktober 2012 auf den Algorithmus Keccak. SHA-2 wird aber weiterhin als sicher betrachtet und zur Benutzung empfohlen.[1]

FunktionsweiseBearbeiten

Aufbau einer Runde von SHA-2

NIST veröffentlichte im August 2002 die ersten drei Varianten des Algorithmus, SHA-256, SHA-384 und SHA-512, wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt. Mit SHA-384 und SHA-512 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. Im Februar 2004 wurde eine weitere Version, SHA-224, veröffentlicht.

Zur Erzeugung des Hash-Wertes bei SHA-256 werden die Quelldaten in 512-Bit-Blöcke bzw. sechzehn 32-Bit-Wörter aufgeteilt und iterativ mit 64 Konstanten unter Verwendung von vier logischen Funktionen verrechnet. Die Konstanten werden aus den binären Nachkommastellen der Kubikwurzeln der ersten 64 Primzahlen gebildet. Dabei wird mit einem Start-Hash aus acht 32-Bit-Wörtern begonnen, bestehend aus den ersten 32 Bits des Nachkommateils der Quadratwurzeln der ersten acht Primzahlen (2 bis 19).[2]

Bei SHA-224 wird der gleiche Algorithmus verwendet, der Initialhash wird jedoch mit acht anderen Werten gesetzt (Bits 33 bis 64 der Nachkommastellen der Quadratwurzeln der Primzahlen ab 23). Beim Endergebnis wird einfach das achte 32-Bit-Wort weggelassen.

Bei SHA-512 wird mit 1024-Bit-Blöcken und einer Wortbreite von 64 Bit gearbeitet. Es werden 80 64-Bit-Konstanten (wiederum aus den Kubikwurzeln der ersten Primzahlen) verwendet. Der Initialhash besteht aus acht 64-Bit-Werten aus den ersten 64 Nachkommastellen der Quadratwurzeln der ersten acht Primzahlen.

Für SHA-384 gilt ebenfalls der gleiche Algorithmus. Der Initialhash wird aus den ersten 64 Nachkomma-Bits der Quadratwurzeln der Primzahlen ab 23 berechnet. Am Ende werden vom Ergebnis nur die ersten sechs 64-Bit-Wörter genommen.

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

Beispiel-HashesBearbeiten

Der Hash einer leeren Zeichenkette ist:

SHA224("") =
d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f
SHA256("") =
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
SHA384("") =
38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
SHA512("") =
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e

Eine kleine Änderung der Nachricht 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
SHA256("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") = 
d32b568cd1b96d459e7291ebf4b25d007f275c9f13149beeb782fac0716613f8
SHA256("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") = 
78206a866dbb2bf017d8e34274aed01a8ce405b69d45db30bafa00f5eeed7d5e
SHA384("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") = 
71e8383a4cea32d6fd6877495db2ee353542f46fa44bc23100bca48f3366b84e809f0708e81041f427c6d5219a286677
SHA384("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") = 
ef9cd8873a92190f68a85edccb823649e3018ab4da3aeff54215187c0972f7d77922c72f7c0d90fca01cf3e46af664d2
SHA512("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") = 
af9ed2de700433b803240a552b41b5a472a6ef3fe1431a722b2063c75e9f07451f67a28e37d09cde769424c96aea6f8971389db9e1993d6c565c3c71b855723c
SHA512("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") = 
90b30ef9902ae4c4c691d2d78c2f8fa0aa785afbc5545286b310f68e91dd2299c84a2484f0419fc5eaa7de598940799e1091c4948926ae1c9488dddae180bb80

Normen und StandardsBearbeiten

SHA-2 wurde zuerst vom NIST selber 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)

Externe LinksBearbeiten

EinzelnachweiseBearbeiten

  1. NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition. NIST, 2. Oktober 2012, abgerufen am 12. April 2013 (english): „NIST considers SHA-2 to be secure and suitable for general use.“
  2. FIPS PUB 180-4 Secure Hash Standard. NIST, 4. April 2016, abgerufen am 4. April 2016 (english): „Seite 11: SHA-224 and SHA-256 Constants. Seite 12: SHA-384, SHA-512, SHA-512/224 and SHA-512/256 Constants“