Vous êtes sur la page 1sur 51
! " # $ " %& ' "

! " # $ " %& ' "

(

)

$ + ) , $ , - - , - . / . " ,
$ + ) ,
$ , - - , - . / . "
, + ) +
$ -
) - , - - /$"
0 , - " - + !
% - + - - 1 ' 2 ,
" ( - 0 $ ) "
3 - ,# - , $
" ) + -
" 4
- , ) "
- ) ! 5 ) ) ) " )
, + ) " ) ) -
, + " + ) )
) "
- + ) "
6 - ! , , "
, - 7 2
) "
. - $ , , , )
"
2 - - + + $ "
) + 5
.
.
.
3 - + - -
, , " 8 ) -
/ "
8
- ) , ! ! 5
.
.
- " 9
- ! + ! $ "
- , " , +
, "
, "
*

(

)

Le processus général de transfert de données chiffrées est le suivant : on chiffre les données avec une clé, on envoie les données chiffrées, elles sont reçues par le destinataire qui les déchiffre avec une clé qui lui a été fournie dans ce but.

Données

Données

Données

Claires

Chiffrées

Claires

Chiffrement
Chiffrement
( ) Le processus général de transfert de données chiffrées est le suivant : on

Déchiffrement

( ) Le processus général de transfert de données chiffrées est le suivant : on
( ) Le processus général de transfert de données chiffrées est le suivant : on

Clé de chiffrement

Clé de déchiffrement

Par conséquent, pour pouvoir déchiffrer un message chiffré, il est nécessaire de connaître à la fois l’algorithme et la clé de déchiffrement. Pour illustrer notre propos, nous allons regarder, les algorithmes historiquement célèbre.

; - , $ " - $ , - " - - + " , -
; - , $ "
- $ , - " - - +
" , -
9
- , "
! " # $% &
' ( )
* + " $, #
$% - ) . $, $
*
+
/
0
1
#
8 ! - < 4( 9 =( > < ? @ >" 8 - ,
"
$ - 2 / 2 " ( -
+ + , , " 8 ! - 7 - A +
B" ; - - +
"
:

(

)

 
 

 
 
 

2 '3 4 !%$) !%5, 6 7 ' ( 2 8 9 2 '3 9 : ; < ' = 9 ' )

 
 

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

 

A

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

B

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

C

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

D

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

E

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

F

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

G

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

H

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

I

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

J

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

K

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

L

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

M

m

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

N

n

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

O

o

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

P

p

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

Q

q

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

R

r

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

S

s

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

T

t

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

U

u

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

V

v

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

W

w

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

X

x

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

Y

y

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

Z

z

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

 
 

 
 
 

+ 3 ' ' ' 3

 
 

> = 9 ? + @+A B ' ? CDECF@ ACF B

 
 

 

+ @ + A + @ + A

 

>

'

C D E C F @ A C F

> ' A & D E + 2 / 1 9

  • 8 - $ , 4 "

 

C ' < ( < 3 * = C /

 

C

 

(

)

' ! ' G = H > ' ' > - H $, ! 9
' ! ' G
= H > ' ' > - H $,
!
9
, - + " , + -
+ " ; - + , - ,
"
& I
' '

J 6 3 '

& = = A 3 6 ? *6//6 69+ B

5 < 8( B ( ; E#FF 3G >"

9 5 ' 5

 

&

C

F

2

+

#

2

C

F

*

+

K

6

/

/

@

+

@

+

>

+

L

+

 

D

 

 

*

6

/

/

6

6

9

+

$

,

M

%

N

!

O

5

)

 

C ' 4 (

7 : ( 0;

 

#

6

+

&

+

L

F

@

 

F

+

2

+

C

*

 

@

+

+

K

>

2

/

C

/

0

 

& ' 7 ' 4 7

 

+

2# @/@*C+++0&

K6F+ 2>L+/FC

 
 

&

' '

9 5 7 5 9 ' ) 7 ) ' ) 3 M

9 7 , 3 3 , 3 9 7 3 9 ' 3

 

#

6

+

&

+

L

F

@

F

+

2

+

C

*

@

+

+

K

>

2

/

C

/

0

 
 

D

 

 

(

)

, - " 8 - " $ ! - $ " ( 5

& C F 2 + # 2 C F * + K 6 / / @
&
C
F
2
+
#
2
C
F
*
+
K
6
/
/
@
+
@
+
>
+
L
+
+ I 4 E#" 8 , - + " 3 / , -
, - / ! 2 $ $ "
"
9 '
- " -
+ " - - " , +
*J ) + 5 *H , + ) + < K >
, , , ) + < " >"
9 !
9 7 : ; N 7
O 55 * 3 7 = 7
7 =
& 7 P 3 '
3 + 3 ' 7
6 7 + 7

? 6DL+D6+F0B C

6 D L + F 0 * / K E H 9 > C & Q
6
D
L
+
F
0
*
/
K
E
H
9
>
C
&
Q
@
A
2
R
1
#
P
&
'
6
!
EO
D
$
L O,
+ %
F 5) 0 5,
O) ON
K
5N
H OM
& 5O
Q O! @ )
2 5% R 55
1 O$ # O%
9 OO
M
O5
* 5 / 5M
> 5! C N
A ,
P 5$
+ - " 8 ! 5 < 4( 9 =( # : E " >
C
O)N$O N5)) OO%M,5$)5$5N%5))%MO5
> ' '
' & = 9 '
)!
? ( B !5)O N5))5 5N5) 5!!5!!$%M,5!N),
9 + ( '
H

(

* 3 !

)

> ' O)N$O N5)) OO%M,5$)5$5N%5))%MO5 !5)O N5))5 5N5) 5!!5!!$%M,5!N), N%MN,O)MO) 5 )5$,!!% > ' 5$ ON,$,$
>
'
O)N$O
N5))
OO%M,5$)5$5N%5))%MO5
!5)O
N5))5
5N5) 5!!5!!$%M,5!N),
N%MN,O)MO) 5 )5$,!!%
>
'
5$
ON,$,$
& !
+ " - ,
- "

