Resolv merge conflicts
This commit is contained in:
commit
60aed213d6
1 changed files with 49 additions and 44 deletions
93
memoire.md
93
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*.
|
||||
|
||||

|
||||
|
||||
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue