Un hash est le résultat d’un calcul sur des données, par exemple un fichier ou une transaction Bitcoin. Les mêmes données et la même méthode donnent la même empreinte. Une fonction cryptographique est conçue pour rendre difficile la recherche d’autres données ayant la même empreinte, ou d’une entrée correspondant à un résultat donné. Ce n’est pas une copie chiffrée des données.
Vous téléchargez un programme d’installation. Son éditeur a publié une empreinte de contrôle et vous calculez celle de votre copie avec le même algorithme. Si elles diffèrent, les données ne sont pas identiques : le fichier peut avoir été endommagé, remplacé ou modifié. Une correspondance avec une empreinte fiable donne au contraire une forte assurance d’avoir la bonne copie. Inutile de comparer manuellement le fichier entier. SHA-256 produit par exemple un résultat de 256 bits, généralement écrit avec 64 caractères hexadécimaux, que l’entrée soit un court message ou un gros fichier. [1] [3]
Tout dépend de l’origine de l’empreinte de référence. Si un attaquant remplace sur un site le fichier et son hash publié, les deux correspondront. Le hachage ne demande aucune clé secrète : chacun peut calculer le hash de données publiques. Il diffère donc d’une signature numérique, par laquelle le détenteur d’une clé atteste des données. Pour Bitcoin Core, on vérifie non seulement le hash du fichier, mais aussi les signatures de la liste d’empreintes et la fiabilité des clés de signature. Un hash seul ne prouve ni l’auteur, ni la sûreté du logiciel, ni la véracité d’un document. [3]
Le hachage n’a pas d’étape inverse appelée « déchiffrement ». Le résultat de longueur fixe ne contient pas tout le fichier : ce n’est donc pas une sauvegarde. Mais cela ne signifie pas qu’un hash dissimule sûrement n’importe quelle entrée. Pour un mot de passe court et courant, un attaquant peut essayer des mots de passe probables et comparer leurs empreintes. Il n’a pas besoin d’inverser la fonction : deviner l’entrée suffit. Un hash rapide ne remplace donc ni un mot de passe robuste ni une méthode conçue pour stocker les mots de passe de façon sûre. [1] [5]
Dans une recherche de preimage, une empreinte est donnée et l’on cherche des données qui la produisent. Pour une collision, n’importe quelles deux entrées différentes donnant la même empreinte conviennent. Les collisions existent mathématiquement, car les entrées possibles sont plus nombreuses que les résultats de longueur fixe. La sécurité tient à la difficulté pratique de les trouver, pas à leur impossibilité. Enfin, « hash » ne désigne pas un algorithme unique : toutes les fonctions de hachage ne visent pas la sécurité cryptographique. [1]
Bitcoin utilise des hash pour identifier les transactions, relier les blocs et vérifier le travail de minage. Mais les recettes diffèrent. Le hash d’un en-tête de bloc applique SHA-256 deux fois ; HASH160 combine SHA-256 et RIPEMD-160. Un tagged hash sépare en plus les usages du calcul à l’aide d’une étiquette. Pour vérifier vous-même un résultat, il faut le bon algorithme et les octets exacts en entrée, ces unités de base des données. Le texte « 61 » n’a pas les mêmes octets que l’unique octet de valeur hexadécimale 61, qui représente la lettre a en ASCII. Hacher l’affichage plutôt que les données constitue donc un autre calcul. [2] [4]
Pour une vision complète, lisez aussi SHA-256, Proof of Work, Block Header, Transaction, Merkle Tree, Bitcoin. Cette entrée est également citée par SHA-256, Nonce, HTLC, Hashcash.