Utiliser la clé privée RSA pour générer la clé publique?

Je ne comprends pas vraiment celui-ci:

selon: http://www.madboa.com/geek/openssl/#key-rsa , vous pouvez générer une clé publique à partir d'une clé privée.

openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub

ma pensée initiale était qu'ils sont générés dans une paire ensemble. La clé privée RSA contient-elle la somme? ou de la clé publique?

311
demandé sur Cœur 2011-03-09 13:03:47

8 réponses

openssl genrsa -out mykey.pem 1024

produira en fait une paire de clés public - privé. La paire est stockée dans le fichier mykey.pem généré.

openssl rsa -in mykey.pem -pubout > mykey.pub

extraira la clé publique et l'imprimera. Ici est un lien vers une page qui décrit le mieux.

EDIT: Vérifiez les exemples de la section ici . Pour juste afficher la partie publique d'une clé privée:

openssl rsa -in key.pem -pubout -out pubkey.pem
446
répondu Raam 2014-04-01 04:31:07

personnes à la recherche de la clé publique SSH...

si vous cherchez à extraire la clé publique pour L'utiliser avec OpenSSH, vous aurez besoin d'obtenir la clé publique un peu différemment

$ ssh-keygen -y -f mykey.pem > mykey.pub

ce format de clé publique est compatible avec OpenSSH. Ajoutez la clé publique à remote:~/.ssh/authorized_keys et vous serez prêt


docs de SSH-KEYGEN(1)

ssh-keygen -y [-f input_keyfile]  

- y cette option affichera un fichier au format OpenSSH privé et imprimera une clé publique OpenSSH à stdout.

243
répondu user633183 2015-04-03 17:04:21

dans la plupart des logiciels qui génèrent des clés privées RSA, y compris openssl, la clé privée est représentée comme un PKCS#1 RSAPrivatekey objet ou une variante de celui-ci:

A. 1.2 RSA private key syntaxe

une clé privée RSA doit être représentée avec L'ASN.1 tapez

RSAPrivateKey:

  RSAPrivateKey ::= SEQUENCE {
      version           Version,
      modulus           INTEGER,  -- n
      publicExponent    INTEGER,  -- e
      privateExponent   INTEGER,  -- d
      prime1            INTEGER,  -- p
      prime2            INTEGER,  -- q
      exponent1         INTEGER,  -- d mod (p-1)
      exponent2         INTEGER,  -- d mod (q-1)
      coefficient       INTEGER,  -- (inverse of q) mod p
      otherPrimeInfos   OtherPrimeInfos OPTIONAL
  }

comme vous pouvez le voir, ce format a un nombre de domaines, y compris le module et l'exposant public et est donc un surensemble strict de l'information dans un clé publique RSA .

55
répondu James K Polk 2018-07-11 18:14:37

la clé publique n'est pas stockée dans le fichier PEM comme certains le pensent. La structure DER suivante est présente sur le fichier de clés privées:

openssl rsa -texte -en maclé.pem

