EIOC-3 TP Sécurité A. RACHEDI - 5/6
Syntaxe : Pour auto-signer une requête de certificat, on utilise :
openssl x509 -req -in requête -signkey clef-privee -out certificat
Q 20. Autosigner la requête de certificat de CA dans un certificat nommé ca-certificat.pem.
Q 21. Visualiser le certificat ca-certificat.pem.
Syntaxe : Pour signer une requête de certificat, on utilise :
openssl x509 -days duree -CAserial serial -CA certificat -CAkey clef -in requête -req -out certificat
Le fichier serial contient un nombre enregistré en hexadécimal (c'est-à-dire un nombre pair de chiffres hexadécimaux).
Q 22. Signer la requête de certificat user-request.pem pour produire un certificat usercertificat.pem.
Syntaxe : Pour vérifier un certificat, on utilise : openssl verify -CAfile ca-certificat certificat
Q 23. Vérifier le certificat user-certificat.pem.
Q 24. Modifier le contenu du certificat user-certificat.pem et tentez de le vérifier.
Fabrication des clefs RSA avec l’utilisation de la bibliothèque GMP
Le but de cette partie est de comprendre le processus de fabrication des clefs RSA. Par conséquent, nous avons besoin
d’installer la bibliothèque “GMP” (The GNU Multiple Precision Arithmetic Library). C’est une bibliothèque de calcul
numérique sur des nombres entiers en précision arbitraire. La majorité des fonctions sont optimisées au maximum (en
particulier pour les processeurs Intel : MMX, SSE, etc.).
Les domaines d'utilisation sont la cryptographie, les systèmes de calcul, la sécurité sur Internet, etc.
Installation de GMP :
1) Récupérer le fichier « gmp-5.0.1.tar.bz2 ».
2) Décompresser le fichier à l’aide de la commande « tar xjf … ».
3) Lire le fichier INSTALL et exécuter les commandes suivants en mode super-utilisateur :
./configure
make
make check
Il s’agit simplement de compléter le programme rsa.c (à télécharger sur
http://igm.univ-mlv.fr/~rachedi/Teaching.html
).
Il faut compléter le programme en particulier à la place du commentaire « /* A COMPLETER */». Une
documentation sur GMP est aussi sur le même lien. Les entiers proposés par la librairie GMP sont des variables
signées de type mpz_t. Chacune de ces variables doit être initialisé à l’aide de la fonction mpz_init avant d’être
utilisée. La librairie GMP propose également une extension de printf notée gmp_printf qui permet l’affichage de
variables de type mpz_t. Toutes les autres fonctions utiles pour ce TP sont décrites dans l’annexe de la page 16.
Le programme rsa.c définit une longueur maximale LONGMESSMAX des messages à chiffrer et utilise le type
uchar en guise de caractère non-signé. Le programme principal manipulera un message m entré au clavier et stocké
dans la chaîne de caractères message. Ce message sera traduit en un entier M dans la variable message_mpz dont la
valeur ne dépassera pas V
max
= 256
LONGMESSMAX
, c’est-à-dire qu’il sera codé en binaire sur au plus
8×LONGMESSMAX, ce qui n’est pas surprenant puisque chaque caractère du message est codé sur 8 bits.
Outre l’entier message_mpz, le programme principal utilise un système de clefs RSA formé d’une clef publique (n, e)
et d’une clef privée d. Ces trois entiers sont aussi de type mpz_t. Ils seront choisis lors de l’appel de la fonction
fabrique_les_clefs qui prendra en compte la longueur du message, c’est-à-dire la valeur de message_mpz. Plus le
message est long, plus les clefs seront longues...
Une fois les clefs choisies, le programme calculera le chiffré C correspondant à la variable message_ mpz chiffre de
type mpz_t selon la règle de chiffrement RSA : C = M
e
(mod n).
Le programme calcule et affiche également la valeur déchiffrée D = C
d
(mod n), qui est égale à M, ainsi que la chaîne
de caractères correspondante message_dechiffre qui est égale à m.
Rappels de cours La fabrique de clefs RSA se divise en trois parties :
1. Générer deux gros nombres premiers p et q, en les tirants au sort.
Calculer ensuite n = p × q et w = (p − 1) × (q − 1).
2. Trouver deux entiers d et e (inferieurs à n) tels que d × e = 1 (mod w), c’est-à-dire tels que
d × e + k × w = 1 pour un certain k dans Z
Pour cela, il suffit de tirer au sort d et de vérifier qu’un tel e existe, c’est-à-dire que le PGCD de d et de w vaut 1.
L’algorithme d’Euclide permet de déterminer ce PGCD et donc de vérifier qu’un tel e existe. De plus l’algorithme