Image de couverture - Comprendre le Cryptage : Chiffrement, Hachage & Salage

Comprendre le Cryptage : Chiffrement, Hachage & Salage

Sécurité numérique : chiffrement, hachage, salage... découvrons ensemble les concepts informatiques fondamentaux du cryptage.

Icône de calendrier MAJ en
Icône de chronomètre 10 min

La sécurité informatique repose sur de nombreux concepts cryptographiques fondamentaux tels que le chiffrement et le hachage. Bien qu’ils soient tous deux essentiels pour garantir la confidentialité des données, ils fonctionnent de manière bien distincte.

Dans cet article, nous allons explorer la différence fondamentale entre la notion de chiffrement et de hachage, ainsi que leur rôle en termes de sécurité.

Vous avez probablement déjà entendu parler de « cryptage ». Le cryptage est un terme reconnu comme équivalent de « cryptographie », englobant à la fois le chiffrement et le hachage.

Pourquoi crypter ses données ?

Le cryptage est une mesure de sécurité fondamentale dans le monde numérique actuel.

Le cryptage des données est essentiel pour assurer la confidentialité et la sécurité des informations sensibles. En transformant les données en un format illisible, le cryptage protège les informations contre l’accès non autorisé et les cyberattaques. Cela garantit que même si des données sont interceptées ou volées, elles ne peuvent pas être exploitées par des tiers malveillants.

Cette protection est cruciale pour les communications personnelles, les transactions financières et toute autre information confidentielle.

En plus de cela, le cryptage contribue à maintenir l’intégrité et l’authenticité des données. Il permet de vérifier que les informations n’ont pas été modifiées et que l’expéditeur est bien celui qu’il prétend être. Le cryptage est donc indispensable pour établir la confiance dans les transactions en ligne et les communications sécurisées.

Par ailleurs, de nombreuses réglementations exigent l’utilisation du cryptage pour protéger les données sensibles, ce qui rend cette pratique non seulement recommandée, mais souvent obligatoire pour les entreprises et organisations.

Chiffrement

Comprendre le chiffrement

Le chiffrement est une méthode de transformation des données qui est réversible. Autrement dit, il est possible de chiffrer et de déchiffrer les données.

Elle repose sur :

  • Une clé de chiffrement
  • Un algorithme de chiffrement (AES, RSA, DES…)

Lors du chiffrement, la clé est couplée à l’algorithme pour chiffrer les données. En d’autres termes, la clé est utilisée comme un paramètre dans l’algorithme de chiffrement pour transformer les données d’origine en une forme chiffrée.

L’objectif premier du chiffrement est de rendre les données illisibles pour quiconque n’a pas la clé de déchiffrement appropriée. Le chiffrement est utilisé lorsqu’il y a une nécessité de décodage des données.

Une même clé de chiffrement peut être identique pour le chiffrement/déchiffrement, on parle alors de chiffrement symétrique.

À l’inverse, dans le cas d’un chiffrement asymétrique, deux clés distinctes sont utilisées : une clé publique pour chiffrer les données et une clé privée correspondante pour les déchiffrer. La clé publique peut être partagée largement, tandis que la clé privée doit rester secrète.

Comprendre le chiffrement par l'exemple

Illustrons le concept du chiffrement par l’exemple.

Imaginons que je crée mon propre algorithme de chiffrement consistant à décaler de X la position d’une lettre de l’alphabet.

Ici, mon algo s’appellerait par exemple alpha et ma clé de chiffrement pourrait être 2, indiquant que je souhaite décaler de 2 la position de chaque lettre.

LettreCorrespondance
ac
bd
zb

Voici en pseudo-code ce que mon algorithme de chiffrement symétrique pourrait produire :

key = 2
alphaEncode("laConsole", key) // Retourne en sortie "ncEqptqng"
alphaDecode("ncEqptqng", key) // Retourne en sortie "laConsole"

alphaEncode() effectue le décalage des caractères et alphaDecode() effectue l’opération inverse.

Cas d’usage

