Avec une clé privée, est-il possible de dériver sa clé publique?

d'après ce que j'ai pu comprendre en lisant divers documents, la paire de clés public-privé sont la base du cryptage assymétrique et aussi quelque chose au sujet du choix de 2 nombres premiers (qui est à peu près votre clé privée) et de les multiplier (qui est à peu près votre clé publique), je semble qu'il soit possible de générer une clé publique si vous connaissez la clé privée. Est-il correct ou je suis prenant quelque chose?

[EDIT]

Ce qui m'a fait plus déroutante était qu'il n'est pas possible de sérialiser la clé RSA à XML avec seulement clé privée (en utilisant la classe .net RSACryptoServiceProvider). Je ne sais pas si cette limitation est intentionnelle ou non!

43
demandé sur John 2009-03-30 12:54:11

9 réponses

cela dépend du système de crypto.

In RSA , nous avons (citant Wikipedia):

la clé publique se compose du module n et de l'exposant public (ou cryptage). Les la clé privée se compose du module n et de l'exposant privé (ou de déchiffrement) qui ça doit rester secret.

maintenant si nous avons n et d (la clé privée), nous manquons seulement e pour le la clé publique. Mais e est souvent assez faible (moins de trois chiffres), ou même fixe (une valeur commune est 65537). Dans ces cas, l'obtention de la clé publique est triviale.

pour elliptic Curve Diffie-Hellman , la clé privée est d, et la clé publique dG (avec G aussi public), donc c'est aussi trivial.

31
répondu sleske 2009-03-30 09:22:48

dans la plupart des systèmes de cryptographie asymétriques, le seul fait qui est garanti est que vous ne pouvez pas trouver la clé privée à partir de la clé publique. Dans l'autre sens, trouver la clé publique à partir de la clé privée est dans la plupart des cas trivial.

par exemple, dans RSA, vous pouvez créer la clé publique à partir de la clé privée avec:

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

Ce qui est trompeur est la terminologie: "clé privée" se réfère à 2 concepts différents, si vous parlez de la théorie, ou si vous parlez de la mise en œuvre pratique:

  • Le théorique clé privée est le couple (d, n) qui partage parfaitement symétrique (mathématique) le rapport avec la (e, n) . Si vous les comparez, l'un ne peut pas être calculé à partir de l'autre.
  • Le pratique clé privée (comme dans openssl mise en œuvre de exemple), renvoie à un fichier contenant (d, n) mais aussi plusieurs valeurs intermédiaires importantes pour le décodage de la vitesse. En outre, la partie théoriquement " inconnue "de la clé publique e est souvent fixée par convention à des valeurs communes (qui est 0x10001 par défaut dans openssl et bien qu'elle puisse être modifiée, il est fortement recommandé de s'en tenir à seulement valeurs très spécifiques ). Donc en déduire la clé publique (e, n) à partir de la clé privée est trivial pour plus d'une raison.
38
répondu vaab 2017-10-29 04:13:41

Il dépend de l'algorithme, et ce que vous entendez par "clé privée".

RSA clés privées sont souvent stockées dans leur "Chinois reste théorème" forme. Par exemple, la structure RSAPrivateKey définie dans PKCS #1 et réutilisée par de nombreuses autres normes crypto prend cette forme. Cette forme comprend les deux nombres secrets souvent désignés p et q , à partir de laquelle le totent est calculé. Avec totent et l'exposant privé, l'exposant public est rapidement calculer.

dans tous les cas, la plupart des paires de clés RSA utilisent 65537 comme exposant public, et le module est toujours porté comme partie de la clé privée.

8
répondu erickson 2009-04-02 22:57:56

dans tout système de cryptographie à clé publique, la clé publique est mathématiquement liée à la clé privée. C'est très simple.

La clé publique est dérivé de la clé privée au moment de la génération, et avec la clé privée à tout moment dans l'avenir, il est possible de re-tirer la clé publique facilement.

Il n'est pas possible d'aller dans l'autre sens. Donné une clé publique, il n'est pas facile de dériver la clé privée. C'est pourquoi nous pouvons partager en toute sécurité les clés publiques avec d'autres personnes. Si vous avez assez de temps/cycles CPU vous pourriez La forcer mais il est probablement plus facile d'attendre une attaque mathématique sur la clé.

3
répondu Adam Hawes 2009-03-30 09:27:18

pour le cas spécifique D'OpenSSH et ssh-keygen , yes you can :

ssh-keygen-y

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


Généralement, cela dépend de l'algorithme et de ce que vous appelez la clé privée. Toutefois, toute mise en œuvre judicieuse inclure les renseignements complets (clés publiques et privées) dans le fichier secret.

2
répondu Colonel Panic 2012-08-21 16:00:06

Oui avec accès à la clé privée la clé publique peut être générée

1
répondu AnthonyWJones 2009-03-30 08:59:04

la clé publique est le module N (et l'exposant public e, habituellement 65537), la clé privée est donnée par les deux premiers P, q (et l'exposant privé d, parfois aussi CRT parts d_p, d_q pour speedup) essentiellement, vous avez N = pq et e d=1 mod ((p-1) (q-1)), vous pouvez également calculer d_p et d_q en utilisant CRT compte tenu de la clé privée, le calcul du module de la clé publique est une multiplication "ennuyeuse" et l'exposant public est en spécification ou calculé à l'aide de l'algorithme euclid étendu si la norme e a été pas assez bon. étant donné la clé publique, le calcul de la clé privée nécessite soit de trouver d (Problème RSA) ou p,q (factoring, voir tamis de champ de nombre pour le meilleur algo pour faire cela). Il est démontré que ces problèmes sont équivalents dans des conditions raisonnables [briser RSA de manière générique est équivalent à Factoring, D. Aggarwal et U. Maurer, 2008]

0
répondu petr 2016-01-25 15:44:39

il y a une idée fausse de ce qu'est la clé privée. La clé privée est juste la paire (d,n) et, étant donné seulement cela, il est infaisable de générer la clé publique à partir de celle-ci à moins que vous puissiez supposer que l'exposant public est 65537, ce qui est le cas sur presque toutes les clés rsa.

si, pour une raison quelconque, l'exposant public est un nombre plus grand, vous ne pouvez pas créer la clé publique à partir de la clé privée.

cela dit, la valeur stockée en tant que "clé privée" de pem les fichiers n'est pas seulement la clé privée, mais aussi les facteurs premiers (entre autres choses) et, par conséquent, il est facile de générer la clé publique.

0
répondu Michael 2017-03-24 05:52:08

il est théoriquement possible, mais pour de grandes touches calculable infaisable.

-2
répondu Mark Probst 2009-03-30 08:58:41