Comme nous l’avons vu, les algorithmes de chiffrement prennent deux types arguments en entrée :

  • - La clé.

  • - Le message à chiffrer.

Il est possible de classer ces algorithmes en fonction de ces arguments.

En effet, dans certains cas, les deux clés utilisées sont identiques, il faut donc que cette clé unique reste secrète. Dans les autres cas, une des deux clés peut être publique. Ce critère permet de regrouper ces algorithmes de chiffrement en deux familles :

  • - Le chiffrement symétrique ou le chiffrement à clef secrète.

  • - Le chiffrement asymétrique ou le chiffrement à clef privée.

Une seconde classification est faite sur le format des données traitées. Si les données sont chiffrées par bloc, on dit que l’on à faire à un algorithme de chiffrement par bloc et si les données sont traitées à la suite, sans découpage préalable, l’algorithme est un algorithme de chiffrement à la volée.

#$ " % & $ " ' $ "

Définition : Le chiffrement symétrique regroupe les algorithmes de chiffrement dans lesquels les clefs de chiffrement
Définition :
Le chiffrement symétrique regroupe les algorithmes de chiffrement dans lesquels les clefs de
chiffrement et de déchiffrement sont identiques.
Ainsi, l’expéditeur chiffre son message avec une clé et à la réception du message chiffré, le destinataire déchiffre
avec la même clé. Il faut donc que les deux parties se partagent une clé unique. Par exemple, les cinq algorithmes
que nous avons vu dans l’historique sont des techniques symétriques. Il est impératif de transmettre la clé secrète
avec un maximum de précautions afin qu’elle ne soit pas interceptée. Ceci est un handicap qui alourdie la gestion
des clés.
' ' +
7 * %, !$O +
=
& < ' = ' 7
= ' + =
' '
Les algorithmes de chiffrement symétriques les plus connus sont DES, triple DES, RC2, RC4, RC5, Blowfish,
SAFER, FEAL, IDEA
' $ "
Définition : Les algorithmes de chiffrement asymétriques sont les algorithmes de chiffrement où les clefs de
chiffrement et de déchiffrement sont différentes. Une clé est publique, connue de tous, tandis que l’autre est privée,
connue de son seul propriétaire.
L

(

)

7 3 9 7 3 4 ' ' ' 9 ' ' S ' '

La gestion des clés de ces algorithmes est considérablement simplifier du fait que une seule clé doit rester secrète. De plus, ces techniques étant très robuste, le couple clé privée / clé publique peut resté inchangé plus longtemps.

Par contre, comme nous le verrons, les temps de traitement sont relativement longs et la taille des clés est longue (une taille courante est 1024 bits).

A titre d’exemple, on pourra citer RSA, Rabin, ElGamal, McEliece, Merkle-Hellman knapsack, Chor Rivest knapsack, Goldwasser Micali probabiliste ou Blum Goldwasser probabiliste. Toutes ces méthodes tirent leur robustesse de la complexité de traitement de certaines fonctions mathématiques qui leur sont attachées.

Définition :

! %

le chiffrement par bloc est le processus qui transforme un bloc de donnée de taille fixe en un message chiffré grâce à l’action d’un algorithme de chiffrement.

Généralement, le chiffrement par bloc est plus lent et demande plus de ressource (mémoire et CPU) que le chiffrement à la volée. Cependant, le chiffrement par bloc est un domaine étudier depuis plus longtemps. Il en résulte un bon nombre d’algorithmes et de standards, ce qui fait de lui la méthode la en matière de chiffrement symétrique.

Dans le chiffrement symétrique par bloc, on différencie quatre modes normalisés:

  • - Electric Code Book (ECB).

  • - Cipher Block Chaining (CBC).

  • - Cipher Feedback (CFB).

  • - Output Feedback (OFB).

M = bloc Clair. C = bloc chiffré. E = la fonction de chiffrement. M E
M = bloc Clair.
C = bloc chiffré.
E = la fonction de chiffrement.
M
E
C
I-1
I-1
M
E
C
I
I

M

I-1

M

I

Mode ECB

E M I-1 + C I-2 E M I + C I-1
E
M I-1 + C I-2
E
M I + C I-1

Mode CFB

M

I-1

M

I

M

I-1

M

I

E C I-1 E C I
E
C
I-1
E
C
I

Mode CBC

E S I-1 C I-1 E S I CI
E
S I-1
C I-1
E
S I
CI

Mode OFB

J

(

)

