De la solidité du cadenas: guide de survie de la cryptographie

Yassine Zouggari
INSA TC
Published in
8 min readJan 7, 2019

Imaginez la scène. Nous sommes un soir de décembre 2013, et vous souhaitez faire vos achats de Noël sur internet. Vos parents débarquent en trombe, poussant des cris d’horreurs en apprenant que vous vous apprêtiez à entrer votre cryptogramme de carte bancaire sur un site internet. Tentant de lui expliquer en quoi “internet est sécurisé”, vous vous rendez compte que vous ne savez pas, mais vraiment pas comment ça fonctionne. Ce petit guide de la cryptographie pour le web espère faire oublier le traumatisme classique de tout adolescent des années 2000, ou du moins, le prévenir pour la génération suivante.

Notions et concepts de base

Tout d’abord, il faut savoir qu’un certain nombre de principes régissent le monde de la cryptographie. La confidentialité, tout d’abord : il faut faire en sorte que personne d’autre que le récepteur prévu ne puisse lire les messages sensibles. L’authentification, également : comment savoir que vous envoyez ces fameux chiffres à votre site de e-commerce préféré et pas à un quelconque truand ? De plus, il s’agit de s’assurer que le message n’a pas été modifié par un tiers depuis son envoi : c’est là ce qu’on appelle l’intégrité.

Chiffrement symétrique

Commençons avec un classique, le plus simple à saisir : le chiffrement symétrique. Permutons des lettres d’un rang dans l’alphabet. A devient B, et “bonjour” devient “cpokprs”. Inversons la manoeuvre, et nous revoilà avec “bonjour” ! C’est là le principe de base du chiffrement dit “symétrique” : chaque partie de l’échange partage une clé secrète permettant à la transmission de chiffrer le message pour le rendre incompréhensible pour le reste du monde, et à la réception de le rendre intelligible à nouveau. Cependant, il suffirait alors de trouver cette fameuse clé pour accéder à tous les secrets que peut renfermer un échange sur le web : cela peut être réalisé par des attaques dites “brute force”, où l’on teste toutes les clés possibles et imaginables jusqu’à tomber sur la bonne. C’est pour cela qu’aujourd’hui, le standard de chiffrement symétrique AES donne des clés de 128, 192 ou 256 bits : trouver une seule clé prendrait des milliers d’années, même avec une très grande puissance de calcul ! Cependant, comment transmettre cette clé privée au récepteur sans qu’elle puisse être interceptée ? Dans ces cas, par exemple, on est amenés à utiliser du chiffrement asymétrique.

Chiffrement asymétrique

Le chiffrement asymétrique, lui, fait appel à plusieurs clés : une clé publique qui sert pour le chiffrement et peut être communiquée sans restriction, et une clé privée, pour le déchiffrement. L’émetteur récupère la clé publique du récepteur, chiffre le message avec celle-ci et l’envoie. Le récepteur peut donc déchiffrer le message à l’aide de sa clé privée. La relation entre clé publique et clé privée est basée sur une relation mathématique telle qu’il est facile de passer d’une valeur à une autre (pour retrouver le message originel sachant la clé privée), mais extrêmement coûteux de faire le procédé inverse (pour trouver la clé privée lorsqu’on ne l’a pas). Par exemple, pour l’algorithme RSA, le plus utilisé aujourd’hui, on se base sur les propriétés des nombres premiers : faciles à multiplier entre eux, difficiles à extraire d’un grand nombre. Cela dit, RSA étant très coûteux en ressources, il n’est donc pas utilisé partout, mais juste pour sécuriser les ouvertures de session.

Hachage

