<!doctype linuxdoc system>
<article>
<title> MiniHowto sur l'utilisation PGP & GnuPG 
<author>David Trystram <tt>dtrystram@starnet.fr</tt>
<!-- <http://homepages.starnet.fr/dtrystram> -->
<!-- v0.1 - 7 avril 2000 -->
<date> v0.2 - 30 avril 2000

<abstract> 
Compilation rapide (et du coup forcément incomplète) de diverses faqs, howtos ou
informations sur PGP (<bf>Pretty Good Privacy</bf>) ou GnuPG (<bf>Gnu Privacy
Guard</bf>), pour démarrer rapidement avec le chiffrement, et en particulier pour
obtenir une bonne sécurité avec le courrier électronique, utilisant le principe
de clé publique et clé privé.
</abstract>
<toc>

<sect>Données générales<p>

<sect1>Introduction
<p>
Le chiffrement ou le cryptage sont des sujets très souvent abordé dont nous
sentons tous confusément que nous allons l'utiliser dans un avenir proche de
façon beaucoup plus massive qu'actuellement : à la fois dans dans la protection
des transaction commerciales, mais aussi et surtout dans le transport
d'informations privées ou ne devant pas être publique contractuellement (par
exemple en médecine : le secret médical). PGP ou GnuPG sont parfaitement
indiqués dans ce dernier cas. Une traduction du texte de <url
url="http://www.geocities.com/SiliconValley/Bay/9648/" name="Phil Zimmermann"> :
<bf>pourquoi j'ai écrit PGP</bf> doit être lu. Le chiffrement avec des clés
inférieures ou égales à 128 bits est autorisé en France désormais. Lire l'état
de la législation dans le <url url="http://www.legifrance.gouv.fr" name="journal
officiel"> sur le chiffrement ou la signature électronique.

<p>
L'email actuellement tend largement à remplacer le courrier papier pour
transporter l'information. Ce dernier n'est protégé par des regards indélicats
par une simple enveloppe certes, mais qui demande alors un investissement humain
très lourd (le plus souvent illégal) pour en découvrir le contenu. L'effet de
masse fait qu'est ainsi transporté de l'information confidentielle ou
parfaitement anodine sans différence, et donc de fait la protège. Il est convenu
de dire que la protection en des emails est équivalente à celle cartes postales
: très facile à lire aux différentes étapes de la chaine, en particulier aux
deux extrémités. En fait la puissance de l'informatique fait que le traitement
automatique des fichiers et l'utilisation de "renifleurs" permet théoriquement
une intervention humaine beaucoup plus ciblée et précise (affaiblissant
considérablement la protection actuelle de l'email par rapport au courrier
papier). PGP est le logiciel le plus ancien et le plus largement utilisé en
matière de cryptographie, des versions freewares comme commerciales
existent. Son alterego libre de la Free Software Foundation existe également :
GnuPG en version stable maintenant (1.x).

<p>
Il faut donc que le système respecte classiquement :
<itemize>
<item><bf>L'intègrité</bf> : le message reçu est indistingable du message envoyé,
<item><bf>La confidentialité</bf> : le message est incompréhensible à toute personne non autorisée,
<item><bf>L'authentification</bf> : l'authenticité du message est vérifiable.
</itemize>

<sect1>Principe 
<p> 
La technique cryptographique la plus simple consiste à utiliser <bf>une</bf>
<bf>clé</bf> secrète. C'est la même qui est utilisée par l'émetteur et le
recepteur. Il faut la transporter par des moyens sécurisés, ce qui par
l'Internet rend les choses caduques. PGP permet aussi d'utiliser ce système.

<p>
Dans les systèmes à clés publiques (PGP ou GnuPG), il existe <bf>deux clés</bf>
: l'une permettant de déchiffrer ce que l'autre a chiffré, et
réciproquement. L'une est publique et ainsi diffusée à ses correspondants qui
vont l'utiliser pour vous envoyer un message (et donc le chiffrer avec
celle-ci), l'autre est privé (vous êtes donc le seul à en disposer elle doit
être protégé du vol, et ne doit être éventuellement transporté
<bf>qu'uniquement</bf> par un canal sûr, par exemple avec vous sur une
disquette). De plus, pour pouvoir les utiliser, il y a utilisation d'une phrase
(passphrase), cela peut constituer un point faible du système. Par ailleurs la
clé publique doit être authentifier par un tiers pour être sûr que celle ci
émane bien du correspondant.

<p>
La signature électronique permet, tout en gardant le texte clair de générer un
petit fichier de signature, qui est <bf>à la fois</bf> (1) spécifique de vous et (2) du
message que vous envoyez. C'est donc bien plus qu'une signature manuscrite que
vous pouvez apposer en bas d'un document papier. C'est à dire qu'une modification
du document transmis par voie électronique générera une erreur à la vérification
du couple message/signature. Cela peut par exemple être utile pour les articles
produit pour l'usenet, les listes diffusions.

