• Aucun résultat trouvé

3.3 Prouver l’absence d’invariants sur des SPN

3.3.1 Propri´et´es g´en´erales

Dans tout ce qui suit, on consid`ere des chiffrements par bloc con¸cus comme des r´eseaux de substitution-permutation (figure 3.3). Habituellement, les techniques utilis´ees pour les attaques par invariant consistent `a chercher des sous-ensembles qui sont invariants `a la fois par la couche de substitution et par la couche lin´eaire, c’est-`a-dire par chaque composante du chiffrement s´epar´ement. L’algorithme d´ecrit par Leander et al. dans [LMR15] permet de chercher des espaces invariants sur toute la fonction de tour, mais il ne fonctionne que sur des sous-espaces vectoriels de grande dimension relativement `a la taille de bloc. Dans ces conditions, nous nous int´eressons `a des sous-ensembles invariants dont la structure et la taille

sont arbitraires, mais qui sont invariants `a la fois par la couche lin´eaire compos´ee avec l’addition de la clef de tour (Addki◦ L) et par la couche de substitution (S).

Cependant, nous avons montr´e qu’imposer l’invariance par la couche lin´eaire `

a chacun des tours implique l’existence de structures fortes sur ces invariants. Proposition 3.13 (Condition sur les invariants par Addki ◦ L). Soit L une permutation de Fn2 et soit g ∈ Bn un invariant `a la fois pourAddki◦ L et pour Addkj ◦ L avec ki etkj deux clefs de tours diff´erentes. AlorsLS(g) est un espace lin´eaire invariant par L qui contient ki+ kj.

D´emonstration. Par d´efinition de g, il existe a et b dans F2 tels que pour tout x ∈ Fn

2,

g(x) = g(L(x) + ki) + a et g(x) = g(L(x) + kj) + b . Cela implique que, pour tout x ∈ Fn

2,

g(L(x) + ki) + g(L(x) + kj) = a + b , Comme L est inversible, on a de mani`ere ´equivalente :

g(y + ki+ kj) + g(y) = a + b, ∀y ∈ Fn2

ce qui signifie que (ki+ kj) ∈ LS(g). Il reste `a montrer que l’espace des structures lin´eaires de g est invariant par L.

Soit s ∈ LS(g), alors il existe une constante c ∈ F2telle que g(x) = g(x+s)+c. Comme g est un invariant pour Addki◦ L, on a

g(L(x) + ki) + a = g(x) = g(x + s) + c = g(L(x) + L(s) + ki) + (a + c) . Par le changement de variable y := L(x) + ki, on obtient que

g(y) = g(y + L(s)) + c, ∀y ∈ Fn2 , (3.3) ce qui signifie que L(s) ∈ LS(g).

Cette proposition nous donne une premi`ere condition n´ecessaire sur l’existence d’un invariant `a la fois pour L et S. Cette propri´et´e a ´et´e observ´ee pour la premi`ere fois dans [Ava17] mais dans le contexte particulier de l’attaque par sous-espace invariant. Ainsi, l’attaquant.e doit trouver un invariant pour la couche de substitution dont l’espace lin´eaire est invariant par L et contient l’ensemble des diff´erences entre les clefs de tour. Ces diff´erences entre les clefs de tour sont a priori d´ependantes de la clef maˆıtre, et donc secr`etes. Cependant, dans la plupart des chiffrements `a bas coˆut (Noekeon [DPAR00], Midori [BBI+15], Rectangle [ZBL+14] pour n’en citer que quelques uns), le cadencement de clef consiste uniquement en l’addition d’une constante de tour (RCi) `a la clef maˆıtre :

∀1 ≤ i ≤ t, ki= RCi+ k .

Dans ce cas particulier, les diff´erences entre les clefs de tour sont ´egales aux diff´erences entre les constantes de tour qui sont des quantit´es publiques. Notre

condition n´ecessaire sur les invariants g de la couche de substitution devient donc ind´ependante de la clef de chiffrement. Plus pr´ecis´ement, LS(g) est un espace vectoriel qui doit ˆetre invariant par l’application de L et qui doit contenir les diff´erences (RCi+ RCj) pour toute paire de constantes de tour.

Comme LS(g) est un espace vectoriel, nous nous int´eressons au plus petit espace vectoriel qui contient les diff´erences entre les constantes de tour. D´efinition 3.14(Espace WL(c)). Soit L une permutation lin´eaire sur Fn

2. Pour toutc ∈ Fn

2, le plus petit sous-espace de Fn2 invariant parL qui contient c, not´e WL(c) est

hLi(c), i ≥ 0i .

D´emonstration. Tout d’abord, il est clair, par construction, que l’espace hLi(c), i ≥ 0i est inclus dans WL(c) puisque WL(c) est un sous-espace vectoriel de Fn

2 in-variant par L par d´efinition. De plus, pour tout λ1, λ2 ∈ F2 et toute paire (i, j),

L(λ1Li(c) + λ2Lj(c)) = λ1Li+1(c) + λ2Lj+1(c)

et donc appartient `a l’espace vectoriel d´efini par hLi(c), i ≥ 0i. On peut donc conclure que ce sous-espace de Fn2 est le plus petit espace invariant par L et qui contient c.