( $ " Dans ECB, le chiffrement des blocs n’est pas corrélés les uns avec
( $ "
Dans ECB, le chiffrement des blocs n’est pas corrélés les uns avec les autres. Du coup, une même suite de bits sera
toujours chiffrés de la même manière. Cependant, puisque les blocs sont traités indépendamment les uns des
autres, ils peuvent être chiffrés en parallèle, ce qui permet de réduire le temps de chiffrement total, par rapport aux
autres modes. ECB est donc recommandé pour les long messages.
Par contre, avec CBC, les blocs sont chiffrés de manière corrélée. Le chiffrement de chaque bloc est précédée d’une
étape lors de laquelle, on fait un ou exclusif entre ce bloc et le bloc chiffré précédent. A l’étape numéro i, on
commence par calculer M i + C i-1 , puis on chiffre le résultat obtenu. A la première étape, il faut donc introduire une
valeur d’initialisation pour effectuer le ou exclusif. Cette valeur s’appelle la graine (seed) ou le vecteur
d’initialisation. Si on connaît le vecteur d’initialisation et la clé secrète, il est possible de déchiffrer le premier bloc.
De proche en proche, il est donc possible de déchiffrer tous les blocs. CBC est plus dur à percer que ECB à cause de
la corrélation entre les blocs car une même suite de bits ne produit pas toujours la même suite chiffrée. Cependant,
les erreurs de calcul se propagent d’un bloc à l’autre.
Certains algorithmes permettent de choisir entre l’un ou ‘autre de ces deux premiers modes. C’est la cas de DES qui
est disponible soit en mode CBC, soit en mode ECB.
Le mécanisme de CFB ressemble beaucoup au mode CBC à une différence prés. Dans CBC on transmet le message
chiffré Ci = E( M i + C i-1 ). Dans CFB , on transmet M i + C i-1 avec C i-1 = E( M i-1 + C i –2 ).
Comme, ici, le chiffrement des blocs est également corrélé, on utilise aussi un vecteur d’initialisation qui remplace
C -1 lorsque l’on désire en voyer M 0 .
OFB est semblable à CFB, avec le chaînage en moins. C’est à dire que le bloc chiffré que l’on ajoute au bloc en clair à
transmettre ne dépend pas des blocs précédemment transmis, comme dans le mode CFB, mais d’un vecteur
d’initialisation, noté IV. On définit les S I comme le résultat du chiffrement de S I-1 en prenant S 0 = IV ; c’est à dire que
S I = E I (IV).
Les blocs transmit sont le résultat du ou exclusif entre les S I et les blocs en claire numéro I. On utilise ce mode
lorsque l’on ne veut pas que les erreurs se propagent. Ce mode a la particularité de pouvoir s’adapter au
chiffrement à la volée. Ainsi, RC4, un célèbre algorithme de chiffrement symétrique à la volée utilise OFB.
Il existe beaucoup d’algorithmes de chiffrement par bloc. On peut citer pour les algorithme symétriques :RC5,
Blowfish, IDEA (International Data Encryption Algorithm), FEAL N (Fast Data Encipherment Algorithm) ou N est
le nombre d’itérations, Safer (Secure And Fast Encryption Routine). Du coté des algorithmes asymétriques il y a,
par exemple, RSA, Rabin ou El Gamal
)

Définition :

Le chiffrement à la volée est la technique transformant bit par bit ou caractère par caractère, une suite de données en une suite chiffrée, à l’aide d’un algorithme de chiffrement.

Comparativement, au chiffrement par bloc, le chiffrement à la volée est plus rapide et nécessite moins de ressource. En effet, il n’y a pas besoin de garder en mémoire des blocs de données, puisque les messages sont traités bits par bits ou du moins, on en traite une petite quantité à la fois. Si on dispose de peu de mémoire tampon, c’est une très bonne solution. De plus, les erreurs ne se propagent pas. C’est l’idéal si on a un canal perturbé.

Une méthode très efficace est celle que l’on appelle One Time pad. Ici, on utilise une clé K de la même longueur que le message M. Soit (m i , i<l) les bits du message en clair, (k i , i<l) ceux de la clé, (c i , i<l) ceux du message chiffré. c i = m i + k i mod2. Et m i = c i + k i mod2.

M

(

)

Cette méthode est très rapide et extrêmement sure, si on choisit K au hasard. Le seul
Cette méthode est très rapide et extrêmement sure, si on choisit K au hasard. Le seul inconvénient est que la clé a la
taille du message. D’une part, on introduit un overhead de 100% et d’autre part, le problème du transfert de la clé
d’une partie à l’autre revient exactement à celui de transmettre le message en clair. Si on peut envoyer la clé de
manière sur d’un bout à l’autre du réseaux pourquoi ne pas envoyer le message à sa place.
RC4 (un algorithme symétrique) ou Goldwasser Micali (un algorithme asymétrique) sont également des techniques
de chiffrement à la volée.
; - ) " 9
!- - ! ! 5 ; C" ! -
- ! O - , + ,
$ "
Les algorithmes de chiffrement symétrique s’appuie sur deux techniques de base que :
-
La substitution.
-
La permutation.
Définition :
La substitution est la technique qui remplace un symbole par un autre symbole du même
alphabet.
Nous allons expliquer cette méthode sur l’exemple du code César, car il n’utilise que la substitution. Lors du
chiffrement, il remplace une lettre par une autre. Pour déchiffrer le message, il suffit de faire la substitution inverse.
Cette opération permet de masquer les symboles qui composent le message initial.
L’inconvénient de la substitution pure est qu’à un symbole particulier du message en clair, elle associe toujours le
même symbole. Or, pour une langue donnée, la probabilité d’apparition n’est pas la même pour toutes les lettres. Il
est donc possible de retrouver le message en clair juste en regardant la probabilité d’apparition des différents
symboles.
La substitution doit donc être utilisée avec d’autres techniques, comme par exemple, la permutation.
*
9 ' 7 '
! ! I 4 E# " -
+ O "
$ " !
"
9 3 7 '
' &
*+
> = 7 = = 3
*+ @ M
&N

(

)