<p>
NB : Je ne suis pas spécialiste de crytologie, en particulier en matière
d'algorithme ou de calcul de la taille de clés. Je cherche simplement à faire
partager ma recherche de documentation dans l'usage de ces logiciels.  La
lecture de documentations plus exhaustives est nécessaire pour correctement
apréhender les différents types d'algorithmes (non abordés ici) et comprendre
l'ensemble des principes.

<p>Toutes les <htmlurl url="mailto:dtrystram@starnet.fr" name="suggestions">
sont les bienvenues.


<sect>Quelques commandes pour commencer à utiliser PGP ou GnuPG<p>
<p>
Ces exemples d'utilisation sont décrits pour être utilisés en ligne de commande.
L'interfacage ultérieurement peut se faire à travers les divers logiciels
d'email (voir alors la documentation propre) pour rendre plus facile l'usage
de pgp ou gpg.
</p>

<sect1> PGP et GnuPG<p>
Cette documentation est écrite pour pgp5i ou aussi pgp6.x qui est proche, 
mais dont les commandes en version 5 de la forme :
<verb>
$ pgpx -option  
</verb>
se retrouvent en version 6 sous la forme :
<verb>
$ pgp -x -option
</verb>

<p>
La syntaxe de gpg est un peu différente. Quoiqu'il en soit, l'aide en ligne se
trouve pour ces différents logiciels comme habituellement avec l'option <tt>-h</tt>.

<p>
De même d'une façon générale l'option <tt>-a</tt> permet de générer un fichier
ascii et non pas "binaire" (comportement par défaut). Les fichiers générés sont
compressés.

<sect2> Compiler l'archive : <p>
Il n'y rien de particulier, que cela soit pour PGP ou GnuPG, (voir les <ref
id="ftp_links" name="sites ftp"> en fin de texte pour récuperer la dite-archive,
en particulier il est important de vérifier que la signature des sources est
correcte pour éviter tout risque de "backdoor").

<verb>
$ ./configure ; make ; su  
# make install 

