En la práctica, sí, puede obtener la clave pública de la clave privada.
En principio, sería posible crear una clave privada RSA a partir de la cual no se pueda obtener la clave pública correspondiente, pero esto requeriría usar un método de generación de claves no estándar y un privado no estándar. formato de almacenamiento de claves.
Repasemos rápidamente lo básico. Una clave pública RSA consta de dos valores:
- el módulo n (un producto de dos primos grandes seleccionados en secreto p y q ), y
- el exponente público e (que puede ser el mismo para muchas teclas y normalmente se elige como un primo impar pequeño, generalmente 3 o 2 16 +1 = 65537).
Mientras tanto, una clave privada RSA requiere como mínimo los dos valores siguientes:
- el módulo n (igual que en la clave pública), y
- el exponente privado d (calculado a partir del exponente público e y los factores p y q de la módulo).
Sin embargo, la mayoría de los formatos para almacenar claves privadas RSA, incluido el formato PKCS1 RSAPrivateKey que se muestra en su pregunta, en realidad almacena una montón de valores adicionales, incluyendo:
- el exponente público e ,
- los factores p y q del módulo,
- los exponentes privados reducidos dp = d mod ( p - 1) y dq = d mod ( q - 1), y
- el "Coeficiente CRT" q inv = q −1 mod p .
En particular, la inclusión del exponente público e en el formato de clave privada significa que la clave pública se puede extraer de forma trivial de un archivo de clave privada compatible con PKCS1. Además, incluso si el exponente público e no se incluyó en el archivo de clave privada, conocer los factores p y q del módulo permite que ambos exponentes Se calcula fácilmente a partir del otro. Y, finalmente, incluso si no conociéramos los factores del módulo, para las claves RSA generadas de la manera habitual, podríamos simplemente probar los valores más utilizados de e y ver cuál de ellos genera ciphertexts que se pueden descifrar correctamente usando la clave privada dada.
Todo lo dicho, si tuviéramos que utilizar un algoritmo de generación de claves RSA no estándar que eligiera e (o d ) al azar del rango admisible de valores (es decir, los enteros mayores que 1 y menores que y coprime con λ ( n ) = lcm ( p - 1, q - 1)), y si utilizamos un formato de clave privada RSA no estándar que solo almacena la información mínima para el descifrado (es decir, n y d ), entonces no sería posible calcular la clave pública a partir de la clave privada sin romper la clave de forma efectiva (es decir, factorizar el módulo).
De hecho, si se usa de tal manera no estándar, el algoritmo RSA se vuelve "simétrico" en el sentido de que ninguna de las teclas ( n , e ) y ( n , d ) puede calcularse efectivamente a partir de la otra y cualquiera de las dos podría designarse arbitrariamente como la clave privada. En principio, si no le dijiste al titular de la clave privada la clave "pública" correspondiente (lo cual, por supuesto, significa que ya no sería más público), entonces solo podrían descifrar los mensajes pero no cifrarlos. Por desgracia, la utilidad práctica de cualquiera de estos esquemas está bastante limitada por el simple hecho de que quienquiera que genere el par de claves terminará inevitablemente conociendo ambas mitades de todos modos.