'*# DES (Data Encryption Standard) est un algorithme qui date de 1977. Il reprend, en l’améliorant
'*#
DES (Data Encryption Standard) est un algorithme qui date de 1977. Il reprend, en l’améliorant Lucifer, un
algorithme mit au point par IBM au début des années 1970. Il combine des substitution et des permutations afin
d’offrir une sécurité globale élevée, surtout à l’époque où il a été conçu.
Les étapes des cette élaboration sont restées secrètes, on ne peut donc pas connaître ce qui a justifié les choix qui ont
été fait. C’est la raison pour laquelle bien que DES paraisse robuste, certains répugnent à l’utiliser.
+
&
9
@
9! @
@! 9 - :H! @ ;
9 @ T!
@ 9 T! - :H @ T!;
9!, @!%
@!, 9!% - :H!, @!%;
&
, '*#
La clé (unique) a une longueur de 64 bits. 56 bits sont utilisés pour le chiffrement et le déchiffrement, alors que les 8
derniers servent pour le code correcteur d’erreur. Il y a donc 2 56 clés possibles. Le mécanisme de DES est
relativement simple. Le message de base ( celui à chiffrer) est convertie en code binaire. La, il est découpé en blocs
de 64 bits.
Pour initialiser le traitement du bloc, on effectue une permutation de tous les bits formant ce bloc. Ensuite on le
coupe en deux parties : la partie gauche (L0) et la partie droite (R0). La clé secrète est transformée en 16 sous clés Ki
de 48 bits.
Puis, on permute les deux parties en introduisant une fonction de la clé.
L1 = R0.
R1 = L0 + f (K1, R0).
&&

(

Cette opération se répète 16 fois. A chaque étape i, on a :

Li = Ri-1. Ri = Li-1 + f (Ki, Ri-1).

)

Pour finir on applique la permutation inverse de la permutation initiale. Ki représente la sous clé numéro i obtenu à partir de la clé secrète. Le calcul de f se fait de la manière suivante : les 32 bits de la partie R sont étendue à 48 bits grâce à une table appelée E. Ce nouveau R, E(R) pour être plus précis, est additionné à Ki.

Le résultat est découpé en huit suites de six bits : les Ai. Grâce à la table S-Box, la donnée de ces huit suites donne un résultat de 32bits. Il y a 8 S-Box, une pour chacun Ai. Ai = a1a2a3a4a5a6. On calcule r = 2.a1 + a6 et c = a2a3a4a5. On regarde le nombre qui figure à la ligne r et à la colonne c. Il est codé sur 4 bits est correspond à la sortie Si(Ai). Chaque S_Box à 16 colonnes et 4 lignes. Ensuite on effectue une permutation représentée par une table appelée P et le résultat de cette permutation est retourné par la fonction f. Pour le déchiffrement, il suffit de faire l’opération inverse.

   

Colonne

 

Ligne

0

 
  • 1 4

2

3

 

5

6

  • 7 8

 

9

10

11

12

13

14

15

1

14

 
  • 4 2

13

1

 

15

 
  • 11 3

 

10

  • 8 9

6

12

   
  • 5 7

0

 

2

0

15

7

4

14

2

 
  • 13 10

 

6

  • 1 5

12

11

   
  • 9 8

3

 

3

4

1

14

8

13

6

2

11

15

12

9

7

 

10

  • 3 0

5

 

4

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

- *+ # ! + # ! +

Cet algorithme a quelques faiblesses. Le premier d’entre eux est que même si 2 56 est un nombre qui peut paraître grand, aujourd’hui, il est possible de tester toutes les clés possibles. Certes ce traitement est long, mais, il est possible. Le second point faible de DES est qu’il a été commandé par le gouvernement américain (1974) et certains prétendent que la NSA (National Security Agency) qui est l'organisme du gouvernement américain chargé du décryptage des messages codés, serait en mesure d’utiliser des raccourcis pour le percer plus facilement.

F = ' 7 U 6 ' ' :!55M; *+ > ' 7 V V T = = D

. (

Parmi les algorithmes de chiffrement symétrique à la volée, il existe SEAL (Software Optimized Encryption Algorithm), LFSR (Linear Feedback Shift Registers), Berlekamp Massey ou RC4. Nous allons étudier RC4, car il est utiliser dans SSL, un protocole qui fait référence en matière de sécurité sur Internet et dans des logiciels célèbres tels que Oracle Secure SQL ou Lotus Notes.

Cet algorithme date de 1987. Il a été mis au point par Ron Rivest pour RSA Data Security, Inc. Il est resté secret jusqu’en 1994 où un internaute l’a révélé dans un newsgroup.

RC4 est un algorithme de chiffrement symétrique à la volée utilisant le mode OFB. Dans la version que nous allons étudier, on utilise un fonction de permutation ou S-Box de 256 valeurs représentées sur 8 bits :S 0 …S 255 .

La première opération consiste à initialiser la S-box. On commence par répéter la clé autant de fois qu’il est nécessaire pour remplir un tableau de 256 valeurs codées sur un octet : K. La taille de la clé peut être variable. Ensuite, on fait l’opération suivante :

On initialise j à zéro.

Pour i =0 à 255, Puis, pour i = 0 à 255, on calcule

S i =i .

j = j +S i +K i mod 256

&*

(

et on permute S i et S j .

)

A la fin de cette étape d’initialisation, il y a 256 ! états possibles pour la S Box, ce qui est très grand, de l’ordre de

2 1650

.

Maintenant, passons au calcul du message chiffré. On commence par générer un octet aléatoire, pour se faire, on procède ainsi :

On initialise à zéro les indices i et j.

i = i + 1 mod 256.

j = j + Si mod 256. On permute Si et Sj. s = S i + S j mod 256. K = S s L’octet chiffré est l’octet en clair ou exclusif l’octet K. Pour retrouver l’octet en clair, il suffit alors de calculer le ou exclusif de l’octet K et de l’octet chiffré.

Cette méthode est extrêmement rapide, 10 fois plus que DES. De plus, les S Boxes évoluent avec l ‘exécution : le même bit ne donne pas toujours le même résultat. Heureusement ! ! ! RC4 est donc très efficace.

9 3 7 R * > + K @ @ 9 ' @ : ; * ' 7 = 6 C ! !$, D 6 0) 5$ &H

Si RSA doit ses performances à la difficulté de factoriser les grands nombres, certains algorithmes, comme ElGamal, s’appuient sur des fonctions logarithmiques discrètes et certains autres, comme Goldwasser Micali, sur le résidu quadratique modulo n. De manière générale, les algorithmes de chiffrement asymétrique tirent leur robustesse de la complexité de certaines opérations mathématiques. Nous allons regarder, ici, trois de ce fonctions :

  • - La factorisation des nombres entiers.

  • - Le logarithme discret modulo p.

  • - Le résidu quadratique modulo n.

