Chapitre 3.9
Chiffrement
Le chiffrement, c'est l'art de rendre un message illisible pour tout le monde sauf la bonne personne.
Dès l'Antiquité, les Spartiates utilisaient une scytale : un bâton autour duquel on enroulait une bande pour écrire un message caché.
Le message apparaissait à celui qui possédait un bâton du même diamètre.
Jules César, lui, communiquait en décalant les lettres de 3 rangs vers la droite : A devient D, B devient E...
Depuis 2500 ans, les techniques de chiffrement n'ont cessé de se renforcer.
Avec le temps, les messages codés sont devenus de plus en plus difficiles à casser.
Le mathématicien arabe Al-Kindi, au 9ème siècle, a ainsi développé la cryptanalyse, la science du décryptage.
Chiffrement et cryptanalyse sont aujourd'hui au coeur de la sécurité numérique. Ils sont partout, tu les utilises
quotidiennement sans t'en apercevoir.
Avant d'approfondir les deux familles de chiffrement, faisons un point vocabulaire :
- Cryptographie : la science qui étudie les techniques de protection de l'information, incluant le chiffrement, mais aussi la signature numérique, l'authentification, la preuve d'intégrité, etc. Elle englobe ce qu'on a déjà vu sur les hash et ce qu'on va voir maintenant sur le chiffrement.
-
Clé : l'information secrète qui permet de chiffrer ou de déchiffrer un message.
C'est une sorte de mot de passe très complexe généré aléatoirement.
Il faut imaginer ça littéralement comme une clé avec un verrou. Celui qui veut transmettre un message le place dans une boîte fermée à clé. Le destinataire, le seul qui possède le double de la clé, peut ouvrir la boîte. - Déchiffrer : c'est l'action inverse de chiffrer. La personne qui possède légitimement la clé peut retrouver le message en clair à partir de la version chiffrée. Elle peut ouvrir la boîte.
- Chiffrage / déchiffrage : Il ne faut pas les confondre avec chiffrement / déchiffrement. Le chiffrage, c'est réaliser une estimation (prix d'un devis, nombre de jours pour une tâche...). Le déchiffrage, c'est tenter de comprendre quelque chose qu'on a du mal à lire (une écriture de cochon, une partition de musique...). Ces termes n'ont aucun lien avec la cryptographie.
-
Décrypter : c'est le fait de casser un code pour retrouver un message sans avoir la clé. Autrement dit, forcer le verrou de la boîte.
On doit à Alan Turing l'un des exemples les plus célèbres de décryptage, quand pendant la seconde guerre mondiale, il est parvenu à casser les messages allemands codés par la machine Enigma. -
Crypter : d'après les définitions précédentes, on se rend compte que "crypter" signifierait "chiffrer sans
avoir la clé", soit
"mettre le message dans une boîte quelque part, sans garder la clé, sans aucun espoir qu'elle soit ouverte".
Ça n'a pas de sens. Le verbe transitif "crypter" est un anglicisme, un abus de langage fortement déconseillé.
On ne crypte pas une communication, on la chiffre.
Ce terme n'est historiquement toléré que dans le domaine audiovisuel, pour désigner le brouillage du signal. Canal+, les bouquets satellites... Le marketing en a popularisé l'usage auprès du grand public, mais même dans ce contexte, il reste techniquement incorrect. -
Encoder / décoder : transformer une donnée dans un autre format pour favoriser son stockage ou sa transmission.
Des données encodées restent lisibles et décodables par tous.
Par exemple : la conversion de décimal (base 10) à hexadécimal (base 16).
Les développeurs utilisent fréquemment l'encodage en base 64 car le résultat n'utilise que des majuscules (26), minuscules (26), chiffres (10), "+" et "/". Dans la pratique, on croise aussi souvent des "=" à la fin : pour simplifier le décodage, les algorithmes complètent le résultat pour que sa longueur soit un multiple de 4. La base 64 permet ainsi de stocker ou de transmettre une information sans caractères spéciaux (emoji, tabulations, alphabet cyrillique...) parfois difficiles à gérer.
Les clés de chiffrement sont, la plupart du temps, stockées en base 64.
Le chiffrement symétrique
La même clé sert pour chiffrer et déchiffrer.
C'est rapide, efficace, et parfait pour chiffrer de grandes quantités de données.
Ce type de chiffrement est utilisé partout pour sécuriser :
- Les fichiers, clés USB, disques durs et autres stockages. Ils restent illisibles en cas de vol.
- Les communications web avec HTTPS.
- Les réseaux privés virtuels (VPN), pour sécuriser tout le trafic entre l'appareil et le serveur VPN.
- Les messageries comme WhatsApp ou Signal.
- Et bien d'autres...
AES (Advanced Encryption Standard) est l'algorithme le plus largement utilisé pour le chiffrement symétrique.
Il fait partie de la suite d'algorithmes utilisée par la NSA pour la protection des informations classifiées jusqu'au niveau
Top Secret.
Bien que pour l'instant considéré comme résistant aux attaques quantiques, les chercheurs craignent que l'évolution
technologique fragilise la sécurité d'AES. Ils essaient donc d'anticiper en développant des algorithmes dits
"post-quantiques", capables de résister aux puissances de calcul des futurs ordinateurs quantiques.
Le chiffrement asymétrique
La clé pour chiffrer n'est pas la même que la clé pour déchiffrer.
Pour pouvoir démarrer la communication avec un système, il faut préalablement générer une clé privée et une clé publique.
La clé privée ne doit jamais être partagée, c'est comme un grand mot de passe qu'il faut stocker dans un endroit sécurisé.
À partir de cette clé privée, des algorithmes génèrent la clé publique. Ce sont des fonctions mathématiques à sens unique : il est impossible
de retrouver la clé privée à partir de la clé publique.
Un message chiffré à partir de l'une des clés ne peut être déchiffré que par l'autre clé.
Ce procédé est beaucoup plus lourd qu'un chiffrement symétrique.
C'est pourquoi le chiffrement asymétrique est majoritairement utilisé pour authentifier avec certitude un interlocuteur
et échanger juste les données nécessaires pour passer ensuite sur un chiffrement symétrique.
La sécurisation des communications web avec HTTPS est un parfait exemple :
Étape 1 - vérification de l'identité du site web
- Le site génère une clé privée et une clé publique.
- Le site commande un certificat auprès d'une autorité de certification. C'est une entreprise reconnue et considérée comme fiable par les navigateurs. Ce certificat contient la clé publique du site et la signature de l'autorité de certification. Il prouve au navigateur que cette clé publique appartient bien à ce site. Tu peux voir le certificat complet d'un site en cliquant à gauche de "https" dans ta barre de navigation.
- Lors de la visite sur un site, le navigateur lui envoie ses paramètres et ses préférences de communication "je connais ces algorithmes, dis-moi lesquels tu préfères utiliser".
- Le site répond « nous allons utiliser tels algorithmes » et envoie son certificat. Le navigateur vérifie que le certificat est valide et approuvé par une autorité de certification reconnue. Il obtient ainsi la clé publique du site.
-
Le site transmet ses paramètres et les signe :
il calcule un hash de certaines données échangées et le chiffre avec sa clé privée.
De son côté, le navigateur recalcule le même hash. En vérifiant la signature avec la clé publique et en comparant les deux valeurs, il s'assure que les paramètres n'ont pas été modifiés et qu'il communique bien avec le vrai site, et non avec un pirate qui se serait branché au milieu de la chaîne.
Étape 2 - sécurisation des communications
Une fois l'identité du site vérifiée, la communication passe en chiffrement symétrique, plus rapide pour la suite des échanges.
Pour démarrer cette session symétrique, le site et le navigateur ont besoin de se mettre d'accord sur l'algorithme et la clé commune qui servira à chiffrer puis déchiffrer les données.
HTTPS s'appuie sur le protocole Diffie–Hellman qui permet aux deux parties de calculer, chacune de leur côté, exactement la même clé de session sans jamais l'échanger.
Même si un pirate écoute la communication, il ne pourra pas reconstituer cette clé secrète.
Voici une explication simplifiée du procédé en utilisant des couleurs :
- Le site et le navigateur choisissent publiquement une couleur : le jaune.
- Chacun décide une couleur qu'il garde secrète. Bleu pour le site, rouge pour le navigateur.
- Ils s'échangent publiquement le mélange entre la couleur secrète et la couleur partagée. Le site envoie jaune + bleu = vert. Le navigateur envoie jaune + rouge = orange.
-
Dans leur coin, ils ajoutent leur couleur secrète au mélange de l'autre.
Le site calcule bleu + orange, ce qui revient à bleu + rouge + jaune = marron.
Le navigateur calcule rouge + vert, ce qui revient à rouge + bleu + jaune = marron.
Les deux parties ont réussi à calculer le marron sans l'échanger.
Diffie–Hellman s'appuie sur des fonctions mathématiques basées sur des courbes elliptiques et des clés privées / publiques éphémères.
Son fonctionnement garantit qu'un attaquant ne peut pas retrouver les informations secrètes à partir de ce qui est échangé publiquement.
Grâce à cette clé de session commune, le navigateur et le site peuvent maintenant chiffrer et déchiffrer leurs communications.
Ce n'est qu'après toutes ces étapes que commencent réellement les échanges web permettant l'affichage du site.