On peut naturellement g´en´eraliser cette d´efinition `a plusieurs ´el´ements. Soit D un sous-ensemble de Fn

2, on d´efinit WL(D) ⊆ Fn

2 comme ´etant le plus petit sous-espace vectoriel invariant par L contenant D :

WL(D) :=X

c∈D

hLi(c), i ≥ 0i =X

c∈D

WL(D) .

Dans notre contexte, D sera le sous-ensemble d´efini par les diff´erences entre les clefs de tour (i.e. entre les constantes de tour). Pour que l’attaque par invariant puisse fonctionner, il faut donc trouver un invariant g pour la couche de substitution tel que WL(D) ⊆ LS(g). Intuitivement, le concepteur du chiffrement devra donc faire en sorte pour que la dimension de WL(D) soit la plus grande possible : plus celle-ci est ´elev´ee, moins nous avons de degr´es de libert´e pour choisir g.

3.3.1.1 Quelques exemples

Afin de comprendre plus en d´etail ce qui se passe, nous regardons plusieurs algorithmes de chiffrement par bloc ayant les sp´ecificit´es d´ecrites ci-dessus, c’est-`a-dire des clefs de tour qui sont ´egales `a la clef maˆıtre `a l’addition d’une constante de tour pr`es.

Skinny. Skinny est une famille de chiffrement adaptable5propos´ee par Christof Beierle, J´er´emy Jean, Stefan K¨olbl, Gregor Leander, Amir Moradi, Thomas

Peyrin, Yu Sasaki, Pascal Sasdrich et Siang Meng Sim dans [BJK+16] dans le but d’ˆetre le plus “l´eger” possible, sans pour autant sacrifier de la s´ecurit´e. Les boˆıtes-S de Skinny sont de taille 4 (respectivement 8) pour la version `a 64 bits (respectivement 128 bits). L’op´eration ShiftRows est identique `a celle de l’AES `a l’exception de la direction de la rotation et la matrice correspondant `a MixColumns est la suivante :

    1 0 1 1 1 0 0 0 0 1 1 0 1 0 1 0    

et a la particularit´e d’ˆetre binaire (`a la diff´erence de celle de l’AES). En composant cette matrice par ShiftRows, on se retrouve avec un ´etage lin´eaire que l’on peut repr´esenter par une matrice carr´ee binaire de taille 16 qui op`ere sur les 16 quartets (respectivement octets) de l’´etat de 64 (respectivement 128) bits.

Skinny-64. Pour la version sans “tweak” de Skinny-64-64, les mˆemes clefs de tour sont r´eutilis´ees tous les 16 tours `a une constante pr`es. Donc les diff´erences entre les sous-clefs (ki+ ki+16) pour tout i sont ind´ependantes de la clef maˆıtre. En d´efinissant le sous-ensemble D suivant :

D := {RC1+ RC17, RC2+ RC18, RC3+ RC19, RC4+ RC20, RC5+ RC21} on obtient que WL(D) = F64

2 .

Skinny-128. Pour Skinny-128, les constantes de tour sont toutes de la forme suivante :    c0 0 0 0 c1 0 0 0 c2 0 0 0 0 0 0 0    

o`u c0 est `a valeurs dans l’ensemble {0x00, . . . , 0x0f}, c1 est `a valeurs dans {0x00, . . . , 0x03} et c2= 0x02. Ainsi, les 4 premiers bits de chaque octet de l’´etat ne sont pas affect´es par les constantes de tour. Comme la matrice repr´esentant la couche lin´eaire est binaire, on en d´eduit que WL(D) est un sous-espace de F128

2

de dimension au plus 64.

Prince. Prince est un SPN dont le but est d’avoir une faible latence. Il a ´et´e con¸cu par Julia Borghoff, Anne Canteaut, Tim Guneysu, Elif Bilge Kavun, Miroslav Knezevic, Lars R. Knudsen, Gregor Leander, Ventzislav Nikov, Chris-tof Paar, Christian Rechberger, Peter Rombouts, Søren S. Thomsen et Tolga Yalcın [BCG+12]. Prince utilise 10 clefs de tours diff´erentes (ki)1≤i≤10, de la forme ki= k + RCi. De plus, une propri´ete particuli`ere au chiffrement (appel´ee α-r´eflection) impose la condition suivante : pour tout 1 ≤ i ≤ 10, ki+ k11−i = α o`u α est une constante fix´ee (d´eriv´ee de π). L’int´erˆet de cette propri´et´e est de

permettre d’utiliser le mˆeme algorithme pour d´echiffrer que pour chiffrer, en utilisant simplement k + α au lieu de k. Ainsi, nous devons consid´erer l’ensemble suivant :

D := {α, RC1+ RC2, RC1+ RC3, RC1+ RC4, RC1+ RC5} On obtient finalement que dim WL(D) = 56.

Mantis. Cet algorithme de chiffrement par bloc a ´et´e propos´e dans le mˆeme article que Skinny, mais ressemble assez `a Prince, et a le mˆeme but : avoir une faible latence. Tout comme pour Prince, les clefs de tours de Mantis7suivent aussi la propri´et´e d’α-r´eflection. Ainsi, on consid`ere de la mˆeme mani`ere l’ensemble suivant :

D := {α, RC1+ RC2, RC1+ RC3, RC1+ RC4, RC1+ RC5, RC1+ RC6, RC1+ RC7} et on obtient que dim WL(D) = 42.

Midori-64. Cet algorithme de chiffrement par bloc a ´et´e propos´e par Subhadeep Banik, Andrey Bogdanov, Takanori Isobe, Kyoji Shibutani, Harunaga Hiwatari, Toru Akishita et Francesco Regazzoni [BBI+15] et est con¸cu dans un souci de r´eduction de consommation d’´energie. C’est aussi un SPN, et la couche lin´eaire qui est la composition de ShuffleCell et de MixColumn donne une application lin´eaire qui se repr´esente par une matrice carr´ee binaire de taille 16 qui interagit mal avec les constantes de tour : la dimension de WL(D) est beaucoup plus petite. En effet, les constantes de tour sont ajout´ees seulement au bit de poids faible de chaque moiti´e d’octet, ce qui implique que WL(D) = {0000, 0001}16.