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