Pour autant que je me souvienne, vous cryptez le message en utilisant la clé publique et le décryptez en utilisant la clé privée. Ma question est de savoir sil est possible dobtenir une clé publique à partir dune clé privée RSA. Par exemple, si jai une clé comme celle-ci:
-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCtrKVnwse4anfX+JzM7imShXZUC+QBXQ11A5bOWwHFkXc4nTfE Or3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j3NgqX8zZJG7IwLJ/Pm2sRW5Q j32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdWtoeLfxDBL2AJ20qXzQIDAQAB AoGBAKNXi0GpmjnCOPDxLFg5bvQVfhLSFCGMKQny1DVEtsfgZmbixv5R2R41T4+d CHJMdEsUFFJ6I7CRLTcg1SDU8IhcAWCBRSNeVuomCHlQG16ti8HxwhiwIcjvDz/z NC2sL5ZJ2eJnhbtXLdf6pxxO1pA5vLp1AX06IaETO977XvupAkEA+ZgtGZybyUkf tEA3ekXc5eLoW+zgU0C1fATWcIZ8Iq5YV1BW+3oAzf8HgIbkQh4LM2qa6An3l+vW NXR4wICHkwJBALIhrcdJqKw36qiyenq+m78klp5SnurQifVt0Sy1GMWyOUqYz5jK t9sGo9Qn6GDuYe/XGXKWQW25PkEYXxxPPx8CQQCpICyvRidp5VrOURVGjUB5pZ+9 am02/In9V2nXJcnH1kuWHqJSFQGmlEEJHl5dTu5YEMyWnupezzd/UUThbDZxAkAz TNO5QxNalbf04YG4e9Bq2eSur+iog2pXzkqhb3404UDypNOUkz0jzOO9o8ieschu xCnGAFPTf7fYE2bAxmnNAkEA0/3bdsvJclquypqP9CQeQnxGwQtWz6+yn07gj3U1 V19mdeKCUZWklRarrcr67u9DdEx+JowyEY/ppzgeQtW01g== -----END RSA PRIVATE KEY-----
puis-je obtenir une clé publique?
Commentaires
- Cette clé est maintenant divulguée sur Internet et ne peut plus être utilisée en toute sécurité en dehors des exemples, juste pour que vous vous en rendiez compte.
- » Voici la clé de ma maison. Qui veut faire une copie? »
- Jespère que lOP a généré un exemple de clé juste pour lutiliser dans cette question et ensuite immédiatement éliminé.
- @ basic6 » Voici la clé de ma maison. Comment puis-je faire de moi un cadenas? »
- Vous devez préciser si vous ‘ poser une question juste la clé privée (auquel cas la réponse est non) ou le fichier de clé privée , qui par convention (comme ici) inclut les deux clés.
Réponse
puis-je obtenir une clé publique?
Cest facile dutiliser openssl rsa
:
$ openssl rsa -in the-private-key-from-your-question.pem -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtrKVnwse4anfX+JzM7imShXZU C+QBXQ11A5bOWwHFkXc4nTfEOr3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j 3NgqX8zZJG7IwLJ/Pm2sRW5Qj32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdW toeLfxDBL2AJ20qXzQIDAQAB -----END PUBLIC KEY---
Si vous voulez avoir une idée de ce qui est contenu dans un fichier de clé, vous pouvez passer loption -text
pour voir un (sorte de) vidage de débogage lisible par lhomme. De cette façon, vous pouvez voir quun fichier de clé contient à la fois des informations privées mais aussi des informations publiques. En particulier, il contient le module et publicExponent qui décrivent complètement la clé publique:
$ openssl rsa -text -in the-private-key-from-your-question.pem Private-Key: (1024 bit) modulus: 00:ad:ac:a5:67:c2:c7:b8:6a:77:d7:f8:9c:cc:ee: 29:92:85:76:54:0b:e4:01:5d:0d:75:03:96:ce:5b: 01:c5:91:77:38:9d:37:c4:3a:bd:df:26:39:d1:49: 4e:40:dc:84:4e:15:4f:e9:55:53:62:5c:93:64:97: ba:90:64:ae:66:61:bf:23:dc:d8:2a:5f:cc:d9:24: 6e:c8:c0:b2:7f:3e:6d:ac:45:6e:50:8f:7d:82:fe: e2:6e:9b:ae:10:fe:21:08:b0:28:3f:98:98:c3:2e: 1d:65:ca:51:0c:12:ec:ca:81:37:56:b6:87:8b:7f: 10:c1:2f:60:09:db:4a:97:cd publicExponent: 65537 (0x10001) privateExponent: (…)
Commentaires
- @Pysis: cette réponse ne concerne pas » rechercher » le public à partir de la clé publique. Il est simple que toutes les informations nécessaires à la fois pour la partie privée et la partie publique sont stockées dans le fichier de clé privée. Dans le fichier de clé publique, toutes les informations concernant la partie privée sont manquantes.
- @Pysis Il sagit dun cryptage asymétrique .
- @Pysis Oui, le cryptage asymétrique est » légèrement asymétrique « .
- @SteffenUllrich Cette phrase devrait faire partie de votre réponse
- @Mehrdad: dans le contexte de la sécurité de linformation dans le monde réel, tout ce qui est pratiquement irréalisable est considéré comme irréalisable. La sécurité de la théorie de linformation nest pas pertinente ici car elle suppose une puissance de calcul illimitée qui nexiste tout simplement pas. Ainsi toutes les informations concernant la partie privée sont manquantes doivent être lues comme toutes les informations permettant en pratique de dériver la clé privée sont manquantes .
Réponse
En pratique, oui, vous pouvez obtenir la clé publique de la clé privée. En principe, il serait possible de créer une clé privée RSA à partir de laquelle la clé publique correspondante ne peut pas être facilement obtenu, mais cela nécessiterait d’utiliser à la fois une méthode de génération de clé non standard et un format de stockage de clé privée non standard.
Revoyons rapidement les bases. Une clé publique RSA se compose de deux valeurs:
- le module n (un produit de deux grands nombres premiers secrètement choisis p et q ), et
- lexposant public e (qui peut être le même pour de nombreuses clés et est généralement choisi comme étant un petit nombre premier impair, le plus souvent 3 ou 2 16 +1 = 6 5537).
Une clé privée RSA, quant à elle, nécessite au minimum les deux valeurs suivantes:
- le module n (identique à la clé publique), et
- lexposant privé d (calculé à partir de lexposant public e et les facteurs p et q du module).
Cependant, la plupart des formats de stockage des clés privées RSA, y compris le PKCS1 RSAPrivateKey au format indiqué dans votre question, stocke également un tas de valeurs supplémentaires, y compris:
- lexposant public e ,
- les facteurs p et q du module,
- les exposants privés réduits d p = d mod ( p − 1) et dq = d mod ( q − 1) et
- le » coefficient CRT « q inv = q − 1 mod p .
En particulier, linclusion de lexposant public e au format de clé privée signifie que la clé publique peut être extraite de manière simple à partir dun fichier de clé privée compatible PKCS1.Aussi, même si lexposant public e nétait pas inclus dans le fichier de clé privée, la connaissance des facteurs p et q du module autorise lun ou lautre des exposants pour être facilement calculé de lautre. Et enfin, même si nous ne connaissions pas les facteurs du module, pour les clés RSA générées de la manière habituelle, nous pourrions simplement tester les valeurs les plus couramment utilisées de e et voir laquelle d’entre elles génère des textes chiffrés qui peuvent être correctement déchiffrés à laide de la clé privée donnée.
Cela dit, si nous devions utiliser un algorithme de génération de clé RSA non standard qui a choisi e ( ou d ) au hasard à partir de la plage de valeurs admissible (cest-à-dire les entiers supérieurs à 1 et inférieurs à et coprime avec λ ( n ) = lcm ( p − 1, q − 1)), et si nous avons utilisé un format de clé privée RSA non standard qui ne stockait que le strict minimum dinformations pour le déchiffrement (cest-à-dire n et d ), alors il ne serait pas possible de calculer la clé publique à partir de la clé privée sans casser efficacement la clé (cest-à-dire en factorisant le module).
En effet, si elle est utilisée dans un tel homme non standard ner, lalgorithme RSA devient « symétrique » dans le sens où aucune des clés ( n , e ) et ( n , d ) peuvent être efficacement calculés à partir de lautre et lun ou lautre pourrait être désigné arbitrairement comme clé privée. En principe, si vous ne laissez pas le détenteur de la clé privée connaître la clé « publique » correspondante (ce qui, bien sûr, signifie quelle ne serait plus vraiment publique), alors ils pourraient seulement déchiffrer les messages mais pas les chiffrer. Hélas, lutilité pratique dun tel schéma est plutôt limitée par le simple fait que celui qui génère la paire de clés finira inévitablement par en connaître les deux moitiés de toute façon.
Commentaires
- Je fronce les sourcils à propos de la dernière phrase. Comme e est de toute façon considéré comme public, ne pas oublier e (et p et q) peut difficilement être considéré comme une porte dérobée à la disposition du propriétaire de la clé privée. (Et si un adversaire obtient la clé privée d, il a aussi la clé publique e et a gagné)
- @HagenvonEitzen: Le dernier paragraphe parle du cas dutilisation (non standard) où e nest ni public ni petit .
- @HagenvonEitzen: En effet, jai mentionné ce problème dans larticle lié crypto.SE. Tout schéma reposant sur la clé » public » ne pouvant pas être dérivé de la » private La clé » doit nécessairement garder la clé » public » secrète dau moins certaines parties ( et ainsi violer lune des hypothèses standard de la crypto à clé publique) pour que cette fonctionnalité soit dune quelconque utilité. Mais je peux voir comment ce paragraphe a pu être trompeur; jespère que la version réécrite est au moins un peu plus claire.
- RSA a une propriété mathématique intéressante selon laquelle le déchiffrement utilise la même formule que le chiffrement, juste avec
d
au lieu dee
. Grâce à cela, vous pouvez permutere
etd
(cest-à-dire utiliser la clé privée pour le chiffrement et la clé publique pour le déchiffrement). Ensuite, vous obtenez le schéma de signature électronique.
Réponse
Oui. Cest assez simple aussi. Si vous regardez la spécification RSA, une clé publique a besoin de n
et e
. Une clé privée peut avoir p
q
d
. Utilisez-les pour calculer.
n=p*q e=mod_inverse(d,euler_totient(n))
Si vous souhaitez les compresser au format PEM, voir https://github.com/ius/rsatool
Commentaires
- Encadré comme une réponse mathématique, cest faux. Une clé privée ne peut avoir que n et d, et à partir de là, cest impossible en général pour calculer e. Il ‘ nest généralement possible en pratique que parce que e est presque toujours sélectionné parmi une poignée de valeurs. Dans le cadre dune réponse pratique, cest faux: e est, en pratique, toujours inclus avec les autres paramètres (au moins n et d, généralement aussi les paramètres nécessaires pour le calcul basé sur CRT).
- Daccord, mais pratiquement RSA avec les clés privées CRT sont généralement stockées comme un tuple de (n, e, d, p, q, dP, dQ, qInv) ce qui est le cas ici. Jessayais justement de définir les composants mathématiquement.
- Oui: pratiquement, les clés privées sont généralement stockées sous forme de tuple qui contient e . Il nest pas nécessaire de calculer e.
- @Gilles Daprès le message: » une clé publique a besoin de
n
ete
. » et de sudhackar ‘ s comment: » mais pratiquement RSA avec les clés privées CRT sont généralement stocké sous forme de tuple de (n, e, d, p, q, dP, dQ, qlnv) « , ce qui mamène à la conclusion que pratiquement, les clés privées sont généralement stockées comme un tuple qui contient la clé privée . Il nest pas nécessaire de calculer la clé privée, ce qui rend toute cette question et toutes ses réponses non pertinentes. Je ne comprends ‘ votre commentaire le plus récent. La réponse de sudhackar ‘ montre comment trouver lensemble des clés publiques possibles à partir des informations les moins utiles possibles. - @ wizzwizz4 Si vous avez p, q et d , vous avez plus que les informations les moins utiles possibles pour une clé privée. Je ‘ nai jamais vu de clés privées avec p, q et d mais pas n et e. Vous devez faire quoi que ce soit dutile avec la clé et stocker p et q au lieu de n ‘ ne gagne pas de stockage.