Was ist der SHA-2-Algorithmus?
Wenn Sie unseren anderen Artikel gelesen haben, haben Sie wahrscheinlich eine ziemlich gute Vorstellung davon, warum wir SHA-2 verwenden und was es im Großen und Ganzen bewirkt. AberWas passiert eigentlich, wenn wir hineinzoomen?Wie können wir einen Satz wie „Hashing ist kompliziert“ online stellen? SHA-256-Rechner und erhalten am Ende einen Hash wie diesen:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
Wie ergibt uns ein einfacher Buchstabe „A“ etwas ebenso Komplexes?
559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd
Wie kann die gesamte Unabhängigkeitserklärung zu etwas führen, das einem einzelnen Buchstaben so ähnlich ist, aber auch so unterschiedliche Werte hat?
639505bee7bdae68f224b0d5bcb1c324d0e33011d2302839b7bedfab4515a1bb
Was passiert wirklich im SHA-2-Algorithmus?
Wie funktioniert der SHA-2-Algorithmus?
Wir werden nachforschenWie der SHA-2-Algorithmus anhand eines Beispiels funktioniertWir gehen jeden Schritt durch, der unsere Botschaft „Hashing ist kompliziert“ aufnimmt und uns irgendwie die komplizierte Ausgabe von Folgendem liefert:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
Wir werden SHA-256 demonstrieren, da es die am häufigsten verwendete Iteration ist. SHA-224, SHA-384, SHA-512, SHA-512/224 und SHA-512/256 funktionieren alle auf ähnliche Weise, außer dassDie beiden erstgenannten Algorithmen haben eine Blockgröße von 512 Bit, während die letzten vier eine Blockgröße von 1024 Bit haben.Beachten Sie, dass SHA-384, SHA-512, SHA-512/224 und SHA-512/256 ebenfalls 80 Runden umfassen, statt der 64, die wir beschreiben werden.
Außerdem verwenden sie an verschiedenen Stellen des Algorithmus einige leicht unterschiedliche Eingabezahlen. SHA-512/224 und SHA-512/256 sind verkürzte Versionen von SHA-512, was bedeutet, dass der endgültige Hash nur die am weitesten links stehenden 224 bzw. 256 Bits umfasst.Sie können darauf verweisen FIPS 180-4 für die Einzelheiten.
Konvertieren in Binär
Wenn wir „Hashing ist kompliziert“ in eine SHA-256-Hash-Funktion eingeben, werden die Daten als Erstes in eine Binärdatei konvertiert. Um die Erklärung zu vereinfachen, liegt dies im Wesentlichen daran, dassMenschen und Maschinen sprechen, verstehen und arbeiten in unterschiedlichen Sprachen. Während es für uns einfach ist, in Worten zu denken, tun Computer alles in Nullen und Einsen. Wann immer wir sie verwenden, wandeln sie unsere Buchstaben und Wörter in die Binärsprache um, die sie verstehen, damit sie Berechnungen durchführen können. All dies geschieht jedoch in der Regel, ohne dass wir es merken, was uns ein reibungsloses Benutzererlebnis ermöglicht.
Wir wandeln Buchstaben, Zahlen und Symbole mit dem in Binärformate um Amerikanischer Standardcode für Informationsaustausch (ASCII) Dabei handelt es sich im Grunde nur um ein System, auf das sich ein Komitee kluger Köpfe für die Übersetzung zwischen den beiden Sprachen geeinigt hat.
Wenn wir uns einem zuwenden ASCII-Tabelle können wir sehen, dass der erste Buchstabe unserer Phrase, ein Kleinbuchstabe „h“, binär als „01101000“ geschrieben wird. Laut derselben Tabelle ist ein kleines „a“ „01100001“, während ein „s“ „01110011“ und ein „h“ „01101000“ ist. Der Buchstabe „i“ ist „01101001“, während „n“ „01101110“ und „g“ „01100111“ ist. Der Binärcode für ein Leerzeichen wird in der Tabelle oben in der zweiten Spalte als ASCII-Zeichen „SP“ in derselben Zeile wie die Dezimalzahl 32 aufgeführt. Er lautet „00100000“.
Anstatt jeden einzelnen Buchstaben unserer Beispielphrase durchzugehen, geben wir ihn einfach in eine ein ASCII-zu-Binär-Konverter . Wenn wir es eingeben, erhalten wir:
01101000 01100001 01110011 01101000 01101001 01101110 01100111 00100000 01101001 01110011 00100000 01100011 01101111 0110 1101 01110000 01101100 01101001 01100011 01100001 01110100 0110010
Für uns Menschen macht das oben Gesagte keinen Sinn, aber für Maschinen heißt es: „Hashing ist kompliziert“.
SHA-2 und Polsterung
Sobald wir unsere Phrase im Binärformat umgeschrieben haben, besteht der nächste Schritt darin, Auffüllungen hinzuzufügen, bei denen es sich im Wesentlichen um eine Reihe zusätzlicher Daten handelt, die wir zu unserer Eingabe hinzufügen, um ihr eine feste Länge zu geben. Es hilft auch vorzubeugen Längenverlängerungsangriffe . Die verschiedenen Versionen von SHA-2 haben die folgenden Blockgrößen:
- SHA-224 – 512 Bit
- SHA-256 – 512 Bit
- SHA-384 – 1024 Bit
- SHA-512 – 1024 Bit
- SHA-512/224 – 1024 Bit
- SHA-512/256 – 1024 Bit
Diese Blockgrößen sind die Datenmengen, die der SHA-2-Algorithmus auf einmal verarbeitet. Wir haben gezeigt, dass Hash-Funktionen in der Lage sind, Eingaben zu verarbeiten, solange die Unabhängigkeitserklärung (SHA-256) tatsächlich Eingaben annehmen kann Größenordnungen größer , bei bis zu 264-1, was eine so große Zahl ist, dass Sie sich über die Obergrenzen des Algorithmus keine Gedanken machen müssen). Allerdings werden diese Informationen nicht alle auf einmal verarbeitet.
Stattdessen verarbeitet es im Fall von SHA-256 die Informationen in 512-Bit-Datenblöcken. In unserem Beispiel ist die Sache relativ einfach, dennUnsere Eingabe „Hashing ist kompliziert“ umfasst weniger als 512 Datenbits–es sind 176 Bit. Sie können es berechnen, indem Sie jede Binärziffer zählen oder indem Sie jeden Buchstaben plus die beiden Leerzeichen zählen und dann mit 8 multiplizieren, da jedes Zeichen ein Byte lang ist.
Allerdings müssen wir häufig Eingaben hashen, die weitaus länger als 512 Bit sind. In diesen Fällen wird die Nachricht einfach in Blöcke unterteilt. Wenn wir eine 10.000-Bit-Nachricht hashen müssten, müsste sie lediglich auf mehrere 512-Bit-Blöcke aufgeteilt werden.
In unserem Beispiel haben wir nur 176 Datenbits, müssen aber einen 512-Bit-Block auffüllen. Das bedeutet, dassWir müssen 336 Bit Auffüllung hinzufügenum es zu vervollständigen. SHA-2 verwendet das folgende Auffüllschema:
- Es wird eine „Eins“ hinzugefügtnach den binären Nachrichtendaten, die gehasht werden.
- Dann werden Nullen hinzugefügt, bis die Länge der Eingabedaten plus die zusätzliche Eins aus dem vorherigen Schritt 448 Bit ergibt. In unserem Beispiel haben wir eine Eingabelänge von 176 Bit plus die aus dem vorherigen Schritt, sodass wir auf 177 Bit kommen. Daher brauchen wir 448 minus 177 Nullen. Wenn wir rechnen, müssen wir es tun271 Nullen hinzufügen.
- Der letzte 64 Bit des letzter Block (512 Bit minus die 448 Bit, die wir bereits in den vorherigen Schritten aufgefüllt haben) werden reserviert, um die Länge der Nachricht binär anzuzeigen . Da es sich nur um einen Datenblock handelt, muss am Ende diese 64-Bit-Nachrichtenlänge enthalten sein. Unsere Nachrichtenlänge in Bit beträgt 176, also 10110000 im Binärformat . Dies steht ganz am Ende des Blocks und die vorhergehenden Zahlen werden mit weiteren Nullen aufgefüllt (in Fällen, in denen wir eine viel größere Eingabe haben, werden diese Nullen durch die längere binär geschriebene Nachrichtenlänge ersetzt).
Wenn wir alles zusammenzählen, erhalten wir den folgenden aufgefüllten 512-Bit-Block für die Meldung „Hashing ist kompliziert“:
01101000 01100001 01110011 01101000 01101001 01101110 01100111 00100000 01101001 01110011 00100000 01100011 01101111 0110 1101 01110000 01101100 01101001 01100011 01100001 01110100 0110010 1 0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000 000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0 0 000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10110000
Wenn Sie die Einsen und Nullen abzählen, sehen Sie, dass der obige Block 512 Datenbits enthält. Die ersten 176 Bits sind die Eingabenachricht im Binärformat, „Hashing ist kompliziert“. Darauf folgt die 1, die wir zur besseren Lesbarkeit fett und unterstrichen haben. Dann haben wir die 271 Nullen, gefolgt von der 64-Bit-Nachrichtenlänge, die ebenfalls fett und unterstrichen ist. Dieser Nachrichtenlänge werden, wie bereits erwähnt, Nullen vorangestellt.
Bei SHA-384, SHA-512, SHA-512/224 und SHA-512/256 ist das Auffüllschema im Wesentlichen dasselbe, außer dass die Blöcke jeweils mit 1024 Datenbits gefüllt werden müssenDer letzte Block weist die folgenden Unterschiede auf:
- Im zweiten Schritt werden Nullen hinzugefügt, bis eine Länge von 896 Bit statt 448 Bit erreicht ist.
- Im letzten Schritt werden 128 Bit des Blocks für das Anhängen der Nachrichtenlänge reserviert.
Wenn wir unser Beispiel mit SHA-384, SHA-512, SHA-512/224 oder SHA-512/256 durchgehen würden, würde der aufgefüllte Block weitgehend gleich aussehen, außer dass er ab dem zweiten Schritt zusätzliche 448 Nullen hätte und weitere 64 Nullen aus dem letzten Schritt.
Eingaben größer als 448 Bits (für SHA-224 und SHA-256) und 896 Bits (für SHA-384, SHA-512, SHA-512/224 und SHA-512/256)
Wir müssen häufig Nachrichteneingaben hashen, die größer als die Blockgrößen von 512 Bit oder 1024 Bit sind, was bedeutet, dass wir die Daten auf mehrere Blöcke aufteilen müssen. Der Grenzwert für die Aufteilung von Blöcken liegt tatsächlich entweder bei 447 Bit oder bei 895 Bit, da mindestens ein Bit Auffüllung sowie die 64-Bit- oder 128-Bit-Nachrichtenlänge enthalten sein müssen.
Das bedeutet, dassWenn Sie genau 448 Bit (oder 896 Bit) an Daten haben, die Sie hashen müssen, müssen diese auf zwei Blöcke aufgeteilt werden. Der erste Block enthält die gesamten Daten plus 64 (oder 128) Füllbits (die Eins gefolgt von 63 oder 127 Nullen). Der zweite Block wird weitere 448 (oder 896) Nullen haben, wobei die 64-Bit- (oder 128-Bit-) Nachrichtenlänge am Ende auf die gleiche Weise markiert ist, wie wir es im vorherigen Abschnitt gezeigt haben.
449 Bit (oder 897 Bit) Daten würden ebenfalls zwei Datenblöcke belegen und hätten stattdessen eine Eins plus 62 (oder 126) Nullen als Auffüllung vor der Nachrichtenlänge.
Andererseits,447 Bit (oder 895 Bit) Daten würden gerade noch in einen einzigen Block passen. Es würde die 447 (oder 895) Bits umfassen und dann ein einzelnes auffüllen eins , gefolgt von der Nachrichtenlänge von entweder 64 oder 128 Bit.
Bei größeren Dateneingaben funktioniert das System genauso. Die Daten werden auf so viele Blöcke aufgeteilt, wie nötig sind, damit alle Daten enthalten sind, plus mindestens einer Ziffer zum Auffüllen und mit angehängter 64-Bit-Nachrichtenlänge am Ende des letzten Blocks. Bei 5.000 Bit Eingabedaten und den 512-Bit-Blockgrößen von SHA-224 oder SHA-256 würde die Eingabe auf 10 Blöcke aufgeteilt. Die ersten neun würden nur die Eingabedaten enthalten, während die zehnte die letzten 392 Bits der Eingabedaten enthalten würde, a eins , 55 Nullen und am Ende die 64-Bit-Nachrichtenlänge. Das sind insgesamt 5.120 Datenbits, also 10 mal 512.
Im Fall von SHA-384, SHA-512, SHA-512/224 oder SHA-512/256 würden dieselben 5.000 Datenbits auf sechs 1024-Bit-Blöcke aufgeteilt. Die ersten vier würden nur die Eingabedaten enthalten. Der fünfte Block würde die letzten 904 Datenbits enthalten, a eins und dann 119 Nullen als Polsterung. Die 5.000 Datenbits passen nicht ganz in fünf Blöcke, da die letzten 904 Datenbits den Grenzwert für den letzten Block überschreiten, der bei 896 Bits liegt. Der sechste Block würde 896 Nullen und am Ende die 128-Bit-Nachrichtenlänge enthalten.
Der wichtigste SHA-2-Algorithmus
Nachfolgend finden Sie eine grafische Darstellung des SHA-2-Algorithmus:
Der SHA-2-Algorithmus
Sofern Sie sich nicht schon einmal mit ähnlichen Algorithmen beschäftigt haben, ergibt das wahrscheinlich keinen großen Sinn. Machen Sie sich keine Sorgen, denn wir werden viel Zeit damit verbringen, es im Detail zu erklären.
Das erste, was erwähnenswert ist, ist, dass das Diagramm zeigt Runde 0, Runde T und Runde 63. Runde 0 ist die erste Runde, während Runde T im Wesentlichen ein Platzhalter ist, der jede Runde dazwischen darstellt, da es unhandlich wäre, Dutzende Runden zu zeichnen. Runde 63 ist die letzte Runde, was uns insgesamt 64 Runden ergibt, wenn wir bei 0 beginnen.Beachten Sie, dass SHA-384, SHA-512, SHA-512/224 und SHA-512/256 80 statt 64 Runden umfassenDaher unterscheidet sich der Prozess, den wir gleich beschreiben, in diesen Versionen des SHA-2-Algorithmus etwas.
Jede dieser Runden verfügt über eigene Eingaben und Berechnungen, wobei die Ergebnisse einiger Berechnungen als Eingaben für nachfolgende Berechnungen dienen. Wie Sie wahrscheinlich langsam verstehen, ist der SHA-2-Algorithmus kompliziert und erfordert eine ganze Reihe von Schritten und Berechnungen.
Der Nachrichteneingang M
In diesem Beispiel wollen wir die Dinge einfach halten, indem wir nur unseren einzelnen 512-Bit-Eingabeblock verwenden, statt einer längeren und komplizierteren Eingabe, die eine Reihe von Blöcken erfordert. Wenn wir den Prozess für längere Dateneingaben beschreiben würden, müssten wir einen Großteil des langen, komplizierten Prozesses, den wir gleich darlegen, mit jedem einzelnen der verschiedenen Eingabedatenblöcke vollständig wiederholen.
Wenn Sie oben links in das Diagramm oben schauen, werden Sie es sehenDer Nachrichteneingang (M). Dies ist der aufgefüllte 512-Bit-Block unserer Nachricht „Hashing ist kompliziert“:
01101000 01100001 01110011 01101000 01101001 01101110 01100111 00100000 01101001 01110011 00100000 01100011 01101111 0110 1101 01110000 01101100 01101001 01100011 01100001 01110100 01100101 01100100 10000000 00000000 00000000 00000000 00000000 0 0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00 0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10110000
Unsere Nachrichteneingabe wird zunächst in sechzehn 32-Bit-Wörter mit der Bezeichnung W aufgeteilt0ist W.fünfzehn:
- In0– 01101000 01100001 01110011 01101000
- In1– 0110100 01101110 01100111 00100000
- Inzwei– 01101001 01110011 00100000 01100011
- In3– 01101111 01101101 01110000 01101100
- In4– 01101001 01100011 01100001 01110100
- In5– 01100101 01100100 10000000 00000000
- In6– 00000000 00000000 00000000 00000000
- In7– 00000000 00000000 00000000 00000000
- In8– 00000000 00000000 00000000 00000000
- In9– 00000000 00000000 00000000 00000000
- In10– 00000000 00000000 00000000 00000000
- Inelf– 00000000 00000000 00000000 00000000
- In12– 00000000 00000000 00000000 00000000
- In13– 00000000 00000000 00000000 00000000
- In14– 00000000 00000000 00000000 00000000
- Infünfzehn– 00000000 00000000 00000000 10110000
Konvertierung in Hexadezimalzahl
Bevor wir fortfahren, konvertieren wir die obigen Binärziffern in ein anderes Zahlensystem namens Hexadezimal. Wenn Sie genau aufgepasst haben, ist Ihnen vielleicht aufgefallen, dass unser Hash eine Reihe von Buchstaben enthält:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
Das liegt daran, dass Hashes im Allgemeinen hexadezimal geschrieben werden, was einfach eine andere Art zu zählen ist, ähnlich wie das Binärsystem und das Dezimalsystem, an das wir alle gewöhnt sind, unterschiedlich sind.
Binär ist ein System zur Basis 2, was im Grunde bedeutet, dass Sie zwei Optionen haben, eine 1 und eine 0, bevor Sie mit der Darstellung von Informationen mit einer größeren Anzahl von Ziffern beginnen müssen.
Unser reguläres Dezimalsystem ist die Basis 10, was bedeutet, dass wir 10 Optionen haben, 0, 1, 2, 3, 4, 5, 6, 7, 8 und 9, bevor uns die Zahlen ausgehen und wir anfangen müssen, Zahlen zu kombinieren, um größere Zahlen darzustellen Datenmengen, beispielsweise wenn wir eine 1 und eine 0 kombinieren, um 10 zu ergeben.
Hexadezimal ist ein System zur Basis 16, was bedeutet, dass wir 16 Optionen haben:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
Wenn wir die Basis 16 verwenden, ist der Wert 10 nicht derselbe angenehme Wert, mit dem wir aufgewachsen sind. Stattdessen ist eine 10 zur Basis 16 tatsächlich die Zahl 16, die wir als Dezimalzahl gewohnt sind. In der Basis 10 wird unsere bekannte Dezimalzahl 10 durch ein dargestelltA, 11 istB, 12 istC,13 istD, 14 istUndund 15 istF.
Wenn Sie sich zu sehr mit der Hexadezimalzahl befassen, lenken Sie vom eigentlichen Thema ab, aber Sie können noch weitere Informationen finden Hier .
Sie müssen lediglich wissen, dass wir unsere Eingabe von binär auf hexadezimal umstellen und dies tun, indem wir unsere Binärwerte in a eingeben einfacher Online-Konverter (Wenn Sie es selbst versuchen und die Binärzahlen von oben kopieren, entfernen Sie die Leerzeichen). Es sollte Ihnen Folgendes geben:
- In0– 68617368
- In1– 346E6720
- Inzwei– 69732063
- In3- 6F6D706C
- In4– 69636174
- In5– 65648000
- In6– 00000000
- In7– 00000000
- In8– 00000000
- In9– 00000000
- In10– 00000000
- Inelf– 00000000
- In12– 00000000
- In13– 00000000
- In14– 00000000
- Infünfzehn– 000000B0
Nachrichtenplan: Finden der anderen W-Werte
Der SHA-2-Algorithmus
Wenn Sie das Diagramm genau betrachten, werden Sie feststellen, dass eine der Eingaben für Runde 63 W ist63. Wir haben nur W0ist W.fünfzehnBisher bedeutet dies, dass wir weitere 48 Werte benötigen, bevor wir alle unsere W-Eingaben haben. In den Versionen SHA-384, SHA-512, SHA-512/224 und SHA-512/256 des Algorithmus würden wir insgesamt 80 Werte benötigen, also müssten wir weitere 64 ableiten.
Diese Eingaben werden im markierten Feld berechnetNachrichtenplanim Diagramm. In beiden Fällen leiten wir sie nach folgender Formel ab:
InT= S1(INt-2) + Wt-7+ S0(INt-15) + Wt-16
Verwirrt? Geben Sie nicht uns die Schuld, sondern den Kryptografen, die es entwickelt haben. Versuchen wir zunächst, einige der Werte in der obigen Gleichung zu erklären.
Tist im Wesentlichen ein Ersatz für jede Runde, die wir gerade vorhaben.Wenn wir uns in der ersten Runde befinden, die die Ingenieure freundlicherweise Runde 0 nennen,Tist 0. Alsowenn du W siehst0, es bedeutet den Wert für W in Runde 0. Wir verwenden diese Notation, da wir in verschiedenen Phasen des Algorithmus eine große Anzahl unterschiedlicher Werte für W verwenden werden. Viele der anderen Variablen verwenden ebenfalls sich ändernde Werte im Laufe der Phasen des Algorithmus.
Der nächste Wert, der Sie wahrscheinlich verwirrt, ist:
P1(X)
Das Symbol ist als a bekanntSigmaund steht neben der Zahl 1 für folgende Funktion:
P1(x) = ROTR17(X) ⊕ R.O.T.R.19(X) ⊕ SHR10(X)
Bevor wir die Funktionsweise des Nachrichtenplans vollständig verstehen können, müssen wir diese Funktion erklären.
Schichtbetrieb
Der ROTR aus der vorherigen Gleichung signalisiert, dass wir a durchführen müssenkreisförmige Rechtsverschiebungauf den Wert, der darauf folgt, x. Es wird entsprechend der Anzahl der hochgestellten Bits verschoben. Nehmen wir das erste Segment:
R.O.T.R.17(X)
Das Obige besagt eigentlich nur, dass der Wert verschoben werden sollX 17 BitzumRechts. Um Ihnen ein Beispiel zu geben, wie das funktioniert: Wenn der Wert für x 1000 1001 ist und wir eine zirkuläre Rechtsverschiebung von just durchführen möchten1 Bit, würden wir im Wesentlichen einfach den Wert in der Spalte ganz rechts nehmen:
1000 1001
Und verschieben Sie es nach links:
1100 0100
Um das Konzept noch einmal zu demonstrieren, dieses Mal mit einer zirkulären Verschiebung um 3 Bits nach rechts, nehmen wir dieselbe Zahl:
1000 1001
Dieses Mal nehmen wir jede der drei Ziffern ganz rechts und verschieben sie nach links:
0011 0001
Diese Art von Operation ist sowohl im ersten als auch im mittleren Abschnitt der Gleichung mit Verschiebungen von beteiligt17Und19Bits bzw.
Der letzte Teil der Gleichung lautet:
SHR10(X)
Der SHR fordert uns auf, eine ähnliche, aber etwas andere Operation durchzuführen, die als a bezeichnet wirdlogische Linksverschiebung. In diesem Fall verschieben wir den Wert x um die Anzahl der hochgestellten Bits nach links,10und füllen Sie dann die rechte Seite mit Nullen auf. Nehmen wir die gleiche Zahl wie zuvor, um zu demonstrieren, wie das funktioniert:
1000 1001
Wir werden eine Verschiebung um 10 Bits nach links in 10 Schritten durchführen, wobei die letzte Ziffer aus keinem anderen Grund fett gedruckt ist, als Ihnen dabei zu helfen, den Überblick über den Fortschritt zu behalten:
0001 0010
0010 0100
01001000
10010000
0010 0000
0100 0000
1000 0000
0000 0000
0000 0000
0000 0000
Während der ersten sieben Bewegungen sahen wir, wie sich die Daten langsam nach links bewegten und rechts durch Nullen ersetzt wurden. Beim achten Zug waren alle Originaldaten vollständig verschwunden und durch Nullen ersetzt worden.
Beachten Sie den Unterschied zwischen diesemlogische LinksverschiebungBetrieb und die zuvor besprochenenkreisförmige Rechtsverschiebung. Die Bewegung erfolgt nicht nur in verschiedene Richtungen, sondern die zirkuläre Rechtsverschiebung führt die Daten auch auf die andere Seite zurück, während die logische Linksverschiebung sie verwirft und den frei werdenden Raum mit Nullen füllt
Wenn wir diese Verschiebungen zu detailliert besprechen, geraten wir auf eine falsche Fährte, aber Sie können mehr darüber erfahren, wie sie dabei funktionieren Ressource .
XOR-Operationen
Der letzte Teil unserer Operation, den wir erklären müssen, ist der⊕-Symbol, das jede dieser Komponenten miteinander verbindet. ⊕ steht für XOR-Operation, was im Grunde eine logische Operation istSeine Ausgabe ist wahr, wenn eine der Eingaben wahr ist, aber falsch, wenn beide Eingaben oder keine der Eingaben wahr sind.
Es ist schwer, dies zu erklären, ohne sich mit einer vollständigen Vorlesung über Boolesche Algebra und logische Operationen zu befassen. Dieser Link gibt Ihnen einen kleinen Überblick, aber Sie müssen es nicht wirklich im Detail verstehen, um einen guten Überblick über die Funktionsweise des restlichen Algorithmus zu erhalten. Alles, was Sie wissen müssen, ist, dass wir im Grunde genommen einige Zahlen addieren, aber eine seltsame Mathematik verwenden, die Sie wahrscheinlich nicht in der Schule gelernt haben.
Den ersten Teil unserer Gleichung lösen
Nachdem wir uns nun mit einigen Details der Operationen befasst haben, werfen wir noch einmal einen Blick auf die Gleichung, auf die wir gestoßen sind:
InT= S1(INt-2) + Wt-7+ S0(INt-15) + Wt-16
Wo:
P1(x) = ROTR17(X) ⊕ R.O.T.R.19(X) ⊕ SHR10(X)
Und:
P0(x) = ROTR7(X) ⊕ R.O.T.R.18(X) ⊕ SHR3(X)
Versuchen wir nun, den Wert für W herauszufinden16, weil es die erste Zahl ist, die wir mithilfe dieser Gleichung ermitteln müssen. Lassen Sie uns unseren Wert einstecken:
In16= S1(IN16-2) + W16-7+ S0(IN16-15) + W16-16
Daher:
In16= S1(IN14) + W9+ S0(IN1) + W0
Wir kennen alle W-Werte auf der rechten Seite der Gleichung, da es sich um die W-Wörter handelt, die wir durch Aufteilen unseres aufgefüllten Nachrichtenblocks ermittelt haben. Die Werte im Binär- und Hexadezimalformat sind:
- In0–68617368oder01101000 01100001 01110011 01101000
- In1–346E6720oder0110100 01101110 01100111 00100000
- In9–00000000oder00000000 00000000 00000000 00000000
- In14–00000000oder00000000 00000000 00000000 00000000
Bevor wir alle Zahlen eingeben, wollen wir herausfinden, wofür der Wert stehtP1(IN14), unter Verwendung der oben besprochenen Gleichung:
P1(IN14) = ROTR17(IN14) ⊕ R.O.T.R.19(IN14) ⊕ SHR10(IN14)
Mit dem W14Werte in Hexadezimalzahl, die Gleichung sieht so aus:
P1(00000000) = ROTR17(00000000) ⊕ R.O.T.R.19(00000000) ⊕ SHR10(00000000)
Der erste Schritt besteht darin, die oben beschriebenen Verschiebungen für jeden Abschnitt der Gleichung vorzunehmen. Wir wechseln zum Binärwert für W14anstelle des hexadezimalen Werts, da es einfacher ist, die Verschiebungen zu erkennen, die wir durchführen werden. Beachten Sie, dass es sich bei der binären und hexadezimalen Version lediglich um unterschiedliche Darstellungen desselben Werts handelt, sodass ein Wechseln bei Bedarf keine Probleme verursacht:
R.O.T.R.17(00000000 00000000 00000000 00000000)
Das Ergebnis der obigen Operation wird äußerst vorhersehbar sein, da alles aus Nullen besteht, aber wir werden es trotzdem noch einmal durchgehen, nur um Ihnen eine Vorstellung davon zu geben, was vor sich geht. Gehen Sie zu Folgendem Online-Tool und geben Sie den Binärwert für W ein14, die 32 Nullen, in das markierte Eingabefeld einWert. Achten Sie darauf, die Leerzeichen zu entfernen. Eingeben32InGröße, da der Eingabewert 32 Bit lang ist. Typ17imSchichtFeld, um sicherzustellen, dass der Wert um 17 Leerzeichen verschoben wird. Stellen Sie sicher, dass die Richtung auf eingestellt istRechts. Wähle ausZirkuläre VerschiebungFeld und klicken Sie dannFühren Sie eine Bitverschiebungsoperation durch. Dies führt die kreisförmige Rechtsverschiebung durch.
Es überrascht nicht, dass Sie dadurch einen Wert von Folgendem erhalten:
00000000 00000000 00000000 00000000
Es sieht so aus, als wäre nichts passiert, aber die Nullen wurden verschoben. Wir können es einfach nicht sagen und es scheint bedeutungslos, weil sie alle Nullen sind.
Jetzt ist es an der Zeit, den mittleren Teil der Operation durchzuführen:
R.O.T.R.19(00000000 00000000 00000000 00000000)
In diesem Fall ist alles gleich, außer demSchichtWert ist jetzt19. Dies gibt uns eine Ausgabe von:
00000000 00000000 00000000 00000000
Nun zum letzten Teil:
SHR10(00000000 00000000 00000000 00000000)
Denken Sie daran, dass der SHR a darstelltlogische Linksverschiebung, also müssen wir dieses Mal die Einstellungen anpassen. DerWertUndGrößebleiben gleich, aber wir müssen sicherstellen, dass:
Schichtist eingestellt auf10
Richtungist eingestellt aufLinks
Logischer Wandelist ausgewählt.
Auch hier erhalten wir die gleiche Ausgabe:
00000000 00000000 00000000 00000000
Das schien zwar ein sinnloses Unterfangen zu sein, lag aber nur daran, dass unsere Startnummer nur aus Nullen bestand. Wenn Sie diese Vorgänge mit anderen Zahlen durchführen, treten tatsächlich Änderungen auf.
Binäre und hexadezimale Zeichenfolgen von Null sind gleich, daher werden wir diese Werte wieder auf hexadezimal umstellen, wenn wir mit dem nächsten Teil unserer Berechnung fortfahren, damit sie besser auf die Seite passen:
P1(IN14) = 00000000 ⊕ 00000000 ⊕ 00000000
Wir können diese Gleichung hier lösen Online-Rechner beim Eintreten:
00000000hineinFeld A.
AuswählenFREIaus dem Dropdown-Menü darunter.
00000000hineinFeld B.
AuswählenFREIaus dem Dropdown-Menü darunter.
00000000hineinFeld C.
Wenn Sie es richtig gemacht haben, sollte es angezeigt werdenA XOR B XOR Cin das markierte FeldLogischer Ausdruck. Die Antwort wird Ihnen im markierten Feld angezeigtOperationsergebnis. In diesem Fall ist es:
0oder00000000oder00000000 00000000 00000000 00000000.
Es ist eine langweilige Antwort, aber sie bringt uns der Lösung unserer Gleichung einen Schritt näher, denn jetzt wissen wir Folgendes:
P1(IN14) = 00000000
Wenn Sie zurückscrollen, werden Sie sehen, dass wir nur noch eine weitere Komponente finden müssen und dann können wir die Gleichung lösen. Wir müssen den Wert für σ finden0(IN1), die die folgende Gleichung verwendet:
P0(x) = ROTR7(X) ⊕ R.O.T.R.18(X) ⊕ SHR3(X)
Wie oben erwähnt, wissen wir, dass W1Ist :
346E6720
Daher:
P0(346E6720) = ROTR7(346E6720) ⊕ R.O.T.R.18(346E6720) ⊕ SHR3(346E6720)
Diese Gleichung ist fast genau dieselbe wie die, die wir gerade gelöst haben. Der Kürze halber werden wir nicht näher darauf eingehen, aber wenn Sie es selbst versuchen möchten, folgen Sie einfach jedem der Schritte, die wir oben befolgt haben, aber ändern Sie dieSchichtjedes Mal zu7,18Und3, jeweils.
P0(346E6720) =4068DCCE ⊕ 99C80D1B ⊕ A3733901
Sobald Sie es gelöst haben, werden Sie feststellen, dass die Antwort lautet:
P0(346E6720) =7AD3E8D4
Modulare Ergänzung
Jetzt kennen wir die Werte für beideP1(IN14)UndP0(IN1), sind wir endlich bereit, den Wert für W zu ermitteln16:
In16= S1(IN14) + W9+ S0(IN1) + W0
In16= 00000000 + 00000000 + 7AD3E8D4 + 68617368
Die obige Gleichung sieht relativ einfach aus. Das Einzige, was wir beachten müssen, ist, dass die Pluszeichen darin eine modulare Addition und nicht eine normale Addition darstellen.
Um das Konzept mit einer 8-stelligen Dezimalzahl zu veranschaulichen: Wenn wir die modulare Addition verwenden, um 1 zu 99.999.999 zu addieren, ist das Ergebnis nicht 100.000.000, wie man erwarten würde. Stattdessen wird einfach auf die gleiche Weise zum Anfang zurückgerollt, wie bei einer Uhr die 1 auf die 12 folgt. Die Antwort ist 0 oder 00.000.000. Kasse diese Grundierung wenn Sie eine kurze Einführung in die modulare Arithmetik benötigen.
Im Wesentlichen ermöglicht Ihnen die modulare Addition, Zahlen zu addieren, ohne dass Ihre Antwort jemals länger wird. Nehmen Sie das Folgende als weiteres Dezimalbeispiel:
76.487.639 + 98.094.034
Bei normaler Addition wäre die Antwort:
76.487.639 + 98.094.034 =174.581.673
Mit der modularen Ergänzung können wir das einfach wegwerfen1, und unsere Antwort ist:
76.487.639 + 98.094.034 =74.581.673
Die gleichen Berechnungen können wir auch mit den Hexadezimalzahlen in unserer Gleichung durchführen:
In16= 00000000 + 00000000 + 7AD3E8D4 + 68617368
Wir werden es damit lösen Online-Rechner . In unserem Beispiel müssen wir uns nicht um die Addition der Nullen kümmern, da sie den Wert nicht ändern, sondern können einfach addieren7AD3E8D4Und68617368. Wenn Sie in Zukunft dasselbe Werkzeug verwenden müssen, um weitere Zahlen hinzuzufügen, können Sie den Vorgang einfach mehrmals ausführen und die nächste Zahl zum Ergebnis der vorherigen Gleichung hinzufügen.
Wir können unsere Gleichung durch Tippen lösen7AD3E8D4in das erste Feld des Online-Rechners ein und68617368in die zweite. Das ergibt folgendes Ergebnis:
In16= e3355c3c
Denken Sie daran, dass dies eine modulare Addition sein soll. Wenn das Ergebnis also mehr als acht Ziffern hätte, müssten wir die Ziffer ganz links entfernen. Unser Ergebnis ist nur 8 Ziffern lang, sodass wir uns in diesem Fall keine Sorgen machen müssen.
Es war ein langer und komplizierter Prozess, aber wir haben endlich die Antwort für W16. Es iste3355c3c. Für alle W-Werte ab W müssen die gleichen Berechnungen durchgeführt werden17ist W.63.
Wir haben gezeigt, wie diese Berechnungen funktionieren, also ist es an der Zeit, mit den anderen Aspekten des SHA-2-Algorithmus fortzufahren.
Die Initialisierungsvariablen
Nachdem wir nun besprochen haben, woher alle W-Eingaben kommen, kehren wir zu unserem Diagramm zurück:
Der SHA-2-Algorithmus
Oben sehen Sie, dass H stehti-1. Dies stellt die Arbeitsvariablen dar, die in jeder Runde als Eingaben dienen. Es gibt acht dieser Variablen und sie werden am Ende jeder Runde aktualisiert. Zunächst die Initialisierungsvariablen H(0)Sind:
- H(0)a= 6a09e667
- H(0)b= bb67ae85
- H(0)c= 3c6ef372
- H(0)d= a54ff53a
- H(0) und= 510e527f
- H(0)f= 9b05688c
- H(0)g= 1f83d9ab
- H(0)h= 5be0cd19
Die oben genannten Zahlen werden aus den Quadratwurzeln der ersten acht Primzahlen abgeleitet, aber woher sie kommen, spielt für unsere Zwecke keine Rolle. Sie müssen lediglich wissen, dass wir mit den oben aufgeführten spezifischen Zahlen beginnen müssen.
In den folgenden Runden werden diese Werte unterschiedlich sein. Der Einfachheit halber und um ihre sich ändernden Werte darzustellen, werden diese Eingaben im Diagramm als angezeigta, b, c, d, e, f, g und h stattH(0)a, H(0)busw. oder H(1)a, H(1)b, usw..
Die Konstante K
In jeder Runde nehmen wir die Arbeitsvariablen und kombinieren sie mit dem rundengerechten W-Wert, den wir im vorherigen Abschnitt beschrieben haben. Wenn Sie auf die rechte Seite der Runden im Diagramm schauen, sehen Sie eine weitere Eingabe:K. Es gibt 64 separate 32-Bit-Werte für K, einen für jede der 64 Runden. Sie werden aus den Kubikwurzeln der ersten 64 Primzahlen abgeleitet. Im Hexadezimalformat lauten diese achtstelligen Konstanten für jede Runde wie folgt, gelesen von links nach rechts, bevor zur nächsten Zeile übergegangen wird:
|_+_|Beachten Sie, dass die Werte für K in SHA-384, SHA-512, SHA-512/224 und SHA-512/256 64 Bit lang sind. Es gibt auch 80 dieser Werte statt 64. Sie können diese in überprüfen FIPS 180-4 wenn benötigt.
Die Maj-Operation
Endlich haben wir alle unsere Eingaben. Jetzt ist es an der Zeit, herauszufinden, wie jede Runde von SHA-2 sie nutzt. Das folgende Diagramm gibt einen guten Überblick darüber, wie SHA-2 all diese Eingaben verwendet:
Die SHA-2-Berechnungen erfolgen in einer einzigen Runde.
Wenn Sie nach oben schauen, haben wir die Arbeitsvariablen,H(i)a, H(i)b, H(i)c, H(Ausweis, H(i)e, H(Wenn, H(ich G, und H(ich h. Dies sind die gleichen wie die Arbeitsvariablena, b, c, d, e, f, g und him Diagramm für den gesamten SHA-2-Algorithmus. In der ersten Runde handelt es sich um die jeweiligen Initialisierungsvariablen, die wir im vorherigen Abschnitt aufgeführt haben. Wenn man sich H. ansieht(i)a, H(i)b, H(i)c, oben links sehen Sie, dass alle drei Eingaben Pfeile haben, die auf ein Kästchen zeigen,Maj. Dies steht für die folgende Gleichung:
Maj (a,b,c) = (a UND b) ⊕ (a UND c) ⊕ (b UND c)
Um die Gleichung leichter lesbar zu machen, haben wir das H herausgenommen(ich)von jeder Variablen und beließ sie einfach alsA,B, UndC. Solange Sie sich daran erinnern, dass die Werte vonA,BUndCDas ändert sich mit jeder Runde, das sollte es einfacher machen, ihm zu folgen.
Damit haben wir uns bereits beschäftigt ⊕ Symbol, aberUNDin diesem Zusammenhang ist für uns neu. Dies ist eine weitere Operation in der Booleschen Algebra. Es bezieht sich auf eine logische Konjunktion, was im Grunde bedeutet, dass die Ausgabe nur dann wahr ist, wenn beide Eingaben wahr sind. Du kannst Erfahren Sie hier mehr , aber wir springen weiter und verwenden einfach an Online-Rechner um diesen Vorgang auszuführen.
Lassen Sie uns zunächst die Initialisierungsvariablen einfügen, die wir im aufgelistet habenDie InitialisierungsvariablenAbschnitt:
Maj (6a09e667, bb67ae85, 3c6ef372) = (6a09e667 UND bb67ae85) ⊕ (6a09e667 UND 3c6ef372) ⊕ (bb67ae85 UND 3c6ef372)
Der von uns verwendete Rechner ist ziemlich begrenzt, daher müssen wir die Berechnung in mehreren Schritten durchführen.
Eingeben6a09e667in die EingabeA.
WählenUNDaus der Dropdown-Liste unten.
Eingebenbb67ae85in die EingabeB.
Dies ergibt folgendes Ergebnis:
2A01A605
Nächste:
Eingeben6a09e667in die EingabeA.
WählenUNDaus der Dropdown-Liste unten.
Eingeben3c6ef372in die EingabeB.
Dies ergibt folgendes Ergebnis:
2808E262
Dann:
Eingebenbb67ae85in die EingabeA.
WählenUNDaus der Dropdown-Liste unten.
Eingeben3c6ef372in die EingabeB.
Dies ergibt folgendes Ergebnis:
3866A200
Lassen Sie uns alle diese Antworten in die Gleichung einbeziehen:
Maj (6a09e667, bb67ae85, 3c6ef372) = 2A01A605 2808E262 3866A200
Jetzt müssen wir nur noch die Eingaben in unserem Online-Rechner noch einmal ändern:
Eingeben2A01A605in die EingabeA.
WählenFREIaus der Dropdown-Liste unten.
Eingeben2808E262in die EingabeB.
WählenFREIaus der Dropdown-Liste unten.
Eingeben3866A200in die EingabeC.
Das gibt uns:
Maj(a,b,c)=3A6FE667
Das ∑0Betrieb
Jetzt haben wir die Antwort daraufMaj(a,b,c)Schauen wir uns noch einmal das Diagramm an und sehen, was als nächstes kommt:
Die SHA-2-Berechnungen erfolgen in einer einzigen Runde.
Sie werden sehen, dass der Pfeil ausH(i)aweist auch darauf hin∑-Symbol. Dies zeigt an, dass wir das H nehmen müssen(i)aGeben Sie es ein und führen Sie die folgende Berechnung durch:
∑0(a) = ROTRzwei(A) ⊕ R.O.T.R.13(A) ⊕ R.O.T.R.22(A)
Auch hier haben wir das H weggelassen(ich)zur Klarheit. Diese haben wir bereits behandeltkreisförmige Rechtsverschiebungen, ebenso wieXOR-Operationen. Dieses Mal müssen wir die zirkulären Rechtsverschiebungen um 2, 13 bzw. 22 Bit durchführen. Kehren wir zu zurück Unser Rechner , mit unserem Wert fürA,6a09e667.
Geben Sie für den ersten Abschnitt dieser Berechnung Folgendes ein:
6a09e667hineinWertSicherstellenhexadezimalwird aus dem Dropdown-Menü rechts ausgewählt.
32 inGröße.
2 hineinSchicht.
Stellen Sie sicherRechtswird für ausgewähltRichtung.
Drücke denZirkuläre VerschiebungKasten.
Drücke denFühren Sie eine Bitverschiebungsoperation durchTaste.
Dadurch erhalten Sie folgendes Ergebnis:
DA827999
Wenn Sie mehr darüber erfahren möchten, wie dieses Ergebnis erzielt wurde, zeigt der Rechner die Schritte an, die zur Berechnung des Vorgangs erforderlich sind. Sie können auch auf die zurückgreifenSchichtbetriebWeitere Einzelheiten finden Sie im Abschnitt.
Für die verbleibenden zwei Werte, die wir herausfinden müssen, müssen wir nur den Wert in ändernSchichtFeld und klicken Sie dann aufFühren Sie eine Bitverschiebungsoperation durcherneut drücken.
Ändern Sie es in13gibt uns eine Antwort auf:
333B504F
Ändern Sie es in22gibt uns eine Antwort auf:
27999DA8
Wir haben jetzt alle Werte, die wir zum Vervollständigen der Gleichung benötigen:
∑0(6a09e667) =DA827999⊕333B504F⊕27999DA8
Kehren wir zum zurück Taschenrechner Wir haben es für die XOR-Operationen verwendet und:
EingebenDA827999in die EingabeA.
WählenFREIaus der Dropdown-Liste unten.
Eingeben333B504Fin die EingabeB.
WählenFREIaus der Dropdown-Liste unten.
Eingeben27999DA8in die EingabeC.
Das ergibt folgendes Ergebnis:
∑0(6a09e667) = CE20B47E
Modulare Addition der Ergebnisse
Wenn wir den Pfeilen von folgenMajBox und die∑In der Box sehen wir, dass die Ausgaben dann als Eingaben in eine Box mit a gesendet werden+Symbol darauf. Dies stellt darmodulare Ergänzung, die, wie wir bereits beschrieben haben, einer normalen Addition ähnelt, mit der Ausnahme, dass die Zahlen an einem bestimmten Punkt einfach zum Anfang zurückgehen, anstatt weiter zu wachsen. Wenn Sie eine detailliertere Auffrischung wünschen, schauen Sie sich den vorherigen Abschnitt zur modularen Ergänzung noch einmal an.
Das Diagramm kann durch die folgende Formel dargestellt werden:
Maj(a,b,c) + ∑0(a) =3A6FE667+CE20B47E
Wir werden die verwenden gleicher Rechner wieder.
Eingeben3A6FE667in das erste Feld undCE20B47Ein die zweite, dann klickenBerechnung. Dies sollte Ihnen eine Antwort geben auf:
108909ae5
Wenn Sie genau hinschauen, werden Sie vielleicht feststellen, dass die obige Antwort neun Ziffern lang ist, während die vorherigen jeweils nur acht Ziffern lang waren. Wenn Sie sich an die Zeit erinnern, als wir das Konzept der modularen Addition eingeführt haben, haben wir erwähnt, dass es sich um eine reguläre Addition handelt, die jedoch einfach zum Anfang zurückkehrt, wenn die Zahlen einen bestimmten Punkt überschreiten.
Nun, der Taschenrechner, den wir verwendet haben, ist nicht speziell für die modulare Addition gedacht – er führt lediglich die normale Addition aus, die Sie in der Grundschule gelernt haben (allerdings mit Hexadezimalzahlen). Das bedeutet, dass die Zahlen nicht verlängert werden, sobald das Limit erreicht ist. Bisher hatten wir nur Glück, dass keine unserer bisherigen Berechnungen zu einer neunstelligen Zahl führte.
Dieses Mal sind wir bei neun Ziffern gelandet, obwohl es eigentlich nur acht sein müssten. Die gute Nachricht ist, dass es einfach ist, unser Problem zu lösen. Alles was wir tun müssen, ist die Ziffer ganz links zu entfernen, die1. Daher ist unsere Antwort nicht wirklich108909ae5. Stattdessen heißt es:
08909ae5
Wenn Sie zum Diagramm zurückkehren und die Linie verfolgen, die dieses verlässt+Wenn Sie die Box als Ausgang verwenden, werden Sie sehen, dass sie mit einer anderen Zeile verbunden ist, die Eingänge enthält, die wir noch nicht behandelt haben.Wir müssen einige andere Berechnungen durchführen, bevor wir zu diesem Punkt zurückkehren können.
Die bedingte Funktion
Schauen wir uns dieses Mal H an(i)e, H(Wenn, H(ich Gim Diagramm. Sie alle zeigen auf das Feld mit der Aufschrift „CH, was darauf hinweist, dass diese Werte als Eingaben in der folgenden Funktion dienen:
Ch(e, f, g) = (e UND f) ⊕ (NICHT e UND g)
Mit Ausnahme von haben wir uns bereits mit jeder dieser Operationen befasstNICHT. Dies stellt dar Negation , das auch als logisches Komplement bezeichnet wird. Wir werden nicht im Detail darauf eingehen, wie es funktioniert, um uns davor zu bewahren, zu sehr in die Irre zu gehen, aber Sie können entweder auf den Link verweisen oder auf den Online-Rechner vertrauen.
Wieder einmal haben wir das H entfernt(ich)aus e, f und g, einfach um die Lesbarkeit zu erleichtern. Wir arbeiten immer noch an Runde 0, daher werden diese Werte die Initialisierungsvariablen sein, die wir zuvor aufgelistet haben:
H(0) und–510e527f
H(0)f–9b05688c
H(0)g–1f83d9ab
Beachten Sie, dass in zukünftigen Runden die Variablen für e, f und g unterschiedlich sein werden. Setzen wir zunächst diese Initialisierungsvariablen in unsere Gleichung ein:
Ch (510e527f, 9b05688c, 1f83d9ab) = (510e527f UND 9b05688c) ⊕ (NICHT 510e527f UND 1f83d9ab)
Wir müssen diese Gleichung in Teile zerlegen, um sie zu vervollständigen Unser Rechner . Für die erste Hälfte:
Eingeben510e527fin die EingabeA.
WählenUNDaus der Dropdown-Liste unten.
Eingeben9b05688cin die EingabeB.
Dies sollte Ihnen eine Antwort geben auf:
1104400C
Für die zweite Hälfte der Gleichung:
Wähle ausNichtSchaltfläche links neben der EingabeA.
Geben Sie 510e527f in die Eingabe einA.
WählenUNDaus der Dropdown-Liste unten.
Geben Sie 1f83d9ab in die Eingabe einB.
Dies sollte folgendes Ergebnis liefern:
E818980
Fügen wir diese Antworten wieder in die Gleichung ein:
Ch(510e527f, 9b05688c, 1f83d9ab) = (1104400C) ⊕ (E818980)
Beenden Sie die Lösung wie folgt:
Stellen Sie sicher, dassNICHTist nicht mehr ausgewählt.
Eingeben1104400Cin die EingabeA.
WählenFREIaus der Dropdown-Liste unten.
EingebenE818980in die EingabeB.
Dies sollte Ihnen eine Antwort geben auf:
Ch(e, f, g) = 1F85C98C
∑1: Kreisförmige Rechtsverschiebung
Die SHA-2-Berechnungen erfolgen in einer einzigen Runde.
Wenn Sie zum Diagramm zurückkehren, werden Sie sehen, dass H(i)e, ist nicht nur eine Eingabe in dieCHGleichung, die wir gerade durchgeführt haben.Es wird auch zu einer Eingabe in ein anderes Feld, das mit einem ∑ gekennzeichnet ist. Dieses Feld bedeutet die folgende Berechnung:
∑1(e) = ROTR6(Und) ⊕ R.O.T.R.elf(Und) ⊕ R.O.T.R.25(Und)
Beachten Sie, dass dies∑1(Und)Funktion ist fast die gleiche wie die∑0(A)Funktion, die wir in der ausgeführt habenDas ∑0BetriebAbschnitt. Allerdings haben die beiden unterschiedliche Werte für die kreisförmigen Rechtsverschiebungen.
Wir haben das H weggelassen(ich)Teile der Gleichung werden der Einfachheit halber noch einmal aufgeführt. Lasst uns das einsteckenH(0) undWert für dieUndWerte, denn daran arbeiten wir nochRunde 0. Wie wir im besprochen habenDie InitialisierungsvariablenAbschnitt, der Wert fürH(0) undIst510e527f. Daher:
∑1(510e527f) = ROTR6(510e527f) ⊕ R.O.T.R.elf(510e527f) ⊕ R.O.T.R.25(510e527f)
Wir haben mehrmals erklärt, wie diese rechten zirkulären Verschiebungen funktionieren, also gehen wir zu unserem Online-Rechner und geben Sie ein:
510e527f hineinWertSicherstellenhexadezimalwird aus dem Dropdown-Menü rechts ausgewählt.
32 inGröße.
6 inSchicht.
Stellen Sie sicherRechtswird für ausgewähltRichtung.
Drücke denZirkuläre VerschiebungKasten.
Drücke denFühren Sie eine Bitverschiebungsoperation durchTaste.
Dies sollte uns eine Antwort geben auf:
FD443949
Behalten Sie alle Details bei, außer dass Sie die ändernSchichtWert aufelfund klicken Sie aufFühren Sie eine Bitverschiebungsoperation durchnoch einmal drücken. Dies sollte Ihnen eine Antwort geben auf:
4FEA21CA
Wiederholen Sie den Vorgang und ändern Sie dieses Mal nur dieSchichtWert auf 25. Unsere Antwort sollte sein:
87293FA8
Jetzt haben wir alle Ergebnisse, die wir zur Lösung der Gleichung benötigen. Setzen wir jeden der Werte, die wir gerade ermittelt haben, in die Formel ein:
∑1(510e527f) = FD443949⊕ 4FEA21CA⊕ 87293FA8
Lösen wir es nun, indem wir zu unserem Rechner zurückkehren XOR-Operationen:
Eingeben FD443949 in die EingabeA.
WählenFREIaus der Dropdown-Liste unten.
Eingeben 4FEA21CA in die EingabeB.
WählenFREIaus der Dropdown-Liste unten.
Eingeben87293FA8in die EingabeC.
Das ergibt folgendes Ergebnis:
∑1(510e527f) = 3587272B
Modulare Ergänzung
Kehren wir zum Diagramm zurück, um zu sehen, wohin wir als Nächstes gehen müssen:
Die SHA-2-Berechnungen erfolgen in einer einzigen Runde.
Wenn wir nach rechts oben schauen, sehen wir, dass die Arbeitsvariable H(ich hhat einen Pfeil, der zu einer Box mit a führtPluszeichendarauf. Die Ausgabe vonCHDie Operation, die wir bereits abgeschlossen haben, führt zu derselben Box, was bedeutet, dass wir eine modulare Addition mit diesen beiden Werten durchführen müssen. Wir befinden uns immer noch in der Mitte von Runde 0, daher müssen wir die Initialisierungsvariable H verwenden(0)h, als unser Wert fürH. Wie wir im besprochen habenDie InitialisierungsvariableAbschnitt.
H(0)h= 5be0cd19
Die Antwort auf die Ch-Operation war:
Ch(e, f, g) = 1F85C98C
Deshalb müssen wir die Lösung finden für:
5be0cd19+1F85C98C
Gehen wir zu unserem Online-Rechner für hexadezimale Addition.
Eingeben5be0cd19in das erste Feld und1F85C98CGeben Sie in das zweite Feld ein und klicken Sie dann auf Berechnen. Das ergibt folgendes Ergebnis:
7b6696a5
Modularere Ergänzung
Wenn Sie den Pfeil, der aus diesem Feld zeigt, mit dem nachzeichnen+Symbol, Sie werden sehen, dass es zu einer Eingabe in ein anderes ähnliches Feld wird, was auf eine modularere Ergänzung hinweist. Diesmal ist die andere Eingabe das Ergebnis, das wir durch die kreisförmigen Rechtsscheiße auf ∑ erhalten haben1(e) im letzten∑1: Kreisförmige RechtsverschiebungAbschnitt. Die Antwort war:
∑1(510e527f) = 3587272B
Nehmen wir also das Ergebnis aus dem letzten Abschnitt und addieren es zum Ergebnis von∑1(Und). Die Gleichung lautet:
7b6696a5+3587272B
Gehe zum Online-Rechner die wir gerade im vorherigen Abschnitt verwendet haben, und geben Sie ein7b6696a5in das erste Feld und3587272BGeben Sie in das zweite Feld ein und klicken Sie dann auf Berechnen. Das ergibt folgendes Ergebnis:
b0edbdd0
Den W-Wert hinzufügen … mit noch mehr modularer Ergänzung
Wenn Sie das Diagramm noch einmal betrachten, werden Sie sehen, dass die Ausgabe der vorherigen Operation in eine andere der Operationen gehtmodulare Zusatzboxenangegeben durch die+Zeichen. Diesmal wird es zu einem der W-Werte hinzugefügt, die Teile unserer aufgefüllten Nachricht sind: „Hashing ist kompliziert“ (im Fall der Werte W16-IN63, sie werden von der aufgefüllten Nachricht abgeleitet und sind keine Teile davon.
Wir sind immer noch drinRunde 0, also müssen wir verwendenIn0, was, wie wir im besprochen habenKonvertierung in HexadezimalzahlAbschnitt zum Anfang, ist:
In0– 68617368
Wenn wir dies zusammen mit der Lösung aus unserem letzten Abschnitt in eine modulare Additionsgleichung hinzufügen, erhalten wir:
68617368+b0edbdd0
Kehren Sie zum Gleichen zurück Online-Rechner zum Addieren und Eingeben von Hexadezimalzahlen68617368in das erste Feld,dann b0edbdd0in den zweiten. KlickenBerechnung, was Ihnen eine Antwort geben wird:
1194f3138
Wie wir im bemerkt habenModulare Addition der ErgebnisseWenn eines unserer Ergebnisse in diesem Abschnitt eine Länge von neun statt acht Ziffern erreicht, müssen wir es zurücksetzen, indem wir einfach die Ziffer ganz links, die, entfernen1. Daher ist das Ergebnis, das wir brauchen, eigentlich nicht1194f3138. Stattdessen heißt es:
194f3138
Hinzufügen des konstanten K… durch die stets zuverlässige modulare Ergänzung
Mit der obigen Antwort in der Hand zeigt die Ausgabe der Box auf eine andere, die das hat+-Symbol, was erneut auf eine modulare Addition hinweist. Diesmal steht auf dem anderen Pfeil, der darauf zeigt, Kich, was bedeutet, dass es jetzt an der Zeit ist, die Konstante K hinzuzufügen. Wir haben jeden der 64 Werte für K in aufgelistetDie Konstante KAbschnitt. Der Wert, den wir für die erste Runde benötigen, K0Ist:
428a2f98
Daher muss unsere modulare Additionsoperation diesen Wert sowie das Ergebnis der vorherigen Runde enthalten:
428a2f98+194f3138
Jetzt müssen wir zu unserem zurückkehren Online-Rechner für hexadezimale Addition und geben Sie ein428a2f98in das erste Feld, mit194f3138in dieser Sekunde. KlickenBerechnunggibt uns ein Ergebnis von:
5bd960d0
Die modulare Ergänzung endet nie
Kehren Sie zum Diagramm zurück und folgen Sie der Ausgabe der vorherigen Operation. Es trifft auf eine weitere gefürchtete modulare Zusatzbox, diesmal mit dem Wert H(Ausweisals seine andere Eingabe. Wir befinden uns noch in Runde 0, daher müssen wir die Initialisierungsvariable H verwenden(0)d, welches ist:
a54ff53a
Deshalb müssen wir die Antwort finden auf:
a54ff53a+5bd960d0
Wenn wir diese Werte in dasselbe setzen Online-Rechner , am Ende haben wir:
10129560a
Wieder einmal sind wir auf neun Ziffern gestoßen, also müssen wir einfach die ganz linke Ziffer weglassen1, wie in der besprochenModulare Addition der ErgebnisseAbschnitt. Daher lautet unsere Antwort eigentlich:
0129560a
Woher kommen die Arbeitsvariablen?
Wenn Sie der Zeile aus dem +-Symbolfeld folgen, werden Sie sehen, dass es unten in einer Reihe von Kästchen landet, wobei dieses bestimmte Kästchen markiert istH(i)e. Das haben wir erwähntRunde 0 beginnt mit Initialisierungsvariablen, aber dasIn den folgenden Runden werden stattdessen andere Variablen verwendet.
Sie haben sich vielleicht gefragt, woher diese kommen sollen, und jetzt haben Sie zumindest einen Teil der Antwort.Die Werte in dieser Kästchenreihe unten werden zu den Arbeitsvariablen, die in der nächsten Runde verwendet werden.
In diesem Fall die InitialisierungsvariableH(0)dwurde zu dem hinzugefügt, was im Wesentlichen eine Mischung der anderen Initialisierungsvariablen H ist(0) und, H(0)f, H(0)g, und H(0)h, neben einem Teil unserer Eingabenachricht, W0,und die Konstante K0. Die resultierende Mischung,0129560a, wird dann zur ArbeitsvariablenH(1 undfür Runde 1.
Die anderen Initialisierungsvariablen folgen ähnlichen Prozessen und werden auf seltsame Weise modifiziert und einander hinzugefügt, um in der nächsten Runde zu neuen Arbeitsvariablen zu werden. Sie können sich die Pfeile ansehen, die in die untere Reihe zeigen, um zu sehen, woher die einzelnen Arbeitsvariablen der nächsten Runde stammen.
Das scheint vielleicht nicht so wichtig zu sein, aber es ist eine Schlüsselkomponente der Struktur, die es ermöglicht, dass jeder SHA-2-Hash radikal anders aussieht, selbst wenn nur ein einziger Buchstabe der Eingabe geändert wird. Denken Sie daran, dass wir erst einen Teil der Runde 0 hinter uns haben und noch 63 Runden vor uns liegen, sodass es viel mehr Möglichkeiten gibt, diese Werte zu verwechseln.
Beide Seiten vereinen ... mit modularerer Ergänzung
Erinnern Sie sich zurück an dieModulare Addition der ErgebnisseAbschnitt, in dem wir eine modulare Addition für die folgenden Werte durchgeführt haben:
Maj(a,b,c) + ∑0(a) =08909ae5
Nachdem wir die Lösung gefunden hatten, mussten wir bei diesem Thread des Diagramms innehalten, während wir uns mit den anderen Komponenten beschäftigten. Jetzt haben wir alles getan, was wir tun mussten, und sind bereit, wieder damit anzufangen.
Nur um sicherzugehen, dass Sie uns folgen, okay, wir sind derzeit beidas unterste +-Feld auf der linken Seite des Diagramms, in die die oben diskutierte Gleichung einfließt. Unser anderer Input in dieser modularen Additionsgleichung ist die Lösung ausDie modulare Ergänzung endet nieAbschnitt, der lautete:
0129560a
Daher versuchen wir eine Lösung zu finden für:
08909ae5+0129560a
Kehren wir zu unserem zurück Online-Rechner und eintippen08909ae5in das erste Feld, mit0129560ain dieser Sekunde. Wenn wir treffenBerechnung, es gibt uns:
9b9f0ef
Wir können vorne eine Null hinzufügen, um die Konsistenz bei 8 Ziffern zu gewährleisten:
09b9f0ef
Diese Antwort wird dann in das H eingefügt(i)aSteckplatz in der unteren Reihe, was bedeutet, dasses wird zur Arbeitsvariablen H(1)ain der nächsten Runde, Runde 1.
Da wir nun diese Lösung haben, haben wir endlich alle damit verbundenen Berechnungen abgeschlossenRunde 0.
Die anderen Arbeitsvariablen
Die Arbeitsvariable haben wir bereits besprochenH(i)e, und jetzt die ArbeitsvariableH(i)a sowie. Jetzt ist es an der Zeit, herauszufinden, woher die restlichen Arbeitsvariablen stammen, damit wir sie in Runde 1 und jeder der folgenden Runden verwenden können.
Wie wir besprochen haben, waren die Arbeitsvariablen in Runde 0 eine Reihe vordefinierter Zahlen, die wir Initialisierungsvariablen nannten:
- H(0)a= 6a09e667
- H(0)b= bb67ae85
- H(0)c= 3c6ef372
- H(0)d= a54ff53a
- H(0) und= 510e527f
- H(0)f= 9b05688c
- H(0)g= 1f83d9ab
- H(0)h= 5be0cd19
Jetzt ist es an der Zeit herauszufinden, wie die restlichen Arbeitsvariablen zu Beginn der ersten Runde aussehen werden. Glücklicherweise macht es das Diagramm ziemlich einfach:
Die SHA-2-Berechnungen erfolgen in einer einzigen Runde.
Wenn wir uns die unterste Zeile ansehen, wo es stehtH(i)b, können wir den Pfeil zurückverfolgen, um zu sehen, dass der Wert einfach istH(i)a. AlsH(0)aIst6a09e667, das bedeutet, dass unsere Arbeitsvariable für Runde 1,H(1)b, wird auch sein6a09e667.
Weiter geht es mitH(i)cIn der unteren Reihe sehen wir, dass der Pfeil seinen Ursprung hatH(i)bFeld in der oberen Reihe. Deshalb, dieH(0)bWert,bb67ae85, wird zur ArbeitsvariablenH(1)cin Runde 1.
Wenn wir uns umdrehenH(AusweisIn der unteren Reihe sehen wir, dass der Pfeil es mit verbindetH(i)coben. Daher,H(1)dist der gleiche Wert wieH(0)c, welches ist3c6ef372.
Weiter geht es mit dem Pfeil nach untenH(i)ekommt aus der modularen Addition vonH(Ausweisund das Ergebnis, das wir erhielten, als wir den Konsonanten hinzufügten. Wir haben diesen Wert im herausgefundenDie modulare Ergänzung endet nieAbschnitt, daher der Wert fürH(1 undIst0129560a.
Die Werte fürH(Wenn,H(ich GUndH(ich hsind einfach herauszufinden. Wenn wir den Pfeilen dieser Werte in der unteren Reihe folgen, sehen wir, dass die Pfeile von stammenH(i)e,H(WennUndH(ich G, jeweils.
Daher:
H(0) und, das 510e527f war, wirdH(1)f.
H(0)f, das 9b05688c war, wirdH(1)g.
H(0)g, das 1f83d9ab war, wirdH(1)h.
Um es noch einmal zusammenzufassen: Die Arbeitsvariablen, die wir als einige unserer Eingaben für Runde 1 verwenden werden, sind:
- H(1)a= 09b9f0ef
- H(1)b= 6a09e667
- H(1)c= bb67ae85
- H(1)d= 3c6ef372
- H(1 und= 0129560a
- H(1)f= 510e527f
- H(1)g= 9b05688c
- H(1)h= 1f83d9ab
Runde 1 (und nachfolgende Runden)
Wir haben Runde 0 abgeschlossen und wissen, was die Arbeitsvariablen für Runde 1 sindKonvertierung in HexadezimalzahlAbschnitt kennen wir auch den W-Wert, den wir in Runde 1 verwenden müssen:
In1= 346E6720
Den von uns benötigten K-Wert finden Sie auch imDie Konstante K, Abschnitt. Diesmal benötigen wir den Wert in der zweiten Spalte der oberen Zeile:
K1=71374491
Wir haben jetzt alle Informationen, die wir benötigen, um mit Runde 1 zu beginnen. Schauen wir uns zunächst noch einmal das Diagramm des gesamten Algorithmus an:
Der SHA-2-Algorithmus
Wenn wir den Pfeilen folgen, die unten herauskommenRunde 0, Sie werden sehen, dass sie darauf zeigenRunde t. Runde t hat auch Eingaben von WTund KT.Runde tist nur ein Ersatz für jede der 62 Runden dazwischenRunde 0UndRunde 63, weil es unpraktisch gewesen wäre, 64 Runden zu ziehen.
Stellen Sie sich stattdessen vor, dass die Pfeile von Runde 0 tatsächlich in Richtung Runde 1 zeigen und dass die anderen Eingaben tatsächlich W sind1und K1.
Schauen wir uns nun noch einmal das Diagramm für eine einzelne Runde von SHA-2 an:
Die SHA-2-Berechnungen erfolgen in einer einzigen Runde.
Wie aus den beiden Diagrammen hervorgeht, müssen wir zum Abschließen von Runde 1 lediglich alle in Runde 0 durchgeführten Operationen wiederholen. Der einzige Unterschied besteht darin, dass wir mit unterschiedlichen Werten beginnen. Anstelle von W0wir verwenden W1. Anstelle von K0wir verwenden K1. Anstelle aller H0Initialisierungsvariablen verwenden wir die H1Arbeitsvariablen. Wir haben gerade alle diese Eingaben aufgelistet, die wir zu Beginn der ersten Runde benötigen, damit Sie über alle Informationen verfügen, die Sie für den Einstieg benötigen.
Ihr erster Schritt besteht darin, es herauszufindenMaj (a,b,c). Dieses Mal müssen Sie das Neue verwendenRunde 1Eingaben von:
- H(1)a= 09b9f0ef
- H(1)b= 6a09e667
- H(1)c= bb67ae85
Den Vorgang haben wir im beschriebenDie Maj-OperationAbschnitt. Es umfasste sowohl UND-Verknüpfungen als auch XOR-Verknüpfungen und wir haben es mithilfe der Online-Rechner in mehreren Schritten durchgeführt. Sobald Sie den Vorgang mit den neuen Eingabewerten wiederholt haben, können Sie herausfinden, was als nächstes zu tun ist, indem Sie entweder zum Diagramm oder zum Diagramm zurückkehrenDas ∑0BetriebAbschnitt unseres Artikels.
In diesem Abschnitt haben wir eine Reihe zirkulärer Rechtsverschiebungen sowie XOR-Operationen durchgeführt. Dieses Mal müssen Sie das Neue verwendenAWert, H(1)a, welches ist:
09b9f0ef
Die übrigen Vorgänge sind die gleichen, einschließlich der Anzahl der Bits, die Sie verschieben müssen. Sobald Sie das Ergebnis haben, ist es an der Zeit, mit dem nächsten Schritt fortzufahren, den Sie entweder im Diagramm oder im Artikel finden können. Sobald Sie dieses Ergebnis erhalten haben, müssen Sie weiter voranschreiten und jedes Mal die gleichen Vorgänge ausführen, jedoch gegebenenfalls mit den neuen Eingabewerten.
Als Zusammenfassung:Um Runde 1 abzuschließen, müssen Sie Folgendes haben:
- DurchgeführtMaj-Operation.
- Abgeschlossen∑0Betrieb.
- Modulare Addition dieser beiden vorherigen Ergebnisse verwendet.
Dann:
- Abgeschlossenbedingte Funktion.
- Fertig∑1Betrieb.
- Modulare Addition des Ergebnisses der bedingten Funktion und des Werts für H durchgeführt(1)h
- Nimm das Ergebnis des letzten Schritts und addiere es zum Ergebnis von ∑1Betrieb durch modulare Ergänzung
- Dieses Ergebnis wurde zu W hinzugefügt1durch modulare Ergänzung
- Modulare Addition verwendet, um das Ergebnis aus dem letzten Schritt zu nehmen und K hinzuzufügen1
- Das Ergebnis aus dem vorherigen Schritt zu H hinzugefügt(1)dmit modularer Ergänzung
Nach diesen Schritten müssen Sie Folgendes tun:
- Nehmen Sie das Ergebnis, das Sie erhalten haben, als Sie K hinzugefügt haben1(vor zwei Schritten) und fügen Sie es der Lösung hinzu, die Sie durch die Verwendung der modularen Addition erhalten haben, um die Ergebnisse der zu kombinierenMaj-Operationund das∑0Betrieb(Diese Antwort erhalten Sie im dritten Schritt, am Ende der ersten Aufzählungspunkte)
- Nutzen Sie das Diagramm und unsere Beschreibungen imDie anderen ArbeitsvariablenAbschnitt, um herauszufinden, welche Werte zum H werden(zwei)Arbeitsvariablen, die Sie für Runde 2 benötigen
Sobald Sie an diesem Punkt angelangt sind, ist es Zeit für SieBeginnen Sie Runde 2, diesmal mit dem H(zwei)Arbeitsvariablen, die Sie gerade herausgefunden haben, zusammen mit Wzweiund Kzwei. Runde 2 verläuft genauso, mit der Ausnahme, dass gegebenenfalls diese neuen Eingaben verwendet werden.
Wenn Sie Runde 2 abgeschlossen haben, verfügen Sie über die Arbeitsvariablen, die Sie für Runde 3 benötigen, und Sie benötigen nur noch das W3und K3Werte, die wir weiter oben im Artikel aufgeführt haben, um die Vorgänge abzuschließen.
Dieser Vorgang wiederholt sich in den Runden 4 und 5 usw., wobei die Ergebnisse zu den Arbeitsvariablen für die nächste Runde werden. Die einzige Komplikation entsteht in Runde 16, wo Sie das W verwenden müssen16Wert, den wir bereits im ersten berechnet habenModulare ErgänzungAbschnitt, der am Anfang des Artikels stand.
Für die Runden 17 bis 63 wird die Aufgabe noch komplexer, da Sie die W-Werte mithilfe der in beschriebenen Methode selbst berechnen müssendie anderen W-WerteAbschnitt und nachfolgende Teile des Artikels.
Vorausgesetzt, Sie überleben die Tortur und schaffen es bis zum Ende von Runde 63, verbleiben Ihnen acht H(ich)Werte als Ergebnisse aus jeder der Berechnungen, die Sie im Laufe der Runde durchgeführt haben.
Das letzte XOR
Wenn Sie zum Gesamtdiagramm der SHA-2-Funktion zurückkehren, sehen Sie den letzten Schritt:
Der SHA-2-Algorithmus
Sie werden sehen, dass die Ergebnisse aus Runde 63, bei denen es sich um die acht endgültigen H-Werte handelt, die Sie zu diesem Zeitpunkt ermittelt hätten, alle in einer Reihe modularer Additionsfelder landen. Diese Felder haben auch andere Eingabepfeile, die auf H zurückgehen(i-1). Dies bedeutet, dass die anderen Eingaben in jeder dieser modularen Additionsoperationen die Initialisierungsvariablen sind.
Daher müssen Sie die folgenden modularen Additionsrechnungen durchführen:
- Finale HAWert + H(0)a= d6320dez
- Finale HBWert + H(0)b= c80c83e4
- Finale HCWert + H(0)c= c17915ee
- Finale HDWert + H(0)d= 5de8587b
- Finale HUndWert + H(0) und= b8118258
- Finale HFWert + H(0)f= 759b2453
- Finale HGWert + H(0)g= fce812d4
- Finale HHWert + H(0)h= 7d3df56a
Jetzt bleibt nur noch eines: diese Ergebnisse zu verknüpfen. Dies ist nur ein schickes Wort, um das eine an das Ende des anderen der Reihe nach hinzuzufügen. Wenn Sie dies tun, bleibt Folgendes übrig:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
Das obige Ergebnis ist unser SHA-2-Hash für „Hashing ist kompliziert“.Im Diagramm wird dies durch dargestelltHichganz unten.
Größere Nachrichteneingänge
Wenn die ursprünglichen Nachrichtendaten größer als 448 Bit gewesen wären, wären wir noch nicht fertig. Wir müssten immer noch jeden der verbleibenden Blöcke verarbeiten, bis die gesamten Eingabedaten den SHA-2-Algorithmus durchlaufen hätten.
Wenn dies der Fall wäre, hätten wir unsere Endergebnisse nicht zum Hash verkettet. Stattdessen jeder dieser achtHichWerte wären die Initialisierungsvariablen für den nächsten Block geworden.
Die Schritte wären ähnlich wie oben abgelaufen, außer dass unsere ersten 16 W-Werte dieses Mal Teile des zweiten Eingangsdatenblocks gewesen wären. Die nächsten 48 W-Werte wären aus diesen 16 Werten gemäß der von uns verwendeten Formel abgeleitet wordenNachrichtenplan: Finden der anderen W-WerteAbschnitt.
Wenn insgesamt nur zwei Eingabedatenblöcke verarbeitet werden müssen, werden nach Runde 63 des zweiten Blocks die endgültigen H-Werte zu den Initialisierungsvariablen des zweiten Blocks hinzugefügt, und zwar auf die gleiche Weise, wie wir es gerade für den ersten Block demonstriert haben . Diese Ergebnisse würden dann verkettet, um den SHA-2-Hash zu bilden.
Wenn es mehr Blöcke gibt, würden die Round-63-Ausgaben des zweiten Blocks stattdessen zu den Initialisierungsvariablen für den dritten Block werden. Dieser Prozess würde fortgesetzt, bis alle Eingabedatenblöcke verarbeitet wurden. Die acht Ausgaben des letzten Blocks würden dann zum SHA-2-Hash verkettet, auf die gleiche Weise, wie wir den Hash für einen einzelnen Block von Eingabedaten berechnet haben.