• Aucun résultat trouvé

Exemple 2 : Le code de Hamming de paramètres [7, 4, 3] 2

7.2 Attaque temporelle

7.2.1 Attaques de Strenzke

1ère attaque [Str10b]

Principe : Cette attaque repose sur la capacité d'un attaquant à produire des textes chirés lui-même (attaque à chirés choisis), ce qui ne pose aucun problème puisque nous sommes dans le cadre d'un chirement asymétrique. L'attaquant a donc un contrôle total sur le nombre d'erreurs (et donc le vecteur erreur ajouté au

mot de code durant la phase de chirement). En particulier, les erreurs seront de poids ε pour cette attaque, où ε < t. En particulier, ε sera xé à 4 si rien n'est précisé. Pour ε = 4, on a deg(σ) = 4, donc deg(a) = 2 et deg(b) 6 1. Comme ε = 4 est pair, a(X) contient le coecient dominant de σ(X). De plus, puisque deg(b) 6 1, deux cas sont possibles :

Si deg(b) = 0 : alors le nombre d'itérations dans EEA est 0. Si deg(b) = 1 : alors le nombre d'itérations dans EEA est 1.

Cette diérence dans le nombre d'itérations implique une diérence dans les temps d'exécution de l'algorithme.

Attaque : Cette fuite d'information peut être exploitée par un attaquant. Rap-pelons que, pour ε = 4, on a :

σ(X) =σ4· X4⊕σ3· X3⊕σ2· X2⊕σ1· X ⊕σ0, avec :

a(X) = σ4· X2⊕σ2· X ⊕σ0

b(X) = σ3· X ⊕σ1 (7.2) Revenons sur les deux cas possibles. Cela signie que :

Si deg(b) = 0 : alorsσ3 = 0. Si deg(b) = 1 : alorsσ3 6= 0.

Le canal auxiliaire provient donc directement du coecient σ3. Or, le coecient σ3 n'est ni plus ni moins que la somme des éléments dans L correspondant aux positions des erreurs dans E. En d'autres termes, si ei = 1pour i ∈J1, nK, alors αiest une racine de σ(X). Et comme σ3est égal à la somme des racines de σ(X), on peut en déduire une relation sur les éléments du support correspondant aux erreurs. On sait déjà qu'il y a 4 erreurs par rapport au degré du PLE. Posons i1, i2, i3, i4J1, nK les indices des erreurs, deux à deux distincts. Comme les positions des erreurs choisies par l'attaquant sont dans un ordre dépendant de la permutation privée P, on a alors :

Si deg(b) = 0 : σ3 = αP(i1)⊕ αP(i2)⊕ αP(i3)⊕ αP(i4) = 0. Si deg(b) = 1 : σ3 = αP(i1)⊕ αP(i2)⊕ αP(i3)⊕ αP(i4) 6= 0.

En générant aléatoirement des textes chirés ayant une erreur de poids 4, l'attaquant peut ainsi obtenir une liste d'équations impliquant la permutation privée avec les temps de déchirement correspondants an d'en déduire dans quel cas il se trouve à chaque essai. Notons que les équations qui l'intéressent le plus sont celles où la somme est nulle, car elles apportent davantage d'informations exploitables par la suite. Après quoi, l'attaquant peut appliquer l'algorithme du pivot de Gauss sur son système. Si, comme supposé dans cette attaque, l'ordre des éléments à l'origine est connu, l'attaquant peut plus facilement retrouver la permutation privée.

Par contre, une question ne semble pas avoir été traitée dans cet article : Pourquoi le rang maximal de ce système semble être donné par n−m−1, où n est la longueur du code et m le degré de l'extension du corps ?

7.2. ATTAQUE TEMPORELLE TR Contre-mesure : Comme l'attaque dépend des diérents cas possibles pour les degrés des polynômes a(X) et b(X), sorties de l'Algorithme 35, l'idée est de rendre l'entrée R(X) "constante", puisque le polynôme G(X) lui ne change pas d'un dé-chirement à l'autre pour un même couple de clés privée/publique. La proposition faite par l'auteur est donc de manipuler le degré du polynôme R(X) an que la suite des restes n'atteigne pas trop vite la condition de la boucle Tant que. Cela permet d'éviter qu'il n'y ait aucune itération, origine de l'attaque proposée dans [Str10b]. Le test "Si deg(R) < d" doit être fait juste après que R(X) ait été calculé dans l'algo-rithme de Patterson (étape 10 de l'Algol'algo-rithme 32). Si tel est le cas, l'auteur suggère de "manipuler" R(X) de sorte que deg(R) = t−1. Après demande de détails auprès de celui-ci, il a rajouté que tout polynôme ri satisfaisant deg(ri) = deg(ri− 1) − 1 fe-rait l'aaire, puisque l'Algorithme 35 continuefe-rait son déroulement et l'eet critique du temps d'exécution ne serait plus observable. Cela repose sur le fait que même pour les cas non dégénérés produits par un attaquant, l'événement deg(R) < d ne se produit jamais. Une recommandation est que cette manipulation ne doit pas se faire en utilisant un vrai générateur de nombres aléatoires, mais un générateur de nombres pseudo-aléatoires ayant pour source le texte chiré an que l'attaquant ne puisse pas déterminer lorsque la contre-mesure est appliquée ou non.

