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?
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
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.
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 .
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
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.
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
tout d'abord un rapide résumé sur la génération de clés RSA.
- choisir au hasard deux nombres premiers probables de la taille appropriée (p et q).
- Multiplier les deux nombres premiers, ensemble pour produire le module (n).
- choisir un exposant public (e).
- 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:
- formats clés privés pratiques stockent presque toujours plus que n et D.
- 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.
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.