• Aucun résultat trouvé

Security Web 2020/2021 P.Lafourcade TP2 : RSA / OAEP

N/A
N/A
Protected

Academic year: 2022

Partager "Security Web 2020/2021 P.Lafourcade TP2 : RSA / OAEP"

Copied!
3
0
0

Texte intégral

(1)

Security Web

2020/2021

P.Lafourcade

TP2 : RSA / OAEP

Exercise 1 (RSA (12 points)) Nous rappelons le chiffrement RSA.

• Clef Publique : (n, e), o` u n = pq, Φ(n) = (p − 1)(q − 1) et pgcd(e, Φ(n)) = 1.

• Clef Priv´ ee : d, telle que d.e = 1 mod Φ(n)

• Chiffrement de M : c = M e mod n

• D´ echiffrement de c: M = c d mod n

1. (2 point) Faites les calculs suivants. Soit p = 3, q = 7, calculer n et Φ(n) = (p −1)(q −1).

Soit e = 5, chiffrer le message M = 2.

Soit d = 5, d´ echiffrer le chiffr´ e c = 3.

2. (3 points) En utilisant la biblioth` eque GMP 1 coder le chiffrement de RSA pour une taille de clef donn´ ee (512, 1024, 2048, 4096).

3. (3 points) Coder le d´ echiffrement de RSA.

4. (4 point) Chiffrer le maximum de message al´ eatoires pour les clefs 512, 1024, 2048 et 4096 bits en 10 secondes et comparer avec RSA de la commande openssl speed rsa et avec AES de la commande openssl speed aes.

Exercise 2 (OAEP-RSA simplifi´ e(8 points))

Soit la fonction de hachage SHA-256: {0, 1} 256 → {0, 1} 256 . Pour calculer le chiffr´ e OAEP- RSA c = E pk (m, r) du message m ∈ {0, 1} 256 , et r ← {0, 1} 256 il faut faire:

• s = m⊕ SHA256(r)

• t = r⊕ SHA256(s)

et calculer c = f (s||t), o` u la fonction f est le chiffrement de RSA et || la concatenation.

• (1 point) Donner la fonction de d´ echiffrement associ´ ee.

• (7 points) En utilisant GMP et openssl coder le chiffrement et le d´ echiffrement de cette version de RSA-OAEP.

1

https://gmplib.org/

1

(2)

Simple Program Using GMP Integer API

T´ el´ echargreable ici https://sancy.iut-clermont.uca.fr/~lafourcade/SECWEB/tuto.c

#include <string.h>

#include <stdio.h>

#include <gmp.h>

#include <math.h>

#include <openssl/sha.h>

#include <stdlib.h>

// gcc tuto.c -lgmp -L/usr/local/opt/openssl/lib -lm -lcrypto -o prog-test // gcc tuto.c -lgmp -L/usr/bin/openssl -lm -lcrypto -o prog-test

// run it with $./prog-test

void hashF_(mpz_t hsh, mpz_t elt1) { SHA512_CTX c;

SHA512_Init(&c);

unsigned char hash[SHA512_DIGEST_LENGTH];

char *h= (char*) malloc(8);

char *h_f= (char*) malloc(SHA512_DIGEST_LENGTH*2 + 1);

char *selt1 = (char*) malloc(2 + mpz_sizeinbase(elt1, 10));

mpz_get_str(selt1, 10, elt1);

SHA512_Update(&c, selt1, (int)strlen(selt1));

SHA512_Final(hash, &c);

for (int i= 0; i< SHA512_DIGEST_LENGTH; ++i){

sprintf(h,"%x",hash[i]);

if(i==0) {strcpy(h_f, h);}

else {strncat(h_f, h,strlen(h));} } mpz_set_str(hsh,h_f,16);

free(h);

free(h_f);

free(selt1);

}

int main(void){

mpz_t r,s,t,c,v,e,p,n;

int value;

mpz_t rdn;

gmp_randstate_t r_state;

mpz_inits(r,s,t,c,v,e,p,n, NULL);

char *ciphers = (char*) malloc(2 + mpz_sizeinbase(t, 10));

char *cipher = (char*) malloc(2 + mpz_sizeinbase(t, 10));

printf("Entrer un nombre (entier):");

scanf("%d",&value);

2

(3)

printf("L’entier saisi est : %d\n",value);

//convertion en mpz mpz_set_ui(v,value);

//affichage mpz

gmp_printf("v: %Zd\n", v);

// nombre premier mpz_nextprime(p,v);

// inverse modulo p mpz_invert(e,v,p);

// comparaison

printf("affiche mpz_cmp(v,v) : %d\n",mpz_cmp(v,v));

printf("affiche mpz_cmp(v,p) : %d\n",mpz_cmp(v,p));

//multiplication mpz_mul(n,v,p);

// puissance

mpz_powm(r,v,p,n);

//hachage hashF_(s,r);

//XOR

mpz_xor(t,r,s);

// Transformation de t en string en base 10 mpz_get_str(ciphers, 10, v);

// Affichage de ciphers

printf("s str : %s \n", ciphers);

//Affichage de la taille de ciphers

printf("taille s:%d %d \n", (int)mpz_sizeinbase(s, 10), (int)strlen(ciphers));

// Copy de ciphers dans cipher

strncpy(cipher, ciphers,(int)strlen(ciphers));

// Concatenation de ciphers avec cipher

strncat(cipher, ciphers,(int)strlen(ciphers));

// Conversion d’un string en mpz en base 10 mpz_set_str(c,cipher,10);

// Fonction pour les nombres aleatoires ! Attention lancer plusieurs fois le programe pour comprendre gmp_randinit_default (r_state);

gmp_randseed_ui(r_state, 421);

mpz_init(rdn);

mpz_urandomb(rdn,r_state,10);

gmp_printf("rdn: %Zd\n", rdn);

mpz_urandomb(rdn,r_state,10);

gmp_printf("rdn: %Zd\n", rdn);

gmp_randclear(r_state);

}

3

Références

Documents relatifs

[r]

Copy the NSPK protocol that you have found on the AVISPA webpage in a file called NSPK-Lowe and correct by yourself the protocol with Lowe correction, using AVISPA in command line

Donner une propri´ et´ e de s´ ecurit´ e pour une primitive de

[r]

Classical Asymmetric Encryptions Classical Symetric Encryptions Modes de chiffrement symm´ etriques Hash Functions.. MAC Signature Elliptic Curves Propri´ et´ es de s´ ecurit´

Pour copier un fichier de votre session vdn vous devez dans une fenˆ etre ssh sur debian-1 utilisez la commande scp [email protected]:file.. afin de copier le fichier file dans la

Afin de cr´ eer votre serveur SSL/TLS, il faut g´ en´ erer une paire de cl´ es publique/priv´ ee pour ce serveur, puis fabriquer un certificat pour authentifier sa cl´ e publique

(1 point) Cr´eer avec la commande openssl req -new -x509 -key cert/rootca.key un certificat X.509 auto-sign´e pour root CA, le r´esultat sera plac´e dans le fichier cert/rootca.crt.