Comment une clé publique vérifie-t-elle une signature?
j'essaie de mieux comprendre comment fonctionnent les clés publiques et privées. Je comprends qu'un expéditeur puisse ajouter une signature numérique à un document en utilisant sa clé privée pour obtenir essentiellement 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.
D'après ce que j'ai compris, les clés publiques cryptent, les clés privées déchiffrent... quelqu'un peut-il m'aider à comprendre?
3 réponses
votre compréhension du" chiffrement des clés publiques, déchiffrement des clés privées " est correcte... pour le cryptage 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 que vous avez signé vient de vous. Pour ce faire, vous devez utiliser quelque chose que VOUS avez: votre clé privée.
une signature numérique dans sa description la plus simple est un hachage (SHA1, MD5, etc.) des données (fichiers, messages, etc.) qui est par la suite crypté avec la clé privée du signataire. Puisque c'est quelque chose que seul le signataire a (ou devrait avoir) qui est d'où la confiance vient. Tout le monde a (ou devrait avoir) accès à la clé publique du signataire.
ainsi, pour valider une signature numérique, le destinataire
- calcule un hachage des mêmes données (fichier, message, etc.),
- déchiffre la signature numérique à l'aide de la clé publique de l'expéditeur, et
- compare les 2 valeurs de hachage.
si elles 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).
Espère que ça aide!
comme indiqué dans réponse d'atn , les touches fonctionnent à l'inverse.
chiffrement à clé publique, déchiffrement à clé privée (chiffrement):
openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message.ssl
openssl rsautl -decrypt -inkey private.pem -in message.ssl -out message.txt
chiffrement des clés privées, déchiffrement des clés publiques (signature):
openssl rsautl -sign -inkey private.pem -in message.txt -out message.ssl
openssl rsautl -inkey public.pem -pubin -in message.ssl -out message.txt
ci-dessous est un exemple de script pour tester tout ce flux avec openssl
.
#!/bin/sh
# Create message to be encrypted
echo "Creating message file"
echo "---------------------"
echo "My secret message" > message.txt
echo "done\n"
# Create asymmetric keypair
echo "Creating asymmetric key pair"
echo "----------------------------"
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout
echo "done\n"
# Encrypt with public & decrypt with private
echo "Public key encrypts and private key decrypts"
echo "--------------------------------------------"
openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message_enc_pub.ssl
openssl rsautl -decrypt -inkey private.pem -in message_enc_pub.ssl -out message_pub.txt
xxd message_enc_pub.ssl # Print the binary contents of the encrypted message
cat message_pub.txt # Print the decrypted message
echo "done\n"
# Encrypt with private & decrypt with public
echo "Private key encrypts and public key decrypts"
echo "--------------------------------------------"
openssl rsautl -sign -inkey private.pem -in message.txt -out message_enc_priv.ssl
openssl rsautl -inkey public.pem -pubin -in message_enc_priv.ssl -out message_priv.txt
xxd message_enc_priv.ssl
cat message_priv.txt
echo "done\n"
This script affiche ce qui suit:
Creating message file
---------------------
done
Creating asymmetric key pair
----------------------------
Generating RSA private key, 1024 bit long modulus
...........++++++
....++++++
e is 65537 (0x10001)
writing RSA key
done
Public key encrypts and private key decrypts
--------------------------------------------
00000000: 31c0 f70d 7ed2 088d 9675 801c fb9b 4f95 1...~....u....O.
00000010: c936 8cd0 0cc4 9159 33c4 9625 d752 5b77 .6.....Y3..%.R[w
00000020: 5bfc 988d 19fe d790 b633 191f 50cf 1bf7 [........3..P...
00000030: 34c0 7788 efa2 4967 848f 99e2 a442 91b9 4.w...Ig.....B..
00000040: 5fc7 6c79 40ea d0bc 6cd4 3c9a 488e 9913 _.ly@...l.<.H...
00000050: 387f f7d6 b8e6 5eba 0771 371c c4f0 8c7f 8.....^..q7.....
00000060: 8c87 39a9 0c4c 22ab 13ed c117 c718 92e6 ..9..L".........
00000070: 3d5b 8534 7187 cc2d 2f94 0743 1fcb d890 =[.4q..-/..C....
My secret message
done
Private key encrypts and public key decrypts
--------------------------------------------
00000000: 6955 cdd0 66e4 3696 76e1 a328 ac67 4ca3 iU..f.6.v..(.gL.
00000010: d6bb 5896 b6fe 68f1 55f1 437a 831c fee9 ..X...h.U.Cz....
00000020: 133a a7e9 005b 3fc5 88f7 5210 cdbb 2cba .:...[?...R...,.
00000030: 29f1 d52d 3131 a88b 78e5 333e 90cf 3531 )..-11..x.3>..51
00000040: 08c3 3df8 b76e 41f2 a84a c7fb 0c5b c3b2 ..=..nA..J...[..
00000050: 9d3b ed4a b6ad 89bc 9ebc 9154 da48 6f2d .;.J.......T.Ho-
00000060: 5d8e b686 635f b6a4 8774 a621 5558 7172 ]...c_...t.!UXqr
00000070: fbd3 0c35 df0f 6a16 aa84 f5da 5d5e 5336 ...5..j.....]^S6
My secret message
done
a pensé que je fournirais une explication supplémentaire pour quiconque recherche quelque chose de plus intuitivement révélateur.
une grande partie de cette confusion provient du fait que l'on nomme les "clés publiques" et les "clés privées" en tant que telles, parce que la façon dont ces choses fonctionnent est en contradiction directe avec la façon dont une " clé " est comprise.
prenez le cryptage par exemple. On pourrait penser qu'il fonctionne ainsi:
- Les partis qui veulent être en mesure de lire les messages secrets garder chacun une clé caché (c'est à dire une clé privée)
- Les partis qui veulent être en mesure d'envoyer des messages secrets tous ont la possibilité d'obtenir une déverrouillé verrouillé (c'est à dire un public de verrouillage)
- ensuite, envoyer un message secret est aussi facile que de le verrouiller avec une serrure déverrouillée, mais le déverrouiller ensuite ne peut être fait qu'avec une des clés cachées.
cela permet d'envoyer des messages secrets entre les parties, mais d'un point de vue intuitif ici, "serrure publique" est un nom plus approprié que "clé publique".
Cependant, pour l'envoi de signatures numériques, les rôles sont quelque peu inversés:
- La partie qui veut signer des messages est le seul à avoir accès à la déverrouillé serrures (c'est à dire privé de verrouillage)
- Les partis qui veulent vérifier la signature de tous ont la possibilité d'obtenir une clé (c'est à dire une clé publique)
- alors ce que le signataire fait est de créer deux messages identiques: celui que tout le monde peut lire et un pour l'accompagner, mais qu'ils verrouillent avec une de leurs serrures privées.
-
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, alors ils savent que:
-
le message déverrouillé n'était pas falsifié pendant le voyage et,
-
le message doit provenir de la personne qui possède la serrure correspondante à sa clé publique.
-
-
et finalement, ce système ne fonctionne que si quelqu'un qui veut valider la signature d'un signataire a un endroit faisant autorité pour aller chercher la clé correspondante aux serrures du signataire. Sinon, tout le monde peut dire "Hey, voici la clé de "un-et-un" private lock", vous envoyer un message prétendant être eux, mais le verrouiller avec leur serrure privée, vous effectuez toutes les étapes ci-dessus et de croire que le message doit effectivement être de la personne que vous pensiez, mais vous êtes dupé parce que vous avez été induit en erreur quant au véritable propriétaire d'une clé publique.
tant qu'il y aura une source digne 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 serez en mesure de valider leur signature.