Telechargé par weheartdesigns

Blocs

publicité
Chiffrement par blocs
Dans un système par blocs, chaque texte clair est découpé en blocs de même
longueur et chiffré bloc par bloc.
La longueur l des clés doit être suffisante pour que l’attaque exhaustive consistant
à déchiffrer le chiffré avec toutes les clés possibles jusqu’à l’obtention du clair, soit
irréaliste (l ≥ 128).
Le principe général d’un chiffrement itératif par blocs est le suivant : pour chaque
bloc, on itère r fois une fonction interne F ; à chacun des r tours, la fonction F
est paramétrée par une clef K i (1 ≤ i ≤ r ), et la fonction du tour i peut être notée
F K i . Comme on veut que le chiffrement soit inversible (pour pouvoir déchiffrer),
il faut que les fonctions F K i soient bijectives.
Principes fondamentaux
Ils ont été introduits par Shannon.
La confusion vise à cacher n’importe quelle structure algébrique dans le système.
La diffusion doit permettre à chaque bit de texte clair d’avoir une influence sur
une grande partie du texte chiffré. Ce qui signifie que la modification d’un bit du
bloc d’entrée doit entraîner la modification de nombreux bits du bloc de sortie
correspondant.
La confusion est assuré par une substitution non-linéaire
La diffusion est assuré par une permutation linéaire.
Principe de la fonction F
On utilise une combinaison de substitutions et de permutations.
Le texte clair et le texte chiffré sont des suites de bits de longueur l m : x =
(x 1, . . . , x l m ).
La substitution (appelée aussi “S-boîte”) est notée
πS : {0, 1}l −→ {0, 1}l
La permutation
πP : {1, . . . , l m} −→ {1, . . . , l m}
La fonction F K i se compose donc de plusieurs phases.
– on ajoute la clé au message: x ⊕ K i
– on découpe x ⊕ K i en m sous-chaînes de longueur l , auxquelles ont fait subir
la substitution πS
– on recolle les sous-chaînes et on applique la permutation πP .
La seule transformation non-linéaire est la substitution πS .
Il est nécessaire que l soit petit, pour assurer que l’implémentation de πS soit
réalisable, avec un petite mémoire.
Chiffrements de Feistel.
Le système de chiffrement par blocs le plus utilisé jusqu’à l’an 2000 est le DES. Il
fait partie de la classe plus générale des chiffrements de Feistel .
Définition 1 Un chiffrement de Feistel est un chiffrement itératif par blocs opérant
sur des blocs de 2n bits. La fonction itérée F est définie par
F:
n
Fn
×
F
2
2
n
−→ Fn
×
F
2
2
(L i −1, R i −1) 7−→ (L i , R i )
avec L i = R i −1 et R i = L i −1 + f (R i −1 , K i ).
Quelle que soit la fonction f utilisée, un chiffrement de Feistel est inversible.
Pour déchiffrer, il suffit d’utiliser le même processus à r tours en inversant l’ordre
des clefs K i (la fonction F est involutive par construction).
L i = R i −1
et
R i = L i −1 + f (R i −1, K i ).
Le DES
Pour le DES, la taille des blocs est de 64 bits (donc 8 octets), et la taille des clés
est de 56 bits (7 octets). Il comporte 16 itérations. C’est un chiffrement de Feistel
avec n = 32.
La fonction f .
C’est une fonction
f : {0, 1}32 × {0, 1}48 −→
{0, 1}32
R i −1
Ki
7−→ f (R i −1K i )
qui se compose de:
– une augmentation E de R i −1 pour en faire un bloc de 48 octets, c’est-à-dire
que E (R i −1 ) est composé de tous les bits de R i −1 , 16 d’entre eux apparaissant
deux fois;
– on calcule E (R i −1 ) ⊕ K i , et on le découpe en 8 sous-chaînes de 6 bits.
– chacune des sous-chaînes de 6 bits est transformée par une fonction nonlinéaire fixée en une sous-chaîne de 4 bits.
– les sous-chaînes de 4 bits sont réordonnées suivant une permutation fixée.
Le DES a été choisi comme norme au Etats-Unis en 1975 et est devenu le système cryptographique le plus utilisé dans le monde.
Les DES a été critiqué à cause de la taille trop faible de ses clés.
Effectivement, en 1998, un défi a été résolu en quelques jours par une machine
spécialement construite pour retrouver la clé par une attaque exhaustive.
Les schémas de substitution/permutation (S/P)
On appelle ainsi les schémas itératifs dont les tours sont construits de la façon
suivante:
Si x est l’entrée du tour, x est découpé en sous-blocs d’égale longueur x 1 , x 2 , . . .
auxquels on applique une substitution S (éventuellement il y a autant de substitutions que de sous-blocs). Si u i = Sx i , on concatène les u i pour former u , à
qui on applique une permutation P (éventuellement une transformation linéaire
plus complexe). On note v = Pu . La dernière étape du tour est l’ajout de la clé
de tour K à v . Notons w = v + K .
Le premier tour est précédé de l’ajout d’une clé supplémentaire K 0 pour éviter
que l’attaquant déchiffre le premier tour jusqu’à l’ajout de K 1 .
L’algorithme RIJNDAEL, choisi pour être le nouveau standard du chiffrement par
blocs AES, est de ce type.
L’AES
L’Advanced Encryption Standard a fait l’objet d’un appel d’offre datant de 1997.
Il s’agissait de remplacer le DES dont la taille des clés (56 bits) était devenue
trop petite pour les performances des ordinateurs modernes. Les spécifications
étaient une longueur de blocs de 128 bits (ou de 256 bits) et une longueur de clé
paramétrable: 128 ou 192 ou 256 bits.
Parmi les 15 candidats, le candidat retenu (en 2000) se nomme RIJNDAEL (mais
on l’appelle simplement l’AES). Il est dù à deux chercheurs Belges, Rijmen et
Daemen.
C’est un chiffrement itératif, mais contrairement à 9 autres candidats, ce n’est pas
un chiffrement de Feistel.
La structure générale
Le système AES effectue plusieurs tours d’une même composition de transformations.
Le nombre de tours
Le nombre de tours n est 10 pour une clé de 128 bits et de 14 pour une clé de
256 bits.
La clé de tour
A partir de la clé initiale K, le système crée n + 1 clés de tour ayant chacune 16
octets.
Vue globale du fonctionnement
La procédure suivante décrit le fonctionnement global du système AES.
Elle se compose
– d’une substitution
– d’une fonction de diffusion
– de l’ajout de la clé de tour.
La fonction de substitution (la boite S):
Chaque octet est considéré comme un élément du corps F256 . La boite S est
constituée de 16 boites identiques consécutives agissant chacune sur un octet.
Chaque boite S i consiste en l’application
F : x ∈ F256 7−→ x 254 ∈ F256.
Notons que si x = 0 alors x 254 = 0 et si x 6= 0 alors x 254 = x1 . Le résultat de
cette transformation subit ensuite une application affine.
Le polynôme irréductible utilisé pour la construction de ce corps est X 8 + X 4 + X 3 + X + 1. Ce
n’est pas un polynôme primitif mais les concepteurs l’ont choisi pour accélérer les calculs. On
choisit une base du corps vu comme espace vectoriel de dimension 8 sur F2 , chaque élément du
corps peut ainsi être identifié à un vecteur binaire de longueur 8, c’est à dire à un octet.
Cette boite S permet au système de résister à l’attaque différentielle et à l’attaque
linéaire.
La fonction de diffusion agit sur les 16 octets de l’entrée en les permutant puis
en appliquant la même application linéaire sur chaque bloc de 4 octets consécutifs.
Chaque octet est identifié à un élément du corps F28 = F256 à 256 éléments.
L’application linéaire est définie par sa matrice 4 × 4 à coefficients dans le corps
F256:
α

 1


 1
