Rework document to be compatible with pandoc
This commit is contained in:
parent
0abee7fe7b
commit
0da833f7d2
1 changed files with 42 additions and 25 deletions
67
memoire.md
67
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...
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue