• Aucun résultat trouvé

Atomicit´ e face aux attaques ` a canaux cach´ es

Partie IV. R´ esistance aux attaques ` a canaux cach´ es

12.2 Atomicit´ e face aux attaques ` a canaux cach´ es

12.2.1 Blocs atomiques

Chaque processus peut ˆetre vu comme une s´equence d’instructions. Nous dirons que deux instructions (ou s´equences d’instructions) sont ´equivalentes en canal cach´e si elles sont indis-tinguables `a travers l’´etude des canaux cach´es. Cette relation sera not´ee par le symbole “∼”. `A partir de l`a, nous d´efinissons ce que nous appelons unbloc atomique commun.

D´efinition 23 (Atomicit´e en canal cach´e [CJ02]). Etant donn´´ e un ensemble de processus {Π0, . . . , Πn}, un bloc atomique commun Γ pour Π0, . . . , Πn est une s´equence d’instructions

´

equivalentes en canal cach´e, telle que chaque processus Πj (0 6 j 6 n) puisse ˆetre exprim´e comme une r´ep´etition de ce bloc Γ, c’est-`a-dire telle qu’il existe une s´equence γj,i ∼Γ telle que Πjj,1j,2k · · · kγj,`j. Ces s´equences d’instructionsγj,i sont appel´ees blocs atomiques.

Un bloc atomique commun Γ existe toujours, ´etant donn´e que des instructions factices peuvent toujours ˆetre ajout´ees artificiellement `a un processus existant, dans le but de rendre les diff´erents processus indistinguables. En fait, la principale difficult´e de notre approche est plutˆot de trouver un bloc Γ qui soitle plus petit suivant une m´etrique donn´ee (par exemple le temps d’ex´ecution ou la taille du code). Notons qu’un r´eordonnancement ou une r´e´ecriture des processus peuvent r´eduire Γ ou limiter le nombre d’instructions factices, et ainsi am´eliorer les performances.

12.2.2 Illustration

Avant d’aller plus loin, nous voudrions illustrer notre propos d’un exemple simple mais significatif : la s´ecurisation de l’algorithme binaire d’exponentiation (en anglais, l’algorithme

12.2. Atomicit´e face aux attaques `a canaux cach´es square-and-multiply). ´Etant donn´e un ´el´ement x d’un groupe multiplicatif G et un exposant d´ecrit sous forme binaire d = (dm−1, . . . , d0)2, l’algorithme binaire d’exponentiation retourne y=xd.

Entr´ee:x, d= (dm−1, . . . , d0)2

Sortie: y=xd

R01 ;R1x;im1 tant que(i>0){

R0R02

si(di= 1)alorsR0R0·R1

ii1 }

retourneR0

Fig.12.1 – Algorithme binaire d’exponentiation non s´ecuris´e.

Comme pr´ec´edemment dit, un choix valide pour un bloc atomique commun Γ serait une op´eration de mise au carr´e suivie d’une instruction (possiblement factice) de multiplication et d’une d´ecr´ementation du compteur. Nous retrouvons alors l’algorithme classique square-and-multiply always[Cor99]. C’est le moyen classiquement utilis´e pour pr´evenir des attaques simples par canaux cach´es contre l’algorithme binaire d’exponentiation.

Pourtant, comme nous allons le voir, un tel choix deΓ est sous-optimal. En supposant que (i) une op´eration de mise au carr´e peut ˆetre ex´ecut´ee en appelant la routine de multiplication (qu’elle soithardware ou software), et (ii) les instructions R0 ←R0·R0 et R0 ← R0·R1 sont

´equivalentes en canal cach´e, nous pouvons r´e´ecrire l’algorithme pour r´ev´eler un bloc commun Γ bien plus petit (voir la Figure 12.2-a). Remarquons ´egalement l’instruction facticei←i−0.

Naturellement, nous supposons que cette instruction est ´equivalenteen canal cach´e `ai←i−1.

0000 1111

Deision Begin

Proess1

End di=0 di=1

0 3

4

1

2 Proess0

(fake )

2

Entr´ee:x, d= (dm−1, . . . , d0)2

Sortie: y=xd R01 ;R1x k0 ;im1 tant que(i>0){

R0R0·Rk

kkdi

ii− ¬k }

retourneR0

(a) Synopsis. (b) Version atomique de

l’algorithme binaire d’exponentiation.

Fig.12.2 – Algorithme d’exponentiation binaire prot´eg´e.

Comme d´ecrit `a la Figure 12.2-a, l’algorithme n’est pas ´equilibr´e : il y a deux copies du bloc Γ quanddi = 1 alors qu’il n’y en a qu’une quand di = 0. Cependant, comme nous l’expliquerons dans la prochaine section, il est ais´e de d´erouler le code de telle fa¸con que l’analyse en canal cach´e ne r´ev`ele qu’une s´equence ininterrompue de copies deΓ, sans rendre possible la distinction entre

Ces hypoth`eses sont discut´ees en Section12.3.1.

