Le chiffrement RSA est basé sur une fonction de trappe, c'est-à-dire une paire de fonctions. Je les appellerai D
et E
. Les fonctions sont conçues pour que D (E (x)) = x
et E (D (x)) = x
(pour tout x
). En d'autres termes, D
et E
sont des inverses. Ce qui en fait une fonction de trappe, c'est que si vous avez une clé publique, vous ne pouvez calculer que E
(pratiquement). Si vous avez une clé privée, vous pouvez calculer à la fois D
et E
.
Le fonctionnement du cryptage est assez évident à partir de cette description. Si Bob veut envoyer un message chiffré à Alice, il calcule ciphertext: = E (texte en clair)
. Puis Bob envoie texte chiffré
à Alice. Alice calcule D (texte chiffré)
, qui est D (E (texte clair))
, qui est simplement plaintext
.
Maintenant, parlons du fonctionnement de la signature. Si Alice veut signer message
, alors elle calcule signature: = D (message)
. Elle envoie ensuite à la fois message
et signature
à Bob. Bob calcule ensuite validation: = E (signature)
. Puisque signature
est D (message)
, alors validation = E (D (message)) = message
.
In autrement dit: pour signer un message, vous agissez comme si vous le déchiffriez, et c'est votre signature. Pour vérifier votre signature, les gens peuvent crypter la signature et s'assurer de récupérer votre message d'origine.
Je le répète: la signature est la même opération que le décryptage.
Ceci est la préoccupation fondamentale concernant la séparation des clés de signature et de chiffrement. Si quelqu'un peut vous amener à signer quelque chose, c'est qu'il vous demande de le déchiffrer.
Supposons que vous dirigiez une entreprise notariale. Si quelqu'un vous donne 10 $ et un message (par exemple, les paroles d'une chanson), vous signerez ce message et vous le renverrez. Si quelqu'un copie plus tard les paroles de vos chansons, vous pouvez produire la signature de la société notariale de confiance pour démontrer que vous avez écrit ces paroles.
Supposons maintenant qu'Eve ait intercepté un message crypté à votre société notariale. Comment peut-elle renverser le cryptage? Elle vous envoie le même message pour la notarisation! Vous exécutez maintenant l'opération de signature (qui, rappelez-vous, est la même que l'opération de déchiffrement) et vous lui renvoyez le résultat. Elle a maintenant le message déchiffré.
En pratique, les protocoles comportent des étapes qui rendent cette attaque plus difficile. Par exemple, PGP (j'entends par là le protocole; gpg est l'implémentation la plus courante ici) ne signe pas le message d'origine; il signe un hachage du message. Mais les preuves de sécurité sont les meilleures dans des situations simples. Vous ne voulez pas que votre preuve sur la sécurité de RSA dépende de la fonction de hachage. (Par exemple, de nombreuses personnes ont utilisé MD5 comme hachage préféré pendant longtemps, mais aujourd'hui MD5 est considéré comme assez cassé.) Seule, la sécurité de RSA dépend de l'idée que vous ne signerez pas de messages arbitraires avec une clé utilisée pour le cryptage. Le maintien de cette exigence est le meilleur moyen de garantir la sécurité de PGP. (Si je me souviens bien, c'est l'avertissement le plus fréquemment répété sur le cryptage asymétrique dans le livre de Bruce Scheier Applied Cryptography .)
Parlons maintenant de une autre question que vous avez posée: "Cela ne signifie-t-il pas également que vous devez distribuer deux clés publiques à toutes les personnes avec lesquelles vous souhaitez communiquer?"
Une "clé" signifie une chose pour les utilisateurs, et une chose différente pour les implémentations cryptographiques. Vous n'avez besoin de communiquer qu'une seule "clé" au niveau de l'utilisateur, bien qu'elle puisse contenir plusieurs clés publiques RSA.
PGP a un concept de sous-clés. Ma clé principale est une clé de signature uniquement. J'ai une sous-clé de chiffrement distincte. Cette sous-clé est signée par ma clé principale. Si vous importez ma clé PGP à partir des serveurs de clés, ou la téléchargez à partir de mon site Web, vous obtiendrez ma clé principale et toutes mes sous-clés. Même si vous n'avez signé que ma clé principale, ma clé principale a signé ma sous-clé de chiffrement, vous savez donc qu'elle m'appartient également. Cela signifie qu'en téléchargeant ma clé PGP (qui englobe de nombreuses clés publiques RSA), vous avez maintenant tout ce dont vous avez besoin pour vérifier mes signatures et pour crypter mes messages.
Avec les sous-clés, la gestion des clés est plus complexe d'un point de vue cryptographique (il y a une étape de vérification de clé supplémentaire à passer), mais pas d'un point de vue pratique (ma clé PGP comprend ma clé principale, ainsi que toutes mes sous-clés). La complexité supplémentaire est cachée dans l'implémentation et n'est pas exposée à l'utilisateur.