Dernière application mathématique pour le chiffrement, le hash ! Le hash, lui, est une fonction mathématique irréversible transformant une chaîne de caractères en une autre : par exemple, avec l’algorithme SHA-256, un des principaux standards actuels, “bonjour” devient “2cb4b1431b84ec15d35ed83bb927e27e8967d75f4bcd9cc4b25c8d879ae23e18“, mais l’inverse ne fonctionne pas (en théorie). Cela sert notamment pour vérifier l’intégrité des données : on envoie une chaîne de caractères et le hash de celle-ci, le récepteur n’aura qu’à re-calculer lui-même le hash de la chaîne pour vérifier qu’ils correspondent bien, et que le message n’a donc pas été altéré. Puisqu’il n’y a pas de retour en arrière possible, on peut également s’en servir pour le stockage de mots de passe — un attaquant accédant à une base de données ne pourrait en théorie pas retrouver les mots de passe originaux ! Enfin, sauf si le mot de passe choisi était très classique (par exemple, 123456) auquel cas il est soit facile à retrouver en testant des hash de mot de passe courants, les rainbow tables rendent cette opération très rapide (on rajoute un sel aux mots de passe aujourd’hui pour remédier à cela).

Pour résumer, aujourd’hui, le chiffrement symétrique est plus utilisé pour le chiffrement de masse — par exemple les conversations de groupe sur Skype, tandis que le chiffrement asymétrique est utile pour l’échange de clés symétriques, préalables à toute conversation chiffrée. Le hash, lui, sert pour vérifier l’intégrité des messages et pour le stockage de mots de passe. Trois concepts qui sont la base même de ce qui permet d’assurer la sécurité de vos échanges.

La cryptographie et son application aujourd’hui

La cryptographie et cryptanalyse, regroupés sous le nom de cryptologie, est aujourd’hui considérée comme une science à part entière, s’appuyant beaucoup sur l’informatique théorique (machines de Turing pour définir un attaquant théorique à un système cryptographique, la théorie de la complexité pour estimer le degré de protection apporté par un algorithme en fonction du temps de calcul moyen nécessaire pour trouver une clé, etc).

Les algorithmes que nous utilisons classiquement aujourd’hui, couplés à une taille de clé raisonnable, nécessiteraient à un acteur motivé des dizaines de milliers d’années pour deviner une seule clé aléatoire. Mais en déduire directement que nos informations et échanges sont aujourd’hui protégés sous réserve d’être chiffrés est un raccourci — que nous ne prendrons pas, je vous rassure.

Algorithmes vulnérables ou clés trop petites

Par le passé, nombreux sont les algorithmes que l’on a prouvés vulnérables. Le stream cipher RC4 est un exemple notable, utilisé pour “protéger” les points d’accès WiFi WEP : aujourd’hui on considère que la sécurité apporté par WEP est à peu près équivalente à laisser le point d’accès accessible à tous, récupérer la clé ne demandant pas plus de quelques secondes de calcul, une fois suffisamment de traffic capturé (au total, une dizaine de minutes en moyenne). Beaucoup d’autres algorithmes de chiffrement ont été prouvés défaillants au fil du temps, notamment dans le domaine des télécom (chiffrement A5/2 pour le GSM par exemple). De plus la puissance de calcul disponible aujourd’hui n’est pas la même que celle disponible il y a quelques (dizaines) années, et cela a rendu certains algorithmes vulnérables au bruteforce. Ainsi DES a été standardisé en 1977, et à l’époque une clé de 56 bits était considérée comme fournissant des garanties acceptables. En janvier 1999 déjà, il a fallu au cluster distribué distributed.net 22,5 heures à peine pour casser une clé (RSA Lab’s 56-bit DES-III Encryption Challenge).

La taille des clés est donc tout aussi importante que l’algorithme ou le protocole utilisé pour vos fins, et il faut bien comprendre qu’une petite taille de clé est certes plus facile à générer, permet des chiffrements plus rapides, notamment quand on fait de l’embarqué ou de l’IoT, mais sous-entend des garanties plus faibles. La dernière édition de DEF CON a notamment accueilli un talk sur le cassage de clé à l’échelle (PDF ici) en factorisant RSA, et leurs résultats sont impressionnants : 210 000 clés RSA trouvées, une majorité de certificats X509 expirés (260 seulement utilisés, mais tout de même), en plus de 3200 clés SSH compromis.

