Googler J'ai vu plusieurs conférences disant qu'il est possible de signer en utilisant des certificats numériques. Je suis confus à ce sujet, car selon ma connaissance, il est possible de signer uniquement à l'aide de la clé privée, où des certificats numériques sont utilisés lors du processus de signature?
Juste une question de langage imprécis qui devrait être compris par toutes les personnes impliquées.
Vous signez en utilisant la clé privée que vous seul avez. La clé publique n'est pas utilisée et le certificat n'est pas utilisé. En fait, il n'y a peut-être pas de certificat utilisant la clé publique. Le vérificateur vérifie la signature à l'aide de la clé publique, le certificat n'est pas utilisé. Mais la clé publique n'est qu'un chiffre (ou deux chiffres). Il n'est pas pratique de gérer les nombres nus. Si souvent, la clé publique est transportée avec des métadonnées indiquant à quoi sert la clé publique. C'est un certificat.
Peut-être qu'il dit juste "la clé publique de juaninf" et est auto-signé (a une signature attachée faite en utilisant la clé privée correspondant à la clé publique de lui-même).
Peut-être qu'au travail, il y a une note signée par votre patron qui dit "Ceci est la clé publique de juaninf, je l'ai embauché pour travailler pour moi le 2019-06-23, je suis le directeur du département D de la société C, voici un signature du PDG de la société C attestant ce fait ". Et les portes automatiques du bâtiment peuvent le vérifier. Et votre clé privée se trouve dans une carte à puce non clonable.
Si vous cliquez sur le cadenas à côté de l'URL dans votre navigateur, vous pouvez voir le certificat TLS pour le site. Dans le certificat, vous pouvez voir la clé publique. Vous pouvez voir le certificat, donc vous avez le certificat. Mais vous n'avez pas la clé privée correspondante. Vous ne pouvez donc pas créer une nouvelle signature pour la clé publique dans le certificat. Vous ne pouvez donc pas effectuer d'attaques MitM sur d'autres visiteurs du site. Pour effectuer des attaques MitM, vous devez disposer de la clé privée correspondant à la clé publique dans le certificat pour signer les messages d'échange de clé DH (ou déchiffrer les secrets chiffrés dans des configurations obsolètes de TLS).
Parfois, il est important d'être précis lorsque l'on dit "j'ai le certificat" ou "j'ai le certificat et la clé privée". Mais souvent, il est évident d'après le contexte ce qui est nécessaire.
Une chose peut être ajoutée à la réponse de Z.T.: la confusion est susceptible d'être causée par la mise en œuvre de la cryptographie dans Microsoft Windows (peut-être aussi d'autres systèmes).
Dans l'interface d'administration, les certificats et leurs clés privées correspondantes sont gérés via le composant logiciel enfichable "Certificats" de la console de gestion.
Dans .NET Framework, la classe X509Certificate2
, utilisé pour représenter un certificat numérique, possède les propriétés HasPrivateKey
et PrivateKey
. La documentation de ce dernier indique "Obtient ou définit l'objet AsymmetricAlgorithm qui représente la clé privée associée à un certificat". Cependant, étant donné que la convention courante est qu'un champ représente quelque chose appartenant à l'objet, le développeur est susceptible de supposer que la clé privée fait partie du certificat, et pas seulement quelque chose qui lui est lié.
Enfin, les clés privées en tant que fichiers sont rarement gérées seules, mais sont généralement regroupées avec des clés publiques et des certificats dans des fichiers .pfx. Ces fichiers peuvent être appelés "conteneurs cryptographiques", ou quelque chose comme ça, mais lorsque vous les ouvrez, le titre de l'application est "Assistant d'importation de certificats", donc les gens les appellent simplement "certificats".
Tout cela donne au développeur une image mentale du certificat en tant qu'entité contenant à la fois des clés publiques et (parfois) privées. Apparemment, c'est techniquement faux: les certificats ne sont associés qu'à des clés mais ne les contiennent pas. Cependant, je dois admettre que j'ai développé des applications .NET en utilisant le cryptage numérique et la signature pendant quelques années, et aujourd'hui c'est la première fois que j'apprends que ma compréhension du terme "certificat" était incorrecte. Je n'ai jamais été corrigé non plus lorsque j'ai parlé d'utiliser des certificats pour signer/décrypter quelque chose lors de réunions avec d'autres développeurs.