les processus ex´ecut´es (c’est-`a-dire Π0 ou Π1). Apr`es simplification, nous obtenons par notre m´ethode l’algorithme pr´esent´e `a la Figure12.2-b.

Il est important de noter que notre algorithme prot´eg´e (Figure12.2-b) ne requiert que 1.5m multiplications en moyenne, pour calculer y = xd, ce qui est la complexit´e de la version non prot´eg´ee de l’algorithme binaire d’exponentiation (Figure 12.1).

12.2.3 M´ethodologie g´en´erale

Apr`es l’exemple de la section pr´ec´edente, nous donnons maintenant une explication plus formelle de notre technique. ´Etant donn´e diff´erents processus Π0, . . . , Πn, nous identifions tout d’abord un bloc atomique commun Γ. Ensuite, nous ´ecrivons les processus Πj (0 6 j 6 n) comme des r´ep´etitions du bloc Γ, c’est-`a-dire Πj = γcjk · · · kγcj+`j−1, o`u `j est le nombre de copies deΓ dansΠj,

c0= 0

cj =cj−1+`j−1 pour 16j6n

et o`u γk ∼ Γ pour tous c0 6k 6 cn+`n−1. Notre strat´egie est alors d’ex´ecuter exactement

`j fois une s´equence de blocs Γ pour remplacer le processus Πj. Ainsi, en notant t le temps d’ex´ecution du bloc Γ, le temps requis pour le processusΠj sera seulement de `j·t au lieu de (max06j6n`j)·tpour la solution triviale de s´ecurisation.

Pour enchaˆıner les diff´erents processus, nous utilisons un bits(spourstop), pour retenir s’il y a encore des blocsγk∼Γ `a ex´ecuter pour simuler l’ex´ecution du processus en coursΠj. Quand le processusΠj est termin´e (et ainsis= 1), nous devons alors ex´ecuter le processus suivant selon les donn´ees d’entr´ee de l’algorithme. Aussi, au d´ebut de chaque boucle, nous mettons `a jour k, le compteur du bloc γ courant, par

k←(¬s)·(k+ 1) +s·f(valeurs d’entr´ee)

de telle fa¸con que f(valeurs d’entr´ee) = cj0 si le prochain processus `a ex´ecuter est Πj0. Nous voyons ainsi que, lorsques= 0, k est incr´ement´e de 1 pour poursuivre le processus courant, et que lorsque s = 1, k vaut cj0, pour d´ebuter le processus suivant Πj0. Bien sˆur, l’expression de k doit ˆetre cod´ee de telle fa¸con qu’aucune information `a propos des donn´ees d’entr´ee ne soit r´ev´el´ee par canal cach´e.

De fa¸con alternative, kpeut ˆetre d´efini comme le compteur du processus courant ; l’´etape de rafraˆıchissement devient alors : k←(¬s)·(k+ 1). Les donn´ees d’entr´ee sont alors utilis´ees pour faire la distinction entre les diff´erents blocs atomiques.

La derni`ere ´etape de notre m´ethodologie consiste `a exprimer chaque bloc γk :

– comme un ´el´ement d’une table (approche explicite ou matricielle de l’atomicit´e), ou – comme une fonction dek, deset des donn´ees d’entr´ee (approche implicite de l’atomicit´e).

Dans les sections suivantes, nous mettons en pratique notre technique, en donnant des exemples des deux approches.

En cons´equence, notre algorithme r´ev`ele, en canal cach´e, le poids de Hamming de l’exposant. Ceci n’est en´eralement pas un probl`eme, notamment car l’exposant est en g´en´eral long. Si cependant cette fuite ´etait enante, le poids de Hamming pourrait ˆetre dissimul´e en utilisant des techniques standards, telles que le d´ecoupage (en anglais,splitting) ou le masquage (en anglais,blinding) de l’exposant.