TP - LIX

Transcription

TP - LIX
Université Paris-Est Créteil, année 2015-2016
M2 SSI - Cryptographie Avancée
TP2 : Courbes elliptiques
Un compte-rendu est à rendre par email à l'adresse [email protected] au plus tard
le mercredi 16 décembre au soir. Vous rendrez un chier .txt avec votre code ainsi que les réponses aux
questions (vous pouvez utiliser des# pour commenter en sage), ce qui vous permettra à la fois d'avoir le code
et les réponses aux questions.
Introduction
Sage est un logiciel libre de calcul formel et de mathématiques sous licence GPL. Il combine de nombreux
programmes libres dans une interface basée sur le langage de programmation Python. Sage a deux modes
d'utilisation, un mode bloc-note dont l'interface est un navigateur web et un mode ligne de commande.
Nous utiliserons le mode bloc-note dont l'interface est disponible à l'adresse : https://sagecell.
sagemath.org/
Une documentation est disponible à l'adresse http://www.sagemath.org/doc/reference. La documentation de Python 2.7 est disponible à l'adresse http://docs.python.org/2.7/.
Les ressources dont vous disposez pour faire ce TP
Tout d'abord, commencez par regarder et faire le tutoriel TP2_Courbes-elliptiques-TUTO.pdf qui
accompagne ce TP. Il vous permettra de comprendre les commandes de base sur les courbes elliptiques. Vous
trouverez le code dans TUTO.txt.
An d'utiliser les standards cryptographiques, vous disposez d'un chier Standards.txt dans lequel différentes courbes sont données sous la forme :
Nom de la courbe
q= valeur de q (p premier ou 2 avec n premier)
a= valeur du coecient a dans l'équation de E
b= valeur du coecient b dans l'équation de E
Px= Abscisse du générateur P
Py= Ordonnée du générateur P
l= ordre de P
Vous disposez aussi d'un chier couplage_et_identite.txt dans lequel des fonctions ont été codées
an de permettre une utilisation simple des couplages et de chirer simplement un message avec le protocole
de chirement de Boneh et Franklin basé sur l'identité. Ces fonctions sont les suivantes :
couplage : cette fonction prend deux points d'une courbe E et renvoie une valeur dans F .
hash_curve : cette fonction prend en paramètres le triplet (E, P, id) où E est la courbe elliptique avec
laquelle on chire, P est le générateur (qui est public) et id est l'identité que l'on souhaite hacher.
Cette fonction renvoie un point Q qui est un multiple de P , et qui correspond au hash de l'identité.
hash_couplage : cette fonction prend en paramètre un élément de F et le convertit en un hexadécimal de longueur xe.
XOR : cette fonction permet de faire le ou exclusif entre deux hexadécimaux.
Vous trouverez un exemple d'utilisation à la n de l'énoncé de l'exercice 5. An de faire les exercices 4 et 5,
il vous sura de copier/coller les fonctions codées dans ce chier et de les utiliser comme décrit à la n des
énoncés.
n
pk
pk
1
Les courbes elliptiques avec sage
Exercice 1 :
1. Générez une courbe E avec 50 bits de sécurité sur F où p est un nombre premier. On n'oubliera pas
de noter dans le compte rendu la valeur de p choisie, ainsi que l'équation de la courbe.
2. Calculez un générateur de E que l'on notera P . On n'oubliera pas de noter les coordonnées de P ainsi
que son ordre.
3. Simulez Die-Hellman sur E .
4. Simulez ECDSA sur E : signez un message m puis vériez la signature. On regardera le tuto pour
comprendre comment on importe les fonctions de hachage.
p
Cécile GONÇALVES
Page 1/ 3
TP2 : Courbes elliptiques
Université Paris-Est Créteil, année 2015-2016
M2 SSI - Cryptographie Avancée
Exercice 2 :
1. Générez une courbe E avec 50 bits de sécurité sur F où n est un nombre premier. On n'oubliera pas
de noter dans le compte rendu la valeur de n choisie, ainsi que l'équation de la courbe.
2. Calculez un générateur de E que l'on notera P . On n'oubliera pas de noter les coordonnées de P ainsi
que son ordre.
3. Simulez Die-Hellman sur E .
4. Simulez ECDSA sur E : signez un message m puis vériez la signature.
Exercice 3 : Choisissez la courbe des standards du p192
1. Vériez que p est premier.
2. Vériez que le cardinal de la courbe est premier.
3. Vériez que le point G = (G , G ) est d'ordre premier.
Exercice 4 : Échange de clé tripartite On considère la courbe
2n
x
y
E : y 2 = x3 + x,
dénie sur F , avec p = 1125899906842679.
1. Construire la courbe E .
2. Quel est le plus grand facteur premier, noté `, du cardinal de E ?
3. Construire un point P d'ordre `. On n'oubliera pas de noter les coordonnées de P ainsi que son ordre.
4. Simulez un échange de clés tripartite entre Alice, Bob et Charlie : tirez au hasard 3 valeurs a, b et
c comprises entre 1 et ` − 1 et calculez leur clé commune grâce à la fonction couplage qui se trouve
dans le chier
Par exemple, l'utilisation de la fonction couplage dans une simulation d'échange de clés tripartite est la
suivante, donne la sortie suivante :
p
couplage(A, B)^c == couplage(A, C)^b == couplage(B, C)^a
couplage(A, B)^c
True
278977640184985*w + 847370175245362
Exercice 5 : Chirement basé sur l'identité On considère la courbe
E : y 2 = x3 + x,
dénie sur F , avec p = 1125899906842679.
1. Cette courbe est la même qu'à l'exercice précédent. Reprenez votre générateur P .
2. Vous êtes le PKG. Générez-vous une paire de clés : clé secrète sP KG et publique P P KG. On
utilisera pour cela les fonctions hash_couplage et hash_courbe qui se trouvent dans le chier
couplage_et_identite.txt.
3. Construisez vous une clé secrète à partir de la clé secrète du PKG et de votre identité (nom ou adresse
email par exemple).
4. Générez la clé publique correspondant à votre identité et chirez un message. Attention, la fonction
XOR prend en entrée un hexadécimal. Il faudra donc au préalabe convertir votre chaine de caractère
en hexadécimal avec la méthode encode('hex'). Vous trouverez à la n de l'énoncé un exemple
d'utilisation de encode et de decode.
5. Déchirez le message crypté avec votre clé secrète.
L'exemple ci-dessous montre les fonctions dont vous aurez besoin, la manière de les utiliser et le résultat
attendu.
p
# On veut calculer la clé publique de IdC = 'cecile'
QIdC = hash_curve(E, P, 'cecile')
QIdC
# On veut chiffrer le message à l'aide de la clé publique
message = 'hello world!'
#On va d'abord encoder le message en hexadécimal
m = message.encode('hex')
Cécile GONÇALVES
Page 2/ 3
TP2 : Courbes elliptiques
Université Paris-Est Créteil, année 2015-2016
M2 SSI - Cryptographie Avancée
m
C1, C2 = chiffre(message, QIdC)
#notez que pour cela, il fait utiliser les fonctions XOR, et hash_couplage
C2 = XOR(m, hash_couplage(couplage(QIdC, PPKG)^t))
C1
C2
#On déchiffre le message avec la clé secrete de 'cecile'
X = XOR(C2, hash_couplage(couplage(sIdC, C1)))
X
#On le décode ensuite
X.decode('hex')
(241864315753248 : 775652039760405 : 1)
'68656c6c6f20776f726c642021'
(387919565595881 : 7293093740582 : 1)
'153f49aab3843d9fbb5d23866465d249'
'68656c6c6f20776f726c642021'
'hello world !'
2
Courbes elliptiques et ECDSA avec openssl
La commande openssl ecparam -list_curves donne la liste des courbes possibles pour chirer. On
génère une clé basée sur une courbe elliptique avec la commande ec (et l'option keygen). Pour signer un
message avec ECDSA, on utilise la commande dgst avec l'option -ecdsa-with-SHA1
1. Générez une paire de clés pour ECDSA, avec la courbe secp192.
2. Chirez votre clé privée.
3. Etablissez une requête de certicat pour votre clé publique.
4. Signez plusieurs messages et envoyez les à votre binôme. Demandez-lui de vérier.
5. Chirez un email et signez avec ECDSA. Demandez à votre binôme de déchirer.
Cécile GONÇALVES
Page 3/ 3
TP2 : Courbes elliptiques