Cryptographie Elliptique
Cryptographie Elliptique
Cryptographie Elliptique
net/publication/323946296
CITATIONS READS
0 851
1 author:
Ismail Lotfi
Ecole Nationale Supérieure d'Informatique
1 PUBLICATION 0 CITATIONS
SEE PROFILE
All content following this page was uploaded by Ismail Lotfi on 22 March 2018.
Ismail Lotfi
13 juin 2017
Dédicaces
Je dédie ce travail à
Mes parents,
Mes sœurs et Mes frères.
Ismail Lotfi
Remerciements
2
Table des matières
Introduction Générale 7
1 Introduction à la cryptographie 8
1.1 Terminologie et Notations . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.1 Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.2 Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Principaux concepts cryptographiques . . . . . . . . . . . . . . . . . . . . 12
1.2.1 Cryptographie Symétrique . . . . . . . . . . . . . . . . . . . . . . 12
1.2.2 Cryptographie asymétrique . . . . . . . . . . . . . . . . . . . . . 12
1.2.3 Hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.4 Protocoles cryptographiques . . . . . . . . . . . . . . . . . . . . . 14
1.3 Méthodes de Chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.1 Chiffrement par bloc . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.2 Chiffrement par Flux . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3.3 Chiffrement par clé publique . . . . . . . . . . . . . . . . . . . . . 22
1.3.4 Fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . . . . 23
3
TABLE DES MATIÈRES
3 Conception et implémentation 49
3.1 Conception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.1 Outils et Environnement . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.2 Intérface principale . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.4 Etapes de génération de la clé publique . . . . . . . . . . . . . . . 57
3.2.5 Etapes de cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.2.6 Etapes de décryptage . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.2.7 Affichage graphique . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Conclusion Générale 66
4
Table des figures
5
La sécurité du chiffre ne doit pas
dépendre de ce qui ne peut pas être
facilement changé.
Kerckhoff
Introduction Générale
La nécessité de protéger les messages a existé depuis l’antiquité dans plusieurs do-
maines qui vont du domaine militaire au domaine commercial. Pour achever ce but,
plusieurs méthodes ont été utilisées jusqu’à l’apparition de la cryptographie moderne. Il
existe de nos jours deux grands modes de chiffrement : le chiffrement symétrique et le
chiffrement asymétrique.
Dans ce document, nous allons donner les différentes méthodes utilisées pour garantir
la confidentialité, l’authenticité et l’intégrité des messages en détaillant la cryptographie à
base des courbes elliptiques qui est le présent et probablement le futur de la cryptographie
asymétrique. Nous allons aussi décrire l’application qu’on a pu développer pour chiffrer
et déchiffrer un message clair écrit en caractères latins.
Le travail présenté dans ce document entre dans le cadre de mon projet de fin d’études
en cycle de Master, option Réseaux Émergents, Sécurité et Multimédia à l’Université
d’Oran 1 Ahmed Ben Bella.
7
Chapitre 1
Introduction à la cryptographie
8
Chapitre 1. Introduction à la cryptographie
Introduction
Depuis la seconde guerre mondiale, les besoins cryptographiques ont explosé. Le chif-
frement est devenu une nécessité non seulement dans le domaine militaire, mais aussi
dans l’économie, les télécommunications et bien d’autres domaines de pointe. La généra-
lisation de l’outil informatique a permi d’exploiter des algorithmes bien plus complexes ;
ce qui nous a donné deux grands systèmes de chiffrements : Le chiffrement symétrique
(ou bien à clé secrète) et le chiffrement asymétrique (ou bien à clé publique).
On va aussi donner une description de quelques fonctions et algorithmes qui sont utilisés
avec le chiffrement symétrique et asymétrique pour garantir l’intégrité et l’authenticité
des données.
9
Chapitre 1. Introduction à la cryptographie
1.1.2 Notations
En cryptographie, la propriété de base est que :
M = D(E(M ))
Où :
— M représente le texte clair.
— C est le texte chiffré.
— K est la clé (dans le cas d’un algorithme à clé symétrique).
— Ek et Dk dans le cas d’algorithmes asymétriques.
— E(x) est la fonction de chiffrement.
— D(x) est la fonction de déchiffrement.
D’où on peut représenter un cryptosystème par le schéma suivant [1, 2] :
10
Chapitre 1. Introduction à la cryptographie
11
Chapitre 1. Introduction à la cryptographie
12
Chapitre 1. Introduction à la cryptographie
1.2.3 Hachage
Formellement, une fonction de hachage est une fonction de l’ensemble des suites bi-
naires (de longueur quelconque, non bornée) vers les suites de longueur n :
13
Chapitre 1. Introduction à la cryptographie
Confidentialité
Elle est amenée par le chiffrement du message. Dans le cas de systèmes à clés symé-
triques, la même clé est utilisée pour EK (M ) et DK (C). Ce type de chiffrement nécessite
un échange sûr préalable de la clé K entre les entités A et B.
à l’aide d’un cryptosystème asymétrique, cet échange préalable n’est pas nécessaire.
Chaque entité possède sa propre paire de clés. On aura donc la paire PKA , SKA pour
l’entité A et la paire PKB , SKB pour l’entité B.
En marge de ces deux systèmes, existe également un système appelé "hybride" (figure
1.6), reposant comme son nom l’indique sur les deux systèmes précédents. Par l’intermé-
diaire du système à clé publique, on sécurise l’échange de la clé K. Ensuite, les deux parties
14
Chapitre 1. Introduction à la cryptographie
Intégrité
Il faut ici vérifier si le message n’a pas subi de modification durant la communication.
C’est ici qu’interviennent les fonctions de hachage [1].
Authentification
Elle a lieu à plusieurs niveaux [2] :
— Au niveau des parties communicantes : dans le cas d’un système symétrique
(figure 1.8) ou asymétrique (figure 1.9).
A la première figure, Ra est une nonce (p. ex. nombre aléatoire), propre à l’utili-
sateur A. Les lettres A et B représentent des identificateurs personnels.
15
Chapitre 1. Introduction à la cryptographie
A la seconde figure, la clé de chiffrement utilisée est bien la clé privée. Comme
le propriétaire de cette clé est le seul à la connaître, cela prouve qu’il est bien la
personne ayant chiffré le message.
Attention, dans cet exemple, seule l’authentification est souhaitée. Le message
envoyé pourra être lu par toute personne possédant la clé publique, c’est-à-dire,
n’importe qui. La confidentialité est ici nulle.
— Au niveau du message :
— Par l’utilisation d’un MAC (Message Authentication Code) généré à l’aide d’un
cryptosystème à clé symétrique où le MAC est constitué des derniers digits de
C (figure 1.10), ou généré à l’aide d’une fonction de hachage (figure 1.11), la
clé secrète K utilisée étant partagée par les deux entités A et B. Dans les deux
cas, l’authentification repose sur l’utilisation de la clé K.
16
Chapitre 1. Introduction à la cryptographie
17
Chapitre 1. Introduction à la cryptographie
Synthèse
18
Chapitre 1. Introduction à la cryptographie
DES
Le D.E.S. (Data Encryption Standard, c’est-à-dire Standard de Chiffrement de Don-
nées) est un cryptosystème agissant par blocs. Un bloc de 64 bits du texte clair entre par
un coté de l’algorithme et un bloc de 64 bits de texte chiffré sort de l’autre coté.
C’est un algorithme de chiffrement à clef secrète. La clef sert donc à la fois à chiffrer et
à déchiffrer le message. Cette clef a ici une longueur de 64 bits, c’est-à-dire 8 caractères,
mais dont seulement 56 bits sont utilisés. Les autres bits sont des bits de contrôle de
parité [2].
L’entière sécurité de l’algorithme repose sur les clefs puisque l’algorithme est parfai-
tement connu de tous. La clef de 64 bits est utilisée pour générer 16 autres clefs de 48
bits chacune qu’on utilisera lors de chacune des 16 itérations du D.E.S. Ces clefs sont les
mêmes quel que soit le bloc qu’on code dans un message.
19
Chapitre 1. Introduction à la cryptographie
AES
Suite aux failles du DES, quelques modifications ont été apportées (2DES, 3DES..),
mais pas toujours avec succès. L’algorithme de AES (Advanced Encryption Standard) est
apparue pour remplacer le DES et ces variantes.
Le AES possède les propriétés suivantes [2] :
— Plusieurs longueurs de clef et de bloc sont possibles : 128, 192, ou 256 bits.
20
Chapitre 1. Introduction à la cryptographie
LFSR
Un LFSR (Linear-Feedback Shift Register), est constitué de m sections contenant
chacune 1 bit (état interne) et d’une fonction de retour (feedback). Les sections sont en
réalité des cases mémoire (ou flip-flops). A chaque impulsion de l’horloge, les éléments
des sections sont décalés d’une position vers la droite. L’élément de la section 0 constitue
l’output du LFSR. L’élément de la section m-1 est le résultat de la fonction de retour [2].
21
Chapitre 1. Introduction à la cryptographie
La fonction de retour qui donne la valeur au flip-flop en position m-1 est la suivante :
RC4
Il s’agit d’un chiffrement par flux créé en 1987 par Ron Rivest. On le retrouve notam-
ment dans le standard SSL/TLS, dans Oracle Secure SQL, ou encore dans le protocole
WEP (Wired Equivalent Privacy, de la norme 802.11). Ce dernier fut remplacé par le
WPA (Wi-Fi Protected Access), mais celui-ci utilise toujours le RC4.
Le RC4 permet d’initialiser un tableau de 256 octets en répétant la clef autant de fois
que nécessaire pour remplir le tableau. Il est composé de 2 algorithmes [2] :
— L’algorithme KSA (Key schedule algorithm) qui initialise/randomise une fonc-
tion bijective
S : {0, ..., N − 1} −→ {0, ..., N − 1}
En pratique N = 256.
— L’algorithme PRGA (Pseudo Random Generator Algorithm) génère une suite
aléatoire d’octet :
— L’octet aléatoire généré est un S[Ji ] et l’octet chiffré ci = mi ⊕ S[Ji ].
— L’indice Ji et la fonction S est mise à jour.
22
Chapitre 1. Introduction à la cryptographie
est aisé. La factorisation d’un nombre en ses deux facteurs premiers est beaucoup plus
complexe.
Ce cryptosystème utilise deux clés d et e, interchangeables. Le chiffrement se fait selon
C = M e mod(n)
et le déchiffrement par
M = C d mod(n)
Principe Général : On possède une paire de clés, une publique (e,n) et une privée (d,n).
La première étape revient à choisir n. Il doit s’agir d’une valeur assez élevée, produit de
2 nombres premiers très grands p et q. En pratique, si p et q ont 100 chiffres décimaux,
n possédera 200 chiffres. Selon le niveau de sécurité souhaité, la taille de n peut varier :
512 bits, 768, 1024 ou 2048.
e ∗ d ≡ 1mod(f i(n))
Courbe elliptique
Il s’agit d’un concept proposé en 1985 par deux chercheurs Miller et Klobitz, de
façon totalement indépendante. Ce type de cryptographie, toujours basé sur le modèle
asymétrique, permet aussi bien de chiffrer que de signer. On utilise souvent l’abréviation
ECC, pour Elliptic Curve Cryptography. Les clés utilisées sont plus courtes pour une
sécurité égale ou supérieure [1].
La théorie sous-jacente, ainsi que l’implémentation sont plus complexes, Ils seront
détaillées dans le Chapitre 2 et 3.
MD5
Conçu par Ronald Rivest (le R dans RSA), c’est le dernier d’une série (MD2, MD4).
Cet algorithme produit un condensé de 128 bits. Il était il y a encore quelques temps
l’algorithme de hachage le plus largement répandu. La cryptanalyse et l’attaque par force
brute (2004) l’ont affaibli.
23
Chapitre 1. Introduction à la cryptographie
1. Complétion : ajout de padding si nécessaire afin que le message ait une longueur
de 448 mod 512. Cet ajout a toujours lieu.
2. Ajout de la longueur : on ajoute la longueur réelle du message (sur 64 bits) après
les 448 bits. En conséquence, la taille totale du bloc atteint 512 bits. Si la longueur
nécessite plus de 64 bits, on ne note que les 64 bits de poids faible.
3. Initialisation : initialiser 4 buffers de 32 bits chacun (A, B, C, D), qui constitue
l’IV (Initialisation Vector).
4. Calcul itératif : traiter le message par blocs de 512 bits. Il y a 4 rondes de 16
opérations qui sont réalisées en fonction du bloc (512), du contenu des buffers et
de fonctions primitives.
5. Le résultat final est obtenu en concaténant les résultats des additions des registres
A, B, C, D avec la valeur de CVq [2].
Où :
— IV : valeur initiale des registres ABCD.
— Yq : le q ème bloc de 512 bits du message.
— L : le nombre de blocs de 512 bits dans le message.
— CVq : variable chaînée obtenue par la manipulation du q ème bloc.
Securité du MD5
Durant l’été 2004, des chercheurs chinois sont parvenus à casser le MD5 en quelques
heures. Le même résultat est aujourd’hui obtenu en quelques minutes, voire quelques
secondes. En conclusion, le MD5 n’est plus sûr.
24
Chapitre 1. Introduction à la cryptographie
SHA0
SHA-0 est le premier membre de la famille "Secure Hash Standard", les fonctions de
hachage standardisées par le NIST 1 . Très inspirée de celles de la famille MD, la fonction
de compression de SHA-0 n’en diffère quasiment que par l’utilisation d’une expansion de
message novatrice [4] au lieu d’utiliser des permutations des mots de message pour chaque
tour, les mots de message étendu sont obtenus par un procédé récursif initialisé par les
mots du message d’entrée. Pour permettre une longévité suffisante de l’algorithme quant
à l’augmentation de la puissance de calcul, SHA-0 produit des hachés de n = 160 bits
pour un état interne de r = 5 registres de w = 32 bits chacun, initialisé par la variable
de chaînage d’entrée. Dans la suite, nous noterons A «< x (respectivement A »> x ) la
rotation de x positions vers la gauche (respectivement vers la droite) des bits du mot
A [2].
A−4 = (h4 )≪2 , A−3 = (h3 )≪2 , A−2 = (h2 )≪2 , A−1 = h1 , A0 = h0
À chaque appel, m = 16 mots de message seront traités, avec t = 4 tours de u = 20
étapes chacun (c’est à dire s = 80 étapes en tout). L’expansion de message n’utilise donc
plus de permutation. Les 16 premiers mots du message étendu sont égaux aux 16 mots
de message d’entrée de la fonction de compression. Le reste des Wi sont calculés par une
formule de récurrence :
M ,
i pour0 6 i 6 15
Wi =
Wi−3 ⊕ Wi−8 ⊕ Wi−14 ⊕ Wi−16 , pour16 6 i 6 79
Durant chaque étape i, la fonction fj , dépendante du tour j auquel i appartient, met
à jour le registre cible Ai+1 :
où les Kj sont des constantes prédéfinies pour chaque tour et les fonctions Φj sont des
fonctions booléennes définies pour chaque tour et prenant 3 mots de 32 bits en entrée. À
la fin des 80 étapes, les mots de la sortie de la fonction de compression sont calculés par :
h00 = A80 + A0 , h01 = A79 + A−1 , h02 = (A78 )≫2 + (A−2 )≫2 ,
h03 = (A77 )≫2 + (A−3 )≫2 , h04 = (A76 )≫2 + (A−4 )≫2
Une description visuelle d’une étape est donnée dans la figure 2.10 [2].
1. National Institute of Standards and Technology of the United States
25
Chapitre 1. Introduction à la cryptographie
SHA1
SHA-1 est la version corrigée de SHA-0, et fut publiée en 1995 par le NIST. L’ex-
pansion de message mise à part, la description de SHA-1 est absolument identique à
celle de SHA-0. La seule et unique différence consiste en une rotation dans la formule de
récurrencede l’expansion de message, ce qui implique une meilleure diffusion [4] :
M ,
i pour0 6 i 6 15
Wi =
(Wi−3 ⊕ Wi−8 ⊕ Wi−14 ⊕ Wi−16 )≪1 , pour16 6 i 6 79
En 2005, des problèmes de sécurité de SHA-1 ont été mis en évidence. Une équipe
composée de chercheurs de chez Google et du CWI (Centrum Wiskunde et Informatica)
ont annoncé le 23 février 2017 qu’ils avaient réussi à obtenir une collision entre deux
documents.
SHA2
Publiée en 2002, est une famille de fonctions de hachage qui comporte les fonctions,
SHA-256 et SHA-512 dont les algorithmes sont similaires mais opèrent sur des tailles de
mot différentes.
Elle contient plusieurs nouveautés par rapport à ses prédécesseurs. Par exemple, l’ex-
pansion de message est beaucoup plus complexe et corrige les précédentes erreurs de
SHA-0 ou SHA-1. De plus, la fonction d’étape met à jour deux registres à la fois pour
une meilleure diffusion. Aussi, il n’y a plus réellement de notion de tour dans SHA-2, car
les mêmes fonctions booléennes sont utilisées dans toutes les étapes [4].
Le SHA-2 est devenu le nouveau standard recommandé en matière de hachage cryp-
tographique après les attaques sur MD5 et SHA-1.
26
Chapitre 1. Introduction à la cryptographie
Conclusion
On a présenté dans ce chapitre une une vue d’ensemble sur la cryptographie moderne
en mettant le point sur les terminologies et les notations essentielles dans le domaine de
cryptologie.
27
Chapitre 2
28
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Introduction
Les courbes elliptiques sont très utilisées dans la cryptographie dans plusieurs appli-
cations et protocoles de nos jours. Dans ce chapitre, nous allons mettre le point sur la
théorie des courbes elliptiques et leurs applications dans la cryptographie.
Nous allons en premier temps donner les notions mathématiques des EC (Elliptic
Curves), puis détailler la procédure complète pour chiffrer un texte clair par EC. Nous
allons aussi discuter comment on peut utiliser les courbes elliptiques dans la signature
numérique.
Nous allons donner une description des attaques connue sur la cryptographie à base des
courbes elliptiques pour éviter d’avoir une mauvaise implémentation de cette dernière.
Nous finirons par donner une comparaison entre la cryptographie à base des courbes
elliptiques et le RSA.
29
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
E : y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6
avec ai ∈ K. Une courbe donnée par une telle équation est dite lisse si le système suivant
n’admet pas de solution
a = 3x2 + 2a2 x + a4
1y
2y + a1 x + a3 = 0
f (x, y) = y 2 + a1 xy + a3 y − x3 − a2 x2 − a4 x − a6
E : y 2 = x3 − 27c4 x + 54c6 ,
avec b4 = 2a4 + a1 a3 , b6 = a23 + 4a6 , c4 = b22 − 24b4 , c6 = −b32 + 36b2 b4 − 216b6 . Ainsi
si char(K) 6= 2, 3, nous pouvons toujours travailler avec des courbes elliptiques de la
forme [5]
E : y 2 = x3 + Ax + B
Dans ce cas la courbe est lisse (elle possède une tangente en tout point de sa courbe
représentative) si :
4A3 + 27B 2 6= 0.
Remarque. Nous allons dans tout ce qui suit uniquement considérer des corps ayant
une caractéristique différente de 2 et 3.
30
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Figure 2.1 – Addition de deux points sur une courbe elliptique sur R.
Cas particuliers :
— Si P1 et P2 sont symétriques par rapport à l’axe des abscisses, on considère alors
que la somme des deux points est nulle. Il s’agit donc du point à l’infini.
— Si la droite (L) est tangente en un point de la courbe, on considère qu’elle intersecte
deux fois la courbe en ce point et par conséquent la somme de P1 et P2 (ou bien
le doublement de P) est le symétrique du point de tangence.
Figure 2.2 – Doublement d’un point sur une courbe elliptique sur R.
31
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
(λ(x − x1 ) + y1 )2 = x3 + ax + b
⇔ 0 = x3 − λ2 x2 + K
avec K = (2λ2 x1 − 2y1 λ + a)x − λ2 x21 + 2y1 λx1 + b − y12 . x est donc la racine d’un
polynôme du troisième degré dont nous connaissons déjà deux autres racines : x1
et x2 . On remarque alors que pour tout polynôme de la forme x3 + ax2 + bx + c et
admettant pour racines r, s, t, alors on a : x3 +ax2 +bx+c = (x−r)(x−s)(x−t) =
x3 − (r + s + t)x2 + (rs + rt + st)x − rst. On a alors −a = r + s + t et donc en
connaissant deux racines (par exemple r et s), on peut en déduire la troisième :
t = −a − r − s. Dans notre cas, on obtient alors :
x = −(−λ2 ) − x1 − x2
et donc :
x3= λ 2 − x1 − x2
y3 = −(λ(x3 − x1 ) − y1 ) = λ(x1 − x3 ) − y1
32
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Ensemble de points
Déterminons l’ensemble des points d’une courbe donnée par une équation mise sous
la forme réduite de Weierstrass i.e. y 2 = x3 + ax + b en se plaçant dans le corps Z/pZ.
Pour cela, on considère x ∈ [1, p]. Pour chaque valeur de x, on calcule x3 + ax + bmodulop.
On en déduit s’il existe un ou plusieurs entier y vérifiant y 2 = x3 + ax + b. Si c’est le cas,
ces valeurs de y ∈ [1, p] nous donnent l’ordonnée des points d’abscisse x appartenant à la
courbe.
Cardinalité
Soit E la courbe elliptique définie sur Fq , avec q = p > 5 premier ou q = 2n défnie
comme ci-dessus [7].
L’ensemble des points de E forme un groupe de taille (borne de Hasse-Weil)
√ √
q + 1 − 2 q 6 #E 6 q + 1 + 2 q
Si P est un point de E d’ordre l (i.e lP = O), avec l un nombre premier, on utilise le
groupe
G = {P, 2P, .., lP = O}.
En pratique, on utilise les courbes E telles que
#E = ml,
avec l un grand nombre premier (de taille 160 bits environ) et m petit pour la cryptogra-
phie.
33
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Table de correspondance
Cette méthode consiste à ce que les parties communicantes partagent une table de
correspondance, où chaque caractère est équivalent à un point sur la courbe [8].
34
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Décodage
Pour retrouver m, il suffit de calculer (x − 1)/y et de prendre le plus grand entier
inférieur à cette valeur.
35
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Notons que K peut être utilisé comme clé secrète pour la cryptographie symétrique
(AES,..) [2].
36
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Nous allons présenter un modèle de signature basé sur les courbes elliptiques et réputé
difficilement falsifiable [5]. Ce modèle utilise les fonctions de hachages (SHA2 où SHA3
sont recommandés).
Supposons donc qu’Alice envoie un message à Bob et qu’elle veuille signer électroni-
quement son message. Si elle utilise la signature ElGamal voici comment elle doit s’y
prendre.
Alice doit tout d’abord créer une clé publique. Pour cela, elle choisit une courbe
elliptique E définie sur un corps fini Fq , de manière que le problème du logarithme
discret soit difficile sur E(Fq ). Elle choisit aussi un point A ∈ E(Fq ), tel que l’ordre n de
A est un grand nombre premier. De plus, elle choisit un nombre secret a et calculeB = aA.
Finalement, Alice choisit encore deux fonctions, une fonction de hachage H : N → N et
une fonction
f : E(Fq ) → Z
Par exemple, si q est un nombre premier, elle peut prendre f (x, y) = x(modq).
L’information publique d’Alice est (E, Fq , A, B, H, f ). Elle garde secret le nombre a.
Pour signer son document, Alice fait comme suit :
1. Elle représente son document sous forme d’un nombre entier m et le hache, c’est-
à-dire calcule H(m) (n étant un grand nombre premier, H(m) 6 n. Si tel n’est
pas le cas, on sépare le message en morceaux m1 , ..., mk tels que chaque H(mi ) 6
n, 1 6 i 6 k.).
2. Elle choisit un nombre entier k avec P GCD(k, n) = 1 et calcule
R = kA.
Le message signé est (m, s, R). Si Alice veut garder son message secret, elle peut par
exemple le crypter avec le ECC ou RSA et utiliser le message crypté au lieu de m.
37
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
y 2 = x3 + 2x + 1.
Soient P = (0, 1) et Q = (30, 40). Par le théorème de Hasse, nous savons que l’ordre de
G est au plus 56, posons m = 8. Les points iP pour 0 6 i 6 7 sont
(0, 1), (1, 39), (8, 23), (38, 38), (23, 23), (20, 28), (26, 9).
38
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
où nous nous arrêtons puisque le troisième point correspond à 7P . Nous avons donc
Q = (7 + 2 ∗ 8)P = 23P
En 1996 une attaque sur un système cryptographique basé sur les EC de clé de 120
bits a été esquissée et réalisée après 3 ans. L’attaque était basée sur un matériel dédié
qui peut faire 25 million d’opérations en parallèle. Le coût de construire cette machine
était de $10 million et le temps nécessaire pour obtenir la clé était 32 jours. [11]
39
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Puisque le chiffrement d’un point avec les courbes elliptiques (la multiplication d’un
point k fois où k est la clé) est une succession de doublements et d’addition de points
dont l’enchaînement dépend directement de la clé, cette dernière peut être extraite.
Recomendation Le NIST a publiée ces recommandation sur les courbes à utiliser [13].
Soit la courbe E : y 2 = x3 + ax + b (mod p) avec r l’ordre du point de base.
Selon la taille de la clé, les paramètres : a, b, p, r seront :
— Pour une clé de 192 bits :
— a = -3
— b = 24551555460089438177402939151974517847691080
58161191238065
— p = 62771017353866807638357894232076664160839087
00390324961279
— r = 26959946667150639794667015087019625940457807
714424391721682722368061
— Pour une clé de 224 bits :
— a = -3
— b = 18958286285566608000408668544493926415504680
968679321075787234672564
— p = 269599466671506397946670150870196306735579
16260026308143510066298881
— r = 269599466671506397946670150870196259404578
07714424391721682722368061
— Pour une clé de 256 bits :
— a = -3
— b = 410583637251521421293261297800472684091144
41015993725554835256314039467401291
— p = 11579208921035624876269744694940757353008614
3415290314195533631308867097853951
— r = 11579208921035624876269744694940757352999695
5224135760342422259061068512044369
— Pour une clé de 384 bits :
— a = -3
— b = 27580193559959705877849011840389048093056905
8563615685214287073019886892413098608651362
60764883745107765439761230575
— p = 39402006196394479212279040100143613805079739
27046544666794829340424572177149687032904726
6088258938001861606973112319
40
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
— r = 39402006196394479212279040100143613805079739
27046544666794690527962765939911326356939895
6308152294913554433653942643
— Pour une clé de 521 bits :
— a = -3
— b=
— p = 68647976601306097149819007990813932172694353
00143305409394463459185543183397656052122559
64066145455497729631139148085803712198799971
6643812574028291115057151
— r = 68647976601306097149819007990813932172694353
00143305409394463459185543183397655394245057
74633321719753296399637136332111386476861244
0380340372808892707005449
41
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
On remarque dans le tableau suivant que le DL 1 sur un groupe définie sur les EC utilise
une clé moins petite que sur un autre groupe.
La meilleur attaque
√ connue sur les courbes elliptiques est "Baby Step Giant Step" qui
est de l’ordre de O( 2n/2 ) [6] où n est la taille du groupe fini de la courbe en bits. Par
exemple, pour avoir une sécurité de 128-bits, il faut choisir un groupe de taille 256-bits
(voir figure 2.7).
1. Discrete Logarithm
42
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Pour RSA, le meilleur algorithme connue est l’algorithme GNFS 2 pour factoriser un
entier. Il a un ordre de [15] s !
3 64 2
O exp n(logn)
9
où n est le nombre à factoriser.
L’application des deux formules précédente nous donne le tableau suivant (publié par
le NIST en 2007) qui illustre bien le bénéfice d’utiliser les courbes elliptiques [16], tq :
— L La taille de la clé publique
— N La taille de la clé privé
— k et f La taille de la clé de chiffrement
Pour s’assurer des résultats donnés par le NIST, on a développé un script en Node.JS
qui nous donne le nombre de bits de sécurité selon la longueur de la clé.
var b i g I n t = r e q u i r e ( ’ big−i n t e g e r ’ ) ;
var l o g F o r B i g I n t s = f u n c t i o n ( b i g I n t ) {
var s t r i n g = b i g I n t . t o S t r i n g ( ) ;
r e t u r n s t r i n g . l e n g t h ∗ Math . l o g ( 1 0 ) + Math . l o g ( p a r s e F l o a t ( ’ 0 . ’ + s t r i n g ) ) ;
}
43
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
var getECCStrength = f u n c t i o n ( p S i z e ) {
r e t u r n Math . l o g 2 ( Math . pow ( Math . pow ( 2 , p S i z e ) , 0 . 5 ) )
}
On peut bien remarquer que nos résultats sont proches des résultats donnés par le
NIST. On justifie la différence par le savoir que le NIST est une société administrative
qui a comme rôle "produire les guides aux agences du gouvernement américain", et pour
faciliter la tâche aux utilisateurs, elle a regroupé tous ces résultats dans un seul tableau
et a arrondi quelques valeurs. L’utilisateur décide en premier temps le niveau de sécurité
nécessaire pour son application, puis il choisie le nombre de bits correspondant à son
algorithme.
On peut conclure cette partie en disant que pour un système basé sur RSA avec 2048
bits, on peut avoir une sécurité équivalente seulement avec 224 bits avec les EC.
Analyse de performance
Pour faire une comparaison détaillée entre RSA et la ECC en terme de performance,
on va utiliser comme base le rapport annuel de l’académie de recherche européenne
ECRYPT2 [17, 18]. Ils ont fait une expérience sur 3 différentes machines avec différentes
architectures, où ils ont effectué trois différents processus : signature, vérification de si-
gnature et génération de clé.
44
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Génération de signature
On remarque bien que la ECDSA 3 et toujours plus rapide que le RSA pour les diffé-
rentes machines. En plus, l’éfficassité des courbes elliptiques augmente avec le niveau de
sécurité.
Vérification de signature
Contrairement à la signature, le temps d’exécution pour les EC est plus long que celui
de RSA.
3. Elliptic Curve Digital Signature Algorithm.
45
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Génération de clé
On remarque le temps nécessaire pour la génération de la clé est très petit pour toutes
les différentes machines et tous les niveaux de sécurité, contrairement à RSA, qui est plus
longs.
Conslusion
On peut bien dire que ECDSA est plus rapide que RSA pour la signature et la géné-
ration de la clé. Malgré que la vérification consomme plus de temps, cette opération est
généralement effectuée sur des machines puissantes et non pas sur les smart-card et les
terminaux à faible coût.
46
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
47
Chapitre 2. La Cryptographie sur Les Courbes Elliptiques
Conclusion
Dans ce chapitre nous avons explorer la théorie des courbes elliptiques et le problème
du logarithme discret, qui est la base de la cryptographie sur des courbes elliptiques.
Nous avons choisie la courbe elliptique adéquate afin d’avoir un cryptosystème simple.
Ce choix est primordiale.
Nous avons vu les différentes attaques connues sur les courbes elliptiques et que mal-
gré que la théorie derrière la cryptographie à base des courbes elliptiques soit solide, la
mauvaise implémentation sur machine peut rendre une attaque par canaux cachés très
facile, d’où il faut bien prendre ce point en compte lors du développement.
Nous avons exploité aussi les différentes applications et protocoles de nos jours qui
utilisent la cryptographie à base des courbes elliptiques. Il a été possible de comparer
cette méthode de chiffrement avec le RSA. Les résultats on démontrés la rapidité et la
sécurité de la cryptographie à base des courbes elliptiques par rapport à RSA avec une
petite clé.
48
Chapitre 3
Conception et implémentation
49
Chapitre 3. Conception et implémentation
Introduction
Nous allons montrer dans ce chapitre les étapes et moyens qu’on a utilisé pour implé-
menter notre application qui peut utiliser des clé de 224 bits.
Nous allons en premier temps expliquer la conception de notre application, puis détailler
le code source et les fonctions principales de notre application.
1. Internet of Things
50
Chapitre 3. Conception et implémentation
3.1 Conception
L’étude de conception est la phase la plus importante du cycle de développement d’un
système informatique. En effet, elle permet de confronter la spécification et l’analyse avec
l’implémentation. Elle présente le point de convergence des deux aspects : « Le quoi faire
» (analyse) et le « comment faire » (réalisation). Ceci justifie, parfois, le retour vers une
étape antérieur afin de rectifier un besoin pour l’implémenter, ou affiner l’analyse. Pour
cette raison, on consacre cette partie à la conception de notre application.
On souhaite développer une application Desktop qui nous permet de faire la crypto-
graphie à base des courbes elliptiques. L’utilité de cette application est la démonstration
du principe des courbes elliptiques. Pour cela, l’utilisateur va avoir deux fenêtres qui
représentent les deux parties communicantes : Alice et Bob.
La courbe utilisée par défaut est la NIST p-224, d’où la génération des clés et le partage
des paramètres publiques se font automatiquement au démarrage.
La figure suivante montre le diagramme d’activité des différentes taches effectuées par
notre application :
51
Chapitre 3. Conception et implémentation
52
Chapitre 3. Conception et implémentation
3.2 Implémentation
Dans cette partie, on va aborder le coté implémentation de l’application, où on par-
lera des différentes classes et ressources utilisées. On va donner un soin particulier pour
détailler quelques morceaux de code afin de mieux expliquer le fonctionnement de l’ap-
plication. On discutera aussi les différents problèmes rencontrés durant le développement
de l’application ainsi que les moyens utilisés pour les résoudre.
53
Chapitre 3. Conception et implémentation
Pour crypter un message, Alice entre son texte dans le champ "message" et clique sur le
bouton "Crypter". Elle aura comme sortie une suite de points séparés par # qui représente
le texte chiffré avec la clé publique de Bob.
De sa part, Bob, pour déchiffrer le message de Alice, Bob met le texte envoyé par
Alice dans la zone "Décryptage" et clique sur le bouton "Décrypter"
Si la courbe utilisée a un p < 1000, l’application peut donner une représentation gra-
phique de cette dernière.
54
Chapitre 3. Conception et implémentation
3.2.3 Classes
Les principes de base pour la POO 3 ont été adoptés au cours de ce projet. Ceci
assure un maintien facile de l’application ainsi qu’une meilleure organisation des différents
modules tout au long du cycle de développement.
3. Programmation Orientée Objet
55
Chapitre 3. Conception et implémentation
On a 5 classes principales :
1. MyPoint : représente un point de la courbe.
c l a s s MyPoint
{
public :
MyPoint ( ) ;
MyPoint ( mpi x , mpi y ) ;
v o i d setX ( mpi x ) ;
v o i d setY ( mpi y ) ;
mpi X ( ) ;
mpi Y ( ) ;
s t a t i c mpi stringToMPI ( QString t e x t ) ;
QString mpiToString ( mpi number ) ;
QString t o S t r i n g ( ) ;
b o o l e q u a l ( MyPoint ∗p2 ) ;
private :
mpi x , y ;
};
private :
MyPoint ∗p1 , ∗p2 ;
};
56
Chapitre 3. Conception et implémentation
MyCM ∗ generateCm ( . . . ) ;
mpi g e n e r a t e P r i v a t e K e y ( ) ;
b o o l isOnCurve ( mpi x , mpi y ) ;
QString pointsToText ( QList<MyPoint∗> ∗ l i s t ) ;
QString p o i n t T o S t r i n g ( MyPoint ∗p ) ;
private :
int a ;
mpi b ;
mpi p ;
mpi r ;
};
private :
mpi private_key_a , private_key_b ;
MyPoint ∗ public_key_a , ∗ public_key_b ;
ECC_BIG ∗ ecc_big ;
mpi k_a , k_b ;
};
c l a s s D i a l o g P l o t : p u b l i c QDialog
{
public :
v o i d setA ( i n t a ) ;
v o i d setB ( i n t b ) ;
v o i d setP ( i n t p ) ;
v o i d setR ( i n t r ) ;
b o o l drawCurve ( ) ;
b o o l drawCurveR ( ) ;
private :
int a , b , p , r ;
};
57
Chapitre 3. Conception et implémentation
do{
mpi_fill_random(&key , r _ s i z e , generateRNG , NULL ) ;
} w h i l e ( mpi_cmp_mpi(&key , &r ) == 1 ) ;
r e t u r n key ;
}
i f (temp_mod == temp_1 ) {
r = a ddPoint s ( r , q ) ;
nb_add++;
}
i f ( mpi_cmp_int(&k , 0 ) == 1 ) {
nb_double++;
q = addDouble ( q ) ;
}
}
return r ;
}
encryptPointFast()
En effet, la fonction encryptP ointF ast() est au cœur de cette application, détaillons
alors son fonctionnement :
On fait appelle à deux fonctions : addDouble(M yP oint ∗ p) et addP oints(M yP oint ∗
p1, M yP oint ∗ p2).
58
Chapitre 3. Conception et implémentation
mpi_add_int(&n , &n , a ) ;
mpi_mul_int(&d , &p_y , 2 ) ;
i f ( mpi_cmp_int(&d , 0 ) == −1){
mpi_mul_negative(&n , &n , −1);
mpi_mul_negative(&d , &d , −1);
}
mpi x , temp0 ;
mpi_init (&x ) ; mpi_init (&temp0 ) ;
59
Chapitre 3. Conception et implémentation
La fonction addP oints(M yP oint ∗ p1, M yP oint ∗ p2) exécute l’addition de deux points
différents :
MyPoint ∗ECC_BIG : : addPoi nts ( MyPoint ∗ p o i n t 1 , MyPoint ∗ p o i n t 2 )
{
mpi s , n , p1_x , p1_y , p2_x , p2_y , d ;
mpi temp_x_public , temp_y_public ;
// t e s t i f no one o f t h e p o i n t s i s an i n f i n i t e number
i f ( ( mpi_cmp_int(&p1_x , 0 ) == 0 ) && ( mpi_cmp_int(&p1_y , 0 ) == 0 ) ) {
MyPoint ∗pppp = new MyPoint ( p o i n t 2 −>X( ) , p o i n t 2 −>Y ( ) ) ;
r e t u r n pppp ;
}
i f ( ( mpi_cmp_int(&p2_x , 0 ) == 0 ) && ( mpi_cmp_int(&p2_y , 0 ) == 0 ) ) {
r e t u r n new MyPoint ( p o i n t 1 −>X( ) , p o i n t 1 −>Y ( ) ) ;
}
i f ( mpi_cmp_int(&d , 0 ) == −1){
mpi_mul_negative(&n , &n , −1);
mpi_mul_negative(&d , &d , −1);
}
mpi x , temp0 ;
mpi_init (&x ) ;
mpi_init (&temp0 ) ;
60
Chapitre 3. Conception et implémentation
}
else {
s = NegModMPI(&temp0 , &p ) ;
}
Au lieu d’utiliser l’algorithme naïve pour faire la multiplication d’un point avec nA (1
doublement + (nA − 1) addition), on a implémenté l’algorithme "Double and Add" [7],
qui rend la multiplication plus rapide.
61
Chapitre 3. Conception et implémentation
Après avoir la liste des points sur la courbe correspondant du texte à chiffrer, on génère
un nombre aléatoire kA < r pour générer le couple Cm que Alice va envoyer à la deuxième
entité (Bob).
r e t u r n new MyCM ( p1 , p2 ) ;
}
Le premier paramètre est kA , le deuxième est le point qu’on veut crypté et le troisième
paramètre est la clé publique de Bob.
On appelle cette fonction autant de fois qu’on a des points, puis on envoie le tout à
Bob.
62
Chapitre 3. Conception et implémentation
temp_y = pp1−>Y ( ) ;
mpi_mul_negative(&temp_y , &temp_y , −1);
pp1−>setY ( temp_y ) ;
// pp2 e s t l e p o i n t en c l a i r e
MyPoint ∗pp2 = ecc_big−>ad dPoints ( p2 , pp1 ) ;
Par la fin, on appelle la fonction pointT oString(M yP oint ∗p) pour retrouver le caratère
correspendant à ce point.
QString ECC_BIG : : p o i n t T o S t r i n g ( MyPoint ∗p )
{
f o r ( i n t i =1; i < 3 8 ; i ++){
mpi c o u n t e r ; mpi_init (& c o u n t e r ) ;
c o u n t e r = stringToMPI ( QString : : number ( i ) ) ;
MyPoint ∗p2 = e n c r y p t P o i n t F a s t ( base_point , c o u n t e r ) ;
i f ( p2−>e q u a l ( p ) ) r e t u r n codeToChar ( i ) . toUpper ( ) ;
}
return " " ;
}
63
Chapitre 3. Conception et implémentation
return true ;
}
data1 [ i ] = QCPCurveData ( i , x , y ) ;
data2 [ i ] = QCPCurveData ( i , x , −y ) ;
}
ui−>customPlot−>r e s c a l e A x e s ( ) ;
64
Chapitre 3. Conception et implémentation
Conclusion
Nous avons vu dans cette partie les étapes et les fonctions nécessaires pour implémen-
ter la cryptographie à base des courbes elliptiques (ECC). Malgré qu’il est plutôt un peu
délicat de mettre en œuvre ce cryptosystème, la manière que la partie théorique a été
présenté nous a aidé à coder plus rapidement juste en suivant l’algorithme de base.
65
Conclusion Générale
Dans le but d’arriver à développer cette application, nous nous sommes intéressé au
langage C++. Ce langage de programmation nous donne des outils plus rapides en exé-
cution et plus efficaces que les autres langages de haut niveau (Java, python..). Le code
de cette application peut être facilement transformé à un code C pour l’utiliser dans les
capteurs sans fil.
66
Bibliographie
[1] Cours sécurité informatique, Prof GUEZOURI Mustapha, Université d’Oran 1 Ahmed
Ben Bella, 2016.
[2] Cryptographie et Sécurité informatique, Université de Liège, 2009 - 2010.
[3] Construction et Analyse de Fonctions de Hachage, Gaëtan Leurent, Université Paris
Diderot, 2010.
[4] Analyse de fonctions de hachage cryptographiques, Thomas Peyrin, Université de
Versailles Saint-Quentin-en-Yvelines, 2008.
[5] Courbes elliptiques et cryptographie, Hägler Michael, 2006.
[6] Cryptographie sur les courbes elliptiques, Nicolas Papernot, 2012.
[7] Cryptographie Avancée : Courbes elliptiques, Cécile GONÇALVES, UPEC, 2015.
[8] Encryption of data using Elliptic Curve over finite fields, D.Sravana Kumar, CH
Suneetha, A.Chadrasekhar, international Journal of Distributed and Parallel Systems,
January 2012.
[9] A course in Number Theory and Cryptography, Kobliz, 1994.
[10] Courbes Elliptiques, Application à la Cryptographie, Stéphane Ballet et Alexis Bo-
necaze , Ecole Polytech de Marseille.
[11] Parallel Collision Search with Cryptanalytic Applications, P.C. van Oorschot, M.J.
Wiener, Journal of Cryptology, 1996.
[12] Arithmétique pour la Cryptographie basée sur les Courbes Elliptiques, Nicolas Mé-
loni, Université Montpellier II, 2007.
[13] Recommended Elliptic Curves For Federal Government Use, NIST, 1999.
[14] Selecting Cryptographic Key Sizes, Lenstra & Verheul, Journal of Cryptology, 2001.
[15] Implementation Guidance for FIPS PUB 140-2 and the Cryptographic Module Va-
lidation Program, NIST, 2017.
[16] Archived NIST Technical Series Publication [SP800-57], NIST, 2007.
[17] Benefits of Elliptic Curve Cryptography, Gemalto, 2012.
[18] ECRYPT2 Yearly Report on Algorithms and Keysizes, ECRYPT2, 2009.
67