Améliorations : Il est intéressant de noter que pour ε = 4, en notant i1, i2, i3, i4 ∈ J1, nK les indices des erreurs, deux à deux distincts, la somme des éléments du sup-port L ayant ces indices s'annule avec une probabilité 1/(n−3) en caractéristique 2. Ce type de réexion est présenté dans le Chapitre 8.

L'auteur énonce également une possibilité d'adaptation de cette attaque à une ana-lyse de consommation en utilisant le fait que pour ε = 4, si deg(b) = 0, alors a(X) = R(X), donc deg(R) = 2, tandis que si deg(b) = 1, alors deg(R) 6 t − 1. Ceci entraîne un plus grand nombre de changements d'états des registres dans un composant lors du calcul de R(X) si les registres sont initialisés à zéro et sont ensuite mis à jour pour stocker le résultat. Cette information basée sur le poids de Ham-ming des registres peut permettre de distinguer lorsque peu de coecients de R(X) sont nuls (lorsque deg(R) = 2) du cas où beaucoup de ses coecients sont non nuls (lorsque deg(R) est proche de t − 1). D'autres précisions sont à apporter. Toujours d'après l'auteur, la contre-mesure proposée dans [SSMS10] permettrait non pas de distinguer les cas 0 itération dans EEA contre 1 pour une erreur de poids 4, mais aucune itération contre t. Ceci faciliterait le travail d'un attaquant.

