Qu’est-ce que l’hachage ?
L’hachage transforme des données de n’importe quelle taille en une chaîne alphanumérique de longueur fixe et prédéterminée. Une fonction de hachage est irréversible; il n’est pas possible de déterminer les données d’entrée originales à partir du résultat de la fonction de hachage. Cela rend l’hachage idéal pour le stockage sécurisé de données. L’hachage peut convertir n’importe quel type ou volume de données, comme le titre d’un livre, le texte entier d’un livre ou le fichier d’illustration de la couverture. Chacun de ces éléments de données peut être haché en chaînes de même longueur fixe. Une fonction de hachage peut viser à maximiser la probabilité d’unicité des données transformées.
Les données d’entrée sont souvent appelées la « clé »; une fonction de hachage est l’ensemble des étapes (l’algorithme) réalisées sur la clé. Les résultats de la fonction de hachage portent plusieurs noms : valeurs de hachage, codes de hachage ou simplement hachages. Pour les besoins de cet article, nous utiliserons les termes données d’entrée, fonction de hachage et valeur de hachage. Les valeurs de hachage sont utilisées à diverses fins, notamment la gestion efficace des bases de données, l’intégrité des données et la sécurité.
À quoi sert l’hachage ?
Stockage et récupération des données
Une des premières utilisations de l’hachage a été pour des systèmes de stockage et de récupération de données efficaces. Un grand ensemble de données peut être long à rechercher. Effectuer une recherche sur la valeur de hachage d’un terme de recherche au lieu du terme d’entrée raccourcit les temps de réponse des recherches, améliorant ainsi l’expérience utilisateur. Prenons l’exemple d’une bibliothèque base de données de livres qui divise toutes les entrées en petits groupes en fonction de la valeur de hachage des titres. Quand un utilisateur recherche un titre de livre, la valeur de hachage du titre demandé pointera rapidement vers le bon groupe. Ensuite, une recherche rapide est effectuée pour trouver le titre exact original dans le petit groupe. En d’autres termes, le temps nécessaire pour exécuter la fonction de hachage et identifier le sous-ensemble de données correct, ajouté au temps requis pour trouver le titre dans le bon sous-ensemble, est toujours inférieur au temps nécessaire pour trouver le titre du livre dans l’ensemble complet des données.
Sécurité des mots de passe
Stocker la valeur de hachage d’un mot de passe est plus sûr que de stocker le mot de passe réel. Parce qu’aucun mot de passe réel n’est stocké (crypté ou non crypté), le compte de l’individu est beaucoup plus sécurisé en cas de violation de données.
Intégrité des données
Comparer deux fichiers en utilisant leurs valeurs de hachage peut déterminer si les fichiers sont identiques. Exécuter une fonction de hachage sur deux documents est plus rapide que de comparer chaque document caractère par caractère. Si deux fichiers sont censés être identiques mais sont différents, des valeurs de hachage différentes indiqueront qu’un des fichiers a été modifié. Ce test peut indiquer des modifications et des mises à jour des fichiers, ou peut révéler si un fichier a été corrompu par un logiciel malveillant.
La comparaison des valeurs de hachage de documents se fait dans des contextes comme l’authentification des messages et la blockchain. L’authentification des messages, parfois associée à des signatures numériques, utilise à la fois l’hachage et le chiffrement. Dans cette situation, chiffrement est utilisé pour protéger le contenu du message pendant sa transmission et le hachage est utilisé pour vérifier que le contenu n’a pas été altéré en cours de route.
La blockchain utilise le hachage pour vérifier de manière indépendante que les données dans la blockchain n’ont pas été modifiées. Une blockchain est construite en superposant des données de transaction et des valeurs de hachage associées. Les valeurs de hachage servent de confirmation que les données précédentes dans la chaîne n’ont pas été altérées.
Comment fonctionne le hachage ?
Une fonction de hachage utilise une variété d’opérations. Elles peuvent être arithmétiques, impliquer des conversions ou des transformations, ou être des procédures qui manipulent les bits (unités de base des données informatiques) du fichier d’entrée. Bien que les données d’entrée puissent être de toute taille, une fonction de hachage donnée retournera toujours une valeur de hachage de la même taille, souvent de 32 à 64 caractères selon l’ensemble de caractères utilisés. Idéalement, la fonction de hachage s’exécute rapidement et aboutit à une répartition homogène de toutes les valeurs de hachage possibles.
Avec de grandes données d’entrée (comme notre exemple de hachage d’un document complet), il peut falloir plusieurs passages à travers la fonction de hachage pour obtenir une valeur de hachage finale qui représente l’ensemble des données d’entrée. La fonction de hachage est d’abord exécutée sur un petit bloc de données d’entrée. Cette valeur de hachage préliminaire est ensuite combinée avec un autre petit bloc de données d’entrée originales et le résultat est passé par la fonction de hachage. La combinaison et l’exécution continuent jusqu’à ce que toutes les données d’entrée originales soient traitées.
Une fonction de hachage doit être reproductible et répétable. Si elle reçoit les mêmes données d’entrée, une fonction de hachage doit retourner la même valeur de hachage à chaque fois. Ce critère affecte non seulement les opérations effectuées dans le cadre de la fonction de hachage, mais aussi l’ordre dans lequel les données sont traitées. Si de grandes données d’entrée devaient être divisées en petits blocs différemment avant d’être hachées, les valeurs de hachage résultantes seraient différentes. De cette manière, des données d’entrée très similaires pourraient produire des valeurs de hachage très différentes; c’est ce qu’on appelle l’Effet Avalanche.
Une fonction de hachage est irréversible; on ne peut pas résoudre directement les données d’entrée originales à partir de la valeur de hachage. Cela rend le stockage d’une valeur de hachage d’un mot de passe beaucoup plus sécurisé qu’une version chiffrée, qui peut être déchiffrée par un pirate. Bien que le mot de passe original ne puisse pas être déterminé à partir de la valeur de hachage stockée (car une fonction de hachage est irréversible), le système peut confirmer la connexion de l’individu en hachant le mot de passe soumis et en comparant le résultat à la valeur de hachage stockée. Une correspondance indique que le mot de passe soumis est le même que celui qui a créé la valeur de hachage stockée.
Quelles sont les collisions dans le hachage ?
Une règle des fonctions de hachage est que toutes les valeurs de hachage doivent être de même longueur fixe. Cela signifie qu’il y a un nombre maximal de valeurs de hachage qui peuvent être générées par une fonction de hachage donnée. Des longueurs fixes plus courtes pour les valeurs de hachage entraîneront moins de résultats possibles de hachage. Si le nombre de résultats de valeur de hachage possible est suffisamment grand, on peut s’attendre avec une certitude mathématique raisonnable (mais peut-être pas tout à fait garantie) que chaque donnée d’entrée se convertira en une valeur de hachage unique.
Une « collision » se produit lorsque deux entrées différentes passent par une fonction de hachage et retournent la même valeur de hachage. Certaines applications du hachage tolèrent les collisions, comme dans l’exemple de la base de données de la bibliothèque; dans ce cas, le hachage est utilisé pour diviser une base de données en groupes plus petits pour améliorer les réponses de recherche. Le hachage de la base de données groupe les données par collisions.
D’autres applications, comme le stockage de versions sécurisées d’informations sensibles telles que les mots de passe, nécessitent des fonctions de hachage conçues pour minimiser, voire éliminer, les collisions. Ces fonctions de hachage ont des résultats de longueur fixe plus longs, créant ainsi plus de résultats de valeurs de hachage possibles et réduisant la probabilité de collisions. Si la fonction de hachage utilisée pour hacher les valeurs des mots de passe avait un petit nombre de résultats possibles, les collisions seraient plus probables. Cela signifie qu’il y aurait une plus grande chance qu’un mot de passe incorrect puisse générer une valeur de hachage correspondant à la valeur de hachage stockée.
Qu’est-ce que le salage d’un hachage ?
Le salage d’un hachage consiste à ajouter des données supplémentaires (appelées « sel ») aux données d’entrée réelles avant d’exécuter la fonction de hachage. Il existe de nombreuses façons de saler les données d’entrée; un exemple consiste à placer une chaîne de caractères aléatoires au début des données d’entrée réelles. Le salage réduit les collisions résultant de données identiques provenant de différentes sources. Chaque source de données se voit attribuer son propre sel unique, qui peut être utilisé chaque fois que ses données d’entrée sont passées par la fonction de hachage.
Toutes les données peuvent être salées, mais l’utilisation la plus courante consiste à saler un mot de passe pour ajouter une couche supplémentaire de complexité et de sécurité. Si deux personnes ont le même mot de passe (par exemple, JSmith123), sans salage elles auront la même valeur de hachage. Si un pirate informatique cracke l’un de ces comptes, il sait automatiquement que tout le monde dans la base de données avec la même valeur de hachage a également un mot de passe JSmith123. Mais en salant chaque JSmith123 avec un sel unique, on garantit que chaque valeur de hachage sera unique. Un mot de passe cracké ne mènera pas à plusieurs mots de passe crackés.
Le hachage est-il la même chose que le chiffrement ?
Le hachage et le chiffrement peuvent sembler similaires ; tous deux convertissent les données en un état illisible et protègent les données contre une utilisation indésirée. Cependant, ce sont des processus différents utilisés dans des situations différentes. La différence clé entre le hachage et le chiffrement est que le hachage est irréversible, tandis que le chiffrement doit être réversible.
Le chiffrement est souvent utilisé pour transmettre et stocker des données en toute sécurité qui seront finalement lues et utilisées à nouveau. Cela est souvent appelé maintenir la « confidentialité » des données. Les endroits courants où l’on trouve des données chiffrées incluent les transmissions de courriels et les données sensibles stockées dans des bases de données.
Avec le hachage, il n’y a aucune intention de lire à nouveau les données hachées. Le but d’une valeur de hachage stockée est de servir de données de test pour correspondre à d’autres valeurs de hachage. Lorsque cette correspondance est effectuée pour s’assurer que les données n’ont pas été altérées, on parle de maintien de l’« intégrité » des données. Une valeur de hachage a peu de valeur en soi ; son importance réside dans sa capacité à aider à traiter et vérifier les données de manière sécurisée ou efficace.
L’authentification des messages et les signatures numériques utilisent à la fois le hachage et le chiffrement. Le message original est soumis à un hachage. La valeur de hachage et le message original sont tous deux chiffrés et envoyés séparément. À la destination, la valeur de hachage chiffrée est déchiffrée et le message reçu est déchiffré et haché. Ces deux valeurs de hachage sont ensuite comparées. Si elles correspondent, le message est considéré comme intact. Une signature numérique peut également vérifier l’identité de l’expéditeur en exigeant et en confirmant que l’expéditeur a utilisé une clé de chiffrement qui lui est propre.