PGP en pratique

Par Olivier Bonaventure

Dans un précédent article, nous avons présenté le fonctionnement de la cryptographie à clé publique d'un point de vue "théorique". Il est temps maintenant de passer aux travaux pratiques avec PGP (il existe d'autres logiciels utilisant la cryptographie à clé publique .Voir par exemple http://www.cs.hut.fi/ssh/crypto/software.html pour une longue liste de logiciels utilisant du cryptage).
PGP (Pretty Good Privacy ou assez bonne "intimité") est un programme freeware développé initialement par Phil Zimmerman aux USA, mais amélioré ensuite par de nombreux programmeurs collaborant grâce à Internet. L'objectif principal de PGP est de pouvoir crypter et signer des messages transmis de façon électronique (en général par email).

Problèmes légaux et distribution de PGP

PGP étant freeware, on peut s'attendre à ce qu'il soit disponible partout. C'est vrai, mais comme PGP est un logiciel de cryptage, il est soumis aux réglementations (souvent draconiennes) sur l'exportation de matériel cryptographique qui est assimilé dans de nombreux pays à du matériel militaire. Aux USA, où PGP est né, il est interdit d'exporter des logiciels de cryptage "trop puissants", et PGP est largement "trop puissant" selon les critères de l'administration américaine. L'application de cette réglementation est relativement aisée pour les logiciels commerciaux, mais nettement plus compliquée pour les logiciels freeware. Lors de la diffusion de la première version de PGP, Phil Zimmerman a pris soin de ne pas le distribuer en dehors des USA. Mais comme PGP est freeware, chacun peut le donner à son voisin. Rapidement, PGP a franchi l'Atlantique et s'est retrouvé sur des BBS et des sites ftp en Europe et ailleurs. Hors des USA, PGP n'est plus soumis à la réglementation américaine sur les logiciels de cryptage, et c'est ainsi qu'il s'est répandu partout. Cette diffusion "illégale" de PGP a provoqué une vive réaction des autorités américaines qui ont, jusqu'il y a peu, menacé Phil Zimmerman d'actions en justice en tant que responsable de cette exportation illégale. Ces menaces n'ont pas empêcher le développement de PGP puisque de nombreux autres programmeurs ont repris le flambeau et ont développé de nouvelles versions sur base des sources qui accompagnaient la première version de PGP développée par Zimmerman. Outre ces problèmes d'exportation "illégale", PGP a dû faire face à des problèmes de brevet puisque PGP utilise l'algorithme RSA qui est breveté aux USA. Après de nombreuses tractations juridiques, et avec l'aide du MIT (l'université où RSA a été inventé) le développement de PGP a été scindé en deux versions distinctes. Ces deux versions restent freeware et compatibles, mais sont basées sur des sources partiellement différentes. La première utilise une librairie fournie par le détenteur du brevet RSA et est la seule version freeware utilisable aux USA. Comme elle a été développée aux USA, elle n'est pas exportable. La seconde n'utilise pas la libraire fournie par le détenteur du brevet RSA, mais utilise une librairie équivalente, un peu plus rapide. Cette seconde version (aussi appelée version internationale et qui se reconnaît au suffixe i ou is derrière le numéro de version) a été développée en dehors des USA. Elle est illégale aux USA (pour des raisons de brevet), mais tout à fait légale en Europe. Elle est disponible sur des sites Internet et des BBS en Europe : elle peut être chargée depuis de nombreux serveurs ftp (par exemple via ftp://ftp.pgp.net/pub/pgp ou mieux via le mirror belge ftp://ftp.belnet.be/pub/security/pgp ) et probablement aussi depuis plusieurs BBS en Belgique. PGP est disponible sous forme de code source ou sous forme précompilée pour Unix (Linux), MS-DOS, Mac, Atari, Amiga... Pour éviter tout problème, il est préférable d'utiliser la version internationale de PGP et de la charger depuis un serveur en Europe ou même, idéalement, en Belgique. Quant à l'utilisation de PGP en Belgique, il semblerait qu'elle soit autorisée (selon le directeur de l'IBPT, les articles de loi cités dans le précédent numéro de "En Ligne..." ne s'appliquent pas aux logiciels, et donc pas à PGP), mais la loi pourrait changer... Sur Fidonet , le netmail crypté est en principe interdit, sauf si les noeuds par lesquels il transite l'autorisent explicitement en mettant le flag ENC dans la nodelist.

Utilisation de PGP

Après cette longue, mais malheureusement nécessaire, digression concernant des problèmes légaux, il est temps de passer à l'utilisation de PGP. La première version de PGP fonctionnait en ligne de commande sous MS-DOS. La dernière version fonctionne sur de nombreuses plates-formes, mais toujours uniquement en ligne de commande. Si vous faites une allergie aux lignes de commande, vous pouvez toujours employer un des nombreux "shells" (voir la FAQ de PGP pour une liste non-exhaustive) qui ajoutent une belle interface graphique à PGP, mais il m'est difficile de vous en conseiller un. Comme tous ces programmes appellent chaque fois la version " ligne de commande " de PGP pour les opérations de cryptage/décryptage, je ne parlerai que de la version " ligne de commande ".

Génération de clés

Après avoir chargé (et éventuellement compilé) PGP, la première opération importante est de générer votre clé PGP personnelle (pgp -kg). En fait, PGP va générer une clé publique (qu'il stockera dans le fichier pubring.pgp) et une clé privée (qu'il stockera dans le fichier secring.pgp). Lors de la génération de ces deux clés, PGP vous demandera plusieurs informations. La première est la taille de la clé. Plus la clé est longue, plus elle est sûre, mais plus les opérations de cryptage/décryptage seront lentes sur une machine peu performante. De nombreux utilisateurs choisissent des clés de 1024 bits. Ensuite, vous devrez entrer l'identificateur de l'utilisateur de cette clé (UserId), normalement vos prénom et nom, suivis de votre adresse email entre < et >. PGP choisira un numéro d'identification pour la clé (KeyId) et vous demandera ensuite une phrase "code". Cette phrase code servira à protéger votre clé privée. PGP vous la demandera chaque fois que vous voudrez décrypter ou signer un message. Si vous la perdez, vous perdez également votre clé privée. A vous de choisir une phrase que vous n'oublierez pas facilement, mais qu'un individu malfaisant ne trouvera pas facilement non plus... Suivant la longueur de votre phrase "code" et de votre clé, PGP peut également vous demander de taper un certain nombre de caractères de façon aléatoire pour initialiser correctement le programme servant à créer votre clé publique et votre clé privée. Vous seul utiliserez votre clé privée, soit pour signer vos messages, soit pour décrypter des messages confidentiels reçus. Vous devez donc la garder précieusement. Votre clé publique sera par contre utilisée par vos correspondants, soit pour vérifier votre signature, soit pour vous envoyer des messages confidentiels. Vous devez donc la mettre à leur disposition.

Distribution des clés publiques

Différentes solutions existent pour la distribution des clés publiques. Si vous voyez régulièrement vos correspondants, le plus simple (et le plus sûr) est probablement de leur donner votre clé publique sur disquette. Pour cela, vous devez extraire votre clé publique de votre fichier pubring.pgp (par exemple en faisant pgp -kxa "Prénom"). Cette solution est gérable si vous communiquez avec quelques personnes, mais absolument impraticable si vous voulez signer des messages sur Fidonet ou Usenet. Dans ces cas, le mieux est d'envoyer votre clé publique sur un des nombreux serveurs de clés PGP. Vous pouvez déposer votre clé sur le serveur de clés PGP de RTFM (ndlr: mainteneant a l'arrêt) ou en l'envoyant par email (vous pouvez également obtenir un message d'aide du serveur email en envoyant, à cette adresse, un message vide avec HELP comme sujet). Si vous envoyez votre clé sur le serveur de RTFM, elle sera automatiquement transmise aux autres serveurs de clés PGP que l'on trouve sur Internet et toute le monde pourra facilement obtenir votre clé publique.