α+1
α+1
1
α
α+1
1
α
1
1
1

1 


α+1
α
où α est un élément primitif. Elle agit donc principalement au niveau global des
octets (mais elle agit quand même au niveau des bits via les multiplications par
les éléments de ce corps).
Cryptanalyse
Les deux principales méthodes connues de cryptanalyse des chiffrements par
blocs symétriques sont
la cryptanalyse différentielle et la cryptanalyse linéaire.
Elles exploitent toutes deux des comportements statistiques non uniformes
dans le processus de chiffrement. La cryptanalyse différentielle date de 1990 et
est due à Biham et Shamir. La cryptanalyse linéaire date de 1992 et est due à
Matsui.
Appelons x le texte clair, y son chiffré.
En posant x 0 = x et x i = F (x i −1 , k i ) pour tout i = 1, . . . , r , on a y = x r .
Le but de l’attaque est de déterminer la valeur de k r ,
puis, en utilisant le chiffrement de x en x r −1 = F −1 (y, k r ) qui est un chiffrement
à r − 1 tours, de calculer k r −1 , et ainsi de suite. Nous nous concentrons donc
sur le calcul de k r .
Cryptanalyse différentielle
Il s’agit d’une attaque à clairs choisis.
La cryptanalyse différentielle s’intéresse à l’évolution les différences x i +x 0
i
0
pour deux clairs x, x .
On détermine que, si x + x 0 = α, alors x r −1 + x r0 −1 = β avec une grande
probabilité.
On utilise cela pour déterminer la clé inconnue k r à partir de plusieurs messages
x et de leurs cryptogrammes x r obtenus par E k .
Notons
P α,β := P (x r −1 + x r0 −1 = β | x + x 0 = α)
et supposons avoir déterminé une valeur de (α, β) telle que cette probabilité soit
particulièrement élevée.
On itère, pour un grand nombre de couples clairs-chiffrés (x, y) et (x 0 , y 0 ), chiffrés
avec l’algorithme de chiffrement utilisant la clef inconnue K , tels que x+x 0 =
α, les étapes suivantes:
Pour toutes les valeurs possibles κ de k r :
• Calculer z := F −1(y, κ) et z 0 := F −1(y 0, κ).
• Si z + z 0 = β, incrémenter un compteur associé à κ.
Le compteur le plus souvent incrémenté est celui de k r . Notons que l’attaque
est d’autant plus efficace que la probabilité P s’éloigne de la probabilité uniforme,
soit 1/2n .
Exemple 1
On considère le système
x→
k1
↓
L
S
→ x 0 −→ S(x 0) →
k2
↓
L
S
→ x 1 −→ S(x 1) →
où les x représentent trois bits. La boîte S est une substitution sur F3
2.
On suppose que
0
0
¢
P S(x) + S(x ) = β | x + x = α > 1/8
¡
0
Si x + x 0 = α, on a x 0 + x 0 = (x + k 1 ) + (x 0 + k 1 ) = x + x 0 = α,
0
et la probabilité que S(x 0 ) + S(x 0 ) = β est importante.
k3
↓
L
→ y
0
0
0
Si c’est réalisé, x 1 + x 1 = S(x 0 ) + k 2 + S(x 0 ) + k 2 = S(x 0 ) + S(x 0 ) = β
´
¢ ³
¡
D’où
³
10
´
P α,β = P x 1 + x = β | x + x 0 = α > 1/8
Pour un couple clairs-chiffrés (x, y) et (x 0 , y 0 ) donné tel que x + x 0 = α, et pour
chaque valeur possible κ de k 3 , on calcule
z 1 = S −1(y + κ)
et
0
z 1 = S −1(y 0 + κ).
0
Si z 1 + z 1 = β, on sait que κ est une valeur probable pour k 3 .
0
Si z 1 + z 1 6= β, on sait que κ est une valeur improbable pour k 3 .
Calcul de P α,β .
Supposons que S : F2s −→ F2s .
On calcule les coefficients de la matrice D de taille 2s × 2s :
n
D[α, β] = # (x, x ) ∈ (F2s )2
0
¯
¯ x + x 0 = α et
0
o
Sx + Sx = β .
Alors, pour les entrées et sorties de S, on a:
¯
¡
¢
0
0
¯
P α,β := P Sx + Sx = β
x + x = α = D[α, β]/2s .
On peut donc suivre l’évolution des différences dans l’algorithme, en découpant
par sous-blocs:
P α,β = P (x r −1+x r0 −1 = β | x+x 0 = α) =
Y
i
P (x i +x i0 = βi |x i −1+x i0 −1 = αi )
et en tenant compte de l’action de la permutation sur les βi .
Exemple 2
P1
...
plaintext
...
P16
subkey K1 mixing
S11
S12
S13
S14
round 1
subkey K2 mixing
S21
S22
S23
S24
round 2
subkey K3 mixing
S31
S32
S33
S34
round 3
subkey K4 mixing
round 4
S41
S42
S43
S44
subkey K5 mixing
C1
...
ciphertext
...
C16
∆P = [0000 1011 0000 0000]
S 12: ∆x = 1011, ∆y = 0010
S11
S12
S13
S14
S21
S22
S23
S24
S31
S32
S33
S34
S43
∆U4,13... ∆U4,16
S44
avec probabilité 8/16
S 23: ∆x = 0100, ∆y = 0110
avec probabilité 6/16
S 32: ∆x = 0010, ∆y = 0101
avec probabilité 6/16
S 33: ∆x = 0010, ∆y = 0101
avec probabilité 6/16
S41
∆U4,5... ∆U4,8
S42
K5,5 ... K5,8
K5,13 ... K5,16
Figure 5. Sample Differential Characteristic
La matrice D associée à Rijndael
La matrice D associées à Rijndael s’interprètent en termes d’équations à coefficients dans F256 . Notons i (z) l’application définie par i (0) = 0 et i (z) = 1/z
pour z ∈ F256 . La boite S de Rijndael vaut Sz = f (i (z)) + c , où f est une application linéaire inversible. Donc Sz +Sz 0 = f (i (z))+ f (i (z 0 )) = f (i (z)+i (z 0 )),
et
n
D[α, β] = # (z, z 0) ¯ z + z 0 = α
¯
et
0
i (z) + i (z ) = f
−1
o
(β) .
Notons β0 = f −1 (β).
Si z = 0, z 0 = α et la condition est réalisée si et seulement si α−1 = β0 .
Si z 6= 0 et z 0 6= 0, on doit résoudre l’équation 1/z + 1/(z + α) = β0 qui est
une équation de degré deux en z . Dans le corps F256 , elle a donc au plus deux
solutions. Ainsi, D[α, β] ≤ 4.
Cryptanalyse linéaire
La cryptanalyse linéaire consiste à
simplifier l’algorithme de chiffrement en faisant une approximation linéaire.
En augmentant le nombre de couples disponibles, on améliore la précision de
l’approximation et on peut en extraire la clé. C’est une attaque à clair connu.
La cryptanalyse linéaire s’intéresse aux relations linéaires entre les bits au cours
de l’algorithme.
La méthode consiste attaquer le dernier tour comme dans le cas de l’attaque
différentielle.
n , notons a · x = a x + · · · + a x . Notons maintenant
Pour a ∈ Fn
et
x
∈
F
n n
1 1
2
2
P a,b := P (a · x + b · x r −1 = 0)
pour x ∈ M et supposons que P a,b soit assez éloigné de 1/2.
On itère, pour un grand nombre de couples clairs-chiffrés (x, y) les étapes suivantes: pour toutes les valeurs possibles κ de k r :
– Calculer z := F −1 (y, κ)
– Si a · x + b · z = 0, incrémenter un compteur associé à κ.
Pour un assez grand nombre de couples, un compteur est particulièrement élevé
ou bas, c’est celui de k r .
Exemple 1
On considère le système
x→
k1
↓
L
S
→ u 1 −→ v 1 →
k2
↓
L
S
→ u 2 −→ S(u 2) →
k3
↓
L
→ y
où les x représentent 3 bits. La boîte S est une substitution sur F3
2.
On suppose que le premier bit d’une boîte S est conservé avec probabilité
supérieure à 1/2, c’est-à-dire
S
(0, ∗, ∗) −→ (0, ∗, ∗) et
S
(1, ∗, ∗) −→ (1, ∗, ∗)
Cela veut dire que
P (u 11 + v 11 = 0) = 1/2 + ²
Calculons la probabilité que
x 1 + u 12 = 0
Si l’on considère des cryptogrammes tous chiffrés par la même clé, la variable
k 11 + k 12 a donc une valeur fixée à 0 ou 1.
Si k 11 + k 12 = 0, alors
P (x 1 + u 12 = 0) = P (x 1 + k 11 + u 12 + k 12 = 0) = 1/2 + ²
Si k 11 + k 12 = 1, alors
P (x 1 + u 12 = 0) = P (x 1 + k 11 + u 12 + k 12 = 0) = 1/2 − ²
Pour des clairs-chiffrés (x, y) donnés, et pour chaque valeur possible κ de k 3 , on
¡ −1
¢
2
calcule u 1 = S (y + κ) 1 .
On compte le nombre des κ tels que
¡ −1
¢
x 1 + S (y + κ) 1 = 0
Si la probabilité de ces κ est voisin de 1/2 ± ²2 , on sait que κ est une valeur
probable pour k 3 .
Si la probabilité de ces κ n’est pas voisin de 1/2 ± ²2 , on sait que κ est une
valeur improbable pour k 3 .
Exemple 2
P5
K1,5
S 12: U51 + U71 + U81 = V61
P7 P8
K1,7
S11
K1,8
S12
S13
S14
S22
S23
S24
avec probabilité 12/16
S 22: U62 = V62 + V82 avec
probabilité 4/16
S 32: U63 = V63 + V83 avec
probabilité 4/16
3 = V 3 + V 3 avec
S 34: U14
14
16
probabilité 4/16
K2,6
S21
K3,6
S31
S32
K4,6
S33
K4,8
U4,6
S41
K3,14
K4,14
U4,8
S42
K5,5 ... K5,8
S34
S43
U4,14
S44
K4,16
U4,16
K5,13 ... K5,16
Figure 3. Sample Linear Approximation
On a noté
U ji le j ème bit d’entrée des boîtes du i ème tour.
V ji le j ème bit de sortie des boîtes du i ème tour.
Si on fait l’hypothèse que les 4 variables aléatoires sont indépendantes, on peut
calculer le biais de leur somme par le lemme d’empilement.
Définition 2 On appelle biais d’une variable aléatoire X à valeur dans F2 la
quantité ² = P (X = 0) − 1/2.
Lemme 1 Soient X 1 , . . . , X k des variables aléatoires indépendantes de biais ²i .
Q
P
k−1
Le biais de X i est égal à 2
²i .
Le biais de
3
3
3
U51 +U71 +U81 + V61 +U62 + V62 + V82 +U63 + V63 + V83 +U14
+ V14
+ V16
¡ 1 ¡ 1 ¢ ¡ 1 ¢ ¡ 1 ¢¢
1
3
est égal à
2 4 − 4 − 4 − 4 = − 32
.
Cette expression peut être exprimée avec des bits du texte clair, des bits de la
clé, et des bits U 4 :
j
U51 +U71 +U81 +
= U51 +U71 +U81 +
=
X15 + X17 + X18 +
K 51 + K 71 + K 81
V61 +U62
+
V62 +U63
+
3
V82 +U14
3
3
+V63 + V83 + V14
+ V16
K 62
+
K 63
+
3
K 14
3
3
+V63 + V83 + V14
+ V16
K 62
+
K 63
+
3
K 14
+U46 + U414 + U48 + U416
4
4
+K 64 + K 14
+ K 84 + K 16
Si l’on considère des cryptogrammes tous chiffrés par la même clé, la variable
P i
K j a donc une valeur fixée à 0 ou 1, et par conséquent la variable X 51 + X 71 +
4 +U 4 +U 4 a pour biais ± 1 .
X 81 +U64 +U14
32
8
16
Pour des clairs-chiffrés (x, y) donnés, et pour chaque valeur possible κ de k 5 ,
4 +U 4 +U 4 d’après U 4 = S −1 (y + κ).
on calcule U64 +U14
8
16
4 +U 4 +U 4 = 0
On compte le nombre des κ tels que X 51 + X 71 + X 81 +U64 +U14
8
16
1
, alors κ est une valeur probable pour k 5 .
Si le biais de ces κ est voisin de ± 32
Si le biais de ces κ est voisin de 0, alors κ est une valeur improbable pour k 5 .
+
Analysons maintenant la résistance face à cette attaque. Une cryptanalyse
linéaire est possible si les fonctions utilisées dans les boîtes-S peuvent être approchées par des fonctions linéaires avec une probabilité éloignée de 0,5.
Pour qu’un tel système résiste à ce type d’attaque, il faut que la fonction S :
n soit telle que pour tout α de Fm et tout β non nul de Fn ,
Fm
−→
F
2
2
2
2
¯ α · X + β · S(X ) = 0 soit proche de 2m−1.
le cardinal de X ∈ Fm
2
©
¯
ª
On cherche donc les fonctions S telles que
¯ ©
¯
¯
ª
m¯
m−1 ¯
¯
λS = max max # X ∈ F2 α · X + β · S(X ) = 0 − 2
α β6=0
soit le plus petit possible.
Pour l’AES, on peut montrer que
¯ © ¯
¯
ª
¯# X ¯ a · X + b · F (X ) = 0 − 27¯ ≤ 16
Téléchargement