Una coppia di chiavi RSA consiste nel seguente:
- Il modulo n , un numero intero grande che è uguale al prodotto di due grandi numeri primi interi, p e q .
- L'esponente pubblico e .
- L'esponente privato d . d è tale che ed = 1 quando viene preso modulo p-1 , e anche quando viene preso modulo q-1 .
- Il primo fattore p .
- Il secondo fattore q .
- Il valore d p = d mod p-1 .
- Il valore d q = d mod q-1 .
- Il valore q '= q -1 mod p .
La chiave pubblica contiene solo n e e .
La chiave privata contiene tutti i valori specificati sopra. Stricto sensu , solo n e d sono necessari per un'implementazione RSA superficiale, ma gli altri valori consentono operazioni più veloci e anche "mascheramento" (protezione contro le perdite del canale laterale), quindi lo standard RSA definisce che una chiave privata contiene tutti i valori (vedi appendice A.1 ).
Dal valore che hai, assumendo che la tua "m" sia in realtà il modulo RSA, gli altri valori possono essere ricalcolati, a un certo sforzo (meno di un secondo di CPU, ma più tempo umano di quanto mi interessi investire in esso). Da tutti questi valori, è quindi possibile codificare chiavi pubbliche e private RSA conformi allo standard; ma ciò richiede una certa conoscenza di ASN.1 . Infine, una chiave RSA a 512 bit è debole; utilizzare almeno 1024 bit, preferibilmente di più (2048 bit dovrebbero andare bene). Alcune implementazioni RSA si rifiuteranno di lavorare con chiavi RSA più corte di 1024 bit.
Bottom-line: non genera tu stesso la chiave; usa OpenSSL . Con lo strumento da riga di comando:
openssl genrsa -out rsakey.pem 2048
genererà una chiave privata RSA a 2048 bit con tutta la codifica appropriata; quindi questo:
openssl rsa -in rsakey.pem -pubout
stamperà la chiave pubblica , di nuovo con la codifica completata.