Premièrement, quelques éléments de terminologie. Supposons que je veuille vous envoyer un message, mais que je veuille que personne d'autre à part vous ne puisse le lire. Je pourrais coder ou "crypter" le message, ce qui veut dire que je le brouille dans l'espoir de le compliquer, le rendant illisible pour quiconque excepté pour vous, destinataire de celui-ci. Je définis donc une clé cryptographique pour coder le message, clé que vous possédez également pour le décoder ou le "décrypter". C'est ainsi que fonctionne les clés symétriques dans les systèmes de cryptographie traditionnelle.
Dans les systèmes cryptographiques traditionnels, tels que l'US Federal Data
Encryption Standard (DES), une seule clé est utilisée aussi bien pour le codage que pour
le décodage. Cela signifie qu'une clé doit être initialement transmise par des canaux
sécurisés de façon à ce que les deux partis puissent la connaître avant que le
message crypté ne soit envoyé par des canaux non sécurisés. Ceci peut présenter des
difficultés. Et si vous avez un moyen sécurisé pour transmettre des clés, alors
pourquoi utiliser la cryptographie plutôt que d'envoyer directement les documents grâce
à ce premier moyen ?
Dans les systèmes cryptographiques à clé publique, tout le monde possède deux clés
complémentaires, une clé publique que l'on distribue, et une clé secrète. Chaque clé
déverrouille le code produit par l'autre clé. Le fait de connaître la clé publique ne
permet pas d'en déduire la clé secrète correspondante. La clé publique peut donc être
publiée et largement disséminée sur un réseau de communication. Ce procédé permet de
préserver la confidentialité de certains documents sans avoir besoin d'un canal
sécurisé, nécessaire aux systèmes cryptographiques traditionnels. N'importe qui peut
alors utiliser la clé publique de son destinataire pour lui envoyer un document crypté,
et celui-ci utilisera sa propre clé secrète correspondante pour décoder le document.
Personne, en dehors du destinataire, ne peut le décrypter, car personne d'autre n'a
accès à cette clé secrète. Même la personne qui a codé le message n'est plus en
mesure de le décrypter.
L'authentification des messages est également possible. La clé secrète de l'envoyeur
peut être utilisée pour coder un message, de cette façon il le signe. Ceci créer une
signature numérique du message, que le destinataire (ou n'importe qui d'autre) peut
vérifier en utilisant la clé publique de l'expéditeur afin de la décoder. Ceci prouve
que l'expéditeur est bien la personne qui est à l'origine du message, et que le message
n'a pas été modifié dans l'intervalle par quelqu'un d'autre, puisque l'expéditeur est
le seul à posséder la clé secrète qui a fait la signature. Toute contrefaçon d'un
message signé est impossible, de même l'expéditeur ne pourra pas désavouer sa
signature par la suite.
Les deux procédés ci-dessus peuvent être combinés pour permettre de preserver la
confidentialité d'un message tout en l'authentifiant. Ceci se déroule en deux étapes,
premièrement, en le signant avec sa propre clé secrète, puis en cryptant le message
signé avec la clé publique du destinataire. Le destinataire, lui, n'aura qu'à refaire
ces étapes à l'envers ; c'est à dire dans un premier temps décoder le message avec sa
propre clé secrète, puis vérifier la signature contenue dans le message avec la clé
publique de l'expéditeur. Ces étapes sont effectuées automatiquement par le logiciel de
celui qui reçoit le document.
Du fait que les algorithmes de codage à clé publique sont beaucoup plus lents que ceux
à clé unique, le codage du document sera optimisé si l'on utilise un cryptage classique
à clé unique de haute qualité. Voila donc ce qui se passe : dans un procédé invisible
pour l'utilisateur, une clé aléatoire temporaire, créée pour cette unique cession, est
utilisée pour coder de manière classique le document appelé texte clair. Cette clé
établie lors de la cession de codage par la clé publique est envoyée avec le texte
codé (appelé "texte chiffré") vers le destinataire. Le destinataire utilise
sa propre clé secréte pour retrouver la clé temporaire, et pour ensuite utiliser cette
clé afin d'exécuter l'algorithme de décryptage traditionnel à clé unique, qui
décodera les informations contenues dans la majeure partie du document chiffré.
Les clés publiques sont conservées dans des "certificats de clés"
individuels, qui contiennent l'identité de l'utilisateur possédant la clé (le nom de
cette personne ainsi que son email), un cachet de la date à laquelle la paire de clés a
été créée, ainsi que la clé publique elle même. Cela est similaire pour les clés
secrètes, mais celles-ci sont ensuite cryptées avec un mot de passe, rendant impossible
leur utilisation au cas où elles serait volées. Un fichier regroupant un ensemble de
certificats est appelé "trousseau de clés", les clés sont ensuite
référencées de façon interne par un numéro d'identification, qui est une
"contraction" de la clé publique (les 64 premiers bits de poids faibles
représentatifs de la clé publique). Pour une plus grande rapidité d'exécution, quand
le numéro d'identification de la clé est affiché, seulement les 32 premiers bits de
poids faible sont visibles ; alors que plusieurs clés peuvent partager le même numéro
d'identité d'utilisateur, pour des applications pratiques, deux clés ne partagent jamais
le même numéro d'identification de clé.
PGP, système de cryptage à clé publique, utilise des "contractions de
messages" pour construire des signatures. Une contraction de message est effectuée
à l'aide d'une fonction de hachage à sens unique de 128bits, cryptograhiquement trés
solide. C'est en quelque sorte un procédé analogue aux sommes de contrôle
("Checksum") ou aux vérifications de code d'erreur CRC ("CRC error
checking code"), qui représentent le message de manière compacte, et est utilisé
pour détecter si celui-ci a été modifié. Il est cependant diffèrent du CRC puisqu'il
est statistiquement impossible pour des pirates de concevoir un message de remplacement
qui contiendrait une contraction de message identique. La contraction de message est alors
cryptée par la clé secrète afin de former une signature. Les documents sont signés en
ajoutant au début du fichier un certificat de signature, qui contient le numéro
d'identifiaction de la clé qui a été utilisée pour le signer, une contraction de
message signée par clé secrète, et un cachet indiquant la date à laquelle la signature
a étè effectuée. Le numéro d'identification de la clé est utilisé par le
destinataire pour rechercher la clé publique de l'envoyeur afin de vérifier cette
signature.
Le logiciel du destinataire recherchera automatiquement la clé publique de l'envoyeur, et
le numéro d'identification dans son trousseau de clés publiques. Par ailleurs, les
fichiers cryptés contiennent également un préfixe contenant le numéro d'identification
de la clé publique utilisée pour les crypter. Le logiciel du destinataire recherchera
auparavent automatiquement la clé secrète dans son trousseau nécessaire au décryptage
du message, décryptera le message, puis analysera la signature.
Ces deux types de trousseaux de clés constituent la principale méthode de stockage et de gestion des clés publiques et des clés secrètes. Plutôt que de garder des clés individuelles dans des fichiers différents, leurs regroupement en trousseaux en facilite la recherche, soit par numéro d'identification de la clé, soir par numéro d'identification de l'utilisateur. Chaque utilisateur utilise sa propre paire de trousseaux de clés. Une clé publique individuelle est gardée dans un fichier à part afin de l'envoyer à d'autres personnes qui l'ajouteront à leur trousseau.
Ce document est extrait (avec la permission) du fichier d'aide PGP
Help 2.2 écrit par Jeff Sheets (Xanthur@aol.com)
sur PGP Version 2.62 -11Oct 94 développé par Philip Zimmermann, et beaucoup d'autres.
Il a été traduit de l'anglais par Bruno Dohm (dohm@imaginet.fr)
le 3 Septembre 1996.