Salve a tutti^^
Ancora una volta eccomi a rompere :/
Questa volta un problema con l'RSA, nello specifico la generazione di chiavi (E,N) (D,N)...
Ho generato i due numeri primi, li ho moltiplicati tra loro, e li ho rimoltiplicati tra loro questa volta togliendo -1 da ogni numero primo...
poi ho trovato la E tale che l'mcd di E ed 0(N) sia 1...
il problema appunto è D...
strutture dati
codice:
typedef struct
{
vector<int> num;
int sign; // 1 negativo 0 positivo
} bigInt;
typedef struct
{
bigInt esp;
bigInt mod;
} key;
ecco il codice di generazione delle chiavi (che poi salverò su file...etc...)
codice:
void genKey (key *publicKey, key *privateKey)
{
int dim;
bigInt p,q,n,e,d,mcd1,eulero,x,y,e1;
dim = 5;
p=bprimo(dim);
printf("numero primo P: ");
bprint(p);
q=bprimo(dim);
printf("numero primo Q: ");
bprint(q);
n = karatsuba (p,q);
printf("Modulo N: ");
bprint(n);
p = bsub(p,int2bint(1));
q = bsub(q,int2bint(1));
eulero = karatsuba (p,q);
printf("eulero: ");bprint(eulero);
//generazione random E, ed mcd
do{
e=brandom (10);
mcd1 = bmcd(e,eulero,&x,&y);
}
while (mcd1.num[0]!=1);
//GENERAZIONE D
MANCA
///////////////////////////
printf("e: ");bprint(e);
printf("d: ");bprint(d);
publicKey->mod = n;
privateKey->mod = n;
publicKey->esp = e;
privateKey->esp = d;
}
ho provato con la formula
d= e^-1 mod 0(n)... ma alla fine del decript il risultato è sbagliato...
ho anche provato a calcolare l'inverso moltiplicativo al quale D dovrebbe corrispondere...ma anche lì il risultato poi non è corretto.
Sapete aiutarmi?
Grazie in anticipo!