517 votes

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

Je ne comprends pas vraiment celle-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

Je pensais initialement qu'elles étaient générées par paire. La clé privée RSA contient-elle la somme ? ou la clé publique ?

2 votes

A tous ceux qui utilisent rsa et openssl et qui veulent crypter un grand fichier comme 5 Kbyte, rappelez-vous que la clé publique doit être proportionnelle ou plus grande en taille à ce que vous voulez crypter sinon vous obtiendrez un "fichier trop grand pour être crypté". Je résume que vous générez une clé privée assez grande et sérieuse et à partir de cela faites vos clés privées de sorte que vous avez beaucoup de données pour travailler avec. J'ai parlé de cette faille à qui je connais chez openssl, et qu'ils devraient simplement faire en sorte que le système boucle sur lui-même, sinon vous allez passer beaucoup de temps à comprendre pourquoi il se plaint de la taille.

14 votes

Le problème décrit par Kent Hansen est dû à l'utilisation de RSA directement sur des données en clair, ce qui ne devrait en aucun cas être fait pour des raisons de sécurité. Utilisez plutôt un schéma de chiffrement hybride bien analysé tel que RSA-KEM ( tools.ietf.org/html/rfc5990#appendix-A ), avec un schéma de chiffrement symétrique authentifié tel que encrypt-then-HMAC appliqué aux données.

0 votes

Cela peut aider : jason4zhu.blogspot.jp/2014/10/

770voto

Raam Points 2434
openssl genrsa -out mykey.pem 1024

produira en fait une paire de clés publique - privée. Cette paire est stockée dans le fichier mykey.pem fichier.

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

va extraire la clé publique et l'imprimer. Ici est un lien vers une page qui décrit mieux cela.

EDIT : Vérifiez la section des exemples aquí . Pour ne sortir que la partie publique d'une clé privée :

openssl rsa -in key.pem -pubout -out pubkey.pem

Pour obtenir une clé publique utilisable pour les besoins de SSH, utilisez ssh-keygen :

ssh-keygen -y -f key.pem > key.pub

62 votes

C'est déroutant de voir que tout le monde dans les tutoriels partout dans le monde dit qu'en utilisant la commande openssl genrsa vous allez générer la CLÉ PRIVÉE, parce qu'ils oublient que cela génère aussi la CLÉ PUBLIQUE.

0 votes

@Raam : Qu'en est-il de cette commande - openssl genrsa -out mykey.key 1024. Est-ce que mykey.key contient la paire de clés publique-privée ?

0 votes

@Ashwin, oui mykey.key aura les deux.

326voto

naomik Points 10423

Les personnes recherchant une clé publique SSH...

Si vous cherchez à extraire la clé publique pour l'utiliser avec OpenSSH, vous devrez 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 à partir


documents de SSH-KEYGEN(1)

ssh-keygen -y [-f input_keyfile]  

-y Cette option va lire un fichier privé au format OpenSSH et imprimer une clé publique OpenSSH sur stdout.

3 votes

Cela fonctionne comme un charme ! Il génère un format que Github accepte ! Github ne prend pas le format PEM. La réponse précédente suggérait openssl rsa -in key.pem -pubout -out pubkey.pem n'a pas été accepté car, de toute évidence, la sortie de ce fichier est une clé publique au format pem. J'ai donc eu cette erreur : "La clé n'est pas valide. Elle doit commencer par 'ssh-rsa' ou 'ssh-dss'. Vérifiez que vous copiez la partie publique de la clé". Cependant, ssh-keygen -y [-f input_keyfile] génère le format correct que Github prend.

90voto

GregS Points 16158

Dans la plupart des logiciels qui génèrent des clés privées RSA, y compris ceux d'openssl, la clé privée est représentée sous la forme de PKCS#1 RSAPrivatekey ou une de ses variantes :

A.1.2 Syntaxe de la clé privée RSA

Une clé privée RSA doit être représentée avec le type ASN.1
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 constater, ce format comporte un certain nombre de champs, dont le module et l'exposant public, et constitue donc un sur-ensemble strict des informations contenues dans un fichier de type Clé publique RSA .

0 votes

Voulez-vous dire qu'étant donné une clé privée, il est mathématiquement possible de générer la clé publique ? La force du RSA ne réside-t-elle pas dans le fait qu'il est mathématiquement impossible de générer une clé en fonction de l'autre ?

40 votes

@Raam : Non, la force de RSA est qu'il est infaisable de générer la clé privée à partir de la clé publique. Générer la clé publique à partir de la clé privée est trivial.

0 votes

@GregS, Pourquoi ? Une clé est constituée d'un module et d'un exposant. Si l'autre exposant peut être calculé à partir de ces deux nombres, RSA sera facilement craqué. La clé privée d'OpenSSL contient-elle plus qu'un exposant et un module ?

21voto

Uxio Points 56

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

openssl rsa -text -in mykey.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
}

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

0 votes

Je vois que la clé publique n'est pas stockée ici, bien qu'elle soit dérivable comme la clé privée, mais je ne vois pas la clé privée stockée ici non plus ! Pourtant, si j'attrape le fichier pem, je vois qu'il indique la clé privée et quelques caractères ascii.

2 votes

La clé privée est également dérivée, regardez le champ privateExponent. Vous pouvez voir les champs en utilisant openssl rsa -text -in mykey.pem

0 votes

À partir de cela, il semble un peu que ce n'est pas vraiment un fichier de clé privée, et qu'il ne dérive pas la clé publique de la clé privée mais il dérive la clé privée de ces champs ou la clé publique de ces champs. Cependant, pourrait-il dériver tous ces champs, à partir de la clé privée ? Puisque si vous attrapez le fichier, il montre "begin private key" puis quelques ascii puis "end private key" et c'est tout.

7voto

Rdx Points 109

Ici, dans ce code, nous créons d'abord la clé RSA qui est privée, mais elle a aussi une paire de clés publiques, donc pour obtenir votre clé publique actuelle, il suffit de faire ceci

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

J'espère que vous l'aurez pour plus d'informations Vérifiez ceci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X