Un bon exemple d’utilisation est celui des communications sécurisées sur Internet (via https), telles que les transactions bancaires en ligne, utilisent le chiffrement pour protéger les données sensibles en cas d’interception lors de leur transmission.

Hachage

Comprendre le hachage

À l’opposé du chiffrement, le hachage est une méthode de transformation unidirectionnelle. Autrement dit, il est impossible de déchiffrer les données.

Un algorithme de hachage (tel que bcrypt, MD5, SHA-256…) prend des données en entrée et génère une empreinte unique de taille fixe, appelée « hash ».

L’élément clé ici est que le processus de hachage est irréversible, ce qui signifie qu’il est en théorie impossible de retrouver les données d’origine à partir du hash.

Considérons le mot de passe 123456. Le hash généré via l’algorithme MD5 sera alors e10adc3949ba59abbe56e057f20f883e.

md5("123456") // Retourne en sortie "e10adc3949ba59abbe56e057f20f883e"

Si plusieurs utilisateurs utilisent ce mot de passe, alors tous auront le même hash en base de données.

Cas d’usage

Les systèmes d’authentification utilisent le hachage pour stocker de manière sécurisée les mots de passe. Au lieu de stocker les mots de passe en clair, les systèmes stockent leur hash correspondant.

Lors de la vérification d’un mot de passe saisi dans un champ de formulaire, le système compare simplement le hash stocké avec le hash généré à partir du mot de passe saisi.

Vulnérabilités

Hash inconnu : force brute

Les attaques traditionnelles (lorsque nous n’avons pas connaissance du hash) exploitent généralement la force brute par :

  • Dictionnaires de données : consistant à automatiser via un script des tests successifs de mots de passe courants (admin, azerty, 123456…)
  • Génération incrémentale : consistant à automatiser via un script des tests méthodiques et successifs de toutes les combinaisons de caractères possibles (a, bz, aa, abaz…)

Ces attaques s’effectuent généralement sur des champs de formulaire, par exemple un formulaire de connexion.

À ce niveau, la sécurité conférée par le hachage importe peu puisque les données ne sont pas compromises (le pirate n’en a pas connaissance).

Hash connu : rainbow table

En revanche, en cas de fuite de mots de passe, même hachés, suite au piratage d’un serveur de base de données, le hachage seul présente des limites en matière de sécurité.

Je vous disais tout à l’heure qu’il est en théorie impossible de trouver un mot de passe à partir de son hash. Et bien ça, c’est la théorie…

Bien qu’unidirectionnel, le hachage n’est pas imparable puisqu’il n’offre pas de protection contre la rétro-ingénierie, telle que les attaques exploitant des « Rainbow Table ». 🌈

Une Rainbow Table ou « Table Arc-en-ciel » est une table pré-calculée contenant une multitude de combinaisons de caractères, ainsi que leur correspondance dans un algorithme de hachage défini.

Ces tables générées en amont permettent généralement de limiter les ressources nécessaires, contrairement aux attaques par force brute qui requièrent beaucoup de temps et aux attaques par dictionnaires qui nécessitent beaucoup de mémoire.

Exemple simplifié de Rainbow Table basée sur l’algorithme MD5 :

Mot de PasseHash (MD5)
admin21232f297a57a5a743894a0e4a801fc3
azertyab4f63f9ac65152575886860dde480a1
12345678925f9e794323b453885f5181f1b624d0b
a0cc175b9c0f1b6a831c399e269772661
b92eb5ffee6ae2fec3ad71c777531578f
zfbade9e36a3f36d3d676c1b808451dd7
aa4124bc0a9335c27f086f24ba207a4912
ab187ef4436122d1cc2f40dc2b92f0eba0
azcc8c0a97c2dfcd73caff160b65aa39e2

Si un pirate parvient à voler des mots de passe hachés dans ce même algorithme, il va alors exécuter un script afin de rechercher pour chaque mot de passe volé, si une correspondance existe dans sa table.

