MD5 vs SHA-1 vs SHA-2 - Quel est le hachage de cryptage le plus sécurisé et comment les vérifier

Qu'est-ce qu'une fonction de hachage?

Une fonction de hachage prend une valeur d'entrée (par exemple, une chaîne) et renvoie une valeur de longueur fixe. Une fonction de hachage idéale a les propriétés suivantes:

  • c'est très rapide
  • il peut renvoyer une énorme plage de valeurs de hachage
  • il génère un hachage unique pour chaque entrée unique (pas de collisions)
  • il génère des valeurs de hachage différentes pour des valeurs d'entrée similaires
  • les valeurs de hachage générées n'ont pas de modèle discernable dans leur distribution

Aucune fonction de hachage idéale n'existe, bien sûr, mais chacune vise à fonctionner au plus près de l'idéal. Étant donné que (la plupart) des fonctions de hachage renvoient des valeurs de longueur fixe et que la plage de valeurs est donc limitée, cette contrainte peut pratiquement être ignorée. Le nombre de valeurs possibles qui peuvent être renvoyées par une fonction de hachage de 256 bits, par exemple, est à peu près le même que le nombre d'atomes dans l'univers.

Idéalement, une fonction de hachage ne renvoie pratiquement aucune collision, c'est-à-dire qu'aucune entrée différente ne génère la même valeur de hachage. Ceci est particulièrement important pour les fonctions de hachage cryptographiques: les collisions de hachage sont considérées comme une vulnérabilité.

Enfin, une fonction de hachage doit générer des valeurs de hachage différentes de manière imprévisible pour toute valeur d'entrée. Par exemple, prenez les deux phrases très similaires suivantes:

1. "The quick brown fox." 2. "The quick brown fax." 

Nous pouvons comparer les valeurs de hachage MD5 générées à partir de chacune des deux phrases:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

Deux hachages très différents ont été générés pour deux phrases similaires, ce qui est une propriété utile à la fois pour la validation et la cryptographie. C'est un corollaire de la distribution: les valeurs de hachage de toutes les entrées doivent être réparties uniformément et de manière imprévisible sur toute la plage des valeurs de hachage possibles.

Fonctions de hachage courantes

Il existe plusieurs fonctions de hachage largement utilisées. Tous ont été conçus par des mathématiciens et des informaticiens. Au cours de recherches ultérieures, certains se sont avérés avoir des faiblesses, bien que tous soient considérés comme suffisamment bons pour des applications non cryptographiques.

MD5

La fonction de hachage MD5 produit une valeur de hachage de 128 bits. Il a été conçu pour une utilisation en cryptographie, mais des vulnérabilités ont été découvertes au fil du temps, il n'est donc plus recommandé à cette fin. Cependant, il est toujours utilisé pour le partitionnement de la base de données et le calcul des sommes de contrôle pour valider les transferts de fichiers.

SHA-1

SHA signifie Secure Hash Algorithm. La première version de l'algorithme était SHA-1, puis a été suivie par SHA-2 (voir ci-dessous).

Alors que MD5 produit un hachage de 128 bits, SHA1 génère un hachage de 160 bits (20 octets). Au format hexadécimal, il s'agit d'un entier de 40 chiffres. Comme MD5, il a été conçu pour les applications de cryptologie, mais il a rapidement été découvert qu'il présentait également des vulnérabilités. À ce jour, il n'est plus considéré comme moins résistant aux attaques que le MD5.

SHA-2

La deuxième version de SHA, appelée SHA-2, a de nombreuses variantes. Le SHA-256 est probablement le plus couramment utilisé, que le National Institute of Standards and Technology (NIST) recommande d'utiliser au lieu de MD5 ou SHA-1.

L'algorithme SHA-256 renvoie une valeur de hachage de 256 bits ou 64 chiffres hexadécimaux. Bien qu'il ne soit pas tout à fait parfait, les recherches actuelles indiquent qu'il est considérablement plus sûr que MD5 ou SHA-1.

En termes de performances, un hachage SHA-256 est environ 20 à 30% plus lent à calculer que les hachages MD5 ou SHA-1.

SHA-3

Cette méthode de hachage a été développée à la fin de 2015 et n'a pas encore été largement utilisée. Son algorithme n'est pas lié à celui utilisé par son prédécesseur, SHA-2.

L'algorithme SHA3-256 est une variante avec une applicabilité équivalente à celle de l'ancien SHA-256, le premier prenant un peu plus de temps à calculer que le dernier.

Utilisation des valeurs de hachage pour la validation

Une utilisation typique des fonctions de hachage consiste à effectuer des contrôles de validation. Une utilisation fréquente est la validation de collections de fichiers compressés, tels que les fichiers d'archive .zip ou .tar.

Étant donné une archive et sa valeur de hachage attendue (communément appelée somme de contrôle), vous pouvez effectuer votre propre calcul de hachage pour valider que l'archive que vous avez reçue est complète et non corrompue.

Par exemple, je peux générer une somme de contrôle MD5 pour un fichier tar sous Unix à l'aide des commandes piped suivantes:

tar cf - files | tee tarfile.tar | md5sum - 

Pour obtenir le hachage MD5 d'un fichier sous Windows, utilisez la commande Get-FileHash PowerShell:

Get-FileHash tarfile.tar -Algorithm MD5 

La somme de contrôle générée peut être publiée sur le site de téléchargement, à côté du lien de téléchargement de l'archive. Le récepteur, une fois qu'il a téléchargé l'archive, peut valider qu'elle a été correctement détectée en exécutant la commande suivante:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

2e87284d245c2aae1c74fa4c50a74c77 est la somme de contrôle générée qui a été validée . L'exécution réussie de la commande ci-dessus générera un état OK comme celui-ci:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK