HSC
Network Security Consulting Agency Since 1989 - Specialized in Unix, Windows, TCP/IP and Internet
Text mode: access to the page content
Hervé Schauer Consultants
You are here: Home > Resources > Tips > Compréhension et utilisation d'outils de chiffrement de fichiers (PGP et/ou GPG).
Go to: HSC Trainings
Télécharger le catalogue des formations
Search:  
Version française
   Services   
o Skills & Expertise
o Consulting
o ISO 27001 services
o Audit & Assessment
o Penetration tests
o Vunerability assessment (TSAR)
o Forensics
o ARJEL
o Training courses
o E-learning
   Conferences   
o Agenda
o Past events
o Tutorials
   Resources   
o Thematic index
o Tips
o Lectures
o Courses
o Articles
o Tools (download)
o Vulnerability watch
   Company   
o Hervé Schauer
o Team
o Job opportunities
o Credentials
o History
o Partnerships
o Associations
   Press and
 communication
 
 
o HSC Newsletter
o Bulletin juridique HSC
o Press review
o Press releases
o Publications
   Contacts   
o How to reach us
o Specific inquiries
o Directions to our office
o Hotels near our office
|>|Compréhension et utilisation d'outils de chiffrement de fichiers (PGP et/ou GPG).  

by Christophe PREMEL (30/10/2000)




--[ But de ce document ]---------------------------------------------------

Ce document n'est pas un document complet : sur le chiffrement, la
cryptographie, l'explication complète des outils de chiffrement, des
interfaces associées, ainsi que des intégrations possibles avec d'autres
logiciels (éditeur, lecteur de mail, ...).

Non, en fait, il a simplement pour but d'aider les personnes désirant avoir
un peu de sécurité dans leurs communications ou simplement sur les fichiers
de leur disque dur. Il est très court, ne rentre pas dans des considérations
technico-théoriques, ou encore pire dans un débat mathématique sur la
cryptanalyse.


--[ Introduction ]---------------------------------------------------------

Les logiciels PGP ou GPG sont des outils similaires permettant de chiffrer
des fichiers. Ceci afin de pouvoir communiquer librement sur Internet, sans
dévoiler le menu de votre repas du soir aux personnes gérant Echelon ;-)

Plus sérieusement, l'utilisation du chiffrement va se répandre de plus en
plus. Il est important de pouvoir communiquer de manière sécurisée, sans
craindre la perte de documents ultra-confidentiels tombant entre de
mauvaises mains.

Le chiffrement a été modifié en France par le décret du 17 Mars 1999, pour
les logiciels de cryptographie ayant une longueur de clef comprise entre
40 et 128 bits. Ce décret abroge la loi de 1996 et permet ainsi de chiffrer
sans autorisation particulière jusqu'à 128 bits.
Pour obtenir de plus amples renseignements sur ce sujet, consulter le site
du journal officiel : http://www.legifrance.gouv.fr/
Aller à la partie concernant le chiffrement et la signature électronique, et
chercher le décret N°99-200 du 17 Mars 1999.


Le fait de chiffrer et signer les messages, permet quatre choses :
. l'intégrité : le message reçu est bien celui envoyé,
. la confidentialité : le message n'est visible en clair qu'à la(aux)
  personne(s) en destination,
. l'authenticité de l'origine des données : le message a bien été envoyé
  par l'émetteur annoncé,
. la non répudiation de la source : il est impossible de nier l'envoi d'un
  message.


--[ Principe ]-------------------------------------------------------------

Il existe plusieurs types de chiffrement :
. le chiffrement symétrique,
. le chiffrement asymétrique.

