diff --git a/memoire.md b/memoire.md index be53461..e1de56b 100644 --- a/memoire.md +++ b/memoire.md @@ -15,19 +15,20 @@ linkstyle: bold ## Introduction -Depuis toujours, l'authentification sur des systèmes informatique est +Depuis toujours, l'authentification sur des systèmes informatiques est principalement régie par l'utilisation du couple identifiant / mot de passe. C'est pourtant un facteur d'identification peu fiable : utilisation du même mot -de passe pour plusieurs - voir tous les - service(s), faible, progrès techniques -rendant leur cassage plus efficaces etc. Dans un communiqué de presse du W3C et -de l'Alliance FIDO : +de passe pour plusieurs - voir tous les - services, mot de passe faible, progrès +technique rendant leur cassage plus efficace etc. Dans un communiqué de presse +du W3C et de l'Alliance FIDO, "les mots de passe volés, faibles ou par défaut +sont à l'origine de 81% des atteintes à la protection des données". > Les mots de passe volés, faibles ou par défaut > sont à l'origine de 81% des atteintes à la protection des données. Il existe des solutions pour pallier ces faiblesses, avec notamment l'introduction d'un ou plusieurs autres facteurs d'authentification (TOTP, SMS -etc.), ou les gestionnaires de mots de passe (keepass, LastPass ...). +etc.) ou les gestionnaires de mots de passe (keepass, LastPass, etc ...). L'authentification par certificats semble être une alternative intéressante aux traditionnels mots de passe. Nous allons dans ce mémoire parler de la norme @@ -36,25 +37,28 @@ connues. ## La norme X.509 -La norme X.509 régissant les formats pour les certificats à clé publique. Elle -est définie par l'Union Internationale des Télécommunications et établie : +La norme X.509 régie les formats pour les certificats à clés +publiques. Elle est définie par l'Union Internationale des Télécommunications et +établie comme suit : - Le **format de certificat** - La **liste de révocation** des certificats - leurs **attributs** - - un **algorithme de validation de chemin de certificats** + - un **algorithme de validation de chemin des certificats** Contrairement à OpenPGP qui repose sur une toile de confiance, X.509 repose sur les autorités de certifications : un tiers de confiance délivre les certificats et fournit les moyens de les vérifier. Les certificats X.509 sont donc composé de deux éléments : une partie publique -et une partie privée. Ces certificats peuvent assurer plusieurs rôles +et une partie privée. Ces certificats peuvent assurer plusieurs rôles. + +En voici quelques uns : ### PKI - Infrastructure à clefs publiques Une infrastructure à clefs publiques est un ensemble d'éléments, qu'ils soient -humain, matériels ou logiciels, destinés à gérer les clefs publiques des +humains, matériels ou logiciels, destinés à gérer les clefs publiques des utilisateurs d'un système. Cette infrastructure est utilisée pour créer, gérer, distribuer et révoquer des @@ -131,7 +135,7 @@ publiée par le W3C. Ce standard définit une API destinée aux navigateurs, aux applications web et aux autres plateformes nécessitant une authentification forte basée sur clés publiques. -Les grands du Web ont déjà ont déjà mit en place le support de WebAuthn sur +Les grands du Web ont déjà mis en place le support de WebAuthn sur leurs outils : Windows 10, Android, Google Chrome, Mozilla Firefox, Microsoft Edge et Safari. L'apparition de ce standard va sans aucun doute encourager une adoption plus large de ce type d'authentification. @@ -140,11 +144,10 @@ encourager une adoption plus large de ce type d'authentification. ### Attaques par canal auxiliaire -Les attaques par canal auxiliaire regroupe les attaques qui tentent -**d'exploiter des failles sur l'implémentation** des procédures de sécurité -plutôt que sur les procédures elles-mêmes. Voici une liste de types d'attaques -par canal auxiliaire sur lesquels on va s'attarder car elles touchent les -smartcard : +Les attaques par canal auxiliaire regroupent les attaques qui tentent d'exploiter +des failles sur l'implémentation des procédures de sécurité plutôt que sur les +procédures elles-mêmes. Voici une liste de types d'attaques par canal +auxiliaire sur lesquels on va s'attarder car elles touchent les smartcards : #### Attaque par sondage @@ -158,15 +161,15 @@ détérioration de la puce, etc. #### Analyse de consommation En fonction des opérations résolues par un processeur, sa consommation en -énergie diffère. En étudiant les variations d'énergie utilisée par un lecteur de +énergie diffère. En étudiant les variations d'énergie utilisées par un lecteur de cartes, il est possible de trouver des indices sur la clé privée, sur un échantillon suffisant. Aujourd'hui, cette attaque peut être aisément contrecarrée en apposant du bruit sur le circuit ou en le blindant. #### Analyse d'émanations électromagnétiques -Semblable à l'analyse de consommation, à ceci prêt qu'on ne s'attache pas, cette -fois ci à, l'énergie consommée mais au rayonnement électromagnétique émis par un +Semblable à l'Analyse de consommation, à ceci prêt qu'on ne s'attache pas, cette +fois ci à l'énergie consommée mais au rayonnement électromagnétique émis par un appareil. A l'instar de la consommation en énergie, le rayonnement n'est pas le même en fonction des opérations exécutées par le terminal. L'étude du rayonnement thermique peut s'apparenter à une analyse d'émanations @@ -189,7 +192,7 @@ efficacité. ### Attaques sur les PKI Même si elle ne touchent pas directement les smartcards, Il est intéressant de -parler des attaque sur les infrastructures à clé publiques. +parler des attaques sur les infrastructures à clé publique. #### Collision MD5 @@ -197,9 +200,9 @@ Le MD5 pour *Message Digest 5* est un algorithme de hachage cryptographique permettant d'obtenir l'empreinte d'un fichier / d'une chaine de caractères. Elle a été inventée par **Ronald Rivets** en 1991 pour succéder à MD4. -Il doit être considéré comme obsolète depuis 1996, années de découverte d'une +Il doit être considéré comme obsolète depuis 1996, année de découverte d'une faille dans l'algorithme ouvrant la voie à des collisions. En 2004 une équipe de -chercheurs chinois menés par la mathématicienne Wang Xiaoyun [démontre la +chercheurs chinois menée par la mathématicienne Wang Xiaoyun [démontre la faisabilité][l_md5_2005] d'une collision complète. Mais cette attaque n'est pas encore suffisamment sophistiquée pour être utilisée sur un cas concret. Wang, Lenstra et de Wegner feront la [démonstration de leur attaque][l_md5_2006] sur @@ -227,19 +230,19 @@ Dans le cadre de certificats, les choses se compliquent un peu : c'est **l'autorité de certification qui génère le certificat** en fonction des informations contenues dans le CSR. L'attaquant doit alors manipuler les données contenues dans le CSR qu'il envoie et y intégrer des blocs de collision pour -annuler les différences entre les *condensats* du certificats obtenu et celui -forgé. Il va jouer sur le préfixe du CSR, d'où le nom de l'attaque. +annuler les différences entre les hashes du certificat obtenu et celui forgé. +Il va jouer sur le préfixe du CSR, d'où le nom de l'attaque. -Ce type d'attaque n'est cependant pas aisé, l'attaquant devra **anticiper -certaines informations** qui seront intégrées dans le certificat produit par -l'autorité. Certaines pourront être influencées comme le champ *CN*, d'autres -récupérées sur d'autre certificats signés par la même autorité (le contenu des +Ce type d'attaque n'est cependant pas aisé, l'attaquant devra anticiper +certaines informations qui seront intégrées dans le certificat produit par +l'autorité. Certaines pourront être influencées comme le champ CN, d'autres +récupérées sur d'autres certificats signés par la même autorité (le contenu des champs *issuer* par exemple) et enfin d'autres devront être "devinées" [^n_devinees] - numéro de série du certificat et date d'expiration - [Une telle attaque a été démontrée][l_md5_2008] en décembre 2008 par une équipe de chercheurs menée par Sotirov et Stevens. Ils ont ainsi pu obtenir un -certificat à même de signer n'importe quel autre certificat et reconnu par les +certificat à même de signer n'importe quels autres certificats et reconnu par les principaux navigateurs de l'époque. Une technique similaire a été utilisée par le malware *Flame* découvert en 2012. @@ -249,17 +252,17 @@ Windows Update. [l_md5_2008]:https://www.win.tue.nl/hashclash/rogue-ca/ [^n_devinees]:Prédites serait plus adapté, dans l'attaque menée par Sotirov et -Stevens, l'équipe de chercheurs a réussi prédire ces deux éléments en étudiant le +Stevens, l'équipe de chercheurs a réussi à prédire ces deux éléments en étudiant le fonctionnement de l'autorité de certification utilisée. ### Attaque par oracle de padding Ce type d'attaque a été mené avec succès sur différents périphériques -cryptographiques par un équipe de recherche internationale. Leurs travaux a -donne lieu ã une publication en avril 2012. +cryptographiques par une équipe de recherche internationale. Leurs travaux a +donné lieu à une publication en avril 2012. -Ils on pu ainsi extraire les clefs privées de la plupart des périphériques -disponibles sur le marché quel que soit leurs marques. +Ils on ainsi pu extraire les clefs privées de la plupart des périphériques +disponibles sur le marché quels que soient leurs marques. La première démonstration pratique de cette attaque a été faite par Daniel Bleichenbacher alors chercheur en cryptographie chez *Bell Laboratories* @@ -268,10 +271,10 @@ Bleichenbacher alors chercheur en cryptographie chez *Bell Laboratories* ##### Le chiffrement par bloc -Avant de rentrer plus en détail dans le fonctionnement de l'attaque par oracle +Avant de rentrer plus en détails dans le fonctionnement de l'attaque par oracle de padding, il est nécessaire d'expliquer le fonctionnement du chiffrement par -bloc. Il existe une multitude de façon de chiffrer par bloc, nous resterons sur -le mode CBC *Cipher Block Chaining*. +bloc. Il existe une multitude de chiffrement par bloc, nous resterons sur le +mode CBC *Cipher Block Chaining*. ![Fonctionnement du chiffrement par bloc en mode CBC](./files/CBC.svg) @@ -282,8 +285,9 @@ de le chiffrer. Pour le premier bloc à envoyer, *CBC* utilise un vecteur d'initialisation. Contrairement au chiffrement de flux, le chiffrement par bloc nécessite une -taille de donnée définie en entrée. Si les données sont trop importante, il faut -les découper, si elle sont plus petite on utilisera la technique du padding. +taille de donnée définie en entrée. Si les données sont trop importantes, il +faut les découper, si elle sont plus petites on utilisera alors la technique du +padding. $$ cleartext[n] = decrypt(cblock[n]) \oplus cblock[n-1] @@ -299,8 +303,8 @@ valeur hexadécimale `0x03` qui représente le nombre d'octets manquant [2]. ##### L'attaque par oracle de padding -Une **oracle de padding** est un mécanisme prenant un bloc chiffré en entrée, -de déchiffre et averti l'utilisateur si le padding est correct ou non. +Une **oracle de padding** est un mechanisme prenant un bloc chiffré en entrée, +le déchiffre et avertit l'utilisateur si le padding est correct ou non. Le chiffrement par bloc en mode *CBC* a un énorme défaut : l'intégrité des messages n'est pas vérifiée. Du coup un attaquant peut modifier le résultat @@ -337,9 +341,10 @@ Cette équation se compose de deux éléments que nous avons en notre possession éléments inconnus : `cleartexthack` le résultat en clair de la manipulation de notre attaque et `cleartext[n]` le résultat du déchiffrement de `cblock[n]`. -Il n'est plus question ici de chiffrement, mais de simples opérations booléenne. +Il n'est plus question ici de chiffrement, mais de simples opérations +booléennes. -Comme nous avons accès à une **oracle de padding** nous n'avons qu'a tester +Comme nous avons accès à une **oracle de padding** nous n'avons qu'à tester toutes les valeurs du dernier octet de `X` jusqu'à obtenir un padding correct (`0x01`). Dans le cadre de notre block de 16 octets : @@ -351,7 +356,7 @@ Il ne nous reste plus qu'une inconnue `cleartext[15]`, nous pouvons résoudre l'équation. Il suffit de procéder ainsi pour les 16 octets de notre bloc pour le déchiffrer -en entier, et ainsi de suite... +en entier et ainsi de suite... ##### Et son utilisation contre les smartcard