Brève histoire de la cryptologie
De l’antiquité aux premiers ordinateurs
Les origines de la cryptologie remontent à l’antiquité : le plus vieux document chiffré retrouvé est une tablette d’argile datant du XVIe siècle avant J.-C. Les procédés de chiffrement par substitution sont apparus à cette période et ont été très largement utilisés depuis lors. Au fil des siècles, les techniques cryptographiques se perfectionnent lentement et se complexifient. Jusqu’au XIXe siècle, les motivations sont essentiellement diplomatiques et militaires, l’usage de la cryptographie est pour beaucoup l’apanage des puissants qui font appel à des spécialistes, des dynasties de cryptographes apparaissent (les Rossignol en France, les Da Porta en Italie). Durant toute cette période, la cryptographie se résume essentiellement à un ensemble de savoir-faire et est considérée comme un art et non comme une science. L’essor du télégraphe dans les années 1840 accroît le besoin de dissimuler le sens des messages et, de ce fait, favorise la généralisation de la cryptographie et la réflexion sur les méthodes cryptographiques. En 1883, Auguste Kerckhoffs publie le livre La cryptographie militaire dans lequel il énonce plusieurs propriétés que doit avoir un bon système de chiffrement. Parmi celles-ci, nous citons ici les trois premières qui font preuve d’une étonnante modernité et sont toujours communément admises :
– Le système doit être matériellement, sinon mathématiquement, indéchiffrable.
– Il faut qu’il n’exige pas le secret et qu’il puisse sans inconvénient tomber entre les mains de l’ennemi.
– La clef doit pouvoir (. . .) être changée ou modifiée au gré des correspondants.
La première propriété signifie que même s’il y a une manière théorique de casser un système cryptographique, ce dernier peut être considéré comme sûr s’il n’existe pas de méthode pour le casser en un temps raisonnable avec les outils dont nous disposons. En d’autres termes, si la meilleure stratégie pour mettre à mal sa sécurité requiert de faire tourner le meilleur ordinateur actuellement disponible pendant 1000 ans, alors on considère que ce système cryptographique peut être utilisé. Actuellement, presque tous les algorithmes utilisés reposent sur des problèmes que l’on pense calculatoirement difficiles, c’est-à-dire, qui ont une solution, mais que l’on ne peut pas résoudre rapidement. On arrive à prouver que pour pouvoir porter atteinte à la résistance de ces algorithmes il faut préalablement réussir à casser un de ces problèmes calculatoirement difficiles, ce qui est impossible en temps raisonnable. Les deuxième et troisième principes mettent en exergue la notion centrale de clef. L’architecture d’un système cryptographique doit pouvoir être connue de tous, même d’un éventuel attaquant, seul le secret de la clef doit être nécessaire pour assurer la sécurité. Cette clef doit être flexible et pouvoir être changée facilement, de telle sorte que l’on en utilise une différente à chaque échange. À la difficulté de concevoir un algorithme résistant aux attaques extérieures, s’ajoutent donc les problèmes de générer une clef sûre puis de modifier régulièrement cette clef. Cette question est d’autant plus importante que toute la sécurité de l’algorithme repose sur la confidentialité de cette clef et la moindre fuite d’information peut compromettre tout le système. Il faut donc être très prudent lors de la mise en accord de clefs. C’est d’ailleurs la difficulté de mettre à jour certaines clefs dans les systèmes cryptographiques allemands qui facilite le travail des cryptanalystes anglais lors de la seconde guerre mondiale. En effet, pendant cette période les allemands utilisent la plus connue des machines de chiffrement mécaniques : Enigma. Ces machines de chiffrement ont fait leur apparition après la première guerre mondiale et sont intensément utilisées au cours de la seconde. Enigma possède un jeu de rotors dont l’agencement est mis à jour quotidiennement, ce qui revient à changer en partie la clef. Cependant, pour renouveller entièrement la clef, il faudrait que toutes les troupes allemandes modifient régulièrement le jeu de rotors utilisé, et ce de façon synchronisée, ce qui est difficile à effectuer. C’est pourquoi ceci n’est fait que très rarement et l’activité de cryptanalyse des forces alliées s’en trouve allégée. C’est justement pour casser certains algorithmes de chiffrement allemands que les anglais construisent le Colossus, considéré comme le premier ordinateur à avoir vu le jour. La cryptographie fait alors connaissance avec l’informatique.
De la naissance d’une science
Après la guerre, entre 1948 et 1950, Shannon fonde la théorie de l’information et initie avec elle, la cryptologie moderne. C’est un tournant important dans l’histoire de la cryptologie, mais il faudra attendre la fin des années 1970 pour que cette science nouvelle prenne vraiment son essor. Ces années sont marquées par la normalisation de l’algorithme de chiffrement symétrique DES (1977), mais surtout par la naissance de la cryptographie asymétrique avec l’article fondateur de Diffie et Hellman [DH76] (1976) puis la création de l’algorithme RSA [RSA78] (1977). Les premières conférences académiques apparaissent au début des années 1980. La naissance de la cryptographie asymétrique révolutionne la cryptologie et notamment l’échange de clefs. Jusqu’à présent, ce dernier était effectué par des méthodes classiques : une des parties écrivait une liste de clefs à l’avance et la transmettait à l’autre partie, parfois grâce à une tierce personne de confiance. C’est cette méthode qui était employée par les allemands durant la seconde guerre mondiale : ils utilisaient un calendrier secret dans lequel étaient notés les réglages initiaux à utiliser pour chaque jour. Dorénavant, il est possible d’effectuer cette mise en accord de clefs à distance et au dernier moment par des méthodes cryptographiques. Cependant, un nouveau problème se pose : lors d’un échange de clefs, puisque je suis à distance, il me faut pouvoir vérifier l’identité de l’entité avec laquelle je communique car rien n’empêche a priori un adversaire de se faire passer pour la personne avec laquelle je veux discuter. Avant, cette identité ne pouvait être mise en doute : les seules personnes capables de communiquer étaient celles qui possédaient déjà la clef. Maintenant il faut effectuer une authentification en même temps que l’échange de clefs. Ces deux notions sont donc liées et ont été très étudiées depuis lors. De nombreuses solutions ont été élaborées pour assurer l’authentification lors d’un échange de clefs. Grâce aux nouvelles fonctionnalités apportées par la cryptographie asymétrique et au développement de l’informatique, la cryptographie est maintenant très répandue et on l’utilise quotidiennement par le biais d’objets courants (carte bleue, ordinateurs, cartes vitales,. . .).
Établissement d’un canal sécurisé
Les trois principes fondamentaux
De nos jours, les outils cryptographiques sont conçus pour remplir de plus en plus de fonctionnalités différentes. Parmi ces nombreuses fonctionnalités, il y en a trois qui sont particulièrement importantes : les protocoles cryptographiques doivent assurer la confidentialité, l’intégrité et l’authentification. Même si nous sommes particulièrement intéressés dans ce mémoire par l’authentification nous allons voir à la sous-section 1.2.3 que notre étude ne peut se faire sans examiner également les deux autres notions. Éthymologiquement, la cryptologie est « la science du secret », définition qui correspond avec son objectif originel qui était de préserver le secret des messages. C’est la propriété à laquelle tout le monde pense quand on évoque la cryptologie : garantir la confidentialité, ce qui signifie que l’on garde le contenu d’un message secret vis à vis de tout le monde, sauf de ceux qui sont autorisés à le voir. Cependant, cette fonctionnalité ne suffit pas à garantir la sécurité des communications. Un adversaire peut intercepter un message puis, même s’il n’en connait pas le contenu, modifier ce message de telle sorte que sa signification soit différente. Il ne lui reste plus qu’à faire suivre le message altéré vers son destinataire légitime. Ainsi, même s’il ne connaît pas le contenu du message initial et donc ne sait ni ce qu’il a changé exactement, ni le sens du message obtenu, il peut au moins réussir à désorganiser le camp qu’il attaque et en tirer profit. C’est pourquoi on exige que les protocoles cryptographiques permettent de repérer les messages qui ont été altérés de ceux qui sont restés inchangés : on demande que les protocoles préservent l’intégrité. Enfin, un adversaire peut se mettre entre les deux parties communiquant. Comme il est habituel en cryptologie, appelons ces deux entités Alice et Bob. Placé entre Alice et Bob, l’adversaire peut intercepter les conversations et essayer de se faire passer pour Bob auprès d’Alice et/ou pour Alice auprès de Bob, et ainsi obtenir des informations. Pour éviter cette attaque, dite attaque par le milieu, il faut qu’Alice puisse vérifier que les messages viennent bien de Bob et réciproquement. En d’autres termes, le récipiendaire d’un message doit pouvoir s’assurer de l’identité de l’entité qui a généré le message. On dit que le message est authentifié et que le protocole assure l’authentification. En résumé, un des objectifs principaux de la cryptographie est de rendre possible l’établissement de ce que l’on appelle des canaux authentifiés, confidentiels et intègres et une grande attention est portée sur la conception de protocoles qui créent de tels canaux. Dans la suite de ce mémoire, nous parlerons de canal sécurisé pour signifier qu’il est intègre, confidentiel et authentifié.
Modularité des protocoles
Avant de décrire plus précisément le fonctionnement des protocoles qui créent des canaux sécurisés, il est intéressant de remarquer que comme tous les outils cryptographiques, ces protocoles ont une structure modulaire. Puisque cette organisation a beaucoup d’influence sur la manière dont nous menons nos études dans ce mémoire, nous faisons une petite disgression sur celle-ci. Dans la suite de ce mémoire, nous sommes amenés à étudier des primitives et des protocoles cryptographiques. Les primitives sont des fonctions (au sens mathématiques du terme) qui remplissent une ou plusieurs fonctionnalités précises. Les protocoles sont définis par les entités composant le protocole, par la forme des échanges ayant lieu entre les participants et par les fonctionnalités remplies par le protocole. Que ce soit pour construire une primitive ou un protocole cryptographique, comme on le verra tout au long de ce mémoire, on favorise toujours des constructions modulaires. Le principe de ces constructions est de commencer par créer des briques élémentaires, remplissant des fonctionnalités aussi simples et précises que possible, puis de trouver des agencements de ces briques élémentaires permettant de remplir des fonctions plus complexes. Les agencements créant une primitive complexe à partir de primitives simples est appelé mode opératoire. Cette méthode de construction modulaire présente deux avantages majeurs. D’une part, cela facilite l’analyse de sécurité, puisqu’elle permet d’étudier chaque bloc du protocole indépendamment des autres. Une fois toutes ces analyses mises bout à bout, cela permet par conséquent de faire reposer toute la sécurité du protocole sur la sécurité des briques élémentaires. Il suffit donc de concentrer son attention sur celles-ci afin d’assurer la résistance de tout l’édifice et donc la confiance que l’on a en lui. D’autre part, il existe souvent plusieurs outils cryptographiques remplissant la même fonctionnalité et on peut choisir celui que l’on souhaite comme brique élémentaire. Comme ces outils ont des niveaux de sécurité différents et des facteurs d’efficacité différents, cela permet de choisir un compromis entre sécurité et efficacité et surtout de remplacer un outil cryptanalysé par un autre plus solide.
Constitution d’un protocole établissant un canal sécurisé
Les protocoles qui établissent des canaux sécurisés sont une illustration de cette organisation modulaire des outils cryptographiques. En effet, la création d’un canal sécurisé est divisée en deux phases :
– l’échange de clefs authentifié qui est rendu possible grâce aux outils de cryptographie asymétrique puisque ceux-ci ne nécessitent pas de secret partagé préalable,
– la création du canal en lui-même. Grâce aux clefs générées lors de la première étape, on peut utiliser des primitives de cryptographie symétrique, calculatoirement plus efficaces que leurs équivalents asymétriques, pour mettre en place le canal authentifié, confidentiel et intègre. On ne décrit et n’examine ici que les protocoles hybrides, faisant appel à des primitives symétriques et asymétriques, car ce sont les plus efficaces et les plus utilisés en pratique. Bien évidemment, les clefs échangées doivent rester parfaitement confidentielles, car si l’adversaire parvenait à récupérer des informations sur la valeur de ces clefs, il pourrait les utiliser pour mettre à mal la sécurité du canal. Mais cette confidentialité n’est pas la seule condition sine qua non pour assurer cette sécurité. Comme nous l’avons expliqué à la sous-section 1.2.1, il faut que l’échange de clefs soit authentifié pour éviter les attaques par le milieu. Dans le cas contraire, un adversaire peut s’interposer entre Alice et Bob, générer une clef avec Alice en se faisant passer pour Bob et générer une clef avec Bob en se faisant passer pour Alice ; dans ce cas de figure tout message à destination de Bob ou Alice transite par l’adversaire qui le déchiffre, le lit et éventuellement le modifie, puis le rechiffre et le fait suivre à son destinataire légitime. L’authentification est donc absolument nécessaire pour être sûr de parler à la bonne personne, et, par conséquent, pour assurer également la confidentialité et l’intégrité des messages qui sont échangés. Réciproquement, le caractère authentifié du canal dans son ensemble est une conséquence non seulement de l’authentification des clefs, mais aussi du caractère intègre du canal. Puisque les clefs sont authentifiées, on sait exactement qui possède ces clefs et comme le canal est intègre, seule une personne possédant ces clefs peut générer un message valide. En conséquence de quoi, lorsqu’on obtient un message valide, on sait qui l’a généré, le message est donc authentifié. L’authentification est donc une conséquence de l’intégrité et de la confidentialité. En résumé, pour établir un canal sécurisé, il faut et il suffit donc que l’échange de clefs soit authentifié et génère des clefs parfaitement confidentielles et que le canal établi assure l’intégrité. Comme on le voit, les trois notions d’authentification, d’intégrité et de confidentialité sont indissociables et il nous faut, pour assurer l’authentification tout au long de l’établissement du canal, assurer les trois notions en même temps. Pour analyser les mécanismes cryptographiques permettant l’authentification, il faut donc aussi s’intéresser dans une certaine mesure aux méthodes pour assurer l’intégrité et la confidentialité. Pour cette raison, nous examinerons dans une première partie de ce mémoire, la mise en place d’un canal sécurisé en présentant d’abord un nouveau protocole d’échange de clefs authentifié, protocole s’appuyant sur différents modes d’authentification, puis nous analyserons la sécurité d’un mode opératoire symétrique de chiffrement authentifié, appelé CCM, qui garantit confidentialité et intégrité.
|
Table des matières
Partie I Introduction Générale
Chapitre 1 Introduction
1.1 Brève histoire de la cryptologie
1.1.1 De l’antiquité aux premiers ordinateurs
1.1.2 De la naissance d’une science
1.2 Établissement d’un canal sécurisé
1.2.1 Les trois principes fondamentaux
1.2.2 Modularité des protocoles
1.2.3 Constitution d’un protocole établissant un canal sécurisé
1.3 Dérivation de clefs
1.4 Modes opératoires de fonctions de hachage
Chapitre 2 Introduction aux preuves de sécurité
2.1 Machine de Turing, réduction et adversaires
2.1.1 Machine de Turing
2.1.2 Cadre des définitions de sécurité
2.1.3 Techniques de preuves
2.2 Modèle de la théorie de l’information
2.2.1 Distance statistique
2.2.2 L’entropie et ses mesures
2.2.3 Les extracteurs d’aléa
2.3 Modèle standard
2.3.1 Hypothèses calculatoires
2.3.2 Primitives cryptographiques
2.4 Modèles de l’oracle aléatoire et du chiffrement idéal
2.4.1 Modèle du chiffrement idéal
2.4.2 Modèle de l’oracle aléatoire
2.5 Fonctions de hachage
2.5.1 Résistance aux collisions
2.5.2 Résistance en seconde préimage
2.5.3 Résistance en préimage
2.5.4 Mode cascade
Partie II Création d’un canal sécurisé et authentifié
Chapitre 3 Authentification multi-facteurs et génération de clefs
3.1 Introduction
3.1.1 Facteurs d’authentification
3.1.2 Clefs asymétriques
3.1.3 Mot de passe
3.1.4 Traits biométriques
3.2 Modèle de sécurité d’un échange de clefs authentifié classique
3.2.1 Notions de sécurité
3.2.2 Modélisation et pouvoir de l’attaquant
3.3 Modèle de sécurité d’un échange de clefs multi-facteurs
3.3.1 Notions de sécurité
3.3.2 Modélisation et pouvoirs de l’attaquant
3.4 Schéma proposé
3.4.1 Présentation du schéma
3.4.2 Preuve de sécurité
3.5 Discussion
3.5.1 Optimalité de la preuve
3.5.2 Paramètres pratiques
Chapitre 4 Analyse d’un schéma de chiffrement authentifié symétrique
4.1 Introduction
4.2 Description du modèle de sécurité
4.2.1 Intégrité
4.2.2 Confidentialité
4.3 CBC-MAC et mode compteur
4.3.1 CBC-MAC
4.3.2 Mode compteur
4.4 Description de CCM
4.4.1 Chiffrement authentifiant
4.4.2 Notations
4.4.3 Description du mode opératoire
4.4.4 Format des entrées
4.4.5 Conseils du NIST
4.5 Attaques contre CCM en relâchant des hypothèses
4.5.1 Attaque générique
4.5.2 Quand la taille des données associées n’est pas précisée
4.5.3 Quand les nonces sont aléatoires et les entrées non formatées
4.6 Version transformée de CCM
4.6.1 Description
4.6.2 Confidentialité
4.6.3 Intégrité
4.7 Conclusion
Partie III Conclusion Générale
Télécharger le rapport complet