Pour résoudre le problème d’usurpation, on introduit une nouvelle actrice : l’autorité de certification (CA), que l’on appellera
Trent. C’est une entité à qui Alice décide, une fois pour toutes, de faire confiance. Concrètement, Trent possède lui aussi une paire de clés RSA : une clé privée, qu’il garde secrète, et une clé publique, connue à l’avance de Alice (par exemple écrite en dur dans son programme).
Le rôle de Trent n’est pas de chiffrer les mots de passe, mais de garantir le lien entre une identité et une clé publique. Lorsque qu’une entité veut prouver qu’il est bien « SERVEUR_MDP », il lui envoie sa clé publique, et Trent construit un certificat qui contient au minimum :
- le nom du serveur
- sa clé publique
Dans notre version simplifiée, on peut voir la signature de ce certificat comme une petite partie de données que Trent va chiffrer avec sa clé privée. Le certificat « signé » contient donc deux choses : les informations visibles (nom + clé publique du serveur) et une signature, section du certificat chiffrée par la clé privée de l’autorité.
Quand Alice reçoit ce certificat via la radio, elle peut le vérifier grâce à la clé publique de Trent qu’elle connaît déjà : si ce qu’elle obtient en « déchiffrant » la signature avec la clé publique de Trent correspond bien au contenu du certificat, elle peut en déduire que ce certificat a été produit par Trent et qu’il n’a pas été modifié. Dans le cas contraire, Alice rejette le certificat.
L’idée essentielle à retenir est la suivante : chiffrer quelque chose avec la clé privée de Trent, puis déchiffrer ce quelque chose avec la clé publique de Trent permet de prouver que ce quelque chose vient bien de Trent.
Bob, qui a obtenu un certificat signé par Trent, peut donc convaincre Alice que sa clé publique est la bonne. Mallory, qui ne possède pas de certificat signé par Trent, ne peut pas fabriquer un certificat qui passera ce test. C’est ce mécanisme de signature que nous allons exploiter dans la partie expérimentation pour limiter l’usage de faux certificats.