Realmente no entiendo este:
de acuerdo con: http://www.madboa.com/geek/openssl/#key-rsa , puede generar una clave pública a partir de una clave privada.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Mi pensamiento inicial fue que se generan en un par juntos. ¿La clave privada RSA contiene la suma? o la clave pública?
Respuestas:
en realidad producirá un par de claves pública - privada. El par se almacena en el
mykey.pem
archivo generado .extraerá la clave pública e imprimirá eso. Aquí hay un enlace a una página que describe esto mejor.
EDITAR: Consulte la sección de ejemplos aquí . Para generar solo la parte pública de una clave privada:
Para obtener una clave pública utilizable para propósitos SSH, use ssh-keygen :
fuente
e
yd
en la literatura común). Ninguno de los dos es matemáticamente privado o público, esas son etiquetas que se asignan arbitrariamente en el momento de la creación. Podrían asignarse con la misma facilidad a la inversa. Generar uno del otro es un problema equivalente. El.pem
formato contiene una gran cantidad de información, incluidos ambos exponentes y, por lo tanto, ambas claves, ¿verdad?openssl genrsa
comando. Sin embargo, no se crea un archivo de clave pública separado en el mismo paso. Para extraer la clave pública del archivo de clave privada en un archivo de clave pública separado, use suopenssl rsa -in private.pem -pubout -out public.pem
comando. Cuando produce una clave pública de esta manera, se extrae del archivo de clave privada, no se calcula. Vea mi respuesta a continuación para más detalles.Personas que buscan clave pública SSH ...
Si está buscando extraer la clave pública para usar con OpenSSH, necesitará obtener la clave pública de manera un poco diferente
Este formato de clave pública es compatible con OpenSSH. Agregue la clave pública
remote:~/.ssh/authorized_keys
y estará listo para comenzardocumentos de
SSH-KEYGEN(1)
fuente
openssl rsa -in key.pem -pubout -out pubkey.pem
no fue aceptada, ya que evidentemente el resultado es una clave pública en formato pem. Entonces recibí este error: "La clave no es válida. Debe comenzar con 'ssh-rsa' o 'ssh-dss'. Verifique que esté copiando la mitad pública de la clave". Sin embargo,ssh-keygen -y [-f input_keyfile]
genera el formato correcto que Github toma.En la mayoría del software que genera claves privadas RSA, incluidas las de openssl, la clave privada se representa como un objeto PKCS # 1 RSAPrivatekey o alguna variante del mismo:
Como puede ver, este formato tiene una serie de campos que incluyen el módulo y el exponente público y, por lo tanto, es un superconjunto estricto de la información en una clave pública RSA .
fuente
Mi respuesta a continuación es un poco larga, pero espero que brinde algunos detalles que faltan en las respuestas anteriores. Comenzaré con algunas declaraciones relacionadas y finalmente responderé la pregunta inicial.
Para cifrar algo utilizando el algoritmo RSA, necesita un par de exponente de módulo y cifrado (público) (n, e). Esa es tu clave pública. Para descifrar algo utilizando el algoritmo RSA, necesita un par de exponentes de módulo y descifrado (privado) (n, d). Esa es tu clave privada.
Para cifrar algo usando la clave pública RSA, trata su texto sin formato como un número y lo eleva a la potencia del módulo n:
Para descifrar algo utilizando la clave privada RSA, trata el texto cifrado como un número y lo eleva a la potencia del módulo d n:
Para generar una clave privada (d, n) usando openssl puede usar el siguiente comando:
Para generar una clave pública (e, n) a partir de la clave privada usando openssl, puede usar el siguiente comando:
Para analizar el contenido de la clave privada RSA private.pem generada por el comando openssl anterior, ejecute lo siguiente (salida truncada en las etiquetas aquí):
¿No debería la clave privada consistir solo en (n, d) par? ¿Por qué hay 6 componentes adicionales? Contiene e (exponente público) para que la clave RSA pública se pueda generar / extraer / derivar de la clave privada RSA private.pem. Los 5 componentes restantes están ahí para acelerar el proceso de descifrado. Resulta que al precalcular y almacenar esos 5 valores es posible acelerar el descifrado RSA por el factor 4. El descifrado funcionará sin esos 5 componentes, pero se puede hacer más rápido si los tiene a mano. El algoritmo de aceleración se basa en el teorema del resto chino .
Sí, la clave privada private.pem RSA en realidad contiene todos esos 8 valores; ninguno de ellos se genera sobre la marcha cuando ejecuta el comando anterior. Intente ejecutar los siguientes comandos y compare la salida:
El PKCS # 1 v1.5 recomienda esta estructura de la clave privada RSA como una representación alternativa ( segunda ). El estándar PKCS # 1 v2.0 excluye los exponentes eyd de la representación alternativa por completo. PKCS # 1 v2.1 y v2.2 proponen más cambios a la representación alternativa, al incluir opcionalmente más componentes relacionados con CRT.
Para ver el contenido de la clave pública RSA public.pem, ejecute lo siguiente (salida truncada a etiquetas aquí):
No hay sorpresas aquí. Es solo (n, e) par, como se prometió.
Ahora, finalmente, respondo a la pregunta inicial: como se mostró anteriormente, la clave RSA privada generada con openssl contiene componentes de claves públicas y privadas y algunos más. Cuando genera / extrae / deriva la clave pública de la clave privada, openssl copia dos de esos componentes (e, n) en un archivo separado que se convierte en su clave pública.
fuente
e
es siempre 655370x010001
. Probablemente sea de facto elegir el exponente público y esta es probablemente la razón por la quegenrsa
se explica en la página del manual, y casi en todos los lugaresto generate the private key
. El público es algo obvio.La clave pública no se almacena en el archivo PEM como algunas personas piensan. La siguiente estructura DER está presente en el archivo de clave privada:
Entonces, hay suficientes datos para calcular la clave pública (módulo y exponente público), que es lo que
openssl rsa -in mykey.pem -pubout
hacefuente
aquí, en este código, primero estamos creando una clave RSA que es privada pero también tiene un par de su clave pública, así que para obtener su clave pública real, simplemente hacemos esto
espero que lo obtengas para más información revisa esto
fuente
En primer lugar, un resumen rápido de la generación de claves RSA.
La clave pública consta del módulo y el exponente público.
Una clave privada mínima consistiría en el módulo y el exponente privado. No existe una forma segura de calcular desde un módulo conocido y un exponente privado hasta el exponente público correspondiente.
Sin embargo:
Entonces, en las implementaciones RSA más prácticas, puede obtener la clave pública de la clave privada. Sería posible construir un criptosistema basado en RSA donde esto no fuera posible, pero no es lo que se hizo.
fuente
fuente