Rq : Dans la suite, nous serons amener à parler de la durée de traitement de certains algorithmes. Plutôt que de l’exprimer en terme de temps de calcul sur une plate-forme déterminée, nous allons raisonner en terme de complexité de traitement. Nous définissons la complexité de traitement comme le nombre d’opérations élémentaires à exécuter pour effectuer le traitement. Ces opérations élémentaires peuvent être, par exemple, une multiplication entre deux bits ou un ou exclusif entre deux bits. De manière générale, une opération élémentaire est une opération entre deux bits ou une manipulation sur un bit. Cette approche est plus générale que celle consistant à donner les temps de traitement, car connaissant le nombre d’opération élémentaires à exécuter lors du traitement, il est possible de calculer le temps de traitement pour toute plate forme dont nous connaissons les caractéristiques.

Cette opération nécessite des algorithmes dont le traitement est relativement long. D’ailleurs la factorisation des

grands nombres est un des problèmes mathématique les plus ardus. Actuellement, l’algorithme le plus rapide est le General Number Field Sieve, dont la complexité est :

Exp(cn 1/3 log 2/3 n), où n est la taille en nombre de bits de l’entier à factoriser.

W $ ! $M @ ! % = = :N ; &:
W $
! $M @ ! % = = :N ;
&:

(

)

* I ' ' 6 ' C & ' ' & X ' :' X ;
* I ' ' 6
' C
&
' '
& X
' :' X ; X∈D = : X ; X∈D
7 3

& = ) ' % ' ! %Y ! * X :%Y; X ! 8 ' = ! ' '

" "

Nous allons définir la notion de résidu quadratique modulo n et quelques propriétés associées.

Définition :

On dit que y est un résidu quadratique modulo n, si il existe un entier x <n tel que y = x 2 modulo n. Par contraposée, on définit y comme un résidu non quadratique modulo n, si il n’existe aucun entier x vérifiant la propriété précédante.

Pour représenter si y est un résidu quadratique modulo n ou non on utilise la notation de Legendre :

si y est un résidu quadratique modulo n.

(y/n) = -1

si y n’est pas un résidu quadratique modulo n.

(y/n)

=1

Nous ne ferons pas la démonstration, mais un théorème d’Euler dit que si n = p.q,

avec p et q premiers, alors

(y/n) = (y/p).(y/q).

et y (p-1)/2 = (y/p) mod p. C’est à dire y (p-1)/2 = 1 mod p si y est un résidu quadratique de p, sinon

y (p-1)/2 = -1 mod p.

NB : Le théorème de Fermat déjà utilisé dans la démonstration de RSA dit que si p est premier y (p-1) = 1 mod p, pour tout y entier <p. Donc y (p-1)/2 vaut obligatoirement 1 ou -1.

Connaissant p et q, on peut savoir si y est un résidu quadratique modulo n, en regardant le signe de (y (p-1)/2 mod p).( y (q-1)/2 mod q). Si ce signe est positif, y est un résidu quadratique modulo n. Dans le cas contraire, il ne l’est pas. Si on ne connaît ni p, ni q, il faut peut essayer de factoriser n , mais cela nous ramène au problème de la factorisation des grand nombre (dans les algorithmes utilisant le résidu quadratique modulo n à des fins de chiffrement, n est de l’ordre de 1024 bits). Une autre méthode est de tester si y = x 2 modulo n pour tout x < n. Mais cette méthode est égalment très longue, car dans le cas ou y n’est pas un résidu quadratique, il faut tester tout les nombre de 0 à n-1.

*+

A titre d’exemple, nous présenterons RSA, ElGamal et Goldwasser Micali, car ces trois algorithmes s’appuient sur
A titre d’exemple, nous présenterons RSA, ElGamal et Goldwasser Micali, car ces trois algorithmes s’appuient sur
des fonctions mathématiques différentes et le derniers des trois a l’originalité de s’effectuer à la volée.
.#&
Son principe de chiffrement et de déchiffrement est très simple.
Soit M le message à chiffrer. La taille de ce message (en nombre de bit et donc en valeur) doit être inférieure à celle
de n.
Soit C le message chiffré.
&C

(

)

 

Pour chiffrer le message en claire, on calcule :

Pour déchiffrer on fait :

C = M e modulo n.

M = C d modulo n.

On comprend mieux pourquoi la taille de M doit être inférieure à celle de n. En effet, si m avait une taille quelconque, la connaissance de C et des clés ne suffirait pas à retrouver M, car en calculant C d on obtient toute une famille de message modulo n. Cette famille peut être défini ainsi Mi = C d modulo n + n * i. Or, en imposant M < n, seul le premier élément de cette famille convient.

La clé publique est le couple (e,n) et la clé privée (d,n). La clé privée de chacun des parties est gardée secrète, elle est la propriété exclusive de son possesseur qui ne la divulgue à personne. La clé publique, quant à elle, est mise à la disposition de tous ceux qui désire la connaître. Nous allons donc voir comment procède-t-on pour former les couples (e,n) et (d,n). Pour RSA, on appelle taille de la clé la taille de n en nombre de bits. Ainsi, si n est représenté sur 1024 bits, on dit que l’on est en présence d’un algorithme RSA avec une taille de clé de 1024 bits, même si en fait chaque clé( publique ou privée) est constituée de deux valeurs (n et une autre). Etant donné que n est connu de tous le monde, par abus de langage, on parle souvent de e comme la clé publique et d la clé secrète. Ceci ne veut surtout pas dire que si on utilise un algorithme RSA avec une clé de 1024 bits d et e soient représentés sur 1024 bits. Nous verrons plus tard que les tailles de e et d sont bien plus faible que celle de n.

