Implémentation d`un multiplieur de Montgomery sécurisé et

Transcription

Implémentation d`un multiplieur de Montgomery sécurisé et
Implémentation d’un multiplieur de Montgomery sécurisé et cascadable
Sylvain GUILLEY
GET / Télécom Paris, CNRS LTCI,
Département communication et électronique
46 rue Barrault, 75634 Paris Cedex 13, France.
E-mail: [email protected]
Résumé
Pour des questions de facilité d’intégration et de
réutilisabilité, les multiplieurs de Montgomery doivent être
rendus modulaires. De plus, ils doivent résister aux attaques sur leur implémentation matérielle. Cet article
présente un multiplieur qui satisfait à ces deux contraintes.
1. Introduction
La conception de processeurs dédiés à la cryptographie
asymétrique (chiffrement ou signature) soulève deux défis.
Tout d’abord, la taille des opérandes utilisés dans les
algorithmes augmente rapidement : l’accroissement exponentiel des capacités de calcul (loi de Moore) profite aux
attaques de recherche exhaustive de clés. En même temps,
les attaques « court-circuit », c’est-à-dire plus rapides que
les attaques en force brute, continuent à s’affiner. Cette
tendance conduit à une augmentation du temps de calcul
pour les implémentations logicielles ou à une augmentation de la taille et de la consommation en énergie des
implémentations matérielles.
Ensuite, les implémentations des algorithmes sont devenues la cible d’attaques. On peut classer ces attaques en
deux catégories, selon qu’elles sont passives ou actives. Les
attaques passives consistent à analyser des fuites d’information, comme le temps de calcul (timing attack, notée
TA [4]) ou la consommation instantanée [5]. La connaissance du profil de consommation peut, par simple reconnaissance de motifs, aider à l’identification d’une partie
du calcul. Cette attaque est appelée SPA. La DPA permet,
quant à elle, de retrouver l’activité d’une porte logique par
l’analyse conjointe de nombreux profils de consommation.
Par ailleurs, un attaquant peut aussi décider de modifier le
déroulement du calcul, quitte à ce que son intervention soit
détectée par le matériel. Cette stratégie est à l’origine des
attaques par fautes (fault attacks, notées FA [2]).
La plupart des algorithmes asymétriques s’appuient sur
des calculs dans des anneaux ou des corps multiplicatifs,
comme (Z/M Z, ×). Parmi les algorithmes de multiplication modulaire proposés à ce jour, celui de Montgomery [6]
est à la fois le plus rapide et le plus approprié pour le calcul
sur les grands nombres.
L’objectif de cet article est de proposer une architecture matérielle d’un multiplieur de Montgomery qui ap-
porte une solution aux deux défis mentionnés plus haut.
Pour réduire la taille de l’implémentation, le multiplieur est
cascadé en un (ou plusieurs) opérateurs traitant des données
de taille réduite.
La suite de l’article est organisée de la façon suivante :
l’algorithme de multiplication modulaire de Montgomery,
noté MMM dans la suite, est exposé dans la section 2. La
section 3 présente la version cascadée de l’algorithme de
MMM. L’évaluation de la sécurité de cet algorithme est
l’objet de la section 4. Enfin, l’article se termine par des
remerciements (section 5) et une conclusion (section 6).
2. Multiplication de Montgomery
Étant donnés trois nombres A, B et M vérifiant 0 ≤
A, B ≤ 2 × M ([7] explique les bornes), l’algorithme de
MMM [6] calcule A × B × 2−dlog2 (M )e−2 mod M ou la
même quantité plus M . Le détail de l’algorithme est exposé
ci-dessous pour une implémentation 1-bit série / parallèle :
Algorithme 1 Multiplication Modulaire de Montgomery
1: W := 0;
/* W est l’accumulateur */
2: for i := 0 to dlog2 (M )e + 1 do
3:
if (Ai ) then
4:
W + = B;
/* « Accumulation » */
5:
end if
6:
if (W0 ) then
7:
W+ = M;
/* « Réduction » */
8:
end if
9:
W >>= 1;
/* Ici, W est pair */
10: end for
11: return W ;
/* Résultat de la MMM
*/
Cet algorithme s’implémente naturellement avec un
chemin de donnée de taille dlog2 (M )e + 2 bits. La valeur
typique de ce nombre est 2 048 bits pour RSA.
3. Implémentations
Cette taille de chemin de donnée est élevée. La
réalisation matérielle d’un tel bloc posera inévitablement
des problèmes lors de l’étape de conception physique (backend). Par ailleurs, cette taille est sujette à des changements inopinés : la publication d’une nouvelle cryptanalyse
peut nécessiter un redimensionnement du jour au lendemain. Pour ces deux raisons, il est souhaitable de découper
le multiplieur en petits modules, manipulant des quantités
de n bits, avec par exemple n ∈ {8, 16, 32, 64}.
3.1. Algorithme MMM cascadé
Nombre de bits
Le découpage de l’algorithme 1 présente une difficulté
majeure. Si les calculs sont effectués de façon séquentielle
sur les mots wj (j part de 0 et s’incrémente
à chaque
P n·j
wj , la valeur
itération) de l’accumulateur W =
j2
de chaque wj devient inconnue au bout de n itérations, à
cause du décalage à droite systématique de W (ligne 9 de
l’Alg. 1). Cet inconvénient est illustré dans le tableau 1(a).
Une première façon de lever cette difficulté consiste
à représenter les opérandes dans un autre système de
numération, où ils sont codables sur n bits. Une mise en
œuvre possible est l’utilisation du RNS [1].
Une deuxième solution s’appuie sur un calcul glissant. La découpe de l’accumulateur W dépend alors
de
i courante : on définit wi,j par W =
P l’itération
n·j−i
2
w
,
i,j comme représenté dans le tableau 1(b).
j
TAB . 1. Deux façons de découper les itérations de la
MMM en étapes manipulant des nombres de n bits. Les
flèches symbolisent les retenues entrantes et sortantes.
(a) Découpage droit
j
MSB
TAB . 2. Temps d’exécution moyen d’une exponentiation modulaire logicielle (évalué avec time · · · ).
LSB
wj
0
i
...
n−1
MSB
(b) Découpage diagonal
j
j−1
wj
...
28 = 256
29 = 512
10
2 = 1024
211 = 2048
212 = 4096
213 = 8192
GMP
0.000
0.000
0.030
0.190
1.290
7.110
Temps d’exécution [s]
MMM cascadé
0.100
0.710
5.310
40.990
322.000
2571.740
3.2. Modèle logiciel de l’algorithme MMM cascadé
L’algorithme cascadé a été validé par logiciel contre :
– la fonction BN mod mul montgomery de la bibliothèque OpenSSL (http://www.openssl.org),
– la fonction d’exponentiation modulaire mpz powm
de la bibliothèque GMP (http://www.swox.com/gmp).
La fonctionnalité de l’algorithme se conforme aux résultats
de ces deux tests.
L’implémentation logicielle de l’algorithme MMM cascadé a été optimisée pour les processeurs I NTEL. A titre
d’exemple, les accumulations sont effectuées par la fonction impure suivante utilisant la macro GNU asm de g++ :
static inline void full_add (
unsigned int & accu ,
unsigned int & carry ,
unsigned int opr
)
{
asm (
"mov $0,%0\n"
"add %3,%1\n"
"adcl $0,%0\n"
"add %4,%1\n"
"adcl $0,%0\n"
: "=d"(carry) , "=a"(accu)
: "a"(accu) , "g"(opr) , "g"(carry)
) ;
}
Comme indiqué dans le tableau 2, la performance logicielle de l’algorithme MMM cascadé est médiocre. La raison est que l’implémentation est 1-bit série / parallèle : le
multiplieur du processeur de calcul n’est donc pas utilisé,
alors que OpenSSL et GMP le sollicitent.
3.3. Description matérielle de la MMM cascadée
Cette dernière solution a été retenue parce que la reconstruction de W à l’issue du calcul est immédiate. Les
ressources nécessaires pour son implémentation sont :
– un registre de n bits pour les valeurs glissantes de wj ,
– deux FIFO de 2 × n bits pour les valeurs de bj et mj
qui, du point de vue du registre de wj , se décalent
d’un bit à gauche à chaque itération i ∈ [0, n[,
– deux FIFO de n bits différentes pour les retenues
carry {b, m} de l’accumulation de B et de M ,
– deux FIFO de n bits pour la mémorisation des accumulations de B (mot aj ) et des réductions modulaires
(mot noté red) à effectuer. Ces FIFO sont initialisées
lors du calcul sur les bits de poids faible (j = 0).
Le matériel réalisant une itération de l’algorithme de
MMM (Alg. 1) se réduit à deux additionneurs. Ce bloc
est appelé OP pour signifier qu’il prend en charge la partie opérative du calcul. Une implémentation possible est un
double additionneur à propagation de retenue (carry propagation adder, CPA). Une autre alternative consisterait
en l’utilisation d’un additionneur sans retenue (carry save
adder, CSA). Les deux architectures ont été décrites. Une
tranche d’un bit k ∈ [0, n[ de OP en CPA est représentée
dans la
figure 1. Les opérandes sur n bits s’écrivent :
Pn−1
wj = k=0 2k wjk (idem pour bj et mj ).
Les enchaı̂nements des itérations nécessitent des registres de mémorisation ainsi qu’un contrôleur. Ces
bkj
wjk
carry bkout = carry bk+1
in
mkj
carry bkin
FA0
TA
[4]
x
carry
mkout
= carry
mk+1
in
FA1
carry
mkin
k ∈ [0, n[
wjk+1
F IG . 1. Matériel (full-adders, FA) réalisant les deux accumulations des lignes 4 et 7 de l’Alg. 1 sur un bit k .
TAB . 4. Contre-mesures du module RSA.
SPA DPA FA
Contre-mesure
[5]
[5] [2]
Temps d’exécution constant
⇒ Utiliser la MMM.
Masquage de la clé
x
⇒ E ↔ E + rnd · φ(M ).
Profil régulier des traces
x
x
⇒ Echelle de Montgomery.
Masquage des données
x
x
⇒ ×1 ↔ × rnd dans MMM.
Intégrité de calcul
x
⇒ Preuve par 2n − 1 [3].
1-bit
n-bit
CTRL
4. Sécurité structurelle de l’algorithme
aj
Contrôleur
n
···
bj
OP
n
Opérateur
n bits
mj
n
carry b
L’algorithme RSA calcule l’exponentielle C =
AE mod M d’un message A encodé comme un grand entier avec la clé E. L’exponentiation peut utiliser l’algorithme « square-and-multiply » ou « l’échelle de Montgomery, qui font tous deux appel à la multiplication MMM.
Le niveau de sécurité du module RSA utilisant le bloc
de MMM cascadé peut être adapté en fonction des applications. La table 4 montre les techniques utilisables pour
lutter contre les attaques physiques sur le cryptoprocesseur.
5. Remerciements
carry m
wj,in
n
red
Ce travail a bénéficié des riches commentaires et des
suggestions fructueuses de Philippe Hoogvorst et de Renaud Pacalet ({hoogvorst, pacalet}@enst.fr).
wj,out
6. Conclusion
F IG .
) et de
2. Matériel de mémorisation (registres
contrôle (CTRL) associé à l’opérateur n bits OP.
TAB . 3. Résultats de synthèse logique du bloc de plus
WORAM 1PORT pour n = 32.
haut niveau MMM
Technologie
A PEX 20K200EFC484
ASIC : 2λ = 0, 25 µm
ASIC : 2λ = 0, 13 µm
Aire
934 LCELLs
279 000 µm2
32 235 µm2
Vitesse
38.2 MHz
135 MHz
200 MHz
ressources additionnelles sont instanciées autour de
l’opérateur OP, comme illustré dans la Fig. 2.
Une mémoire externe, par exemple une RAM, stocke les
opérandes dans leur intégralité. La mise à jour des registres
de la Fig. 2 et l’écriture de mots de n bits dans la mémoire
s’appuie sur un ordonnancement strict des accès à la RAM.
Une conception rigoureuse du bloc de contrôle CTRL permet de se passer d’accès concomitants à la RAM dès que
n ≥ 5, de sorte qu’une mémoire simple port est suffisante.
La synthèse logique a été réalisée sur le bloc de plus
haut niveau : MMM WORAM 1PORT. Il s’agit du matériel
représenté dans la Fig. 2 équipé d’une interface lui permettant de se relier directement à une RAM synchrone simple
port. Les résultats de synthèse sont listés dans la table 3.
Un multiplieur modulaire cascadable de n ∈ N∗ bits
a été décrit. L’implémentation démontre la fonctionnalité du multiplieur. Dans le cadre de calcul de chiffrements ou de signatures RSA, le multiplieur est robuste
vis-à-vis des attaques connues. Le passage à une architecture n-bit parallèle/parallèle (i.e. en radix 2n ) améliorera
considérablement les performances en vitesse de calcul.
Références
[1] J.-C. Bajard. An RNS Montgomery Modular Multiplication
Algorithm. IEEE Transactions on computer, 47(7), 1998.
[2] R. J. L. Dan Boneh, Richard A. Demillo. On the Importance
of Checking Cryptographic Protocols for Faults. Advances in
Cryptology, Proceedings Eurocrypt’97, pages 37–51, 1997.
[3] P. Hoogvorst and S. Guilley. Proof by 2m − 1 : a low-cost
method to check arithmetic computations. SEC 2005, 2005.
[4] P. Kocher, J. Jaffe, and B. Jun. Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems.
CRYPTO’96, 1109 :104–113, 1996.
[5] P. Kocher, J. Jaffe, and B. Jun. Differential Power Analysis :
Leaking Secrets. CRYPTO’99, 1666 :388–397, 1999.
[6] P. Montgomery. Modular Multiplication Without Trial Division. Mathematics of Computation, 44, 1995.
[7] C. Walter. Montgomery exponentiation needs no final substractions. Electronics Letters, 35(21) :1831–1832, 1999.