Le chiffrement symétrique est basé sur un algorithme fabriqué à partir d'une
clef secrète unique. Il est donc important de prendre une clef qui soit
grande et non prédictible (photographie d'un ciel nuageux mis sur un CDROM),
mais aussi et surtout, il faut absolument garantir l'échange sécurisé de
cette clef. Ce chiffrement pose donc un problème de communication des clefs.

Le chiffrement asymétrique nécessite deux clefs. Une clef publique que l'on
distribue librement, et une autre privée qui doit rester secrète.

PGP et GPG fonctionnent de la manière suivante. Évidemment, ceci n'est pas
un document exhaustif, ni un mémoire sur la cryptographie appliquée ;-)

Pour être succinct, et aller à l'essentiel :
Si une personne A désire envoyer un document (fichier, messages) à une
personnes B, la personne A choisit une clef secrète et chiffre son
fichier/document avec. Puis A, chiffre cette clef secrète avec la ou les
clefs publiques des destinataires du fichier/message.
Avantages :
- le chiffrement à clef secrète est bien plus rapide
- même avec beaucoup de destinataires, le message est chiffré une seule
  fois (une seule copie chiffrée envoyée)


--[ PGP ]------------------------------------------------------------------

PGP est un logiciel de chiffrement, disponible dans sa version ancienne, en
sources. Ces sources ne sont pas entièrement libres, et sont soumises à une
licence commerciale.
Phil R. Zimmerman a écrit ce logiciel en 1991 qui a été repris en suite par
diverses sociétés commerciales. Son algorithme robuste et sa large
distribution sur Internet en a fait un standard de fait.

Maintenant, les principes et formats de messages utilisés par PGP ont été
normalisés à l'IETF sous le nom OpenPGP.

Les problèmes avec ce logiciel, sont que les versions gratuites fiables ne
sont pas récentes, et que leurs pérennités dépendent essentiellement de la
société mère.
Pour les versions récentes gratuites, il est à mon humble avis difficile de
leur faire confiance.


--[ GPG ]------------------------------------------------------------------

GPG est dans le principe un clone de PGP, enfin plus exactement une
implémentation de OpenPGP, mais n'utilise aucun code de PGP.
Il est entièrement écrit par des développeurs bénévoles, et est complètement
libre, sous licence GPL¹.
L'un des principaux avantages, est qu'il est forcement pérenne, et remis à
jour continuellement. Aussi bien au niveau des fonctionnalités, qu'au niveau
des éventuels problèmes d'implémentation.

¹GPL : General Public License (http://www.gnu.org/copyleft/gpl.html )


--[ Installation de GPG ]--------------------------------------------------

GPG est un logiciel disponible en source, et librement téléchargeable. Il
peut être récupéré à l'URL :
http://www.flopgun.net/pub/gnupg-1.0.6.tar.gz

mais le site officiel est :
http://www.gnupg.org/

rainman:~$ cd /usr/src
rainman:/usr/local/src$ tar xvfz gnupg-1.0.6.tar.gz
rainman:/usr/local/src$ cd gnupg-1.0.1
rainman:/usr/local/src/gnupg-1.0.1$ ./configure ; make
rainman:/usr/local/src/gnupg-1.0.1$ su
ou
rainman:/usr/local/src/gnupg-1.0.6$ calife
password: ####################
rainman:/usr/local/src/gnupg-1.0.6# make install

La compilation et l'installation sont ainsi effectuées. Il reste maintenant,
simplement à intégrer la compatibilité avec les algorithmes RSA et IDEA pour
les versions antérieures de PGP.

Récupérer les patches pour utiliser RSA et IDEA :
http://www.flopgun.net/pub/idea.c
http://www.flopgun.net/pub/rsa.c

Compiler rsa.c et le copier :
rainman:~$ gcc -Wall -O2 -shared -fPIC -o rsa rsa.c
rainman:~$ calife
password: ####################
rainman:/home/premel# cp rsa /usr/local/lib/gnupg/
rainman:/home/premel# chown root:root /usr/local/lib/gnupg/rsa
rainman:/home/premel# chmod 755 /usr/local/lib/gnupg/rsa

Compiler idea.c et le copier :
rainman:~$ gcc -Wall -O2 -shared -fPIC -o idea idea.c
rainman:~$ calife
password: ####################
rainman:/home/premel# cp idea /usr/local/lib/gnupg/
rainman:/home/premel# chown root:root /usr/local/lib/gnupg/idea
rainman:/home/premel# chmod 755 /usr/local/lib/gnupg/idea


--[ Utilisation de GPG ]---------------------------------------------------

Maintenant que notre logiciel est installé, voici quelques commandes
permettant un usage minimaliste. Pour la version avancée, je vous laisse
vous référer aux pages de manuels (man gpg ;-)

Avant toute chose, créer un répertoire privé avec un fichier de
configuration.

rainman:~$ mkdir ~/.gnupg
rainman:~$ chmod 700 ~/.gnupg
rainman:~$ touch ~/.gnupg/options

Pour bénéficier de la compatibilité avec les algorithmes RSA et IDEA, pour
les personnes utilisant PGP, il faut intégrer le chargement des extensions
dans GPG.
Ajouter pour ce faire les extensions dans le fichier de configuration :
rainman:~$ echo "load-extension rsa" >>~/.gnupg/options
rainman:~$ echo "load-extension idea" >>~/.gnupg/options

Un fichier de configuration peut ressembler à :
rainman:~$ grep -v "^#" ~/.gnupg/options | grep -v "^ *$"
 no-greeting
 no-secmem-warning
 default-key 28B49DF4
 force-v3-sigs
 escape-from-lines
 lock-once
 load-extension rsa
 load-extension idea


Dans un premier temps, il est nécessaire de générer sa paire de clefs
(publique et privée) :

rainman:~$ gpg --gen-key
La méthode est décrite dans le détail, ci-dessous. Il est possible de
répondre aux questions avec les réponses proposées par défaut, ou suivre
l'exemple, apportant un grand plus (2048 bits, au lieu 1024). Le gain en
sécurité est énorme, mais diminue les performances. Ceci dit, vue la montée
en puissance des machines, on sera tranquille un petit peu plus
longtemps ;-))
Mais un algorithme ne se casse pas en force brut, cette méthode est stupide
et prend beaucoup trop de temps... ;)

Cas d'école extrait du "Pretty Good Privacy" de Simsom GARFINKEL chez
O'Reilly.
"...l'algorithme IDEA, une des deux méthodes de chiffrement utilisées par
PGP, met en oeuvre des clefs de 128 bits, soit 2^128 clefs possibles (3,4
10^38). S'il existait un ordinateur capable de tester un milliard de clefs
par seconde et qu'une organisation dispose d'un milliard de telles machines,
il faudrait encore attendre 10^13 années pour explorer toutes les
combinaisons possibles (cette durée représente environ un millier de fois
l'âge de l'univers, actuellement estimé à 1,2 10^10 années)."
Ces calculs sont effectués pour la méthode d'attaque par force brute, et ne
restent par conséquent que du théorique.

Lors de la génération des clefs, il faudra probablement bouger la souris et
taper sur quelques touches de manière aléatoire, afin de générer des nombres
aléatoires (niveau d'entropie). Ne pas taper sur des touches en même temps
que la génération (petit ++++), seulement lorsqu'il le demande.
 
premel@rainman:~$ gpg --gen-key
gpg (GnuPG) 1.0.4; Copyright (C) 2000 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: Warning: using insecure memory!
Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
Your selection? 1
           minimum keysize is  768 bits
           default keysize is 1024 bits
 highest suggested keysize is 2048 bits
 What keysize do you want? (1024) 2048
 Do you really need such a large keysize? yes
 Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
 Key is valid for? (0) 0
 Key does not expire at all
 Is this correct (y/n)? y
 
 You need a User-ID to identify your key; the software constructs the user id
 from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

 Real name: Christophe PREMEL
 Email address: Christophe.Premel@flopgun.net
 Comment:
 You selected this USER-ID:
    "Christophe PREMEL <Christophe.Premel@flopgun.net>"

 Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

 Enter passphrase: ##############################
 Repeat passphrase: ##############################

Il est bien évident que le choix de la phrase secrète (passphrase) est
important. Il ne faut surtout pas que ce soit un mot du dictionnaire, ni
compréhensible humainement parlant. Ou alors, que cela fasse appel à une
suite de mot rendant le cassage ardus. Par exemple, il est possible de
prendre une phrase :
 Ceci pourrait être une bonne passphrase si pas utilisé dans cette brève ;-)