RSAPrivateKey ::= SEQUENCE {
  version           Version,
  modulus           INTEGER,  -- n
  publicExponent    INTEGER,  -- e
  privateExponent   INTEGER,  -- d
  prime1            INTEGER,  -- p
  prime2            INTEGER,  -- q
  exponent1         INTEGER,  -- d mod (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

donc il y a assez de données pour calculer la clé publique (module et exposant public), ce qui est ce que openssl rsa -in mykey.pem -pubout fait

19
répondu Uxio 2016-08-18 09:50:25

ma réponse ci-dessous est un peu longue, mais j'espère qu'elle fournit certains détails qui manquent dans les réponses précédentes. Je vais commencer par quelques déclarations connexes et finalement répondre à la question initiale.

pour chiffrer quelque chose à l'aide de l'algorithme RSA, vous avez besoin de la paire exposant de module et de chiffrement (public) (n, e). C'est votre clé publique. Pour décrypter quelque chose en utilisant l'algorithme RSA vous avez besoin de la paire de modules et de décryptage (privé) exposant (n, d). C'est votre clé privée.

pour chiffrer quelque chose en utilisant la clé publique RSA vous traitez votre plaintext comme un nombre et l'élevez à la puissance de E module n:

ciphertext = ( plaintext^e ) mod n

pour décrypter quelque chose en utilisant la clé privée RSA vous traitez votre cryptogramme comme un nombre et l'élevez à la puissance de Module d n:

plaintext = ( ciphertext^d ) mod n

pour générer une clé privée (d,n) en utilisant openssl vous pouvez utiliser la commande suivante:

openssl genrsa -out private.pem 1024

pour générer (e,n) clé de la clé privée en utilisant openssl vous pouvez utiliser la commande suivante:

openssl rsa -in private.pem -out public.pem -pubout

Pour disséquer le contenu du privé.clé privée RSA pem générée par la commande openssl ci-dessus exécutez ce qui suit (sortie tronquée aux étiquettes ici):

openssl rsa -in private.pem -text -noout | less

modulus         - n
privateExponent - d
publicExponent  - e
prime1          - p
prime2          - q
exponent1       - d mod (p-1)
exponent2       - d mod (q-1)
coefficient     - (q^-1) mod p

la clé privée ne devrait-elle pas être constituée uniquement d'une paire (n, d)? Pourquoi y a 6 composants supplémentaires? Il contient e (exposant public) de sorte que la clé publique RSA peut être générée/extraite/dérivée à partir de la privé.clé privée RSA pem. Le reste 5 composants sont là pour accélérer le processus de déchiffrement. Il s'avère qu'en pré-calculant et en stockant ces 5 valeurs il est possible d'accélérer le déchiffrement RSA par le facteur de 4. Le décryptage fonctionnera sans ces 5 composants, mais il peut être fait plus rapidement si vous les avez sous la main. L'algorithme d'accélération est basé sur le reste du théorème Chinois .

Oui, privé.PEM RSA private key contient réellement toutes ces 8 valeurs; aucune n'est générée à la volée lorsque vous exécutez la commande précédente. Essayez d'exécuter les commandes suivantes et comparez la sortie:

# Convert the key from PEM to DER (binary) format
openssl rsa -in private.pem -outform der -out private.der

# Print private.der private key contents as binary stream
xxd -p private.der

# Now compare the output of the above command with output 
# of the earlier openssl command that outputs private key
# components. If you stare at both outputs long enough
# you should be able to confirm that all components are
# indeed lurking somewhere in the binary stream
openssl rsa -in private.pem -text -noout | less

cette structure de la clé privée RSA est recommandée par la PKCS#1 V1.5 as an alternative ( second ) representation. PKCS#1 v2.La norme 0 exclut complètement les exposants e et d de la représentation alternative. PKCS#1 v2.1 et v2.2 propose d'autres changements à la représentation alternative, en incluant optionnellement plus de composants liés au TRC.

pour voir le contenu du public.pem clé publique RSA exécuter les opérations suivantes (sortie tronquée pour des étiquettes ici):

openssl rsa -in public.pem -text -pubin -noout

Modulus             - n
Exponent (public)   - e

pas de surprise ici. C'est juste une (N, e) paire, comme promis.

enfin répondre à la question initiale: comme était ci-dessus, la clé privée RSA générée à l'aide d'openssl contient des composants de clés publiques et privées et plus encore. Lorsque vous générez/extrayez/dérivez une clé publique à partir de la clé privée, openssl copie deux de ces composants (e,n) dans un fichier séparé qui devient votre clé publique.

14
répondu golem 2017-08-02 02:15:23

ici dans ce code d'abord, nous créons la clé RSA qui est privé mais il a une paire de sa clé publique ainsi pour obtenir votre clé publique réelle nous faisons simplement cela""

openssl rsa -in mykey.pem -pubout > mykey.pub

j'espère que vous l'obtiendrez pour plus d'information vérifier ce

8
répondu Rdx 2012-06-26 17:39:45

tout d'abord un rapide résumé sur la génération de clés RSA.

  1. choisir au hasard deux nombres premiers probables de la taille appropriée (p et q).
  2. Multiplier les deux nombres premiers, ensemble pour produire le module (n).
  3. choisir un exposant public (e).
  4. Faire quelques calculs avec les nombres premiers et le public, exposant de façon à produire le privé exposant (d).

la clé publique consiste du module et le public de l'exposant.

une clé privée minimale serait constituée du module et de l'exposant privé. Il n'y a pas de méthode infaillible pour passer d'un module connu et d'un exposant privé à l'exposant public correspondant.

Toutefois:

  1. formats clés privés pratiques stockent presque toujours plus que n et D.
  2. e n'est normalement pas choisi au hasard, l'un des une poignée de valeurs bien connues est utilisée. Si e est l'une des valeurs bien connues et que vous connaissez d, il serait facile de calculer e par tâtonnements.

ainsi, dans la plupart des implémentations RSA pratiques, vous pouvez obtenir la clé publique à partir de la clé privée. Il serait possible de construire un cryptosystème basé sur RSA là où cela n'était pas possible, mais ce n'est pas la chose faite.

2
répondu plugwash 2018-05-11 17:44:11
Use the following commands:

1. openssl req -x509 -nodes -days 365 -sha256 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem

Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
.............+++
..................................................................................................................................................................+++
writing new private key to 'mycert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

2. If you check there will be a file created by the name : mycert.pem

3. openssl rsa -in mycert.pem -pubout > mykey.txt
writing RSA key

4. If you check the same file location a new public key : mykey.txt will be created.
0
répondu Ankit Jain 2016-09-06 08:00:51