$ touch ~/.pgp/pgp.cfg (je n'ai rien mis dedans dans un premier temps...)
</verb>

<sect2> Générer ses propres clés en répondant aux questions : <p>
<verb>
$ pgpk -g (ver5)
$ pgp -kg (ver6)
$ gpg --gen-key (gpg)
</verb>


Avec une un ID_utilisateur_soit-meme avec ce type de forme :
<verb>
Nom Prenom <pnom@provider.fr> 
</verb>
(en ligne de commande les entourer de guillemets).

<p>NB : choisir les protocoles et choix par défaut sauf si vous savez ce que
vous faites. Par ailleurs la passphrase doit être choisie correctement, elle
doit concilier deux choses : (1) être retenue facilement par vous, mais (2) pas
par les autres. Elle ne doit évidement n'être écrite nul part (quoiqu'il soit
possible de le faire dans le fichier pgp.cgf pour éviter de la taper chaque fois,
c'est à priori dangeureux).


<sect2>Et extraire sa clé dans le fichier_de_clé : <p>
<verb>
$ pgpk -x ID_utilisateur_soit-meme -o fichier_de_clé_soit-meme  (ver5)
$ pgp -kx ID_utilisateur_soit-meme (ver6)
$ gpg --export -a (gpg)
</verb>
Ce qui permet d'obtenir un fichier_de_clé_public sous la forme :
<verb>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP 6.5.1i

mQGiBDjY7q8RBADfRjutlbo6vUtGhX3A3q2ND0eodh6ABryK0P0cibhyzOiyTvoW
z3F076Hyn/fVRpXSMdEKgAtrF9ZpejJCADo3NbAd92S06FGBPLPx1HpsdILiLTiV

[cut de plusieurs lignes]

RgQYEQIABgUCONjuvAAKCRCr+8SyXuR23pZlAJwOBY3uOqZ2YmfoOtRNb3kZ7+vo
ZQCfb3Mbx9JyOcoglFoLGTxw9kOod1M=
=frQn
-----END PGP PUBLIC KEY BLOCK-----
</verb>

Les clés privés sont dans les répertoires <tt>~/.pgp</tt> ou <tt>~/.gnupg</tt>.

<sect2>Rajouter un fichier_de_clé_autre d'un correpondant à son trousseau : <p>
Avec comme ID_utilisateur : 
<verb>
"Correpondant Prenom <correspondant@provider.fr>" 
</verb>
<verb>
$ pgpk -a fichier_de_clé_autre (ver5)
$ pgp -ka fichier_de_clé_autre (ver6)
$ gpg --import fichier_de_clé_autre (gnupg)
</verb>

<sect2>Chiffrer un message avec la clé publique d'un correspondant (userid) : <p>
<verb>
$ pgpe -a -r "Correpondant Prenom <correspondant@provider.fr>" fichier.txt (ver5)
$ pgp -ea fichier.txt "Correpondant Prenom <correspondant@provider.fr>"  (ver6)
</verb>
Si plusieurs correspondants :
<verb>
$ pgpe -a fichier.txt userid1 userid2 userid3 etc... (ver5)
$ pgp -ea fichier.txt userid1 userid2 userid3 etc... (ver6)
</verb>

<sect2> Déchiffrer : <p>
<verb>
$ pgpv fichier.asc (ver5)
$ pgp fichier.asc (ver6)
</verb>

<sect2> Signer : <p>
<verb>
$ pgps -ba fichier (ver5)
$ pgp -sta fichier (ver6)
$ gpg --sign fichier (gpg)
</verb>

Cela génère un petit fichier de signature ayant cette structure (quand on
choisit le format ascii) :
<verb>
-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 5.0i for non-commercial use
MessageID: vhZ6Ww2+tYXLJ80SrRjYm7IX9zmWVgZU

iQA/AwUAOQzfDVl+mm/GOS8wEQJDTQCeOLWY/JEVBcdew2TtEJO5jH9v84oAoPP8
X5h/F1M6t9B6ui5aqs56xCRq
=GPEf
-----END PGP SIGNATURE-----
</verb>

<!--
Si la signature est inclus dans le message, celui ci
commence alors par :
<tt>
-----BEGIN PGP SIGNED MESSAGE-----
</tt>
-->

<sect2> Vérifier la signature d'un fichier : <p>
<verb>
$ pgpv fichier.asc (ver5)
ou
$ pgpv fichier.asc fichier.sig (si en deux fichiers séparés)
$ pgp -sta fichier (ver6)
$ gpg --verify toto.asc (gpg)
</verb>


<sect2> Lister les clés que l'on possède : <p>
Faire suivre du nom d'un utilisateur le cas échéant
<verb>
$ pgpk -ll (ver5)
$ pgp -kl (ver6)
$ gpg --fingerprint (gpg)
</verb>

<p>
Permet en particulier de voir les clés et les empreintes

<sect2>Enlever sa clé : <p>
<verb>
$ pgp -kd "Nom Prenom <pnom@provider.fr>" (ver6)
$ pgpk -ru userid (ver5)
</verb>

<sect1>Avec les logiciels de mail <p> 
PGP ou peuvent être bien sûr utilisés avec votre logiciel de mail, regarder la
documentation spécifique.  Pour la configuration avec Mutt voir le lien <ref
id="ftp_links" name="ftp">.  Pour ce qui est de pgp 5 et gnus/emacs, j'ai
rajouté dans mon .emacs :
<verb>
;; mailcrypt avec pgp ou gnupg.
(setq load-path (cons "/usr/local/share/emacs/site-lisp/" load-path))
(load-library "mailcrypt")
(mc-setversion "5.0") 
;(mc-setversion "gpg") ; à décommenter pour gnupg (non testé)
(autoload 'mc-install-write-mode "mailcrypt" nil t)
(autoload 'mc-install-read-mode "mailcrypt" nil t)
(add-hook 'mail-mode-hook 'mc-install-write-mode)
(add-hook 'gnus-summary-mode-hook 'mc-install-read-mode)
(add-hook 'message-mode-hook 'mc-install-write-mode)
(add-hook 'news-reply-mode-hook 'mc-install-write-mode)
;; fin mailcrypt
</verb>

<sect>Quelques liens <p>
<LABEL ID="ftp_links">

<url url="http://www.cryptography.org/getpgp.htm" name="Crytography :">
beaucoup de liens avec de la documentation PGP,

<url url="http://www.pgpi.com" name="PGPi :">
download et documentation,

<url url="http://www.gnupg.org/fr/gnupg.html" name="GnuPG"> Version GNU de la FSF, une documentation
importante et complète (y compris en français) s'y trouve. Lire en particulier le GPGMiniHowto.

<url url="http://www.aui.fr/" name="Association des Utilisateurs de l'Internet">

<url url="http://www.pobox.com/~lbudney/linux/software/mailcrypt.html" name="Mailcrypt :">
pour interfacer pgp5 avec emacs (je n'ai pas trouvé de patch pour pgp6),  

<url url="http://www.linuxdoc.org/HOWTO/Mutt-GnuPG-PGP-HOWTO.html" name="Mutt-GnuPG-PGP-HOWTO">

<url url="http://www.di.ens.fr/~pornin/faq-cle.html" name="Considération sur les clés par Thomas Pornin">

</article>

