Comment fonctionne le Chiffrement
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.
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 :
L’image vient du site suivant qui vous explique comment AES fonctionne :
http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html
13 Commentaires
Cliquez ici pour ajouter un commentaire
Bonjour Michel,
A nouveau un excellent article qui reflète ta performance Michel ! 🙂
Je me pose la question depuis quelques temps sur la faisabilité d’équiper l’utilisateur grand public de système de sécurisation professionnel et d’authentification forte basés sur le principe des Badges SecureID ou ConnectOne. Il est évident que ce genre de service serait payant, mais quand on voit la forte croissance du marché des logiciels « antivirus/firewall/VPN », il serait envisageable d’encapsuler ce service supplémentaire dans un package (forfait annuel) ?
L’utilisation d’un tel « système » pour l’utilisateur lambda contraindrait chaque éditeur de logiciel (application distribuée en ligne) à adhérer à ce type d’offre (modèle économique) et de proposer à l’utilisateur grand public un service HelpDesk pour gérer les demandes du style réinitialisation du mot de passe de son badge, vérification et/ou activation d’un package applicatif etc. L’utilisateur dépendrait ainsi d’une entité commerciale administrée par le biais d’un procédé d’affiliation à un « Kiosque » habilité et localisé sur la zone géographique de l’utilisateur.
Le seul bémol de ce « système/procédé » se situerait notamment dans le cas où l’utilisateur aurait bloqué son Badge. Il serait intéressant ici de prévoir sous forme d’appels d’offres privées l’ouverture d’un grand nombre de « Kiosques Utilisateurs », un peu à l’image des boutiques Apple permettant notamment au grand public de se déplacer avec son Badge pour effectuer le déblocage de son Badge (cas rares il faut le noter). Ce type de prestation ouvrirait ainsi la porte à d’autres prestations de service dédiées notamment au dépannage applicatif du PC portable utilisateur, à la formation numérique, restauration du profil utilisateur, réinstallation de sa session Windows utilisateur etc…
Il y aurait beaucoup à dire sur ce sujet, c’est la raison pour laquelle je préfère attendre vos réactions avant de développer ! 🙂
A+!
Diki
Bonjour Diki et merci à toi !
C’est une idée très intéressante en effet et je ne serais pas surpris de voir ce type de badge arriver réellement sur le marché « public ». Car j’en vois déjà de plus en plus dans le monde professionnel, comme tu le mentionnes. Bien entendu, niveau support utilisateur il y aura effectivement un service à créer et c’est sûrement le temps de normaliser tout cela qui prend du temps…Et forcément si ça coûte cher c’est plus difficile à le populariser, même si au final protéger ses données personnelles sensibles n’a pas de prix ! 😉 À+
Bonjour Michel,
Effectivement dans le milieu professionnel ce type d’outil d’authentification et de sécurisation de son profil user, datas et applicatifs est très utilisé, malgré un risque d’attaques virales infime ciblant certaines données de l’utilisateur Pro, fort heureusement tout est sous contrôle dans les grandes entreprises qui ont mis les moyens pour sécuriser efficacement leur infrastructure systèmes et réseau ! 🙂
Personnellement j’en possède une qui me permet notamment d’ouvrir ou de déconnecter ma session Windows à partir de n’importe quel poste situé dans le « Groupe France » dans lequel je bosse 🙂
D’ailleurs, il existe des solutions de protection d’identité des utilisateurs de services de banque en ligne associant les avantages de la carte à puce en générant dynamiquement un mot de passe créé à chaque fois que l’usager se connecte (application et clés secrètes utilisées pour crypter et transmettre le mot de passe unique à la banque)
Je pense que la popularisation de cette technologie est sur la bonne voie ! 🙂
A+!
Diki
Super comme tuto, comme d’habitude, execellent tuto de ta part, je n’ai rien à dire, pas contre si vous pouvez faire des tutoriels en Linux çà serait souhaite aussi, merçi à vous.
Bonjour Le Mailloux,
Quel genre de tutoriel ?
Je t’invite à lire mon dernier article qui traite de la distribution « Tails » (Debian) ici:
https://www.leblogduhacker.fr/live-usb-tails-se-proteger-des-robots-scanners-et-de-lespionnage-massif-sur-le-web/
Tu y trouveras deux TP (scripts Bash Linux).
Dans l’attente de ta participation,
Excellent week-end !
A+!
Diki
Bonjour, merci pour cet article qui est à mon avis une très bonne vue d’ensemble. J’ai toutefois besoin d’une précision: lorsque vous parlez du chiffrement asymétrique, vous dites:
– Elle est plus lente que le chiffrement asymétrique
De mémoire le chiffrement symétrique est plus rapide que le chiffrement asymétrique. Je pense qu’il y a un « a » en trop.
Merci bien Cédric ! C’est édité, effectivement il y avait un « a » de trop !
Bonjour,
Merci pour ce super tutoriel très intéressant !! J’ai découvert la méthode de chiffrement et j’en suis ravi.
J’aimerais savoir si ce guide est disponible au format .pdf ?
Merci beaucoup,
Matthieu C.
Bonjour Matthieu et merci !
J’avais un plugin pour convertir les articles au format .PDF, malheureusement il ne fonctionne plus :/ Je n’ai donc pas de version .pdf sous la main. À bientôt
Article intéressent merci!
Cela serait inquiétant si le chiffrement n’existait pas pour les mots de passes! tout le monde pourrait savoir nos mots de passes. Même plus besoin de les changer on saurait tout…
Très bon tutoriel Michel ,merci pour la formation et les infos que tu nous donnes ici,mais j’ai un petit soucis il concerne le chiffrement asymétrique ,comment est généré la clé privée,et par qui ?
Merci Celestin, la clé privée est générée en même temps que la clé publique car elles vont de paire. Elles sont notamment générées via OpenSSL sur un serveur.
Merci pour ce partage de connaissance