Chiffrement, hachage et compagnie : disambiguation

Très connus des développeurs, les techniques de chiffrement et hachage jouent un rôle essentiel dans la sécurisation des données numériques et les systèmes d'identification. Cet article propose un résumé pour les débutants qui connaissent encore mal ce domaine.

Vocabulaire

En français on ne dit pas "crypter" mais chiffrer. Le terme "crypter" est un anglicisme qui n'a pas sa place dans la langue française et que beaucoup rejettent. Cependant, l'on acceptera l'utilisation de "décrypter" dans le sens de "casser" un chiffrement.

Le chiffrement

Symétrique

C'est le mode de chiffrement le plus simple, dit à clé. Il fonctionne grâce à deux fonctions :

  • Une fonction de chiffrement qui, à partir d'un message et d'une clé secrète, génère un message chiffré.
  • Une fonction qui, à partir du message chiffré et de la même clé, permet de retrouver le message originel.

On remarquera que ces deux fonctions peuvent en réalité la même, comme c'est par exemple le cas dans le chiffrement par rot13 (la clé dans ce type de chiffrement étant le nombre de caractères dont on doit se déplacer). Il est important de noter qu'il est fondamental de conserver la clé secrète. En effet, si celle-ci était connue d'une personne interceptant le message, ce dernier serait en mesure de le déchiffrer. Cette particularité est le point faible de ce type de chiffrage car elle nécessite que la clé soit transmise entre l'émetteur et le récepteur de manière sécurisée.

Exemples d'algorithme de chiffrement symétriques : Rijndael, DES, GOST.

Asymétrique

Le chiffrement asymétrique repose sur une autre technique basée une paires de clés. Ces clés sont intimement liées et il n'est pas possible à partir de l'une de retrouver l'autre. La particularité de ces clés est que ce que l'une chiffre, seule l'autre peut le déchiffrer. Une utilisation classique pour chiffrer un message est la suivante :

  • On génère une paire de clés, l'une est rendue publique alors que l'autre est gardée secrète.
  • Pour envoyer un message chiffré à quelqu'un, on récupère sa clé publique et on s'en sert pour chiffrer notre message.
  • On envoie le message ainsi chiffré au destinataire qui, grâce à sa clé privée, est le seul à pouvoir le déchiffrer.

Il est également possible de signer numériquement un message de la manière suivante :

  • Lorsque l'on écrit un message, on ajoute le chiffre à l'aide de notre clé privée.
  • On publie à la fois le message en clair et en chiffré.
  • Afin de s'assurer de l'authenticité du message, le destinataire utilise notre clé publique afin de déchiffrer la copie que l'on a fournie. Si le résultat est identique au message en clair, c'est c'est que l'expéditeur est forcément celui qui détient la clé privée.

Exemples d'algorithme de chiffrement asymétriques : RSA, DSA.

Mixte

Le principal désavantage du chiffrement asymétrique est qu'il est très lourd à mettre en place (lourd en matière de temps de calcul). Afin de garantir certaines performance dans la communication entre deux personnes, un chiffrement mixte peut être mis en place : à l'aide du chiffrement asymétrique, les deux correspondant échangent simplement une clé confidentielle. Cette clé sera utilisée par la suite pour chiffrer la communication elle même. En combinant les deux types de chiffrement, on a alors réussi une communication sécurisée à moindre coûts de calcul.

Le hachage

Le hachage de données diffère du chiffrage par le fait qu'il génère un condensat (ou empreinte numérique) indéchiffrable. Ainsi, à partir du condensat obtenu, il est impossible de retrouver le message original. Une autre propriété est, bien entendu, qu'un message haché par un même algorithme donne le même résultat.

Exemples d'algorithmes de hachage : md5, sha, Whirlpool.

Utilisation dans la vérification des données

Un exemple très connu d'application des fonctions de hachage est la vérification de l'intégrité des données. Ainsi, un émetteur souhaitant s'assurer que le destinataire à reçu le document sans que ce dernier ne soit corrompu peut calculer l'empreinte du dit document. Le destinataire calcule à son tour l'empreinte du fichier et, si c'est la même, est alors assuré de l'intégrité du fichier.

Utilisation dans les système d'authentification

À des fins de sécurité, un système gérant une authentification d'utilisateurs par nom et mot de passe ne doit pas stocker les mots de passe, ni en clair ni chiffrés (si l'on peux le retrouver, alors un attaquant qui réussi à regarder les données le peux également). On stocke alors l'empreinte de ce mot de passe après passage dans une fonction de hachage. Lorsque l'utilisateur fournis son nom et son mot de passe pour s'identifier, on calcule l'empreinte du mot de passe fourni et on s'assure que, pour cet utilisateur, l'empreinte du mot de passe fourni est la même que celle du mot de passe stocké. Ce système est efficace dans la mesure où l'algorithme présente un taux de collision faible (la collision étant deux messages différents donnant la même empreinte) et que le mot de passe soit assez robuste.

Utilisation d'un sel

Meme s'il n'existe pas de moyen permettant de retrouver le message originel à partir du condensat, il est tout de même possible d'utiliser des tables de hachage afin de tenter de recouvrer le message. Lorsque l'on souhaites stocker l'empreinte de données importantes (comme c'est le cas pour un système d'authentification), on souhaite limiter l'effet voir empêcher l'utilisation de cette technique pour retrouver un mot de passe stocké. On va donc effectuer un salage de la donnée à hacher. Un type de salage simple est l'ajout de caractères en début ou fin de message, mais on lui préfère des manière plus fiables telles que crypt() (pour C/C++ et PHP).

Pour aller plus loin

Avant tout, n'oubliez pas de vous renseigner plus en détail sur le sujet. Cet article n'est qu'une vague présentation, prenez le temps de lire, pour commencer, les articles de Wikipedia et poursuivez sur de vrais livres traitant de ce domaine.

Tags