Pour renforcer la sécurité et contrer les attaques par Rainbow Table, on recommande systématiquement l’utilisation complémentaire du salage.

Salage

Le salage (ou « salting » en anglais) est une pratique de sécurité qui consiste à ajouter des caractères au début ou à la fin d’un mot de passe (ou un autre type de texte, selon le besoin) avant de le hacher. Cette portion de caractères, appelée « sel » ou « salt » vient d’une certaine manière assaisonner notre mot de passe !

  1. 🧂 Ajouter une pointe de sel
  2. 🔪 Hacher le mot de passe en fines lamelles … Bientôt des tutos cuisine ici ! 🧑‍🍳

Le sel est lui aussi stocké de manière sécurisée sur un serveur. Il contribue grandement à la complexification du processus de décryptage d’un hash, ne correspondant plus au mot en clair, mais au mot salé.

Désormais, même si deux utilisateurs ont le même mot de passe, le sel les différencie et les hachages seront bel et bien distincts.

Imaginons deux utilisateurs, Camille et Arthur, ayant tous deux le mot de passe 123456.

Sans salage

Sans salage, les hachages de leurs mots de passe seraient identiques dans la base de données.

PseudoMot de PasseHash
Camille1234567c4da0e2a275e4c7d6b9b4dc374ee0f3
Arthur1234567c4da0e2a275e4c7d6b9b4dc374ee0f3
Avec salage

Maintenant, introduisons le salage. Chaque utilisateur a un sel différent.

PseudoMot de PasseSelHash
Camille123456a1b2c32a509b87f9cc3c207d01abf05a0d2b25
Arthur123456x9y8z7ae5c1c1949c15c0dbf8b109c3c447e1a

Pour Camille, le mot de passe en clair avec salage est 123456a1b2c3, pour Arthur, c’est 123456x9y8z7, il est donc logique que les hash soient différents.

Le salage avant hachage est aujourd’hui indispensable, car il présente 2 atouts considérables en termes de résistance aux attaques :

Chaînes identiques, hash différents

En l’absence de sel, les utilisateurs partageant le même mot de passe auraient des hachages identiques.

Le salage évite cette corrélation en introduisant une chaîne aléatoire unique dans le mot de passe avant hachage. La reconnaissance de mots de passe partagés n’est dès lors plus possible.

Résistance aux attaques par table arc-en-ciel

Le salage rend les attaques par Rainbow Table beaucoup moins efficaces, voire quasi-impossibles en décuplant le nombre de hashs générés à partir d’une même chaîne.

Les hachages précalculés pour des mots de passe connus ne tiennent pas compte du sel unique utilisé pour chaque utilisateur. Il faudrait donc que l’attaquant regénère ces tables pour chaque sel possible, ce qui est pratiquement infaisable en termes de ressources et de temps… 😩

Salage + Work Factor = 🩵

Certains algorithmes de hachage sont trop rapides, et c’est un vilain défaut, car avec une bonne carte graphique, il serait possible de rapidement générer des millions de hashs, ce qui faciliterait entre autres la création de Rainbow Tables.

Outre la résistance conférée par le salage, des algorithmes modernes tels que bcrypt ou argon2 poussent la question de la sécurité plus loin en implémentant un facteur de travail (ou « work factor »), visant à ralentir volontairement le processus de hachage.

Ainsi, même si théoriquement une Rainbow Table exhaustive pourrait stocker les hachages de toutes les combinaisons de mots de passe possibles et imaginables, les limitations pratiques du salage combiné à l’utilisation d’un facteur de travail rendent inconcevable leur génération et exploitation.

En résumé, bien que le chiffrement et le hachage soient des concepts similaires dans le sens où ils transforment les données, leur différence fondamentale réside dans leur capacité de réversibilité. Le chiffrement est réversible, tandis que le hachage est unidirectionnel.

Ces deux méthodes jouent des rôles complémentaires dans le renforcement de la sécurité informatique et leur compréhension est essentielle pour développer des mesures de sécurité numérique efficaces.

Lire aussi