Pour générer les clés, on fait comme suit :

 

On choisit au hasard 2 grands nombres premiers p et q.

On calcule

n = p.q j = (p-1).(q-1)

On pose On sélectionne e tel que :

e et j soient être premiers entre eux.

 

1 < e < j . On calcule d tel que : e.d = 1 mod j (e et d sont inverses l’un de l’autre modulo j)

Voici la preuve que C d =M mod n :

 

e.d = 1 mod j, donc il existe un entier k tel que

e.d = 1 + kj.

Ainsi,

M e.d = M 1+kj = M 1+k(p-1)(q-1) .

Or, comme M et p sont premiers entre eux, d’après le théorème de Fermat, M p-1 =1 mod p.

 

Comme ici, p et q sont premiers, on a :

M 1+k(p-1)(q-1) = M mod p.

 

Et

M 1+k(p-1)(q-1) = M mod q.

 

D’où, il existe deux entiers a et b tels que

M e.d = M + a.p = M + b.q.

Par conséquent :

a.p = b.q.

p divise b.q, comme il est premier avec q, il divise b.

 

On a :

d’où

Il existe donc un entier c tel que b = c.p. M e.d = M + c.p.q avec p.q = n,

M e.d = M mod n.

Comme

M e = C mod n,

on a bien ce que l’on voulait démontrer :

C d = M mod n.

 

Pour percer RSA, de manière brutale, il faudrait être capable de trouver la clé privée à partir de la clé publique. C’est à dire, qu’il faudrait trouver d en fonction de e et n. Il « suffit » de pouvoir factoriser n. En effet, n est connu et si on le factorise, on obtient p et q puis j et connaissant j et d, on obtient e. Mais, la factorisation de n n’est pas une chose facile. La factorisation de grands nombres suffit ,à elle seule, dissuade de nombreuses tentatives.

En pratique, il y a deux difficultés pour implémenter RSA. La première est la génération de grands nombres premiers (p et q) et la seconde est l’élévation de nombre à des puissances très grandes. Un standard de RSA est PKCS 1.

 

* /

 

&D

 

 

(

)

Soit A et B deux entités voulant communiquer ensemble. On suppose ici que A veut envoyer un message chiffré vers B. A demande à un tiers de confiance la clé publique de B. Cette clé publique est constituée de 3 entiers : p : un nombre premier. g : un générateur. g b mod p.

La clé privée de B est b.

A sélectionne un entier k <p-1. Si on appelle M un bloc de p bits extrait du message en clair que A désire envoyer, A va calculer :

x = g k mod p. y = M.(g b ) k mod p.

A envoie à B x et y.

A la réception du message, B cherche, grâce à sa clé privée b, un entier z tel que z.x b = 1 mod p.

On constate alors que

y = M.z mod p.

B peut donc reconstituer M.

Pour percer El Gamal, il faudrait être capable de connaître l’entier b, la clé privée de B. à priori, cela semble possible puisque g, p et g b mod p sont publiques. b est donc le logarithme discret à base g de gb modulo p. Or comme nous l’avons vu, il existe une infinité de solution. Par conséquent, il n’est pas garanti de pouvoir retrouver b à partir de g, p et g b mod p.

L’inconvénient de ElGamal est que A envoie à B x et y, c’est à dire 2p bits, alors que le bloc extrait du message en clair ne fait que p bits. On double donc le nombre de bits envoyés. En ce qui concerne le traitement, l’effort est également multiplié par deux si on compare à RSA puisque on calcule deux exponentielles au lieu de une.

/ 0 1

Nous allons traiter cet exemple pour deux raisons. Tout d’abord c’est un bon exemple de chiffrement asymétrique probabiliste. Deuxièmement, cet algorithme ne coupe pas le message en bloc comme le font RSA ou ElGamal, il chiffre le message à la volée. Le chiffrement à la volée se rencontre aussi avec des méthodes symétriques telles que

RC4.

Soit A et B deux machines voulant communiquer ensemble. A veut envoyer un message vers B. Ce message est appelé M est sa longueur est de m bits.

La clé publique de B est

La clé privée de B est le coule (p,q).

n : un entier tel que n = p.q avec p et q deux premiers . y : un entier non résidu quadratique de n.

A se procure la clé publique de B, auprès d’un tiers ou directement auprès de B.

Pour 0 =< i < l, A calcule C i :

Si M i = 0, C i = y.x i 2 . Si M i =1, C i = x i 2 .

x i est un nombre aléatoire tirer au sort par A.

B reçoit le message C et vérifie pour chaque C i si il s’agit d’un résidu quadratique ou non pour déterminer si M i vaut 1 ou 0. Pour déterminer si C i est un résidu quadratique, B peut facilement calculer (C i /p) et (C i /q) grâce au théorème exposé plus haut, puis, il calcule (C i /n).

La robustesse de cet algorithme vient du fait que si on ne connaît pas le couple (p,q), il est extrêmement long de calculer si (C i /n).

&H

(

)

3 2 , + - + " ;, , , " # , ! $ ,
3 2 , + - +
" ;, , , " # , !
$ , A - / , )
"
- , ) $ , +
$ , $ , $ "
? $ - - , "

Il existe une très grande diversité d’attaques. Par conséquent, il est nécessaire de les classer pour s ‘y retrouver. Or ce classement peut se faire suivant plusieurs critères :

 

-

L’étape du processus de chiffrement visé par l’attaque (génération des clés, génération du message chiffré, implémentation, …).

-

Le type de messages à collecter pour mener l’attaque.

-

Le type d’algorithme visé (symétrique, asymétrique).

 

&L

 

(

-

& " 2

)

