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...)
ho provato con la formulacodice: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; }
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!

Rispondi quotando