SHA-2 ( Secure Hash Algorithm ) ist eine Familie von Hash-Funktionen , die von der United States National Security Agency (NSA) nach dem Vorbild der SHA-1- und SHA-0-Funktionen entwickelt wurden und selbst stark von der Funktion MD4 von Ron inspiriert sind Rivest (was parallel MD5 ergab ). Wie vom Nationalen Institut für Standards und Technologie (NIST) beschrieben, enthält es die Funktionen SHA-256 und SHA-512, deren Algorithmen ähnlich sind, jedoch mit unterschiedlichen Wortgrößen arbeiten (32 Bit für SHA-256 und 64 Bit für SHA-512) ), SHA-224 und SHA-384, die im Wesentlichen Versionen der vorherigen Versionen mit abgeschnittener Ausgabe sind, und in jüngerer Zeit SHA-512/256 und SHA-512/224, die abgeschnittene Versionen von SHA-512 sind. Das letzte Suffix gibt die Anzahl der Bits des Hashs an.
Die Algorithmen der SHA-2-Familie, SHA-256, SHA-384 und SHA-512, werden im Standard FIPS 180-2 (Secure ) als Standard-Bundesregierung der Vereinigten Staaten ( Federal Information Processing Standard ) beschrieben und veröffentlicht Hash Standard) aus dem Jahr 2002 (eine Vorveröffentlichung für Kommentare wurde 2001 vorgenommen). Die SHA-224-Funktion wird etwas später hinzugefügt. Die aktuellste Version, FIPS 180-4 (Secure Hash Standard), stammt vonMärz 2012 und fügt die Funktionen SHA-512/256 und SHA-512/224 hinzu.
Im Jahr 2005 wurden Sicherheitsprobleme von SHA-1 hervorgehoben: Es gibt einen theoretischen Angriff zur Kollisionserkennung, der erheblich schneller ist als der generische Geburtstagsangriff auf Hash-Funktionen. Obwohl der SHA-2-Algorithmus Ähnlichkeiten mit dem von SHA-1 aufweist, konnten diese Angriffe derzeit nicht auf SHA-2 ausgedehnt werden. NIST veranstaltete jedoch einen Wettbewerb zur Auswahl einer neuen Hash-Funktion, SHA-3 . Der Wettbewerb führte Ende 2012 zur Wahl einer neuen Funktionsfamilie, deren Design sich stark von SHA-1 und SHA-2 unterscheidet. Die neue Funktionsfamilie wird als eine weitere mögliche Wahl vorgestellt, die die Verwendung von SHA-2 zumindest vorerst nicht in Frage stellt.
Wie alle Hash-Funktionen nehmen SHA-2-Funktionen eine Nachricht beliebiger Größe mit einer Grenze (alle theoretisch) als Eingabe und erzeugen ein Ergebnis (genannt " Hash ", Hash , Kondensat oder sogar Fingerabdruck ...) von fest Größe. Die Größe des Hashs wird durch das Suffix angegeben: 224 Bit für SHA-224, 256 Bit für SHA-256, 384 Bit für SHA-384 und 512 Bit für SHA-512.
Die Algorithmen der SHA-2-Familie sind sehr ähnlich, es gibt grundsätzlich zwei verschiedene Funktionen, SHA-256 und SHA-512, wobei die anderen Variationen der einen oder anderen sind. Die Funktionen SHA-256 und SHA-512 haben dieselbe Struktur, unterscheiden sich jedoch in der Größe der verwendeten Wörter und Blöcke. Diese Struktur ist der von SHA-1 ziemlich ähnlich, jedoch etwas komplexer und vermeidet bestimmte bekannte Schwächen. Im Allgemeinen bezieht es sich auf eine Familie von Hash-Funktionen, die von Ron Rivests MD4 und MD5 inspiriert sind . Wir finden als Primitive die Addition für ganze Zahlen fester Größe n, d. H. Eine Modulo 2 n- Addition , eine nichtlineare Operation (im Sinne der linearen Algebra ) auf dem Feld der Booleschen Werte F 2 sowie bitweise Operationen (xor und andere).
Wie alle Funktionen dieser Familie (außer SHA-3, basierend auf einer Schwammfunktion ) folgen sie einem iterativen Schema, das der Konstruktion von Merkle-Damgård folgt (ohne Finalisierungsoperation). Die iterierte Komprimierungsfunktion verfügt über zwei Eingänge mit fester Größe, wobei der zweite Eingang dieselbe Größe wie der Ausgang der Funktion hat:
Die Eingänge der Komprimierungsfunktion werden aufgeteilt
Die Komprimierungsfunktion wiederholt den gleichen Vorgang mehrmals, man spricht von rund oder rund , 64 Runden für SHA-256, SHA-80 Umdrehungen bis 512. Jede Runde beinhaltet als Grundelemente die gesamte Addition für ganze Zahlen fester Größe, d. H. Eine Modulo 2 32- oder Modulo 2 64-Addition , bitweise Operationen: Logikoperationen, Offsets mit Verlust eines Teils der Bits und kreisförmige Offsets und vordefinierte Konstanten , wird auch zur Initialisierung verwendet.
Vor der Verarbeitung wird die Nachricht durch Auffüllen vervollständigt, sodass ihre Länge ein Vielfaches der Größe des von der Komprimierungsfunktion verarbeiteten Blocks beträgt. Die Polsterung enthält die Länge (in Binärform) des zu verarbeitenden Wortes: Es ist die Verstärkung der Merkle-Damgård -Verstärkung ( (en) Merkle-Damgård ), die es ermöglicht, den Widerstand gegen Kollisionen der Hash-Funktion darauf zu reduzieren der Kompressionsfunktion. Diese Länge wird am Ende des Auffüllens auf 64 Bit im Fall von SHA-256 (wie bei SHA-1) gespeichert, über 128 Bit im Fall von SHA-512, was die Größe der zu seinden Nachrichten "begrenzt" verarbeitet auf 2 64 Bit für SHA-256 (und SHA-224) und auf 2128 Bit für SHA-512 (und SHA-384).
Die SHA-256-Funktion wird 2002 zum Bundesstandard der Informationsverarbeitung ( FIPS des NIST ). Es wird ein 256- Bit- Hash erzeugt . Die Eigenschaften von SHA-256 sind wie folgt:
Der Algorithmus kann in zwei Phasen unterteilt werden
a, b, c, ..., h = Arbeitsvariablen (in diesem Fall w-Bit-Wörter), die in der Hash-Berechnung verwendet werden
= der Hashwert # i. ist der Anfangswert des Hash. ist der letzte Hashwert.
= Wort (w Bits) # j des Hashwerts # i, wobei das höchstwertige Wort (links) des Hashwerts i ist.
= iterative Konstanten gemäß dem Wert von t, der in der Hash-Berechnung verwendet wird
k = Anzahl von Nullen, die der Nachricht während der Vorverarbeitung hinzugefügt wurden (Komplement)
l = Länge der Nachricht M, in Bits
m = Anzahl von Bits, die in einem Block enthalten sind, d. h. 512 Bits
M = zu verarbeitende Nachricht = Block n ° i (m Bits), Nachricht M = Wort (w Bits) n ° j, Block (m Bits) n ° i, Nachricht M
n = Anzahl der Verschiebungs- oder Rotationsbits, die auf das Wort angewendet werden sollen, wenn sie einer Binärfunktion zugeordnet sind
N = Anzahl Blöcke von m Bits, die in der Nachricht M nach dem Komplement
T enthalten sind = temporäre Variable , Wort von w Bits, verwendet bei der Berechnung des Hash
w = Anzahl der in einem Wort enthaltenen Bits, dh 32 Bits. = Wort Nr. t der Tabelle, abgeleitet aus der Nachricht
Die hier verwendete hexadezimale Notation lautet:
Beispiel:= binäre Operation UND = binäre Operation ODER = binäre Operation XOR = binäres Komplement = Additionsmodulo = binäre Verschiebung nach links, wobei durch Entfernen der n linken Bits von x und Hinzufügen von n Nullen nach rechts erhalten wird. = binäre Verschiebung nach rechts, wobei durch Entfernen der n rechten Bits von x und Hinzufügen von n Nullen nach links erhalten wird.
Die verwendeten Operationen sind wie folgt:
In diesem Abschnitt werden die Funktionen beschrieben, die bei der Berechnung von Hashwerten verwendet werden. SHA-256 verwendet 6 Logikfunktionen, die an 32-Bit-Wörtern arbeiten, die mit x, y, z gekennzeichnet sind. Das Ergebnis jeder dieser Funktionen ist eine neue 32-Bit-Wortausgabe.
Konstanten
SHA-256 verwendet 64 konstante Werte von 32-Bit-Wörtern . Diese Zahlen stellen die ersten 32 Bits des Dezimalteil der kubischen Wurzeln der ersten 64 prime Zahlen . Die folgenden Werte werden in hexadezimaler Schreibweise ausgedrückt (Basis 16).
0x428a2f98 | 0x71374491 | 0xb5c0fbcf | 0xe9b5dba5 | 0x3956c25b | 0x59f111f1 | 0x923f82a4 | 0xab1c5ed5 | |
0xd807aa98 | 0x12835b01 | 0x243185be | 0x550c7dc3 | 0x72be5d74 | 0x80deb1fe | 0x9bdc06a7 | 0xc19bf174 | |
0xe49b69c1 | 0xefbe4786 | 0x0fc19dc6 | 0x240ca1cc | 0x2de92c6f | 0x4a7484aa | 0x5cb0a9dc | 0x76f988da | |
0x983e5152 | 0xa831c66d | 0xb00327c8 | 0xbf597fc7 | 0xc6e00bf3 | 0xd5a79147 | 0x06ca6351 | 0x14292967 | |
0x27b70a85 | 0x2e1b2138 | 0x4d2c6dfc | 0x53380d13 | 0x650a7354 | 0x766a0abb | 0x81c2c92e | 0x92722c85 | |
0xa2bfe8a1 | 0xa81a664b | 0xc24b8b70 | 0xc76c51a3 | 0xd192e819 | 0xd6990624 | 0xf40e3585 | 0x106aa070 | |
0x19a4c116 | 0x1e376c08 | 0x2748774c | 0x34b0bcb5 | 0x391c0cb3 | 0x4ed8aa4a | 0x5b9cca4f | 0x682e6ff3 | |
0x748f82ee | 0x78a5636f | 0x84c87814 | 0x8cc70208 | 0x90befffa | 0xa4506ceb | 0xbef9a3f7 | 0xc67178f2 |
Dieser Vorgang erfolgt in drei Schritten: Vervollständigen Sie die Nachricht M, teilen Sie das Ergebnis in Blöcke auf und initialisieren Sie die Hash-Werte.
MarmeladeDies beinhaltet das Vervollständigen der Nachricht M, so dass sie eine Größe hat, die ein Vielfaches von 512 Bit ist. Die Füllung verwendet die binäre Darstellung der ganzen Zahl l, die die Länge der Nachricht M in Bits ist ( Merkle-Damgård- Verstärkung ). Dazu fügen wir nacheinander hinzu:
Beispiele:
Die abgeschlossene Nachricht ist notiert in N Blöcke mit 512 Bits unterteilt . Jeder 512-Bit-Block wird dann in 16 Wörter mit 32 Bits unterteilt, die notiert werden .
InitialisierungenDen folgenden acht Variablen werden die Anfangswerte wie folgt zugewiesen:
Für diese Behandlung werden wir verwenden
Die N Blöcke von M werden nacheinander gemäß den folgenden Schritten verarbeitet
Für i = 1 bis N
{
}}
Nach dem Wiederholen der obigen vier Schritte für die N Blöcke der Nachricht M (dh nach der Verarbeitung von ) wird der 256-Bit-Digest von M durch Verketten der Werte erhalten
Die SHA-224-Funktion wurde erstmals im Jahr 2004 veröffentlicht. Die Ausgabe (Hash, Hash oder Hash) beträgt 224 Bit . Es wurde speziell entwickelt, um einen Fingerabdruck bereitzustellen, dessen Größe vier DES- Schlüsseln mit jeweils 56 Bit entspricht. Der Algorithmus ist der von SHA-256 mit nur Unterschieden
Die SHA-512-Funktion erschien zusammen mit SHA-256 und wird 2002 zu einem Bundesstandard für die Informationsverarbeitung ( FIPS the NIST ). Es wird ein 512- Bit- Hash erzeugt .
Der Algorithmus ist dem von SHA-256 sehr ähnlich, weist jedoch einen wichtigen Unterschied in der Größe der verarbeiteten Daten auf: Die Blockgröße beträgt 1024 Bit (nicht 512 Bit), und der Algorithmus arbeitet mit 64-Bit-Wörtern (dem Wortspeicher) Größe vieler moderner Prozessoren). Insbesondere werden die auf diesen Prozessoren besonders optimierten arithmetischen Operationen auf 64 Bit ausgeführt.
Die Struktur des Algorithmus ist die gleiche wie die von SHA-256, jedoch
Die SHA-384-Funktion erschien zusammen mit SHA-256 und SHA-512. Es wird ein 384- Bit- Hash erzeugt . Der Algorithmus ist der von SHA-512 mit nur Unterschieden
SHA-256 ist nach Angriffen auf MD5 und SHA-1 zum neuen empfohlenen Standard für kryptografisches Hashing geworden . Die anderen Mitglieder der SHA-Familie waren im Vergleich zu SHA-0 und SHA-1 relativ unverschlüsselt . Im Jahr 2003 veröffentlichten Helena Handschuh und Henri Gilbert eine Analyse von SHA-256, 384 und 512. Ihre Studie zeigt, dass andere SHA-Mitglieder nicht von den Angriffen betroffen sind, die auf andere Hash-Funktionen ( MD4 , MD5 und SHA-1) nachgewiesen wurden unter anderen). Die lineare Kryptoanalyse und das Differential gelten nicht.
Andererseits haben die beiden Kryptologen erhebliche Schwachstellen bei modifizierten Versionen festgestellt. Durch Ändern der Konstanten oder der Initialisierungsparameter, um sie symmetrisch zu machen, während die modulare Addition durch ein XOR ersetzt wird , erhalten wir einen Hash, der einen symmetrischen Fingerabdruck erzeugt, wenn die Eingabenachricht ebenfalls symmetrisch ist.