J'essaie de mieux comprendre le fonctionnement des clés publiques / privées. Je comprends qu'un expéditeur peut ajouter une signature numérique à un document en utilisant sa clé privée pour essentiellement obtenir un hachage du document, mais ce que je ne comprends pas, c'est comment la clé publique peut être utilisée pour vérifier cette signature.
Ma compréhension était que les clés publiques chiffrent, les clés privées déchiffrent ... quelqu'un peut-il m'aider à comprendre?
Réponses:
Votre compréhension de «les clés publiques chiffrent, les clés privées déchiffrent» est correcte ... pour le chiffrement des données / messages. Pour les signatures numériques, c'est l'inverse. Avec une signature numérique, vous essayez de prouver que le document signé par vous provient de vous. Pour ce faire, vous devez utiliser quelque chose que vous seul possédez: votre clé privée.
Une signature numérique dans sa description la plus simple est un hachage (SHA1, MD5, etc.) des données (fichier, message, etc.) qui est ensuite chiffré avec la clé privée du signataire. Puisque c'est quelque chose que seul le signataire a (ou devrait avoir), c'est de là que vient la confiance. TOUT LE MONDE a (ou devrait avoir) accès à la clé publique du signataire.
Ainsi, pour valider une signature numérique, le destinataire
S'ils correspondent, la signature est considérée comme valide. S'ils ne correspondent pas, cela signifie soit qu'une clé différente a été utilisée pour la signer, soit que les données ont été modifiées (intentionnellement ou non).
J'espère que cela pourra aider!
la source
Les touches fonctionnent inversement:
Vous trouverez ci-dessous un exemple de script pour tester l'ensemble de ce flux
openssl
.Ce script génère les éléments suivants:
la source
La clé publique crypte et seule la clé privée peut la décrypter, et l'inverse est vrai. Ils chiffrent tous les deux à des hachages différents, mais chaque clé peut déchiffrer le chiffrement de l'autre.
Il existe plusieurs façons de vérifier qu'un message provient d'un expéditeur attendu. Par exemple:
L'expéditeur envoie:
Le message
Le hachage du message chiffré avec leur clé privée
Le récepteur:
S'ils ne sont pas identiques, cela signifie que le message a été falsifié ou qu'il a été signé avec une autre clé et non celle que nous pensions ...
Un autre exemple serait que l'expéditeur utilise un hachage commun que le destinataire sait peut-être également utiliser. Par exemple:
L'expéditeur envoie:
Le récepteur:
Cela garantit à nouveau que le message n'a pas été falsifié et qu'il provient de l'expéditeur attendu.
la source
Si je devais reformuler votre question à partir de la façon dont je la comprends, vous posez la question suivante:
D'autres réponses ont déjà expliqué comment la cryptographie asymétrique signifie que vous pouvez soit :
Nous savons que les exemples n ° 1 et n ° 2 fonctionnent. L'exemple n ° 1 a un sens intuitif, tandis que l'exemple n ° 2 pose la question initiale .
Il s'avère que la cryptographie à courbe elliptique (également appelée «multiplication de courbe elliptique») est la réponse à la question initiale. La cryptographie à courbe elliptique est la relation mathématique qui rend les conditions suivantes possibles:
Pour la plupart, les conditions n ° 1 et n ° 2 ont du sens, mais qu'en est-il du n ° 3?
Vous avez deux choix ici:
En conclusion, une paire de clés publique / privée est créée à l'aide de la cryptographie à courbe elliptique, qui, par nature, crée une clé publique et privée qui sont mathématiquement liées dans les deux sens, mais pas mathématiquement dérivées dans les deux sens . C'est ce qui vous permet d'utiliser la clé publique d'une personne pour vérifier qu'elle a signé un message spécifique, sans qu'elle vous expose sa clé privée.
la source
Je pensais que je fournirais une explication supplémentaire à tous ceux qui recherchent quelque chose de plus intuitivement révélateur.
Une grande partie de cette confusion provient de la dénomination des «clés publiques» et des «clés privées» en tant que telles, car la façon dont ces choses fonctionnent réellement est en contradiction directe avec la façon dont une «clé» est comprise.
Prenons le cryptage par exemple. Cela pourrait être considéré comme fonctionnant comme ceci:
Cela permet d'envoyer des messages secrets entre les parties, mais d'un point de vue intuitif ici, «verrou public» est un nom plus approprié que «clé publique».
Cependant, pour l'envoi de signatures numériques, les rôles sont quelque peu inversés:
Ensuite, lorsque le destinataire reçoit le message, il peut le lire, puis utiliser la clé publique pour déverrouiller le message verrouillé et comparer les deux messages. Si les messages sont les mêmes, ils savent que:
Le message déverrouillé n'a pas été falsifié pendant le voyage et,
Le message doit provenir de la personne qui possède le verrou correspondant à sa clé publique.
Et enfin, tout ce système ne fonctionne que si quiconque souhaite valider la signature d'un signataire dispose d'un endroit faisant autorité pour obtenir la clé correspondante aux serrures du signataire. Sinon, n'importe qui peut dire "Hé, voici la clé du verrou privé de tel et tel", vous envoyer un message prétendant être eux mais le verrouiller avec leur verrou privé, vous effectuez toutes les étapes ci-dessus et pensez que le message doit réellement être de la personne à laquelle vous pensiez, mais vous êtes dupe parce que vous avez été induit en erreur quant au véritable propriétaire d'une clé publique.
Tant qu'il existe une source de confiance pour récupérer la clé publique d'un signataire, vous saurez qui est le propriétaire légitime d'une clé publique et pourrez valider sa signature.
la source
À votre question - je regardais la mise en œuvre RSA. Et obtenu plus de clarté sur la façon dont une clé publique est utilisée pour vérifier la signature à l'aide d'une clé privée. Sans aucun doute, la clé privée n'est pas exposée. Voici comment...
L'astuce ici est de cacher la clé privée dans une fonction. Dans ce cas,
(p-1)*(q-1).
Considérez p comme la clé privée et e comme la clé publique. «p» est encapsulé dans une autre fonction pour le rendre caché.
Données envoyées = [cryptées (hachage), message] = [m ^ d, message]; où m est le message Supposons que 'Données envoyées' = y Pour vérifier l'intégrité, nous trouvons y ^ e pour obtenir m. Puisque
m ^(d*e) = m ^1 = m
.J'espère que cela t'aides! :)
la source