Astuce macOS : Vérifier les sommes de contrôle de fichiers avec MD5, SHA1, SHA256, SHA384 ou SHA512
Lorsque vous téléchargez un fichier (ou une application) sur internet, il arrive qu'en plus du lien, l'éditeur du fichier fournisse une valeur de somme de contrôle (ou checksum en anglais).
C'est le cas, par exemple, lorsque l'on souhaite télécharger l'application d'encodage vidéo Handbrake. Une page dédiée est fournie, par l'éditeur, avec l'ensemble des sommes de contrôle pour l'ensemble des téléchargements disponibles.
A quoi servent ces sommes de contrôle ?
Simplement, ces sommes de contrôle permettent de vérifier que le téléchargement n'a pas été altéré par le transfer, que ce soit à cause d'une erreur dans le téléchargement ou parce qu'un tiers aurait modifié le fichier, sur le serveur de l'éditeur ou sur le réseau, lors du transfer.
Comment cela fonctionne ?
Les sommes de contrôle utilisent un algorithme de hashage sur l'ensemble du fichier pour retourner une valeur quasi unique, et d'une longueur fixe (selon le type d'algorithme et hash), et ce, quelque soit la taille du fichier original.
Ainsi l'éditeur, lors de la mise en ligne de son fichier va calculer les hashs de son choix, et les publier. Après téléchargement de son fichier, vous pouvez utiliser le même algorithme sur le fichier. Si la somme de contrôle est identique, le fichier n'a pas été altéré, vous pouvez l'utiliser, sans risque. S'il est différent, il sera judicieux de re-télécharger le fichier, et éventuellement, voir avec l'éditeur avant de l'ouvrir.
Pourquoi ces sommes de contrôle sont-elles si sûres ?
Il suffit d'un seul octet différent pour que la somme de contrôle soit totalement différente. Ainsi, si un tier tente d'altérer un fichier, pour insérer un virus par exemple, il est très difficile pour lui de maquiller son action, s'il est possible de vérifier le fichier avec une somme de contrôle.
Il est très simple de vérifier ce comportement. Il suffit d'écrire un fichier en texte brut (afin de limiter les "réels" changements dans le fichier), de calculer la somme de contrôle avant et après le changement d'un seul et unique caractère.
Avec une taille fixe, et une somme de contrôle calculable sur tous les fichiers qu'il existe, il est évident que certains fichiers auront le même checksum. Cependant, de par le fonctionnement des algorithmes, cela sera très rare, au hasard et pour un nombre gigantesque de fichiers testés. Il est donc très difficile pour un fichier altéré de retrouver la même somme de contrôle.
Difficile mais pas impossible ?
Malgré les tailles très différentes des fichiers, le calcul d'un checksum doit être rapide, afin que cela ne soit pas un calvaire si on souhaite vérifier l'authenticité des fichiers à chaque fois.
Et comme on l'a vu plus haut, ces sommes de contrôle ne peuvent pas, par définition, être uniques.
Certains malintentionnés se servent de la puissance des ordinateurs actuels pour trouver, par la méthode dite de force brute un checksum identique. Pour cela, ils vont faire tourner des ordinateurs, exécutant une minuscule modification anodine sur le fichier, et calculer la somme jusqu'à trouver la même.
Un travail long et fastidieux qui nécessite une forte puissance de calcul. Pour faire face à ces possibilités, les algorithmes de hashage évoluent aussi, augmentant leurs longueurs, afin de multiplier les possibilités, et donc augmentant exponentiellement la puissance de calcul nécessaire pour trouver un hash identique.
Le hashage n'est pas du cryptage
Petite aparté, le hashage des sommes de contrôle n'est, en aucun cas, du cryptage. Un cryptage permet grâce à un mot de passe, de transformer un fichier en un autre. Puis, avec le même mot de passe (ou un autre), de revenir en arrière, et de retrouver le fichier original.
De part sa nature et son but, il est strictement impossible de retrouver une quelconque information du fichier original dans le hash des sommes de contrôle.
Pourquoi ne pas l'utiliser plus souvent, si c'est si génial ?
On peut supposer que tous les outils permettant la mise à jour de logiciels utilisent des mécanismes similaires, voir plus complexes, permettant d'assurer que le téléchargement des updates ne contient pas d'erreurs.
Pour les autres logiciels, ou fichiers de données, à télécharger manuellement sur Internet, c'est à l'éditeur de fournir les sommes de contrôle si vous souhaitez vérifier l'intégrité de votre téléchargement.
Comment calculer les sommes de contrôle sur macOS ?
macOS intègre, de base, deux des outils de calcul des sommes de contrôle parmi les plus connus, à savoir MD5 et SHA. Ce sont deux algorithmes différents, donnant deux checksums différents. Il est donc nécessaire de connaitre le type de hash proposé pour vérifier l'intégrité de son fichier.
Ces outils sont disponibles en ligne de commande, et donc via le terminal. Ouvrez donc un terminal, et choisissez un fichier dont vous souhaitez calculer les checksums.
Pour vérifier le MD5 d'un fichier, la commande est md5, tout simplement
md5 chemin/vers/mon/fichier
Petite aide, pour ceux qui ne seraient pas (encore) habitués au terminal, tapez md5, suivi d'un espace, puis glissez votre fichier dans le terminal, le chemin exact va s'ajouter automatiquement.
Même avec un gros fichiers, la réponse devrait être assez rapide
MD5 (chemin/vers/mon/fichier) = 44d465edf1898ec71df2d621037e192e
On se retrouve avec une clé de 32 caractères.
Avec SHA, le principe est le même, la commande, dans macOS, est shasum à utiliser dans un terminal
shasum chemin/vers/mon/fichier
de la même manière, la réponse ne tarde pas
d4c9ae43318235f9689036d1cc9cf1b950e3cd37 chemin/vers/mon/fichier
Ici, la somme fait 40 caractères, elle est un peu plus longue que la MD5.
Mais comme indiqué précédemment, il est possible d'augmenter la taille de la clé afin d'obtenir un checksum infiniment plus difficile à dupliquer.
Utilisée sans paramètre, la commande shasum correspond à l'algorithme SHA1, nous pouvons, comme indiqué sur la page du site d'Handbrake, vérifier le SHA256
shasum -a 256 chemin/vers/mon/fichier
la réponse est donc un peu plus longue, avec ses 64 caractères
2ec3b4ae8c0d76f32ddba493c4b3b993ed4dda017c1785bac67d03878ff46e03 chemin/vers/mon/fichier
Selon le niveau de sécurité nécessaire, il est possible d'aller encore plus loin, avec du SHA384 ou du SHA512 pour lesquels je vous laisse faire les tests avec vos fichiers.
A noter que l'application openssl permet aussi de calculer les sommes
openssl md5 chemin/vers/mon/fichier
openssl sha1 chemin/vers/mon/fichier
openssl sha256 chemin/vers/mon/fichier
et donnera les mêmes résultats.