Comment les chiffrements SHACAL-2 sont-ils calculés?

Jan 12 2021

J'essaie d'en savoir plus sur les fonctionnalités sous-jacentes des différentes fonctions de hachage (actuellement SHA) et je suis assez coincé même après avoir regardé une vidéo de Stanford à ce sujet.

Une méthode de hachage consiste à utiliser la construction Merkel-Damgård avec la fonction David Meyers et les chiffrements par blocs SHACAL-2.

Pour autant que je sache, MD est le message divisé en une chaîne de blocs de 64 bits contenant la valeur de bloc précédente ou IV (vecteur initial défini par la fonction de hachage ou une clé de sel personnalisée). La valeur de bloc ou IV avec la valeur de bloc actuelle et une clé de x bits est après avoir traversé la fonction SHACAL-2, puis le nouveau chiffrement.

Est-ce bien compris? Si c'est le cas: que se passe-t-il dans la fonction SHACAL? Qu'est-ce que les maths?

J'ai trouvé ça mais ça ne répond pas vraiment à ma question: SHACAL en SHA-256

Réponses

2 kelalaka Jan 12 2021 at 18:13

La construction MD utilise une fonction de compression $C$ ($F$ sur les figures) de telle sorte qu'il dispose de deux entrées.

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

et le premier $h_{-1} = IV$ et le dernier $H = h_{2^k-1}$ est la valeur de hachage.

La fonction de compression peut utiliser un chiffrement par bloc, où le message au chiffrement par bloc est la valeur de hachage précédente et la clé est le message. $h_i = E_{m}(h_{i-1})$

La première description de l'utilisation d'un chiffrement par blocs pour la fonction de compression existe dans la thèse de Merkle à la page 11 . Cette construction est totalement non sécurisée puisque le chiffrement par bloc existant est directement enchaîné et on peut montrer qu'il a$\mathcal{O}(2^{n/2})$ résistance à la seconde préimage au lieu de $\mathcal{O}(2^{n})$.

Nous ne voulons pas d' attaques par clé associées comme dans certains chiffrements par blocs comme AES et DES. Cela ne crée pas de problème pour le chiffrement puisque les clés sont choisies de manière uniforme au hasard, cependant, les clés associées peuvent être utilisées pour attaquer la fonction de hachage. Ceci est discuté en détail par Mannik et Preenel

Nous voulons des entrées importantes en raison des attaques par collision sur les fonctions de compression [1] et donc plus de tours à traiter. Les concepteurs créent donc un nouveau chiffrement par blocs pour les constructions MD au lieu d'utiliser celles existantes. Pour SHA-1, il est appelé SHACAL et pour SHA-2, il est appelé SHACAL-2.

La valeur de division dépend de la fonction de compression, MD5, SHA-1 et SHA256 utilise des blocs de messages de 512 bits, SHA512 utilise des blocs de messages de 1024 bits. Les messages sont remplis pour être un multiple de la taille du bloc avec la taille du message est codée à la fin.

Par exemple, rembourrage SHA-512 sur NIST FIPS 180-4

Supposons que la longueur du message, $M$, est $\ell$morceaux. Ajoutez le bit 1à la fin du message, suivi de$k$ zéro bit, où $k$ est la plus petite solution non négative de l'équation $$\ell + 1 + k \equiv 896 \bmod 1024$$ Puis ajoutez le bloc de 128 bits égal au nombre $\ell$ exprimé en utilisant une représentation binaire

Formaliser pour une taille de bloc arbitraire $b$ et $d$- taille de message codée en bits (64 pour SHA-1 et SHA256, 128 pour SHA512.

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

Ainsi, les critères de conception sont d'avoir un chiffrement par bloc avec de nombreux tours, SHACAL en a 80, SHA-256 en a 64 et SHA512 a 80 tours tout en gardant la fonction ronde simple.

Et le chiffrement par blocs est utilisé comme Davies – Meyer pour créer une fonction de compression unidirectionnelle.

Par exemple, le calcul pour SHA256 est

  • $\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)$

La rotation au niveau du bit utilise différentes constantes pour SHA-512. Les nombres donnés sont pour SHA-256.
Le rouge$\boxplus$ signifier $ c = a + b \mod 2^{32}$, c'est-à-dire l'addition modulo.

Comme nous pouvons le voir, des opérations simples que les processeurs peuvent gérer, une fonction ronde légère, avec une structure Feistel déséquilibrée un peu dégradée.

Et nous avons appris de l' algorithme Tiny Encryption que même les tours simples peuvent être sécurisés après 32 tours.