De plus, la conversion CCA2 [KI01, Poi00] ne permettrait pas de stopper cette at-taque, car un attaquant peut mettre moins de t erreurs dans son texte chiré en ne respectant pas les règles de sécurité du protocole. Malheureusement ce défaut du poids de l'erreur ne peut être détecter par le périphérique de déchirement qu'après avoir déterminé le PLE. (Toutefois, notons que si un moyen était découvert pour savoir, avant la détermination du PLE, le poids réel de l'erreur ε en tant que degré du PLE, ce serait très utile pour le schéma de signature CFS [CFS01].) L'attaquant peut donc tout de même récupérer le temps de déchirement grâce au message d'er-reur qui lui serait renvoyé dans ce cas-là. Ce temps d'exécution dépendrait également du nombre d'itérations dans EEA. L'attaque fonctionnerait donc encore.

Enn, on peut se poser la question de ce qu'il se passe lorsque le poids de l'erreur ε est choisi plus grand que 4 mais plus petit que t. Tout d'abord, si ε est impair, c'est b(X)qui possède le coecient dominant du PLE σ(X) tandis que si ε est pair, c'est a(X)qui possède le coecient dominant du PLE σ(X). Cela implique que dans le cas où ε est impair, le nombre d'itérations dans EEA, qui est lié à deg(b), dépend

directement de ε et l'attaque devient donc inutilisable. Il faut donc s'intéresser aux cas où ε est pair pour mener le même type d'attaque. Cependant, les relations entre les racines qui sont exploitées pour le cas ε = 4 ne sont plus aussi simples. L'at-taque devient donc très compliquée puisque les causes de variations dans le nombre d'itérations se multiplient. Néanmoins, si un attaquant est capable de distinguer les diérentes causes de changement dans le nombre d'itérations, peut-être par une analyse de consommation, l'attaque peut encore fonctionner.

2nde attaque [Str13b]

Principe : Cette attaque repose sur l'analyse de l'équation-clé (Équation (2.9)) pour en déduire des relations entre les degrés des polynômes intervenant dans celle-ci, à savoir SC˜(X), σE(X), ηE(X)et G(X), sachant que les degrés de σE(X)et ηE(X) dépendent directement du poids de l'erreur. Comme un attaquant peut produire des textes chirés lui-même (attaque à chirés choisis), il peut choisir le poids de l'erreur ajoutée au mot de code lors du chirement.

Rappelons que le polynôme syndrome vérie les relations suivantes : SC˜(X) ≡ n X i=1 ˜ ci X ⊕ αi mod G(X)ηE(X) σE(X) mod G(X).

Falko Strenzke, auteur de [Str13b], déclare que le nombre maximal d'itérations dans l'Algorithme 34 est majoré par deg(σE) + deg(ηE). Cette majoration dépend direc-tement du poids de l'erreur, contrôlable par un attaquant.

Cependant, cette majoration semble être large, par rapport au résultat précédem-ment précédem-mentionné dans [SKHN75, Cor. 1], à savoir que ce nombre est majoré par deg(σE).

Cette remarque étant faite, revenons à l'expression de SC˜(X)en fonction de σE(X) et ηE(X) : SE(X) ≡ ηE(X) σE(X) ≡ n X i=1 ei=1 1 X ⊕ αi mod G(X). (7.3) Attaque : L'intérêt, pour cette attaque, se porte également sur le coecient cor-respondant à la somme des racines. Notons ε = wH(E). Pour le cas où ε = 4, l'Équation (7.3) devient : SE(X) ≡ ηE(X) σE(X) ≡ n X i=1 ei=1 1 X ⊕ αiσ3· X 2⊕ σ1 X4⊕ σ3· X3⊕ σ2· X2⊕ σ1· X ⊕ σ0 mod G(X). Posons i1, i2, i3, i4J1, nK les indices des erreurs, deux à deux distincts. On a alors :

σ3 = αi1 ⊕ αi2 ⊕ αi3 ⊕ αi4. Deux cas sont alors possibles :

Si σ3 = 0 : alors deg(ηE) = 0, donc le nombre maximal d'itérations dans EEA vaut 4.

Si σ3 6= 0 : alors deg(ηE) = 2, donc le nombre maximal d'itérations dans EEA vaut 6.

7.2. ATTAQUE TEMPORELLE TR Cette diérence dans le nombre d'itérations implique une diérence dans les temps d'exécution de l'algorithme, d'autant plus que cette borne supérieure est atteinte dans la plupart des cas.

La contre-mesure proposée dans [Str10b] est insusante pour l'attaque précédem-ment expliquée. La combinaison de ces deux attaques permet de distinguer le cas où deg(ηE) = 0 de celui où deg(ηE) 6= 0. Cela permet, comme dans le cas de l'attaque précédente, d'obtenir des équations de la forme :

σ3 = αi1 ⊕ αi2 ⊕ αi3 ⊕ αi4 = 0.

Améliorations : La remarque sur la parité de ε faite dans le cadre de l'attaque précédente est également valable dans le cas présent.

Le cas où ε = 6 : Pour le cas où ε = 6, l'Équation (7.3) devient : SE(X) ≡ ηE(X)

σE(X) ≡ σ5· X

4⊕ σ3· X2⊕ σ1

X6⊕ σ5· X5⊕ σ4· X4⊕ σ3· X3⊕ σ2· X2⊕ σ1· X ⊕ σ0 mod G(X). An d'obtenir quelque chose de semblable à l'attaque pour ε = 4, c'est-à-dire pouvoir

distinguer le cas où deg(ηE) = 0 de celui où deg(ηE) 6= 0, il faut que σ3 soit nul mais également σ5. Cette fois-ci, c'est le coecient σ5qui est la somme des racines et σ3est la somme des produits de trois racines. Remarquons que les cas où σ5 = 0 et σ3 = 0 simultanément pour l'attaque avec ε = 6 font partie des cas où σ3 = 0pour l'attaque avec ε = 4. L'attaquant peut donc se servir des équations qu'il a déjà obtenues an d'en obtenir de nouvelles avec 6 racines. Posons i1, i2, i3, i4, i5, i6J1, nK les indices des erreurs, deux à deux distincts. Ces nouvelles équations seront cubiques pour σ3, c'est-à-dire de la forme : σ3 = 6 X j=1 6 X k=1 k6=j 6 X l=1 l6=j l6=k αij · αik · αil = 0.

Trouver l'élément nul dans le support grâce à ε = 1 : Pour le cas où ε = 1, l'Équation (7.3) devient tout simplement :

SE(X) ≡ ηE(X)

σE(X) ≡ 1

X ⊕ σ0 mod G(X).

Cela signie que l'inversion du polynôme syndrome se fait en une seule itération. Cependant, un cas sera notable parmi tous, à savoir le cas où l'élément nul du support est la racine.

Contre-mesure : Aucune proposition de contre-mesure n'a été faite. L'auteur a laissé cela comme problème ouvert. Toutefois l'auteur propose une réexion sur deux possibilités. La première est de reprendre l'idée de contre-mesure de [SSMS10]. La seconde est de n'ajouter que (t − 1) erreurs au chirement, puis de changer la valeur d'un bit au début du déchirement. L'indice du bit changé doit toujours être le même pour un texte chiré donné, mais doit sembler aléatoire pour l'attaquant (grâce à un générateur de nombres pseudo-aléatoires et d'une fonction de hachage). Cependant, on n'a aucun moyen a priori de forcer un attaquant à utiliser des erreurs de poids maximaux plus que minimaux et cela reste insatisfaisante d'un point de vue ecacité.