From 831e01a8283537f5f1925858688411f3b0403c05 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Mon, 18 Mar 2019 23:58:43 +0100 Subject: [PATCH 01/15] Add CBC Schema --- files/CBC.svg | 1796 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1796 insertions(+) create mode 100644 files/CBC.svg diff --git a/files/CBC.svg b/files/CBC.svg new file mode 100644 index 0000000..936aea3 --- /dev/null +++ b/files/CBC.svg @@ -0,0 +1,1796 @@ + + + Chiffrement CBC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Chiffrement CBC + 2019-03-18 + + + Yorick Barbanneau / ephase + + + + + + + + + fr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f990e24da8346141b3c71601d3087e17d27d2571 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 00:17:09 +0100 Subject: [PATCH 02/15] Integrate CBC schema and definition --- memoire.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/memoire.md b/memoire.md index 53ad55e..bd943a6 100644 --- a/memoire.md +++ b/memoire.md @@ -234,8 +234,19 @@ de padding, il est nécessaire d'expliquer le fonctionnement du chiffrement par bloc. Il exxiste 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) +Pour éviter l'apparition de motifs dans le bloc chiffré qui pourrait faciliter +la création de "dictionnaire de code", le mode *CBC* utilise le précédent bloc +chiffré pour réaliser une opération booléenne avec le bloc actuel en clair avant +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, sinon on utilisera la technique du padding. + +##### Le padding ## Bibliographie From 0859d2770a6beb5f665204f1acbf98dc298f6c75 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 00:56:14 +0100 Subject: [PATCH 03/15] Add padding definition --- files/pagging.svg | 751 ++++++++++++++++++++++++++++++++++++++++++++++ memoire.md | 6 + 2 files changed, 757 insertions(+) create mode 100644 files/pagging.svg diff --git a/files/pagging.svg b/files/pagging.svg new file mode 100644 index 0000000..6558467 --- /dev/null +++ b/files/pagging.svg @@ -0,0 +1,751 @@ + + + CBC Padding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + CBC Padding + 2019-03-18 + + + Yorick Barbanneau / ephase + + + + + + + + + fr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + 2 + diff --git a/memoire.md b/memoire.md index bd943a6..09de360 100644 --- a/memoire.md +++ b/memoire.md @@ -248,6 +248,12 @@ faut les découper, sinon on utilisera la technique du padding. ##### Le padding +![Fonctionnement du padding](./files/pagging.svg) + +Dans notre exemple, notre bloc doit faire 128 bits mais les données ne +représente que 104 bits [1]. Nous allons donc rajouter trois octets avec pour +valeur hexadécimale `0x03` qui représente le nombre d'octets manquant [2]. + ## Bibliographie Stéphane Bortzmeyer *[RFC 5280: Internet X.509 Public Key Infrastructure From 5effc75823ab85f167bdf6f0da2e953ba5fd57b8 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 03:24:58 +0100 Subject: [PATCH 04/15] Add some informations on padding attack --- memoire.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/memoire.md b/memoire.md index 09de360..d4366e2 100644 --- a/memoire.md +++ b/memoire.md @@ -225,7 +225,10 @@ donne 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. -#### fonctionnement de cette attaque. +La première démonstration pratique de cette attaque a été faite par Daniel +Bleichenbacher alors chercheur en cryptographie chez *Bell Laboratories* + +#### fonctionnement de cette attaque ##### Fonctionnement du chiffrement par bloc @@ -243,8 +246,14 @@ 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, sinon on utilisera la technique du padding. +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. + +Transposer sous forme d'équation cela donnerait : + +``` +txt_dechiffré[n] = dechiffrement(c_block[n]) ⊕ c_block[n-1] +``` ##### Le padding @@ -254,6 +263,9 @@ Dans notre exemple, notre bloc doit faire 128 bits mais les données ne représente que 104 bits [1]. Nous allons donc rajouter trois octets avec pour valeur hexadécimale `0x03` qui représente le nombre d'octets manquant [2]. +##### L'attaque par oracle de padding + + ## Bibliographie Stéphane Bortzmeyer *[RFC 5280: Internet X.509 Public Key Infrastructure From adb0113f93534ebc88f67bd284c292c095aab1a5 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 11:59:53 +0100 Subject: [PATCH 05/15] First padding oracle definition version --- memoire.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/memoire.md b/memoire.md index d4366e2..74e5f6e 100644 --- a/memoire.md +++ b/memoire.md @@ -249,10 +249,8 @@ 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. -Transposer sous forme d'équation cela donnerait : - ``` -txt_dechiffré[n] = dechiffrement(c_block[n]) ⊕ c_block[n-1] +txt_dechiffre[n] = dechiffrer(c_block[n]) ⊕ c_block[n-1] ``` ##### Le padding @@ -265,6 +263,54 @@ 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 mechanisme prenant un bloc chiffré en entrée, +de déchiffre et averti 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 +de `txt_dechiffre[n]` en modifiant `c_block[n-1]`, ou tout simplement en le +forgeant à notre convenance. + +Prenons `X` comme bloc de chiffrement forgé pour l'occasion, et `c_block[a]` +bloc de chiffrement à attaquer, nous pouvons écrire : + +``` +t_clair_hack[a] = dechiffrer(c_block[n]) ⊕ X +``` + +Nous savons aussi que : + +``` +c_block[a] = chiffrer(txt_clair[a] ⊕ c_block[a-1]) +``` + +Donc on peut écrire : + +``` +t_clair_hack = dechiffrer(chiffrer(txt_clair[a] ⊕ c_block[a-1])) ⊕ X +# et en simplifiant +t_clair_hack = txt_clair[a] ⊕ c_block[a-1] ⊕ X +``` + +Cette équation se compose de deux éléments que nous avons en notre possession : +`X` notre bloc forgé et `c_block[a-1]` notre avant-dernier bloc, et deux +éléments inconnus : `t_clair_hack` le résultat en clair de la manipulation de +notre attaque et `txt_clair[a]` le résultat du déchiffrement de `c_block[a]`. + +Il n'est plus question ici de chiffrement, mais de simples opérations booléenne. + +Comme nous avons accès à une **oracle de padding** nous n'avons qu'a tester +toutes les valeurs du dernier octet de `X` jusqu'à obtenir un padding correct +(`0x01`). Dans le cadre de notre block de 16 octets : + +``` +0x01 = txt_clair[a][15] ⊕ c_block[a-1][15] ⊕ X[15] +``` + +Il ne nous reste plus qu'une inconnue, 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... ## Bibliographie From 549ec5196788f92200fa686119b3107e6a3af05d Mon Sep 17 00:00:00 2001 From: Eol <23345063+e-ol@users.noreply.github.com> Date: Tue, 19 Mar 2019 13:37:39 +0100 Subject: [PATCH 06/15] Syntax correction --- memoire.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/memoire.md b/memoire.md index 74e5f6e..f8fdd76 100644 --- a/memoire.md +++ b/memoire.md @@ -220,7 +220,7 @@ fonctionnement de l'autorité de certification utilisée. 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. +donne 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. @@ -246,8 +246,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 la technique du +padding. ``` txt_dechiffre[n] = dechiffrer(c_block[n]) ⊕ c_block[n-1] @@ -264,7 +265,7 @@ 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 mechanisme prenant un bloc chiffré en entrée, -de déchiffre et averti l'utilisateur si le padding est correct ou non. +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 @@ -297,7 +298,8 @@ Cette équation se compose de deux éléments que nous avons en notre possession éléments inconnus : `t_clair_hack` le résultat en clair de la manipulation de notre attaque et `txt_clair[a]` le résultat du déchiffrement de `c_block[a]`. -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 toutes les valeurs du dernier octet de `X` jusqu'à obtenir un padding correct From d28de1f6fc3901f2b5a10c68a861e19151d0cc4f Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 16:34:29 +0100 Subject: [PATCH 07/15] Rework padding oracle part --- memoire.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/memoire.md b/memoire.md index 74e5f6e..4390fa1 100644 --- a/memoire.md +++ b/memoire.md @@ -312,6 +312,18 @@ Il ne nous reste plus qu'une inconnue, 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... +C'est bien entendu une version simplifiée de l'attaque par padding oracle, mais +elle permet de comprendre son fonctionnement. Elle fut au centre des travaux de +recherche menés par Romain Bardou, Riccardo Focardi, Yusuke Kawamoto, Lorenzo +Simionato, Graham Steel, et al. donnant lieu à une publication. Ces travaux +permirent, en 2012, **l'extraction des clés privées** de beaucoup de +périphériques de cryptographie (PKCS#11) de marques différentes. Les chercheurs +ont par ailleurs largement améliorer les algorithmes de Bleichenbacher pour +accélérer sensiblement les performances, surtout sur les appareils peu puissant +comme les smartcards. + +## Conclusion + ## Bibliographie Stéphane Bortzmeyer *[RFC 5280: Internet X.509 Public Key Infrastructure From 2523280df1783687348697c582a1b7e7a0e62f2e Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 16:36:47 +0100 Subject: [PATCH 08/15] Create a subtitle for padding oracle attack on smartcard devices --- memoire.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/memoire.md b/memoire.md index 4390fa1..044fd49 100644 --- a/memoire.md +++ b/memoire.md @@ -312,6 +312,8 @@ Il ne nous reste plus qu'une inconnue, 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... +##### Et son utilisation contre les smartcard + C'est bien entendu une version simplifiée de l'attaque par padding oracle, mais elle permet de comprendre son fonctionnement. Elle fut au centre des travaux de recherche menés par Romain Bardou, Riccardo Focardi, Yusuke Kawamoto, Lorenzo From 24db75042066b9a75c03af643ffecd38cc220abc Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 16:56:08 +0100 Subject: [PATCH 09/15] Add PKCS part --- memoire.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/memoire.md b/memoire.md index 044fd49..69de8cd 100644 --- a/memoire.md +++ b/memoire.md @@ -88,6 +88,24 @@ chiffrer. Certaines Smartcard permettent la génération de certificats. +### Les "normes" PKCS + +PKCS pour *Public Key Cryptographics Standard* est un ensemble de spécifications +portées au départ par la Société *RSA Security* afin d'implanter les techniques +liées à la cryptographie par clé publique. Par la suite, beaucoup de ces +spécifications sont devenues des standard par le biais de RFC écrite par le +groupe de travail PKIX[^n_pkix] de l'IETF. + +Les plus utiles ici sont : + + - **PKCS#7** : standard de syntaxe de message cryptographiques, normalisé par + les RFC 2315 et 5653. + - **PKCS#11** : API définissant une interface générique pour les périphériaues + cryptographiques. + +[^n_pkix]:Public Key Infrastructure X.509, groupe de travail de l'IETF dédié aux + intrastructures à clé publiques + ### Le Web plus accessible aux authentifications par certificats Aujourd'hui, l'un des principaux défauts de l'authentification par certificats, From f155893ceae877bcbba4a0563cc691cf7bf5e905 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 17:02:07 +0100 Subject: [PATCH 10/15] Rework introduction --- memoire.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/memoire.md b/memoire.md index 69de8cd..78f2017 100644 --- a/memoire.md +++ b/memoire.md @@ -8,17 +8,19 @@ principalement régie par l'utilisation du couple identifiant / mot de passe. C'est pourtant un facteur d'identification peu fiables : utilisation du même mot de passe pour plusieurs - voir tous les - services, mot de passe faible, progrès technique rendant leur cassage plus efficaces 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". +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. Il existe des solution pour pallier cette faiblesse, avec notamment l'introduction d'un ou plusieurs autres facteurs d'authentification (TOTP, SMS etc.), ou les gestionnaires de mots de passe (keepass, LastPass ...). L'authentification par certificats semble être une alternative -intéressante au traditionnel mot de passe. Nous allons dans ce mémoire étudier -son fonctionnement, parler de son intégration dans GNU/Linux, parler de sa mise -en œuvre et tenter d'exposer ses limites. +intéressante au traditionnel mot de passe. Nous allons dans ce mémoire parler de +la norme X.509, des infrastructures à clefs publiques, des smartcards et des +attaques connues. ## La norme X.509 From fc6bab48f23a88bac3e1ba9c03f9c8131625020d Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 17:41:41 +0100 Subject: [PATCH 11/15] Add conclusions --- memoire.md | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/memoire.md b/memoire.md index 78f2017..adf9dfe 100644 --- a/memoire.md +++ b/memoire.md @@ -1,5 +1,5 @@ -L'authentification par certificats x.509 et smartcard ------------------------------------------------------ +L'authentification par smartcard et Infrastructure par clé publique +------------------------------------------------------------------- ## Introduction @@ -88,7 +88,7 @@ et de l'utiliser. Lors de son utilisation, un code PIN sera demandé, le certificat contenu pourra alors être utilisé pour s'authentifier, signer ou chiffrer. -Certaines Smartcard permettent la génération de certificats. +Certaines smartcards permettent la génération de certificats. ### Les "normes" PKCS @@ -346,6 +346,32 @@ comme les smartcards. ## Conclusion +L'authentification par smartcards liée à une PKI est intéressante à bien des +égard, réservé jusque là au monde de l'entreprise de par la complexité de +l'infrastructure à déployer. Mais l'apparition de périphériques comme les +*Yubikey* et la nécessité de pallier aux problèmes des mots de passes pousse les +entreprises touchant le grand public à trouver des solutions; *WebAuth* en est +la preuve. + +Il est cependant utopique de penser que les smartcards résolvent tous les +problèmes, bien au contraire. Nous avons vu qu'il est possible d'attaquer +directement l'infrastructure de clés[^n_infra]. Mais il est est aussi possible +d'attaquer le périphérique lui même. N'oublions pas que celui-ci est complexe, +équipé de plusieurs processeurs et d'un système d'exploitation, agrandissant la +surface d'attaque[^n_yubikey]. + +N'oublions pas aussi qu'un périphérique se vole; et si la plupart des smartcards +sont résistante à l'ouverture par la force, une attaque ciblée couplée à de +l'ingénierie sociale bien menée pour retrouver le code PIN reste possible. + +[^n_infra]:Google a publié le 23 février 2017 un article annonçant la première + collision sur du SHA1. https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html) + +[^n_yubikey]:La Yubikey 4, et d'autre périphériques cryptographiques sont + touchés par ROCAT, une faille touchant des librairies utilisées par des puces + de la marque Infineon Technologies AG et permettant de prédire la clé privée + grâce à la clé publique - CVE-2017-15361. https://crocs.fi.muni.cz/public/papers/rsa_ccs17 + ## Bibliographie Stéphane Bortzmeyer *[RFC 5280: Internet X.509 Public Key Infrastructure From cbba4a04d0d61ff6590965763485cd3e5143b668 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 19:22:50 +0100 Subject: [PATCH 12/15] Syntax corrections --- memoire.md | 110 +++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/memoire.md b/memoire.md index adf9dfe..3b3180e 100644 --- a/memoire.md +++ b/memoire.md @@ -5,28 +5,27 @@ L'authentification par smartcard et Infrastructure par clé publique Depuis toujours, l'authentification sur des systèmes informatique est principalement régie par l'utilisation du couple identifiant / mot de passe. -C'est pourtant un facteur d'identification peu fiables : utilisation du même mot -de passe pour plusieurs - voir tous les - services, mot de passe faible, progrès -technique rendant leur cassage plus efficaces etc. Dans un communiqué de presse -du W3C et de l'Alliance FIDO : +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 : - 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 solution pour pallier cette faiblesse, avec notamment +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 ...). -L'authentification par certificats semble être une alternative -intéressante au traditionnel mot de passe. Nous allons dans ce mémoire parler de -la norme X.509, des infrastructures à clefs publiques, des smartcards et des -attaques connues. +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 +X.509, des infrastructures à clefs publiques, des smartcards et des attaques +connues. ## La norme X.509 -La norme X.509 régissant les formats les format pour les certificats à clé -publique. Elle est définie par l'Union Internationale des Télécommunications et -établie : +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 : - Le **format de certificat** - La **liste de révocation** des certificats @@ -47,7 +46,7 @@ humain, 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 -certificats +certificats. #### La PKI elle va te crypter l'Internet du digital @@ -58,7 +57,7 @@ le fonctionnement du chiffrement TLS. ## Une SmartCard? Maintenant que nous avons parlé de la norme X.509, nous allons parler de notre -**startcard**. D'après Wikipedia ([source](l_sc-wiki)) : +**startcard**. D'après Wikipédia ([source](l_sc-wiki)) : > Une carte à puce est une carte en matière plastique, voire en papier ou en > carton, de quelques centimètres de côté et moins d'un millimètre d'épaisseur, @@ -95,18 +94,18 @@ Certaines smartcards permettent la génération de certificats. PKCS pour *Public Key Cryptographics Standard* est un ensemble de spécifications portées au départ par la Société *RSA Security* afin d'implanter les techniques liées à la cryptographie par clé publique. Par la suite, beaucoup de ces -spécifications sont devenues des standard par le biais de RFC écrite par le +spécifications sont devenues des standard par le biais de RFC écrites par le groupe de travail PKIX[^n_pkix] de l'IETF. Les plus utiles ici sont : - **PKCS#7** : standard de syntaxe de message cryptographiques, normalisé par les RFC 2315 et 5653. - - **PKCS#11** : API définissant une interface générique pour les périphériaues + - **PKCS#11** : API définissant une interface générique pour les périphériques cryptographiques. [^n_pkix]:Public Key Infrastructure X.509, groupe de travail de l'IETF dédié aux - intrastructures à clé publiques + infrastructures à clé publiques ### Le Web plus accessible aux authentifications par certificats @@ -114,11 +113,11 @@ Aujourd'hui, l'un des principaux défauts de l'authentification par certificats, c'est qu'elle n'est pas déployée largement : seul un petit nombre de services l'utilisent. -Cependant, supporté par le constat que les mots de passe perdent -en efficacité, le standard WebAuthn (pour Web Authentication) a récemment été -créé et 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. +Cependant, supporté par le constat que les mots de passe perdent en efficacité, +le standard WebAuthn - pour *Web Authentication* - a récemment été créé et +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 leurs outils : Windows 10, Android, Google Chrome, Mozilla Firefox, @@ -129,10 +128,11 @@ 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 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 : #### Attaque par sondage @@ -153,7 +153,7 @@ 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 +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 @@ -176,14 +176,14 @@ efficacité. ### Attaques sur les PKI -Même si elle ne touchent pas directement les smartcard, Il est intéressant de +Même si elle ne touchent pas directement les smartcards, Il est intéressant de parler des attaque sur les infrastructures à clé publiques. #### Collision MD5 -Le MD5 (pour Message Digest 5) est un algorithme de hachage cryptographique +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. +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 faille dans l'algorithme ouvrant la voie à des collisions. En 2004 une équipe de @@ -199,32 +199,35 @@ deux certificats X.509 différents ayant la même signature MD5 en 2006. ##### Attaque par collision Une attaque par collision est menée sur une fonction de hashage cryptographique -afin trouver deux entrées différentes donnant lieux au même résultat. Comme la -plupart des fonctions de signature électronique le font sur le hash d'un -document plutôt que sur le document lui-même. Ainsi s'il est possible de -produire deux documents avec le même hash, leurs signatures sera strictement -la même. Il suffit alors d'envoyer à l'autorité de certification le document -légitime et copier la signature obtenue sur le document frauduleux. +afin trouver **deux entrées différentes donnant lieux au même résultat**. Comme +la plupart des fonctions de signature électronique se font sur le *condensat* +d'un document plutôt que sur le document lui-même. Ainsi s'il est possible de +produire deux documents avec le même *condensat*[^n_hash], leurs signatures +seront strictement identiques. Il suffit alors d'envoyer à l'autorité de +certification le document légitime et **copier la signature obtenue sur le +document frauduleux**. + +[^hash]:Le mot français pour *hash* ##### Attaque par collision avec préfixe choisi 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 +**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 hashes 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 *condensats* du certificats 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 +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 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 autres certificats et reconnu par les +certificat à même de signer n'importe quel autre certificat et reconnu par les principaux navigateurs de l'époque. Une technique similaire a été utilisée par le malware *Flame* découvert en 2012. @@ -232,6 +235,7 @@ Il usurpait une signature de code Microsoft pour se propager au travers de 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 fonctionnement de l'autorité de certification utilisée. @@ -248,14 +252,14 @@ disponibles sur le marché quel que soit leurs marques. La première démonstration pratique de cette attaque a été faite par Daniel Bleichenbacher alors chercheur en cryptographie chez *Bell Laboratories* -#### fonctionnement de cette attaque +#### Comment fonctionne t-elle? -##### Fonctionnement du chiffrement par bloc +##### Le chiffrement par bloc Avant de rentrer plus en détail dans le fonctionnement de l'attaque par oracle de padding, il est nécessaire d'expliquer le fonctionnement du chiffrement par -bloc. Il exxiste une multitude de chiffrement par bloc, nous resterons sur le -mode CBC *Cipher Block Chaining*. +bloc. Il existe une multitude de façon de chiffrer par bloc, nous resterons sur +le mode CBC *Cipher Block Chaining*. ![Fonctionnement du chiffrement par bloc en mode CBC](./files/CBC.svg) @@ -283,7 +287,7 @@ 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 mechanisme prenant un bloc chiffré en entrée, +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. Le chiffrement par bloc en mode *CBC* a un énorme défaut : l'intégrité des @@ -347,16 +351,16 @@ comme les smartcards. ## Conclusion L'authentification par smartcards liée à une PKI est intéressante à bien des -égard, réservé jusque là au monde de l'entreprise de par la complexité de +égard, réservée jusque là au monde de l'entreprise de par la complexité de l'infrastructure à déployer. Mais l'apparition de périphériques comme les *Yubikey* et la nécessité de pallier aux problèmes des mots de passes pousse les entreprises touchant le grand public à trouver des solutions; *WebAuth* en est -la preuve. +la preuve (mais sans la partie PKI). Il est cependant utopique de penser que les smartcards résolvent tous les problèmes, bien au contraire. Nous avons vu qu'il est possible d'attaquer directement l'infrastructure de clés[^n_infra]. Mais il est est aussi possible -d'attaquer le périphérique lui même. N'oublions pas que celui-ci est complexe, +d'attaquer le périphérique lui même: n'oublions pas que celui-ci est complexe, équipé de plusieurs processeurs et d'un système d'exploitation, agrandissant la surface d'attaque[^n_yubikey]. From 0abee7fe7ba258b6e06a899f0cb6799b398b168a Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 19:36:22 +0100 Subject: [PATCH 13/15] Correct hash footnote --- memoire.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/memoire.md b/memoire.md index 3b3180e..713fec2 100644 --- a/memoire.md +++ b/memoire.md @@ -207,7 +207,7 @@ seront strictement identiques. Il suffit alors d'envoyer à l'autorité de certification le document légitime et **copier la signature obtenue sur le document frauduleux**. -[^hash]:Le mot français pour *hash* +[^n_hash]:Le mot français pour *hash* ##### Attaque par collision avec préfixe choisi From 54dcf380f6a2e01291d4fb01566566a29ae086a3 Mon Sep 17 00:00:00 2001 From: yishan Date: Tue, 19 Mar 2019 21:31:20 +0100 Subject: [PATCH 14/15] =?UTF-8?q?Corrections=20orthographiques=20suite=20?= =?UTF-8?q?=C3=A0=20une=20relecture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- memoire.md | 70 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/memoire.md b/memoire.md index f8fdd76..9bde6ca 100644 --- a/memoire.md +++ b/memoire.md @@ -3,17 +3,17 @@ L'authentification par certificats x.509 et smartcard ## 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 fiables : utilisation du même mot +C'est pourtant un facteur d'identification peu fiable : utilisation du même mot de passe pour plusieurs - voir tous les - services, mot de passe faible, progrès -technique rendant leur cassage plus efficaces etc. Dans un communiqué de presse +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". Il existe des solution pour pallier cette faiblesse, 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 au traditionnel mot de passe. Nous allons dans ce mémoire étudier @@ -22,30 +22,32 @@ en œuvre et tenter d'exposer ses limites. ## La norme X.509 -La norme X.509 régissant les formats les format 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 -certificats +certificats. #### La PKI elle va te crypter l'Internet du digital @@ -100,7 +102,7 @@ créé et 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. @@ -109,10 +111,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 +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 smartcard : +auxiliaire sur lesquels on va s'attarder car elles touchent les smartcards : #### Attaque par sondage @@ -126,7 +128,7 @@ 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. @@ -134,7 +136,7 @@ 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 +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 @@ -156,8 +158,8 @@ efficacité. ### Attaques sur les PKI -Même si elle ne touchent pas directement les smartcard, Il est intéressant de -parler des attaque sur les infrastructures à clé publiques. +Même si elle ne touchent pas directement les smartcards, Il est intéressant de +parler des attaques sur les infrastructures à clé publique. #### Collision MD5 @@ -165,9 +167,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 @@ -179,7 +181,7 @@ deux certificats X.509 différents ayant la même signature MD5 en 2006. ##### Attaque par collision Une attaque par collision est menée sur une fonction de hashage cryptographique -afin trouver deux entrées différentes donnant lieux au même résultat. Comme la +afin de trouver deux entrées différentes donnant lieux au même résultat. Comme la plupart des fonctions de signature électronique le font sur le hash d'un document plutôt que sur le document lui-même. Ainsi s'il est possible de produire deux documents avec le même hash, leurs signatures sera strictement @@ -192,19 +194,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 hashes du certificats obtenu et celui forgé. +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 +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 autres certificats 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. @@ -213,17 +215,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* @@ -232,9 +234,9 @@ Bleichenbacher alors chercheur en cryptographie chez *Bell Laboratories* ##### Fonctionnement du 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 exxiste une multitude de chiffrement par bloc, nous resterons sur le +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) @@ -247,7 +249,7 @@ 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 importantes, il -faut les découper, si elle sont plus petites on utilisera la technique du +faut les découper, si elle sont plus petites on utilisera alors la technique du padding. ``` @@ -301,7 +303,7 @@ notre attaque et `txt_clair[a]` le résultat du déchiffrement de `c_block[a]`. 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 : @@ -312,7 +314,7 @@ toutes les valeurs du dernier octet de `X` jusqu'à obtenir un padding correct Il ne nous reste plus qu'une inconnue, 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... ## Bibliographie From 0da833f7d22922c08afb9e0f4e9deb386eed2cc0 Mon Sep 17 00:00:00 2001 From: yorick Barbanneau Date: Tue, 19 Mar 2019 23:14:28 +0100 Subject: [PATCH 15/15] Rework document to be compatible with pandoc --- memoire.md | 67 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/memoire.md b/memoire.md index 713fec2..be53461 100644 --- a/memoire.md +++ b/memoire.md @@ -1,5 +1,17 @@ -L'authentification par smartcard et Infrastructure par clé publique -------------------------------------------------------------------- +--- +title: Authentification par smartcard et PKI +documentclass: scrbook +author: + - Luc Lauriou + - Yorick Barbanneau +fontsize: 12pt +mainfont: DejaVu Serif +geometry: [top=1.5cm, bottom=3cm, left=3cm, right=3cm] +header-includes: + - \definecolor{liens}{HTML}{de6a66} +urlcolor: liens +linkstyle: bold +... ## Introduction @@ -273,9 +285,9 @@ 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. -``` -txt_dechiffre[n] = dechiffrer(c_block[n]) ⊕ c_block[n-1] -``` +$$ +cleartext[n] = decrypt(cblock[n]) \oplus cblock[n-1] +$$ ##### Le padding @@ -292,34 +304,38 @@ de déchiffre et averti 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 -de `txt_dechiffre[n]` en modifiant `c_block[n-1]`, ou tout simplement en le +de `cleartext[n]` en modifiant `cblock[n-1]`, ou tout simplement en le forgeant à notre convenance. -Prenons `X` comme bloc de chiffrement forgé pour l'occasion, et `c_block[a]` +Prenons `X` comme bloc de chiffrement forgé pour l'occasion, et `cblock[n]` bloc de chiffrement à attaquer, nous pouvons écrire : -``` -t_clair_hack[a] = dechiffrer(c_block[n]) ⊕ X -``` +$$ +cleartexthack[n] = decrypt(cblock[n]) \oplus X +$$ Nous savons aussi que : -``` -c_block[a] = chiffrer(txt_clair[a] ⊕ c_block[a-1]) -``` +$$ +cblock[a] = encrypt(cleartextr[n] \oplus cblock[n-1]) +$$ Donc on peut écrire : -``` -t_clair_hack = dechiffrer(chiffrer(txt_clair[a] ⊕ c_block[a-1])) ⊕ X -# et en simplifiant -t_clair_hack = txt_clair[a] ⊕ c_block[a-1] ⊕ X -``` +$$ +cleartexthack = decrypt(encrypt(txt_clair[n] \oplus cblock[n-1])) \oplus X +$$ + +En simplifiant : + +$$ +cleartext = cleartext[a] \oplus cblock[n-1] \oplus X +$$ Cette équation se compose de deux éléments que nous avons en notre possession : -`X` notre bloc forgé et `c_block[a-1]` notre avant-dernier bloc, et deux -éléments inconnus : `t_clair_hack` le résultat en clair de la manipulation de -notre attaque et `txt_clair[a]` le résultat du déchiffrement de `c_block[a]`. +`X` notre bloc forgé et `cblock[n-1]` notre avant-dernier bloc, et deux +é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. @@ -327,11 +343,12 @@ Comme nous avons accès à une **oracle de padding** nous n'avons qu'a tester toutes les valeurs du dernier octet de `X` jusqu'à obtenir un padding correct (`0x01`). Dans le cadre de notre block de 16 octets : -``` -0x01 = txt_clair[a][15] ⊕ c_block[a-1][15] ⊕ X[15] -``` +$$ +0x01 = cleartext[n][15] \oplus cblock[n-1][15] \oplus X[15] +$$ -Il ne nous reste plus qu'une inconnue, nous pouvons résoudre l'équation. +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...