Sur Internet, on ne surfe pas simplement de site en site en lisant passivement des informations, mais on envoie également nos propres informations aux autres, volontairement ou non.

Faire ses achats sur Internet, ou simplement créer un compte sur un réseau social demande de fournir des données personnelles sensibles. L’évolution d’Internet facilite nos vies, et nous permet d’accomplir beaucoup de tâches en restant chez soi, mais il faut veiller en contrepartie sur la sécurité de nos données. L’une des façons les plus populaires de « sécuriser » quelque chose est d’utiliser le chiffrement.

Nous définirons ce que c’est dans cet article, et nous verrons différentes façons de le mettre en place de façon sécurisée.

Qu’est-ce que le chiffrement ?

Le chiffrement est un processus de transformation de l’information dont seule la personne (ou l’ordinateur) possédant la clé de déchiffrement peut récupérer l’information d’origine (qu’on appelle aussi  « information en clair »).

Le chiffrement est basé sur la cryptographie, dont le but est de garder des messages secrets. Et cette discipline n’est pas toute récente, car elle date de l’Antiquité. Le code de César est l’une des méthodes cryptographiques les plus anciennes. Jules César utilisait une technique de substitution dont le but était de décaler les lettres de l’alphabet de 3 places.

Exemple :

« leblogduhacker » devient « oheorjgxkdfnhu »

Bienvenue cher visiteur du site Oh Eorj Gx Kdfnhu !

Note : chiffrement ou codage ?

Les termes semblent assez proches, mais sont bien différents en sécurité informatique. Le chiffrement permet de limiter le nombre de personnes pouvant accéder à l’information, tandis que le codage (de caractères) permet de représenter informatiquement des caractères dans d’autres systèmes d’écriture. En somme, le code « A » en HTML est codé en caractère « A ». On peut très facilement basculer de l’un à l’autre. La plupart du temps, le navigateur le fait même automatiquement.

Chiffrement symétrique et asymétrique

Le chiffrement en informatique tombe dans deux catégories principales :

  • Le chiffrement symétrique
  • Le chiffrement asymétrique (aussi appelé « chiffrement à clé publique»)

Le chiffrement symétrique

Imaginons qu’on ait un message à envoyer à un correspondant sur Internet. On chiffre celui-ci avec une « clé de chiffrement » avant de l’envoyer via le réseau à notre destinataire. Cette clé de chiffrement est simplement un mot de passe. Pour déchiffrer notre message, le correspondant devra connaître la « clé de chiffrement », car elle permet aussi de déchiffrer le message, d’où l’appellation « chiffrement symétrique ». Si vous avez déjà chiffré des archives .ZIP ou .RAR, vous avez utilisé un mot de passe qui servait à chiffrer puis à déchiffrer le contenu de l’archive. C’est le principe du chiffrement symétrique, seules les personnes qui connaissent le mot de passe (la « clé de chiffrement ») pourront déchiffrer le message.

Le chiffrement asymétrique

Je ne sais pas si vous l’avez remarqué, mais un petit problème se pose dans le cas du chiffrement symétrique. Comment fait-on pour partager la clé de chiffrement tout en s’assurant que seul le destinataire la reçoit ? Car pour déchiffrer le contenu, il faut déjà la posséder, cette clé de chiffrement…En effet, si l’on chiffre un fichier avec un mot de passe, mais qu’on l’envoie à travers Internet au destinataire, il y a plusieurs machines et personnes qui peuvent potentiellement le voir. Si c’est pour partager des photos de vacances, ce n’est pas bien grave, mais si l’on souhaite être certain que personne d’autre ne puisse lire notre contenu, il nous faut une alternative.

Et cette alternative s’appelle le chiffrement asymétrique, aussi appelé chiffrement à clé publique. Comme son nom l’indique, l’idée est d’utiliser deux clés, l’une qui est publique et que tout le monde peut donc voir, l’autre qui est privée et qui n’est jamais partagée. La clé publique permet uniquement de chiffrer des informations, tandis que la clé privée permet uniquement de déchiffrer des informations de la clé publique correspondante.

Contrairement au chiffrement symétrique qui n’utilise qu’une clé, nous allons cette fois utiliser la clé publique du destinataire pour chiffrer notre message. Et il sera le seul à posséder la clé privée permettant de déchiffrer le message.

chiffrement asymétrique

Un mot sur les certificats

Nous avons vu que le chiffrement asymétrique est une excellente manière de chiffrer des informations et de s’assurer qu’elles ne soient lues que par un destinataire précis. Seulement, cette méthode de chiffrement pose également quelques problèmes :

  • Elle est plus lente que le chiffrement symétrique
  • Elle ne garantit pas que la clé publique d’une personne soit vraiment sa vraie clé publique

Concernant le premier problème, on fait avec, ou on trouve des alternatives.  Votre navigateur par exemple, va d’abord transférer une clé symétrique via un chiffrement asymétrique, puis uniquement communiquer via du chiffrement symétrique.

Concernant le deuxième problème, on utilise des certificats permettant de certifier qu’une clé publique d’une entité soit bien sa vraie clé. Pour se faire, il y a toute une infrastructure mise en place, qui est basée sur la confiance. C’est ce que l’on appelle une infrastructure à clés publiques dont le but est de gérer la création/révocation/publication des certificats. En somme, lorsqu’un internaute se connecte à un site avec HTTPS, le navigateur va récupérer le certificat fourni par le site et l’authentifier grâce à l’autorité de certification. Si ce certificat est bien valide, on est donc sûr de communiquer avec le vrai site, et qu’il ne s’agit pas d’un site tiers tentant d’usurper son identité.

Algorithmes de hachage

Les clés générées par le chiffrement asymétrique sont basées sur des valeurs de hachage. Il s’agit d’une valeur calculée (aussi appelée un « hash ») depuis une donnée de base. Il est impossible de retrouver la donnée de base depuis la donnée calculée comme on le fait avec le chiffrement (a)symétrique.

Par exemple :

Si ma donnée de base est :

42

Et ma donnée calculée est :

472ef3673eff5a3

Comment puis-je repasser de « 472ef3673eff5a3 » à 42 ?

Le hachage se trouve en fait très pratique pour stocker des mots de passe dans une base de données, et à vrai dire c’est le cas pour quasiment tous les sites que vous utilisez. En effet, on ne peut pas retrouver le mot de passe depuis son hash, mais on peut recalculer le hash avec la même méthode (on dit « algorithme »), et si la donnée de base est la même que précédemment, le hash sera aussi le même !

Par exemple :

Si mon mot de passe (ma donnée de base) est :

LeBlogDuHacker56712 (inutile d’essayer de vous connecter avec  ;))

Ma donnée calculée avec l’algorithme de hachage le plus populaire (MD5) est :

64cba11425b5f53f4844e231c8e63140

Ce hash peut ensuite être stocké dans une base de données d’un site. Lorsque je me reconnecterai au site, si je réécris exactement « LeBlogDuHacker56712 », je retomberai s sur le même hash (vous pouvez essayer), mon mot de passe est donc le bon.

À l’inverse, si je me trompe, ne serait-ce que d’un seul caractère :

LeBlogDuHacker56711

On obtiendra le hash suivant, totalement différent :

ac1b7180de08ca28feb777df21945924

Cela dit, et comme souvent en sécurité informatique, il y a des failles. Dans le cas de MD5, il existe des bases de données énormes de correspondances entre données de base et leur hash. Et dans ce cas, si on connait déjà le hash d’une donnée de base…on saura donc la retrouver.

Pour combler cela, on utilise souvent ce que l’on appelle un « sel de hachage ». Il s’agit d’une donnée supplémentaire et variable que l’on donne à notre donnée de base.

Admettons le sel suivant : « Michel », et admettons que notre fonction de hachage utilise le sel ainsi :

MichelLeBlogDuHacker56712Michel

Le hash MD5 devient :

acbd7683a673282d421c2fbd09980b17

Si un autre utilisateur utilise exactement le même mot de passe, mais que son sel est « Max » :

MaxLeBlogDuHacker56712Max

Le hash sera :

b86121bbd375fb4e25e9380835ae80f9

Nous avons donc deux hashs totalement différents pour un même mot de passe initial. Mais il faut à présent que le sel soit généré aléatoirement, en plus d’être stocké quelque part pour pouvoir recalculer le hash correctement.

Comment faire un bon algorithme de chiffrement

Sans trop entrer dans la technique, nous allons passer en revue quelques algorithmes de chiffrement, aussi appelé « ciphers ».

Un bon algorithme de chiffrement repose sur 3 grands principes :

1. La confusion

On va chercher à supprimer toute relation entre le message d’origine et le message chiffré. On a vu avant l’exemple du code de César permettant de modifier un texte en décalant les lettres.

2. La diffusion

C’est également une bonne idée de séparer le message en plusieurs parties. Par exemple en phase une transposition par colonne

3. Tout est dans la clé

Si les moyens de déchiffrer un code étaient connus par une ou plusieurs personnes, il serait trop facile de leur mettre un pistolet sur la tempe pour les forcer à expliquer comment déchiffrer un message avec leur algorithme. C’est pour cela que seule la clé doit permettre de déchiffrer le message, même en étudiant l’algorithme dans les détails.

Exemple avec AES

AES (Advanced Encryption Standard) est un algorithme de chiffrement symétrique bien balèze. C’est un standard de chiffrement pour les organisations du gouvernement des Etats-Unis, et il a été approuvé par la NSA (National Security Agency), autant vous dire que ça ne rigole pas. Si vous voulez savoir comment il fonctionne, sachez que je n’ai pas le courage de vous l’expliquer dans les détails, mais en somme, ça marche comme ça :

aes chiffrement

L’image vient du site suivant qui vous explique comment AES fonctionne :

http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html

Articles similaires

Menu