92 CHAPITRE 5. IMPLANTATION LOGICIELLE
Concernant l’arithmétique multi-précision, l’une des bibliothèques les plus utilisées
est GMP [GMP]. C’est une bibliothèque implantée en C qui gère l’arithmétique
multi-précision d’entiers signés ou non, de nombres rationnels et flottants. L’un des principaux
domaines d’application concerne la cryptographie. Les performances sont réalisées en
utilisant des algorithmes rapides mais également du code assembleur optimisé pour
dif-férentes architectures. Cependant, il n’y a que peu de fonctions qui traitent des opérations
modulaires.
Parmi les bibliothèques gérant les courbes elliptiques, on retrouve en autre [MAGMA;
SAGE;PARI]. Nous allons présenter en particulierPARI/GP. C’est un système de calcul
formel initialement développé par Henri Cohen et ses collaborateurs mais qui compte
aujourd’hui un grand nombre de contributeurs. Il implante notamment des algorithmes
pour l’arithmétique des courbes elliptiques sous forme Weierstrass. Il peut être utilisé
sous trois formes :
• une bibliothèquelibpariimplantée enC;
• un calculateur programmablegpavec un langage de programme assez haut niveau ;
• un compilateur gp2c qui permet de traduire du code degp en C et de le charger
dans l’interpréteur de gp. Les performances sont en général meilleures que celles
d’un script qu’on utiliserait directement dansgp.
Dans ce chapitre, nous allons présenter notre contribution à la bibliothèque logicielle
MPHELLqui prend en charge l’arithmétique des courbes elliptiques. Nous détaillerons les
fonctionnalités implantées ainsi que les extensions qui sont possibles. Nous comparerons
notre implantation par rapport aux deux bibliothèques présentées précédemment,GMPet
PARI/GP. Nous rappelons que les choix d’implantation ont été discutés dans les chapitres
2et4.
5.1 Architecture
MPHELL
1, Multi-Precision for (Hyper) ELLiptic curves est une bibliothèque
dévelop-pée à l’Institut Fourier depuis 2009. Elle est actuellement implantée enCet ne gère que le
cas des courbes elliptiques. L’objectif est d’avoir une implantation performante,
modu-lable mais également extensible avec le support de plusieurs systèmes de coordonnées et
de formes pour l’arithmétique des courbes.
1. financée par le pôle MSTIC de l’Université Joseph Fourier, le projet FUI SHIVA et le LabEx PERSYVAL-Lab
5.1. ARCHITECTURE 93
Avec la nouvelle architecture, les fonctionnalités peuvent être divisées en quatre
catégo-ries :
• La génération de nombres aléatoires,
• L’arithmétique multi-précision,
• L’arithmétique des corps,
• L’arithmétique des courbes.
MPHELL Génération de nombres aléatoires Arithmétique multi-précision Arithmétique des corps Arithmétique des courbes
Figure. 5.1– Architecture de la bibliothèque MPHELL
5.1.1 Génération de nombres aléatoires
G´en´eration de nombres al´eatoires
wrapper type random
DRBG CTR HASH Gestion d’entropie fichiers d’al´ea
Deux types de générateurs sont actuellement implantés :
• les DRBG basés sur les fonctions de hachage,
• les DRBG basés sur les fonctions CTR (en particulier AES [AES]).
Ces générateurs suivent les recommandations du SP 800-90A [SP800-90A]. L’utilisation
de ces générateurs requiert une source entropie. Il est possible d’utiliser :
94 CHAPITRE 5. IMPLANTATION LOGICIELLE
• le générateur d’INTEL s’il est disponible,
• la lecture d’un fichier d’aléa,
• le fichier/dev/urandom,
• le fichier/dev/hrandom1.
Les fonctions sont accessibles grâce à un wrapper. Cela permet donc de simplifier
l’uti-lisation par les autres parties de la bibliothèque et de rajouter aisément de nouveaux
générateurs.
5.1.2 Arithmétique multi-précision
Au niveau de cette fonctionnalité, différentes options sont disponibles car il est
pos-sible de brancher une autre bibliothèque afin par exemple dans le cadre d’un projet
où une certaine bibliothèque est requise. Actuellement, l’implantation supporteGMP et
PARI/GP. Au moment de la compilation, les optionsUSE_GMPetUSE_PARIpermettent de
changer le comportement de la bibliothèque. Par défaut c’est le typebig_uint qui est
utilisé.
Arithm´etique multi-pr´ecision
wrapper type number
GEN
mpz t big uint
Notre implantation
big_uintest le type que nous utilisons pour représenter l’entier multi-précision. La
base de représentation peut être changée au moment de la compilation en spécifiant la
taille de bloc que l’on souhaite utiliser. Les entiers sont représentés par une structure avec
les champs suivants :
• size: le nombre deblockutilisés pour représenter le nombre,
• sign: le signe du nombre, (-1 ou 1),
5.1. ARCHITECTURE 95
La majorité des opérations se fait sur le typeblockavec des fonctions en assembleur qui
s’adaptent en fonctions des options de compilationsBLOCK=32,64etARCH=ARM,32,64. Les
fonctions suivantes ont été implantées :
• allocation, libération
• initialisation
• conversion avec les chaînes de caractères,
• addition, soustraction,
• multiplication, square,
• division, modulo,
• réduction de Montgomery, inverse modulaire, Legendre
Le typenumberest le wrapper qui permet d’accéder aux fonctions de l’arithmétique
multi-précision.
#if USE_GMP == 1
#include <gmp.h>
typedef mpz_t number;
typedef __mpz_struct number_t;
#define LIMB(x) x->_mp_d
#define SIZ(x) x->_mp_alloc
#define SIGN(x) x->_mp_size >= 0 ? 1 : -1
#elif USE_BIG_UINT == 1
#include "../big_uint/big_uint.h"
typedef big_uint number;
typedef big_uint_t number_t;
#define LIMB(x) x->limb
#define SIZ(x) x->size
#define SIGN(x) x->sign
#else
#include <pari/pari.h>
typedef GEN number[1];
typedef GEN number_t;
#define LIMB(x) ((*x) + 2)
#define SIZ(x) (lg(*x) - 2)
#define SIGN(x) signe(*x) != 0 ? signe(*x) : 1
#endif
96 CHAPITRE 5. IMPLANTATION LOGICIELLE
5.1.3 Arithmétique des corps
Les corps traités actuellement sont :
• les corps premiers,
• les extensions quadratiques de corps premiers,
• les extensions cubiques de corps premiers.
Les extensions sont définies en utilisant un non-résidu quadratique ou cubique. Le
type de base pour représenter les éléments des corps est le typenumber. Pour
l’arithmé-tique des corps premiers, la représentation de Montgomery est utilisée quand la
biblio-thèque est configurée pour lesbig_uint en utilisant les algorithmes présentés dans le
chapitre précédent.
Arithm´etique des corps
wrapper type field
fp fp2 fp3
wrapper type field elt
1, 2, ou 3 number(s)
Un wrapperfieldpermet de gérer de manière générique les corps, que ce soitF
p,F
p2etF
p3. Pour ce faire, un corps est une structure générique contenant les champs suivants :
• id: une chaîne de caractères qui stocke l’id du corps,
• type: indique le type du corps. Les valeurs possibles sontFP,FP2,FP3,
• size : indique la taille en nombre deblockpour stocker les éléments de base du
corps,
• param: pointe vers une structure contenant les différentes variables nécessaires aux
calculs sur le corps. Le type de structure varie en fonction du type du corps.
Cela permet de définir facilement des courbes sur n’importe quel type de corps sans
avoir à modifier tout le code.
Les éléments d’un corps sont définis par une structure avec les champs suivants :
• type: indique le type du corps auquel appartient l’élément,
• v: un type union qui renvoie vers une structure particulière en fonction du type de
corps.
5.1. ARCHITECTURE 97
void
field_elt_inc (fe_ptr dst, fe_srcptr src)
{
switch(src->type)
{
case FP :
fp_elt_inc((dst->v).n, (src->v).n, src->k->param);
break;
case FP2 :
fp2_elt_inc((dst->v).n2, (src->v).n2, src->k->param);
break;
case FP3 :
fp3_elt_inc((dst->v).n3, (src->v).n3, src->k->param);
break;
}
dst->k = src->k;
}
5.1.4 Arithmétique des courbes
Les courbes traitées actuellement sont :
• les courbes Weierstrass en coordonnées projectives, jacobiennes, co-Z et unifiées
• les courbes tordues d’Edwards,
• les courbes quartiques de Jacobi étendues.
Arithm´etique des courbes
wrapper type ecc curve wrapper type ecc point
Weierstrass Jacobi twist
98 CHAPITRE 5. IMPLANTATION LOGICIELLE
Un wrapper permet de gérer de manière générique les courbes. Pour ce faire, une
courbe est une structure générique contenant les champs suivants :
• id_curve: une chaîne de caractères qui stocke l’id de la courbe,
• type: indique le type de courbe à utilisé.
• form: indique le type de coordonnés. Les valeurs possibles sontPROJECTIVE,JACOBIAN,
CO-ZetUNIFIED
• k: le corps sur lequel la courbes est définie (typefield),
• a,b: les coefficients de la courbe qui sont de typefield_elt,
• G,q : un générateur de la courbe et son ordre qui sont renseignés de manière
op-tionnelle. Si un générateur est utilisé, la génération de points aléatoire utilise ce
générateur.
• disc: le discriminant de la courbe.
void
ec_point_add (ec_point P3, const ec_point P1, const ec_point P2,
const ec_curve E)
{
switch(E->type)
{
case JACOBI_QUARTIC :
jacobi_quartic_point_add(P3, P1, P2, E);
break;
case EDWARDS :
edwards_point_add(P3, P1, P2, E);
break;
case WEIERSTRASS :
weierstrass_point_add(P3, P1, P2, E);
break;
}
}
5.2 Tests et performances
Les tests de correction ont été réalisés à l’aide de fichiers de données générées
aléa-toirement pour lesquelles les résultats des opérations ont été pré-calculées en utilisant
la bibliothèqueGMP, celle dePARI/GP ouMAGMA. Pour les courbes, nous avons utilisé les
5.2. TESTS ET PERFORMANCES 99
courbes du NIST, celles de Brainpool et des courbes générées aléatoirement. Chaque
fonc-tionnalité a été testée séparément et nous avons également vérifié les wrappers au niveau
des branchements avec les autres bibliothèques.
Les tests de performance ont été réalisés par rapport àGMP version 6.1.0 etPARI/GP
version 2.7.5. Nous avons également comparé notre implantation à celle de la
biblio-thèqueMIRACL. La machine utilisée est un processeur Intel core i7-4790 à 3.4GHz.
Au niveau de l’arithmétique multi-précision, nous atteignons les mêmes performances
queGMP mais notre implantation est plus rapide au niveau de la multiplication. Nous
avons également vérifié que l’utilisation de notre wrapper sur GMP n’avait pas une
in-fluence notable sur les performances. ConcernantPARI, la version utilisée est basée sur
GMP. Cependant, il y a un surcoût lié à la gestion de la pile et à l’implantation des
wrap-pers qui fait que les performances sont moindres par rapport àMPHELLetGMP.
Les figures5.2et5.3présentent nos résultats pour les coordonnées projectives et
jaco-biennes obtenus sur des courbes de différentes tailles.
160 192 224 256 320 384 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Projectives Jacobiennes PARI MIRACL projectives bits te m p s (s )
Figure. 5.2– Comparaison de temps de la multiplication scalaire naïve sous forme
Weiers-trass (1)
Pour ces résultats, le même algorithme de multiplication scalaire est utilisé, la
mul-tiplication scalaire naïve. Nous constatons un grand écart avec la bibliothèque MIRACL
pouvant aller jusqu’à un facteur proche de 8. Comme les résultats théoriques le laissaient
présager, les coordonnées jacobiennes sont plus rapides que les projectives. Si l’on se
compare à l’implantation dePARI, nous obtenons de meilleurs résultats. Nous sommes
en moyenne 30% plus rapides. Cela s’explique par le fait que les opérations sont réalisées
en coordonnées affines au sein dePARI.
100 CHAPITRE 5. IMPLANTATION LOGICIELLE
160 192 224 256 320 384 0 0,5 1 1,5 2 2,5 Projectives Jacobiennes PARI bits te m p s( s)Figure. 5.3– Comparaison de temps de la multiplication scalaire naïve sous forme
Weiers-trass(2)
Afin de déterminer un gain minimal que l’on pourrait obtenir en implantant dans
PARId’autres systèmes de représentation, il est intéressant de comparer les résultats
ob-tenus en configurant MPHELLde manière à utiliser les fonctions de base dePARI. Nous
avons constaté un gain moyen de 20%. La possibilité de brancher d’autres bibliothèques
surMPHELLpermet donc d’obtenir une plate-forme de test de formes ou de systèmes de
coordonnées.
Nous avons également comparé les temps de multiplication scalaires obtenus en
uti-lisant d’une part les formules unifiées pour Weierstrass et d’autre part celles pour les
courbes quartiques de Jacobi étendues. La figure5.4présente les résultats obtenus. Nous
retrouvons ainsi le bénéfice d’utiliser les courbes quartiques de Jacobi étendues quand
cela est possible.
160 192 224 256 320 0 0,2 0,4 0,6 0,8 1 1,2 1,4 1,6 1,8 2 Jacobi Quartic Weierstrass unifiées bits te m p s( s)
Figure. 5.4– Comparaison de temps de la multiplication scalaire naïve avec formules
unifiées
Chapitre 6
Implantation matérielle
Sommaire
6.1 Nos cibles . . . 103