Les algorithmes de chiffrement procèdent, la plupart du temps, par étape. Il y a une phase de génération des clés, une phase d’échange des clés, une phase de génération du message chiffré et pour finir, l’envoi de ce message. Les attaques n’attendent pas toujours la dernière étape pour frapper. En effet, il existe plusieurs phase durant lesquelles, les processus de chiffrement sont plus vulnérable :

 

-

Echange des clés. Durant cette phase, un intrus peut tenter d’intercepter les clés. L’attaque la plus célèbre est l’attaque du passeur de sceau qui fonctionne relativement bien sur Diffie Hellman.

-

Si on est en présence d’un algorithme de chiffrement asymétrique, à partir d’un moment, les clés publiques sont disponibles. Il est possible de tenter de retrouver la clé privée grâce à la clé publique.

-

Lorsque une entité génère ses messages chiffrés, un intrus peut tenter de lui faire chiffrer ses propres messages. Cette étape est nécessaire à la cryptographie différentielle qui étudie l’impact de petites modifications du message en clair sur le message chiffré.

-

Lors de l’envoi des messages chiffrés, il est souvent nécessaire d’intercepter une partie de ces messages pour étudier l’algorithme qui les a généré. De plus, si on a faire à une implémentation défectueuse, cette étude peut être simplifiée.

 

& " ) 2

 

Les diverses attaques demande la collecte de différents types de messages. Il est ainsi possible de classer les

 

attaques suivant trois types :

 

-

Celle qui nécessitent de pouvoir choisir des messages que l’on chiffre et de pouvoir observer le résultat chiffré

 

ainsi obtenu. Ce sont les attaques par messages chiffrés choisis (chosen ciphertext attack). La cryptanalyse différentielle se classe dans cette catégorie.

 

-

Celle qui nécessitent de connaître des messages et leur chiffrement. Ce sont les attaques par messages chiffrés connus (known ciphertext attack). La cryptanalyse linéaire est de ceci..

-

Celle ne nécessitant la connaissance que de messages chiffrés. Ces attaques s’appellent attaques par messages chiffrés seuls (ciphertext only attack). On classe ici bon nombre d’attaques visant RSA.

-

 

& " 2

 
 

= ' 3 7 ' 7 7 ' 7 ' 7 6 ' =

 

&J

 

(

" $ " 2

)

D ' 7 =

9 ' '

= # ! ! ) , ) " , !

+ ) $ "

" $ "

Il existe plusieurs types d’attaques contre le chiffrement par bloc. Nous citerons les attaques brutales, la cryptanalyse différentielle, la cryptanalyse linéaire et les attaques algébriques.

9 & = *+ 7 $ %, 9 ' @ ' ' *+ ' 666 9 !O ( !555 ' + / / ' S ! & 6 *+ $$ !% + !55O R = *+ 6 )% ZR 5O[ 9 ' 7 I : = P = ; 9 *+ = 7 T *+ T+++) *+ T *+ T+*+) *+

La cryptanalyse différentielle, est l’étude de l’effet de certaines modifications du texte en clair sur le message chiffré. Grâce à ces différences, on peut déterminer plusieurs clés avec des probabilités différentes. Cette forme de cryptanalyse a été introduite par Biham et Shamir en 1990 [BiSh90]. Pour pouvoir mener cette attaque, il est nécessaire de pouvoir chiffrer les messages que l’on désire. Ceci est une première restriction. La seconde, est que l’efficacité de cette méthode dépend de la manière dont les S boxes ont été conçues. DES résiste relativement bien à ce genre d’attaques, mieux que FEAL, qui a été percé, dés 1991 par Biham et Shamir [BiSh91].

La cryptographie différentielle peut être combinée avec l’analyse différentielle des erreurs. L’analyse des erreurs est une idée de Boneh, DeMillo et Lipton en 1996 [BDL96], que nous avons déjà vu sur RSA Le principe est d’observer les erreurs de calcul qui interviennent parfois lors du chiffrement. Ces erreurs sont généralement du à un problème de Hardware. Cette technique a été reprise par Biham et Shamir en 1996 [BiSh96] pour percer DES. En chiffrant 200 messages avec un hardware défectueux, ils sont capables de retrouver la clé secrète de DES. Ici, la parade est évidente, il est nécessaire de vérifier tous les calculs avant de transmettre les blocs chiffrés.

Une excellente définition de la cryptanalyse linéaire est celle donner par Matsui dans son article de 1993 [Mat93] :

« Le but de cette méthode est d’obtenir une approximation linéaire d’un algorithme de chiffrement. Pour atteindre ce but, nous commençons par construire un chemin linéaire statistique entre les entrées et les sorties de la S-Boxes. Ensuite, nous étendons ce chemin à l’algorithme tout entier et finalement, nous obtenons une approximation linéaire sans aucune valeur intermédiaire. » Ces chemins statistiques sont obtenus grâce à la connaissance d’un grand nombre de texte en clair est de leur chiffrement. Ici, il n’est pas nécessaire de pouvoir choisir les message que l’on veut chiffrer, il suffit d’en connaître un certain nombre. Cette contrainte se place entre celle de la cryptanalyse différentielle (chiffrer des messages voulus) et celle des attaques brutales (aucune connaissance des texte en clair).Le triple DES est la aussi un bon moyen de renforcer la robustesse de DES face à la cryptanalyse linéaire.

Certains algorithmes tels que SAFER (plus particulièrement sa version avec une clé de 128 bits SAFER K128) ou IDEA sont très robustes face à la cryptanalyse linéaire ou différentielle. Cette robustesse se fait au dépend de la quantité de mémoire nécessaire, car ils possèdent des clés de 128 bits, et par conséquent ils génèrent des sous clés plus longues. Néanmoins, lorsque l’on utilise ces méthodes, il convient de rester prudent car pour certaines valeurs de clé, il est très facile de déduire le message en clair du message chiffré. On appelle ces clés les clés faibles.

" $ " )