Évidement, il serait préférable d'introduire des majuscules/minuscules,
des chiffres ainsi que des caractères spéciaux :
 C3c1 p0urr41t êtr3 un3 b0nn3 p4ssphr4s3 s1 p4s ut1l1sé d4ns c3tt3 brèv3 ;-)

Hackers = H4X3rs (prononcer HAXOR en langage pirate ;)
"e" remplacer par "3"
"a" remplacer par "4"
"i" remplacer par "1"
"ê", "é", ";", "-", ")" et " " représente les caractères spéciaux.

 We need to generate a lot of random bytes. It is a good idea to perform
 some other action (type on the keyboard, move the mouse, utilize the
 disks) during the prime generation; this gives the random number
 generator a better chance to gain enough entropy.
 +++++.++++++++++..+++++++++++++++++++++++++++++++++++.+++++++++++++++....
 .+++++++++++++++.++++++++++..+++++++++++++++..++++++++++.++++++++++.+++++
 +++++..+++++.+++++>..++++++++++>+++++....+++++^^^
 public and secret key created and signed.
 premel@rainman:~$


Pour dialoguer avec une personnes de manière sécurisée, il faut avoir sa
clef publique. Une fois que vous vous êtes procuré sa clef de manière
sécurisée (en main propre, ou en vérifiant son empreinte en dialoguant
au téléphone avec le correspondant), il faut l'intégrer dans son
portefeuille de clefs.

Vérifier son empreinte (fingerpint) :
rainman:~$ gpg --fingerprint thomas
pub  1024D/032f2BB0 2000-11-01 Corinne THOMAS <Corinne.Thomas@flopgun.net>
     Key fingerprint = 3717 A06D E296 6D30 4856  29B8 004D 24B8 693D 0469
uid                            Corinne THOMAS <Corinne.Thomas@flopgun.net>
sub  2048g/9EC24948 2000-11-01

donc l'empreinte de la clef à vérifier avec la personne est :
3717 A06D E296 6D30 4856  29B8 004D 24B8 693D 0469

Intégrer une clef dans son portefeuille :
rainman:~$ cat Corinne.Thomas@flopgun.net.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: For info see http://www.gnupg.org

mQGiBDoAGAURBACfCPKHfVo8BN74bR6ondpMxe4feRTKBZ0kS30Ki1IOtP5l7tPZ
2DHP8r9OZ5Bf9ZR+VX1LsD8VKKZhssUXcscuRHtfL+4XIvlbNtxjbjHh7eXurzPT
[...]
yZAGuWBNkpW0IkYjo+t7iEYEGBECAAYFAjoAGD4ACgkQIgitwQMvK7B9AQCgu206
d9lnOATccslvu1HcPaEjVfUAn073f0ymlYW5T7/HSP7Tc0Ms4V58
=sTVn
-----END PGP PUBLIC KEY BLOCK-----

rainman:~$ gpg --import Corinne.Thomas@flopgun.net.asc

Ainsi, il est possible de vérifier que sa clef à bien été insérée :
rainman:~$ gpg  --list-keys | grep -i corinne.thomas
pub  1024D/032F2BB0 2000-11-01 Corinne THOMAS <Corinne.Thomas@flopgun.net>
sub  2048g/9EC24948 2000-11-01


Maintenant, il vous est possible de chiffrer un fichier ou message pour
cette personne :