Implémentation parfois vulnérable

La puissance de calcul d’aujourd’hui et les failles intrinsèques de certains algorithmes peuvent donc les rendre vulnérables à certaines attaques ou à du bruteforce. Mais beaucoup d’autres failles exploitées visent les implémentations, le protocole d’échange de données, ou des informations physiques fuitant de l’appareil, toutes ces failles ne nécessitant pas forcément une faiblesse de l’algorithme de chiffrement. Un exemple, le side-channeling. Ce genre de vulnérabilités peut être dévastateur typiquement pour l’IoT : mesurer la consommation électrique d’un appareil, par exemple, peut apporter des informations précieuses à un cryptanalyste, comme analysé dans ce papier (et indique quelques contre mesures possibles). D’autres informations peuvent être tirées du temps de calcul nécessaire à chiffrer un texte. Ces infos obtenues parallèlement, couplées à une taille de clé généralement petite pour des objets connectés, peuvent s’avérer critiques et permettre de casser la clé.

Parfois, il ne faut pas du tout aller chercher aussi loin pour trouver des défauts flagrants d’implémentation: la Playstation Classic lancée par Sony au début du mois est déjà hackée, et pour cause: les parties les plus sensibles du système sont bien chiffrées, mais 1) la clé est directement présente dans l’appareil et 2) aucune vérification de signature n’est effectuée avant d’exécuter le bootloader (le bout de code se chargeant de faire démarrer le système). Et donc, il a été très facile de complètement contourner le système, tellement facile que certains y voient une fonctionnalité plutôt qu’un bug, ayant pour but de rendre la machine plus attractive…

Des failles d’implémentation se retrouvent ainsi dans des outils utilisés par des millions d’utilisateurs, et les rendent vulnérables. Un exemple: Heartbleed, ayant secoué le web en 2014, dont la meilleure explication est sûrement celle de xkcd #1354:

Heartbleed est une faille dans OpenSSL version 1.0.1 à 1.0.1f, permettant de la fuite de données, potentiellement des clés privées ou des informations sensibles chargées dans la mémoire RAM du serveur. Les algorithmes utilisés pour chiffrer les échanges sont ici complètement contournés par cette faille, et leur sécurité n’est pas remise en cause : c’est un bug d’implémentation.

Une protection contre tous les acteurs ?

Pour terminer, revenons rapidement sur les révélations de Snowden, qui ont confirmé ce que l’on savait déjà: les autorités (américaines, ou pas) sont radicalement opposés au chiffrement de vos données, et veulent pouvoir y accéder. La NSA a investi plus de 800 millions de dollars dans Bullrun, un programme dédié à décrypter le trafic des protocoles réseau largement utilisés aujourd’hui. Il le fait à travers des algorithmes avancés, de la puissance de calcul mais aussi des relations avec les industriels, et est déjà parvenu à venir à bout de connexions SSL et VPN (à l’époque des révélations Snowden). Mais Bullrun essaye aussi activement d’insérer des failles, en payant par exemple RSA Security 10 millions de dollars contre le choix par défaut d’un générateur de nombre aléatoire ayant une backdoor dans l’un de leurs logiciels de sécurité.

Comme toujours en sécurité, vos choix en matière de cryptographie doivent tenir compte de deux paramètres : l’importance de vos données et les adversaires contre qui vous vous protégez. Nous espérons que ce guide vous aura donné quelques pistes pour comprendre les notions de base de la cryptographie, et une bonne vue d’ensemble de l’état de la cryptographie telle qu’appliquée aujourd’hui.

Article écrit en collaboration par Florent Goetgheluck et Yassine Zouggari — INSA Lyon, département Télécom

--

--