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.