Récupérer son ID :
rainman:~$ gpg --list-keys
pub  1024D/032f2BB0 2000-11-01 Corinne THOMAS <Corinne.Thomas@flopgun.net>
sub  2048g/9EC24948 2000-11-01

rainman:~$ gpg -ea -r thomas fichier_a_chiffrer.txt
ou si vous avez plusieurs thomas, prendre son ID
rainman:~$ gpg -ea -r 032f2bb0 fichier_a_chiffrer.txt

Vous obtenez ainsi un fichier chiffré au format ASCII
rainman:~$ ls
fichier_a_chiffrer.txt.asc

Si vous voulez que cette personne, ou une autre puisse communiquer avec vous
de manière sécurisée, il faut lui fournir votre clef publique.

Pour exporter une clef au format ASCII (texte ISO-8859-i) :
rainman:~$ gpg --list-keys
pub  1024D/28B49DF4 2000-02-04 Christophe PREMEL <Christophe.Premel@hsc.fr>
sub  2048g/3B3AB9E4 2000-02-04

rainman:~$ gpg --export -a -o Christophe.Premel@hsc.fr.asc 28B49DF4 

On obtient ainsi un fichier au format texte contenant la clef.
rainman:~$ ls
Christophe.Premel@hsc.fr.asc

Une fois que tout le monde peut dialoguer de manière sécurisée, il est, ...,
disons utile de pouvoir déchiffrer le fichier.

rainman:~$ gpg -d -o fichier_dechiffre fichier_chiffre.asc


--[ Intégration dans Mutt ]------------------------------------------------

Un très bon lecteur de mail que j'utilise est Mutt (http://www.mutt.org/ ).
Il est simple, rapide, ne plante jamais, et intègre facilement PGP ou GPG.
Il peut par exemple lire des boites aux lettres contenant plus de 53000
messages, soit ~403Mo (votre serviteur a testé avec succès).
Essayez d'en faire autant avec Outlook, Exchange, Eudora, ou Netscape....

Dans votre fichier de configuration de mutt (~/.muttrc) :

# commande pour déchiffrer
set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"

# pour vérifier une signature
set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"

# pour déchiffrer un attachement
set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"

# pour signer un attachement
set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"

# pour signer un message
set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"

# pour chiffrer un attachement
set pgp_encrypt_only_command="pgpewrap gpg -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"

# pour chiffrer et signer un attachement
set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"

# pour importer une clef du portefeuille
set pgp_import_command="gpg --no-verbose --import -v %f"

# pour exporter une clef du portefeuille
set pgp_export_command="gpg --no-verbose --export --armor %r"

# pour vérifier une clef
set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"

# pour lire dans le portefeuille
set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"

# pour lire dans le portefeuille secret
set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"

# pour recevoir d'un serveur de clefs
#set pgp_getkeys_command=""


Vous trouverez plus d'informations à : 
http://www.informatik.uni-oldenburg.de/~joey/Linux/Tips+Tricks/mutt-gpg.html


--[ Serveur de clefs ]-----------------------------------------------------

Il existe un certain nombre de serveurs de clefs (publiques) sur Internet.
Le plus ancien étant celui du MIT : http://pgp.mit.edu/

Ces sites sont dans le principe très utiles, mais plusieurs questions
apparaissent :

Question : Est-ce qu'ils sont tous synchronisés, et regroupent-ils ainsi
toutes les clefs mises à leur disposition ?
Réponse : Tout dépend des serveurs, et surtout de leurs dates de création.
Les serveurs au moment de leur création récupèrent, si l'administrateur fait
bien son travail, la base des autres serveurs. Lorsqu'un utilisateur vient
ajouter sa clef publique, ce serveur ne réplique pas forcement la clef sur
les autres serveurs de la planète.

