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