&M

(

)

Il est très difficile de percer ces algorithmes de chiffrement, car vu du cryptanalyste, le message chiffré est le résultat de la combinaison de deux fonctions aléatoires et inconnues : Le message et la clé. Dans le cas de One Time Pad, la clé est en principe totalement aléatoire et dans le cas de RC4, les S-box offre tellement de combinaisons possibles qu’il est impossible de faire une recherche exhaustive. Donc en théorie, le chiffrement symétrique à la volée est très robuste.

En pratique c’est un peu différent. Le problème vient du fait que l’on ne génère pas des nombres aléatoires, mais des nombres pseudo-aléatoires. On simule le caractère aléatoire du nombre à partir d’une séquence de base. Lorsque l’on génère une clé, il est donc important de vérifier que si des périodes se manifestent dans la suite de bits formant cette clé, ces périodes ne soient pas trop petites, sous peine d’être découvertes. Si ces précautions sont prises, ces algorithmes restent très surs.

En fait le danger le plus grave qui guette le chiffrement symétrique à la volée n’est pas tellement le manque de confidentialité, mais plutôt le risque de modification malveillante du message chiffré. Un intrus aura beaucoup de mal à déchiffrer un message sans la clé, par contre, rien ne l’empêche, à priori, de modifier certains bits du message chiffré. Ceci est d’autant plus vrai que les bits du message chiffré ne sont pas corrélés les uns au autres. Ainsi, si des bits sont erronés il n’y aucun moyen de le savoir. Ceci implique, que si on désire utiliser le chiffrement symétrique à la volée, il est impératif de prévoir un mécanisme de vérification de l’intégrité des données.

Historiquement, le but premier des algorithmes de chiffrement symétriques est la confidentialité des messages. Néanmoins, le fait de partager une clé secrète peut servir à l’authentification. On peut choisir de ne distribuer la clé qu’aux entités avec lesquelles ont veux communiquer. Il suffit donc de s’assurer que le système distant connaît la clé pour authentifier son identité.

Le principal problème induit par l’utilisation d’une clé secrète reste sont transport. On est la plupart du temps obliger de l’envoyer chiffrée par un algorithme asymétrique.

" $ "

RSA, étant la technique de chiffrement asymétrique la plus répandue, nous allons présenter les attaques principalement sur RSA. Néanmoins, nombres de ces techniques S’appliquent également aux autres algorithmes de chiffrement symétriques. Plus généralement, elles s’adaptent aux techniques de chiffrement qui utilisent le principe C = M e mod n, avec n produit de deux nombres premiers.

Les attaques contre RSA sont plus des mises en garde contre des implémentations hasardeuses qu’une remise en cause de cet algorithme. En effet, le principe est simple et efficace, le meilleur algorithme connu permettant la factorisation est le General Number Field Sieve qui a une complexité égale à exp(α.m 1/3 log 2/3 m), où m est la taille en bits de l’entier à factoriser. Par contre, l’implémentation est beaucoup plus délicate, il faut faire attention à beaucoup de paramètres, le choix des nombres premiers p et q, la taille de la clé publique ou celle de la clé privée, le temps de calcul et même les erreurs de calcul. Tout ceci peut être exploiter pour tenter de percer RSA.

" "

La première attaque dont nous allons parler porte sur le choix de p et q. Nous allons faire le raisonnement pour p, mais il reste valable pour q. Posons n = p.q et B le plus grand diviseur de p-1. En utilisant l’algorithme de Pollard de factorisation de p-1, il est possible de trouver p-1 avec O(B.ln n/lnB) multiplications modulo n. Il faut donc faire extrêmement attention au choix des nombres premiers p et q. Il choisir p et q de telle manière que le plus grand diviseur de p-1, p+1, q-1 ou q + 1, soit plus grand qu’un seuil S qui déterminera la complexité du traitement à effectuer pour retrouver p ou q. En effet, si une fois que l’on a choisit un seuil S et que le s’assure qu’il existe au moins un diviseur de p-1 supérieur ou égal à S, on s’assure par la même occasion qu’il sera nécessaire d’effectuer un nombre de multiplications modulo n supérieurs à un ordre de S.ln n / lnS.

Une autre attaque, peut avoir lieu lorsque un tiers T est chargée de distribuer les couples clé privée / clé publique à de nombreuses entités E i . Afin de ne pas avoir à recalculer p et q pour tous les E i , la génération de grands nombres premiers est une chose longue, T peut choisir de conserver le même n et d’attribuer à chaque E i une paire de clé (e i ,

*N

(

)

d i ). Or, il est équivalent de connaître (e, d, n) ou (p, q).Ainsi grâce à son propre couple de clés, n’importe qu’elle entité E i est capable de calculer le couple (p, q) commun à toutes les entités en présence. Ensuite, en consultant la valeur e j de l’entité E j elle est capable de déterminer d j . Par conséquent, imaginons que T distribue de cette manière las clés publiques et privées de plusieurs entité dont A et B. D’après le processus que nous venons de décrire, B est capable de lire les messages confidentiels adressés à A. De plus, il peut donc se faire passer pour A auprès de n’importe qui. En effet, l’authentification des systèmes se fait souvent grâce à un message convenu chiffré avec la clé privée de l’expéditeur. A la réception, le destinataire déchiffre le message reçu avec la clé public de l’expéditeur et si le résultat obtenu correspond au message prévu, il valide l’identité de l’émetteur. Donc, en connaissant la clé privée de A, B est capable d’usurper son identité.

Lorsque l’on chiffre des données avec la clé publique, moyennant quelques hypothèses, on peut s’exposer à une attaque cyclique.

  • C = M e mod n, si il existe k tel que pour r = e