Question : Peut on faire confiance à ces serveurs ?
Réponse : C'est à vous de voir. Ils peuvent remplacer la clef publique de
quelqu'un par celle faisant partie de la paire de clefs fraîchement générée
usurpant le nom d'une personne. Cela implique que l'éventuel cracker pourra
écouter le futur échange entre les deux parties. Ainsi, il pourra déchiffrer
le message/fichier à la place de la personne.

Question : Il y a un réseau "privé" d'échanges de clefs (www.keyserver.net),
comment est fait la synchronisation, est-ce sûr ?
Réponse : Je n'en sais rien, cela fera peut être l'objet d'une modification
de la brève, ou simplement d'une nouvelle.

Pour ajouter une clef :
http://pgp.mit.edu/#submit
http://www.keyserver.net/en/addkey.html
http://math-www.uni-paderborn.de/pgp/submit.html
http://pgp.zdv.Uni-Mainz.DE/keyserver/pks-commands.html#submit

Chercher une clef :
http://pgp.mit.edu/#extract
http://www.keyserver.net/en/findkey.html
http://math-www.uni-paderborn.de/pgp/extract.html
http://pgp.zdv.Uni-Mainz.DE/keyserver/pks-commands.html#extract

Personnellement, j'avais mis ma clef au MIT il y a un certain nombre
d'années (1995 Oct), et cela n'a à priori servi à personne... ;-) Dans le
principe, c'est beau, mais difficilement réalisable à l'échelle planétaire.
Il est cependant aisé de créer son propre serveur de clefs au sein même de
l'entreprise. À HSC, on récupère et envoie les clefs par courriel en tapant
les commandes dans le message, au même titre qu'un serveur de mailing-list.

--[ Interface à GPG ]------------------------------------------------------

Il existe de nombreuses interfaces, en TCL/TK, en Motif, pour KDE, bref il y
en à beaucoup.... Comme je n'en utilise pas, j'ai installé pour vous GPA, et
_uniquement_ pour vous... ;-)

C'est un produit disponible en sources, désolé on ne se refait pas ;)
disponible à l'URL : http://www.flopgun.net/pub/gpa-0.4.2.tar.gz

Mais le site officiel est :
ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpa/gpa-0.4.2.tar.gz

Son installation est on ne peu plus simple, fidèle aux produits GNU :

rainman:~$ cd /usr/local/src
rainman:/usr/local/src$ tar xvfz gpa-0.4.2.tar.gz
rainman:/usr/local/src$ cd gpa-0.4.2
rainman:/usr/local/src/gpa-0.4.2$ ./configure ; make
rainman:/usr/local/src/gpa-0.4.2$ su -
password: **********************
rainman:/usr/local/src/gpa-0.4.2# make install
rainman:/usr/local/src/gpa-0.4.2# exit
rainman:/usr/local/src/gpa-0.4.2$ gpa &

Il est plutôt convivial, et offre toutes les commandes de base. Si vous êtes
un adepte du clicodrome, ce produit est fait pour vous.


--[ PGP pour Palm Pilot ]--------------------------------------------------

Je n'ai plus l'occasion de retrouver toute la procédure d'installation,
ayant perdu mon Palm Pilot. Cependant il faut utiliser les deux packages
suivants :
. pilotSSLeay
http://www.flopgun.net/pub/pilotSSLeay-2.01.tar.gz

. OpenPGP
http://www.flopgun.net/pub/palmopgp12.tgz

Je suis sûr qu'en cherchant dans Google (http://www.google.org/ ), vous trouverez
plus d'informations.

--[ Aide ]-----------------------------------------------------------------

Bon, il existe de nombreux sites parlant de, ..., plein de choses, mais
allez sur ce site utile. Il est relativement complet :
http://www.geocities.com/openpgp/

--[ EOF ]------------------------------------------------------------------




Last modified on 12 November 2003 at 13:55:00 CET - webmaster@hsc.fr
Mentions légales - Information on this server - © 1989-2013 Hervé Schauer Consultants