In pratica, sì, puoi ottenere la chiave pubblica dalla chiave privata.
In linea di principio, sarebbe possibile creare una chiave privata RSA da cui la corrispondente chiave pubblica non può essere facilmente ottenuta, ma ciò richiederebbe l'uso sia di un metodo di generazione di chiavi non standard sia di un privato non standard formato di archiviazione delle chiavi.
Rivediamo rapidamente le nozioni di base. Una chiave pubblica RSA è composta da due valori:
- il modulo n (un prodotto di due numeri primi di grandi dimensioni p e q ), e
- l'esponente pubblico e (che può essere lo stesso per molti tasti e viene tipicamente scelto come un piccolo numero dispari, più comunemente o 3 o 2 16 +1 = 65537).
Una chiave privata RSA, nel frattempo, richiede almeno i seguenti due valori:
- il modulo n (come nella chiave pubblica) e
- l'esponente privato d (calcolato dall'esponente pubblico e e i fattori p e q del modulo).
Tuttavia, la maggior parte dei formati per la memorizzazione delle chiavi private RSA, incluso il PKCS1 formato RSAPrivateKey mostrato nella domanda, in realtà memorizza un molti altri valori, tra cui:
- l'esponente pubblico e ,
- i fattori p e q del modulo,
- gli esponenti privati ridotti d p = d mod ( p - 1) e d q = d mod ( q - 1), e
- il "coefficiente CRT" q inv = q -1 mod p .
In particolare, l'inclusione dell'esponente pubblico e nel formato della chiave privata significa che la chiave pubblica può essere estratta banalmente da un file di chiave privata compatibile con PKCS1. Inoltre, anche se l'esponente pubblico e non è stato incluso nel file della chiave privata, conoscere i fattori p e q del modulo consente l'esponente per essere facilmente calcolato dall'altro. E, infine, anche se non conoscessimo i fattori del modulo, per le chiavi RSA generate nel solito modo potremmo semplicemente testare i valori più usati di e e vedere quale di essi genera testi cifrati che possono essere decifrati correttamente usando la chiave privata fornita.
Tutto ciò detto, se dovessimo utilizzare un algoritmo di generazione di chiavi RSA non standard che scelse e (o d ) casualmente dall'intervallo ammissibile di valori (es. i numeri interi maggiori di 1 e minori di e coprimi con λ ( n ) = lcm ( p - 1, q - 1)), e se abbiamo usato un formato di chiave privata RSA non standard che memorizzava solo le informazioni minime per la decrittazione (cioè n e d ), allora non sarebbe possibile calcolare la chiave pubblica dalla chiave privata senza spezzare efficacemente la chiave (cioè il factoring del modulo).
Infatti, se usato in modo non standard, l'algoritmo RSA diventa "simmetrico" nel senso che nessuno dei due tasti ( n , e ) e ( n , d ) possono essere efficacemente calcolati dall'altro e uno potrebbe essere arbitrariamente designato come chiave privata. In linea di principio, se non si permettesse al detentore della chiave privata di conoscere la chiave "pubblica" corrispondente (che, ovviamente, significa che non sarebbe più pubblica), potrebbero decodificare i messaggi ma non crittografarli. Ahimè, l'utilità pratica di qualsiasi schema di questo tipo è piuttosto limitata dal semplice fatto che chi genera la coppia di chiavi finirà inevitabilmente per conoscere entrambe le metà di esso.