• Aucun résultat trouvé

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

p2

etF

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

Documents relatifs