Wie werden SHACAL-2-Chiffren berechnet?

Jan 12 2021

Ich versuche, etwas über die zugrunde liegende Funktionalität der verschiedenen Hash-Funktionen (derzeit SHA) zu lernen, und bin selbst nach dem Anschauen eines Stanford-Videos darüber ziemlich festgefahren.

Eine Methode zum Hashing ist die Verwendung der Merkel-Damgård-Konstruktion mit der David-Meyers-Funktion und SHACAL-2-Blockchiffren.

Soweit ich weiß, ist MD die Nachricht, die in eine Kette von 64-Bit-Blöcken unterteilt ist, die den vorherigen Blockwert oder IV enthalten (Anfangsvektor, der durch die Hash-Funktion oder einen benutzerdefinierten Salt-Schlüssel definiert wird). Der Blockwert oder IV zusammen mit dem aktuellen Blockwert und einem x-Bit-Schlüssel ist nach Durchlaufen der SHACAL-2-Funktion dann die neue Verschlüsselung.

Ist das richtig verstanden? Wenn ja: Was passiert innerhalb der SHACAL-Funktion? Was ist Mathe?

Ich habe das gefunden, aber es beantwortet meine Frage nicht wirklich: SHACAL in SHA-256

Antworten

2 kelalaka Jan 12 2021 at 18:13

Die MD-Konstruktion verwendet eine Kompressionsfunktion $C$ ($F$ in den Figuren) so, dass es zwei Eingänge hat.

$$h_i = C(h_{i-1},m_i)$$

und der erste $h_{-1} = IV$ und der letzte $H = h_{2^k-1}$ ist der Hashwert.

Die Komprimierungsfunktion kann eine Blockverschlüsselung verwenden, wobei die Nachricht an die Blockverschlüsselung der vorherige Hashwert und der Schlüssel die Nachricht ist. $h_i = E_{m}(h_{i-1})$

Die erste Beschreibung der Verwendung einer Blockverschlüsselung für die Komprimierungsfunktion findet sich in Merkles These auf Seite 11 . Diese Konstruktion ist völlig unsicher, da die vorhandene Blockverschlüsselung direkt verkettet ist und gezeigt werden kann, dass dies der Fall ist$\mathcal{O}(2^{n/2})$ zweiter Vorbildwiderstand statt $\mathcal{O}(2^{n})$.

Wir wollen keine verwandten Schlüsselangriffe, wie sie in einigen Blockchiffren wie AES und DES existieren. Dies stellt kein Problem für die Verschlüsselung dar, da die Schlüssel zufällig einheitlich ausgewählt werden. Die zugehörigen Schlüssel können jedoch verwendet werden, um die Hash-Funktion anzugreifen. Dies wird ausführlich von Mannik und Preenel diskutiert

Wir wollen große Eingaben aufgrund der Kollisionsangriffe auf die Komprimierungsfunktionen [1] und daher mehr zu verarbeitende Runden. Daher erstellen Designer eine neue Blockverschlüsselung für MD-Konstruktionen, anstatt vorhandene zu verwenden. Für SHA-1 heißt es SHACAL und für SHA-2 heißt es SHACAL-2.

Der Teilungswert hängt von der Komprimierungsfunktion ab. MD5, SHA-1 und SHA256 verwenden 512-Bit-Nachrichtenblöcke. SHA512 verwendet 1024-Bit-Nachrichtenblöcke. Die Nachrichten werden so aufgefüllt, dass sie ein Vielfaches der Blockgröße betragen, wobei die Nachrichtengröße am Ende codiert ist.

Zum Beispiel SHA-512-Polsterung an NIST FIPS 180-4

Angenommen, die Länge der Nachricht, $M$ist $\ell$Bits. Fügen Sie das Bit 1an das Ende der Nachricht an, gefolgt von$k$ Null Bits, wo $k$ ist die kleinste nicht negative Lösung der Gleichung $$\ell + 1 + k \equiv 896 \bmod 1024$$ Fügen Sie dann den 128-Bit-Block hinzu, der der Zahl entspricht $\ell$ ausgedrückt mit einer binären Darstellung

Formalisieren für beliebige Blockgröße $b$ und $d$-bit-codierte Nachrichtengröße (64 für SHA-1 und SHA256, 128 für SHA512.

$$\ell + 1 + k \equiv b-d \bmod b$$

Die Entwurfskriterien haben also eine Blockverschlüsselung mit vielen Runden, SHACAL hat 80, SHA-256 hat 64 und SHA512 hat 80 Runden, während die Rundenfunktion einfach gehalten wird.

Die Blockverschlüsselung wird als Davies-Meyer verwendet , um eine Einweg-Komprimierungsfunktion zu erstellen.

Zum Beispiel ist die Mathematik für SHA256

  • $\operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)$
  • $\operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)$
  • $\Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)$
  • $\Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)$

Die bitweise Drehung verwendet unterschiedliche Konstanten für SHA-512. Die angegebenen Nummern gelten für SHA-256.
Das Rote$\boxplus$ bedeuten $ c = a + b \mod 2^{32}$dh Modulo-Addition.

Wie wir sehen können, haben einfache Operationen, die CPUs ausführen können, eine leichte Rundungsfunktion mit einer etwas verschlechterten unausgeglichenen Feistel-Struktur.

Und wir haben aus dem Tiny Encryption-Algorithmus gelernt, dass selbst einfache Runden nach 32 Runden sicher sein können.