ALGORITHME DE HASH LEA

Signaler
Messages postés
152
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
29 avril 2009
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50065-algorithme-de-hash-lea

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
7
Vite fait, une amélioration des performances. Du côté mathématique ça ne change absolument rien, mais plutôt que de concentrer la fonction F cryptographique en une seule fonction, on la sépare en quatre fonctions E, F, G et H. Ca permet d'éviter 256 "case..of" par bloc ...

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
7
Attention : la dernière modification (j'espère). Voici ce qu'elle apporte :

- un nouveau logo (lol)
- une modification des fonctions HashCrypt et HashUncrypt : elles travaillent à présent directement sur l'objet THash et non pas sur sa représentation en chaîne. C'est plus rapide et plus efficace (la clef peut être n'importe-quoi, car on calcule son hash, puis on additionne les deux hashs pour crypter et on soustrait pour décrypter). Au fait, dans la dernière version de ces fonctions, un bug s'est glissé ...
- petite erreur au niveau de l'algorithme (l'avant-avant-dernier double-mot du hash (Hash[$D]) était constant dû à une petite erreur d'inattention.

Pour ceux que ça intéresse, les caractéristiques cryptographiques de l'algorithme (certaines) :

- blocs de 512 bits
- 16 rondes par bloc
- une fonction F, qui est appellée 256 fois par bloc, qui prend en paramètre quatre entiers, ainsi qu'une valeur entre 1 et 4, et qui retourne un seul entier. Elle effectue quatre types d'opérations différentes (selon la valeur du dernier paramètre), en utilisant les quatres premiers paramètres).
- une "expansion" de chaque entier du bloc : en effet, pour chaque ronde - donc pour chaque entier 32 bits du bloc en cours, on sépare les quatre octets de cet entier, puis on associe à chaque octet une valeur sur 32 bits (voir tableau HashTable). Cela permet de créer un effet d'avalanche intéressant du point de vue mathématique.
- une recalculation des tableaux en constante (HashInit et HashTable), à partir de nombres premiers. En effet :
* le tableau HashInit est basé sur le calcul suivant : prenons un grand nombre premier ($96438AF7 pour ce tableau). Imaginons un tableau Prime, de 16 éléments (0..15), contenant les 16 premiers nombres premiers (en partant de 2 inclus). Alors on a le calcul suivant :
HashInit[0] = $96438AF7 * Primes[0];
pour I 1 à 15 faire HashInit[I] ($96438AF7 * Primes[I]) + ($96438AF7 mod Primes[I]);

* pour le tableau HashTable, c'est la même chose, sauf qu'on se base sur le nombre premier $1C8CFBFF, et que les tableaux HashTable et Prime contiennent 256 éléments.

- lors des 16 rondes de chaque bloc, les seize entiers du hash sont mélangés dans tous les sens, je ne saurais vous décrire ce qu'ils doivent endurer à chaque ronde :'( .... lol
______________________

Et voilà, je pense que c'est fini, sauf si l'on trouve des bugs ;-)
Bonne chance pour étudier ça, Djmmix, le coup de l'expansion du bloc est plus que pénible à cryptanalyser ... ;-)

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
7
De rien, content que ça te plaise. Je veux être cryptologue plus tard et j'ai fait cet algorithme avec mes compétences de lycéen ( :'/ ) en ayant lu plein de cours sur la cryptologie.

Cordialement, Bacterius !
Messages postés
152
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
29 avril 2009

salut Bacterius,

je vais étudié sa de près :)

merci pour tout tes éfforts pour cet algo :)
Afficher les 68 commentaires