(ndlr: le serveur de clef rtfm est mainteneant a l'arrêt)

Validité des clés publiques

Les serveurs de clés PGP sont pratiques, mais ils ne garantissent aucunement la validité de leurs réponses. Par exemple, les serveurs de clés PGP contiennent une clé dont l'identificateur est "William J. Clinton ". Sur base de cette identification, on pourrait croire que cette clé appartient au Président des USA. En fait, cette clé est plus que probablement une fausse clé qui n'appartient pas du tout au locataire de la Maison Blanche. Ce problème de la mise en correspondance entre un individu (une adresse email) et une clé publique est le talon d'Achille de tout système à clé publique. Heureusement, PGP dispose de plusieurs mécanismes permettant de vérifier qu'une clé publique appartient bien à la personne mentionnée dans son identificateur. Le premier mécanisme est celui des "empreintes de clé" (key fingerprints). Ces empreintes sont constituées d'une somme de contrôle calculée sur votre clé publique (pgp -kvc identificateur). Elles sont utiles lorsque l'on veut vérifier une clé PGP avec son propriétaire supposé. Par exemple, pour vérifier une clé publique par téléphone, il suffit de contrôler cette empreinte et non toute la clé. Le second mécanisme est celui de la certification des clés. Les certificats de clés permettent à tout utilisateur de PGP de signer (certifier) la clé d'un autre utilisateur. L'idée de la certification est qu'un utilisateur peut raisonnablement faire confiance à une clé qui a été certifiée par quelqu'un en qui il a confiance. Pour bien comprendre ce mécanisme, le mieux est probablement de prendre un petit exemple.

Utilité du mécanisme de certification des clés

Considérons trois utilisateurs, Alice, Bob et Charles. Supposons que Alice connaît Bob et que Charles connaît Bob, mais qu'Alice et Charles ne se connaissaient pas. Supposons en outre que ces trois utilisateurs ont chacun généré une clé PGP avec comme identificateur leur nom (P_Alice, P_Bob et P_Charles). Comme Alice connaît Bob, elle a l'occasion de vérifier (par exemple en le rencontrant, ou par téléphone grâce aux empreintes de clés) que P_Bob est bien la clé publique de Bob. Pour annoncer aux autres utilisateurs que P_Bob est bien la clé de l'individu dénommé Bob, Alice certifie la clé de Bob et Bob fait de même. Après avoir certifié la clé d'Alice, Bob retransmet P_Alice, munie de son certificat au serveur de clés PGP. Comme Bob et Charles se connaissaient, ils ont également l'occasion de se certifier mutuellement leurs clés. Bob peut donc envoyer la clé P_Charles certifiée au serveur de clés PGP. Si maintenant Alice demande la clé de Charles au serveur de clés PGP, elle la recevra munie du certificat de Bob. Si Alice fait confiance à Bob, la présence du certificat de Bob dans la clé P_Charles pourra suffire à convaincre Alice que cette clé est bien celle de Charles.

Dans un monde parfait, tel que celui de l'exemple précédent, la certification n'est pas nécessaire. En fait, la certification n'est utile que lorsque quelqu'un veut tromper le système. Considérons à nouveau les trois utilisateurs de l'exemple ci-dessus, mais supposons que Michel, pour n'importe quelle raison, souhaite se faire passer pour Charles. Pour cela, Michel génère une clé PGP P2_Charles et la transmet aux serveurs de clés. A cette clé, Michel a pris soin d'associer le nom "Charles" et pas son vrai nom. Lorsque Alice demandera la clé publique de l'utilisateur Charles sur le serveur de clés, elle recevra deux clés en réponse (P_Charles et P2_Charles). Si Alice ne regarde que le nom associé à ces deux clés, elle ne pourra pas les distinguer, puisqu'elles sont toutes deux associées au nom "Charles". Par contre, si Alice regarde les certificats des deux clés, elle verra que P_Charles est certifiée par Bob en qui elle a confiance, tandis que P2_Charles n'est certifié par personne en qui Alice a confiance. Alice n'utilisera que la clé P_Charles pour vérifier les messages signés par Charles ou pour lui envoyer des messages cryptés et pourra donc supposer, à raison, que la clé P2_Charles ne correspond pas à l'utilisateur "Charles".

Obtention des clés publiques

Si vous voyez régulièrement vos correspondants, le plus simple est de leur demander leur clé publique sur disquette. Si ce n'est pas possible, vous pouvez interroger un serveur de clés PGP. Par exemple, le serveur de clés de RTFM vous répondra par email à l'adresse pgp-clefs-publiques@pgp.netline.be. Pour récupérer une clé via le serveur email, vous devez soit connaître le numéro de la clé (KeyId) que vous cherchez, soit une partie de l'identificateur de l'utilisateur (UserId), par exemple son adresse email. Si vous connaissez le numéro de la clé, envoyez un message vide avec comme sujet "GET 0xKeyId" (sans les guillemets et où KeyId est le numéro de la clé voulue) à l'adresse ci-dessus. Si vous ne connaissez que l'adresse email, vous pouvez demander au serveur de clés la liste des clés contenant cette adresse email en envoyant un message vide avec comme sujet "INDEX nom@site" à l'adresse ci-dessus. Le serveur de clés vous renverra alors un listing des clés correspondant à nom@site. Grâce à cette liste vous pourrez trouver le KeyId qui vous intéresse et réinterroger le serveur de clés avec la commande GET. Le serveur de clés supporte d'autres commandes qui peuvent vous être utiles (MGET par exemple). Envoyez- lui un message avec "HELP" comme sujet pour en savoir plus. Lorsque vous recevez la clé publique d'un autre utilisateur, par exemple via le serveur de clés, vous devez demander à votre PGP de l'ajouter à votre liste de clés publiques. Pour cela, il vous suffit de lancer PGP avec le message contenant cette clé comme paramètre, et PGP rajoutera la clé contenue dans ce message à votre liste de clés publiques (pubring.pgp en l'occurrence).

Signature d'un message

PGP peut signer un message ASCII de deux façons. Avec la première option (pgp - sta message), PGP crypte votre message avec votre clé privée. Le message crypté est encodé de façon à pouvoir être transmis par email et se retrouve par défaut dans le fichier message.asc. Toute personne qui dispose de votre clé publique peut alors vérifier (pgp message) que le message vient bien de vous, mais il est totalement illisible pour quelqu'un qui n'a pas votre clé publique. Si vous voulez que le message soit signé mais reste lisible par ceux qui n'ont pas votre clé (par exemple si vous voulez poster ce message sur Usenet), vous devez utiliser l'option "signature en clair" de PGP (pgp -sta +clearsig=on message). De cette façon, PGP conservera votre message intacte, mais rajoutera, à la fin du message, une somme de contrôle qui est, elle, cryptée avec votre clé privée. Cette somme de contrôle permettra à toute personne qui dispose de votre clé de vérifier que le message n'a pas été modifié en recalculant la somme de contrôle du message et en la comparant à celle qui a été cryptée avec votre clé privée. Si vous comptez utiliser cette fonction de PGP sur Fidonet ou Internet, faites quelques essais pour vérifier que vos messages passent correctement. En effet, certains programmes de gestion du mail, tant sur Internet que sur Fidonet, ont la mauvaise habitude de modifier légèrement (par exemple en supprimant des espaces ou en changeant From en >From lorsqu'il apparaît en début de ligne) certains messages. La moindre modification d'un message signé en clair (même un espace qui manque) invalidera la signature PGP.

Vérification d'une signature

Pour vérifier la signature d'un message que vous avez reçu, il vous suffit de lancer pgp avec comme paramètre ce message. Si la clé publique nécessaire à la vérification de la signature est présente dans votre fichier pubring.pgp, PGP sera en mesure de valider la signature. Sinon, PGP vous indiquera le numéro de la clé publique nécessaire pour vérifier la signature.

Messages confidentiels

Si vous désirez envoyer un message de façon confidentielle à Alice, il vous suffit de demander à PGP de le crypter avec la clé publique d'Alice (pgp -eta message Alice). Si Alice veut lire le message que vous lui avez envoyé, elle doit demander à PGP de le décrypter avec sa clé privée (pgp message_crypté).

Messages signés et confidentiels

Si vous désirez envoyer à Bob un message signé, de façon confidentielle, vous pouvez demander à PGP de signer le message avec votre clé privée et de le crypter avec la clé publique de Bob en une seule commande (pgp -esta message Bob). Pour autant que Bob dispose de votre clé publique, il pourra, également, décrypter et vérifier la signature du message en une seule opération (pgp message_reçu).

Pour en savoir plus :

La lecture du manuel de PGP (en anglais malheureusement) est vivement conseillée à tous les utilisateurs potentiels.
Sur Fidonet, les abonnés à PGP.B pourront probablement vous aider. Sur Usenet, demandez de l'aide dans les newsgroups comp.security.pgp.* La FAQ de PGP, postée régulièrement sur comp.security.pgp.announce et disponible sur http://www.pgp.net/pgpnet/pgp-faq/ contient également de nombreuses informations.

Olivier Bonaventure E-Mail olivier@rtfm.be


Retour à la page principale de En-Ligne

E-Mail WebMaster

Dernière modification de cette page : 29 juillet 1997