Les clés privées et publiques sont liées mathématiquement. Le processus de génération vous obtient à la fois, toujours; l'un est appelé privé (vous le gardez en sécurité), l'autre est public (vous pouvez le donner à n'importe qui) Le lien est difficile à trouver, donc connaître l'un d'entre eux n'aide pas à trouver l'autre. Lorsque vous signez quelque chose, vous avez besoin de votre clé privée. Quand les gens veulent vérifier la signature, ils ont besoin de votre clé publique. Lorsque vous cryptez quelque chose, vous avez besoin de la clé publique du destinataire. Seulement, il sera capable de déchiffrer car cela nécessite la clé privée. Donc, au début, vous avez les deux dans un fichier et vous pouvez extraire la clé publique pour la distribution (ou la mettre dans un certificat si vous voulez que d'autres personnes lui fassent confiance).
Edit: J'ai commencé un commentaire, mais il était trop long, donc voici:
Chaque libray de sécurité a ses propres outils qui mettent en œuvre les mathématiques nécessaires pour construire la bonne paire public/privé. OpenSSL est livré avec un outil en ligne de commande, avec lequel vous pouvez créer votre propre autorité de certification, créer des demandes de certificat et des certificats. Windows Server dispose de services de certificats avec des fonctionnalités analogues. .NET possède l'outil sn (sn = nom fort) qui crée des fichiers (avec l'extension snk) avec des clés publiques/privées (utilisées pour signer une DLL). Visual Studio dispose d'une interface graphique pour la création de fichiers snk. Il y a bien sûr des outils dans le monde Java (un keystore si je ne me trompe pas) et sur Mac OS X. Lorsque vous créez vous-même des certificats, ils sont appelés 'auto-signés' et ne sont pas approuvés par le reste de la monde.
Si vous ressentez le besoin de lancer une question sur SO avec "Désolé, que ce n'est pas exactement la question de programmation", alors vous voudrez peut-être repenser .... – skaffman
Qu'est-ce que cela a à voir avec Microsoft? –