Vous êtes sur la page 1sur 36

Module : Sécurité réseaux

 OpenPGP

4ème année MRI Année 2019-2020


Promo 2021
M. SZPIEG
1
Le standard Openpgp
 IETF a défini un standard appelé OpenPGP.
 Ce standard est basé sur un système d'encryptage
développé par Phil Zimmermann en 1991 appelé
« pgp » (Pretty Good Privacy).
 L'utilisation et l'exportation de RSA sans l'accord des
auteurs de l'algorithme entraîna pour Phil Zimmermann
un procès de 3 ans avec les douanes américaines.
https://www.philzimmermann.com/EN/essays/WhyIWrotePGP.html
 Il fonda ensuite la société « PGP Corporation » en 1996
qui commercialise le produit.
 Actuellement cette société appartient à Symantec.

2
PGP produit commercial

3
PGP vs GPG
 PGP est un produit commercial, compatible
« OpenPGP », et « PGP corporation » propose des
services en lien avec le produit PGP qui ne sont pas
gratuits.
 GPG est un produit de cryptage, compatible
« OpenPGP », qui est sous licence GNU (Libre).
 Algorithme IDEA.
– Cet algorithme est utilisé par PGP
– Il est sous forme de module dans gpg
« IDEA est un algorithme breveté et donc l'utilisation de
l'IDEA dans les pays où ce brevet est valide ne peut pas
être autorisé en raison des restrictions de la licence
publique générale GNU. Ces restrictions sont là pour aider
à protéger la liberté des logiciels. »
4
https://www.gnupg.org/faq/why-not-idea.html
PGP vs GPG

5
Les PKI Infrastructure à clés publiques
L'infrastructure de cryptographie à clés publiques (PKI) a deux
principales implémentations :
 Norme X.509 qui utilise des certificats et des autorités de
certification (CA) qui sont des entreprises privées.
Elle est basée sur une autorité approuvée (CA) qui garantit la
validité de tous les certificats délivrés.
C'est la norme qui est derrière SSL/TLS et le cryptage des e-mail
S/MIME.
 Norme OpenPGP qui a été développée avec un objectif spécifique
de ne pas exiger d'autorités de certification centralisées, mais
plutôt s'appuyer sur des relations de confiance entre les
utilisateurs réguliers.

6
PKI X.509 rappel 
Les PKI basées sur les centres de certification :

Le système repose sur des organismes privés CA


(Certificate Authority or Certification Authority) que l'on
rémunère pour certifier l'identité d'une personne, d'un
serveur ...
L'autorité de certification est chargée de signer les
certificats, de leur assigner une date de validité, ainsi que
révoquer éventuellement des certificats.
Le système utilise la cryptographie à clés publiques.

7
PKI OpenPGP principe
Les PKI X.509 basées sur la confiance « partagée » pour la
validité de la clé publique :
a) Vous êtes colocataire avec Alice et celle-ci vous donne de la
main à la main sa clé publique. Vous avez confiance en
cette clé car vous connaissez Alice et elle vous a donné
personnellement sa clé.
b) Vous voulez communiquer, de manière sécurisée, avec
Chloé que vous n'avez jamais rencontrée et que vous ne
rencontrerez sans doute jamais mais dont vous trouvez la
clé publique sur INTERNET.
Comment faire confiance à cette clé ?
c) Alice est une amie de Chloé et Chloé lui a demandé de
signer sa clé. Donc la clé publique de Chloé est signée par
Alice ce qui vous rassure et donc vous décidez d'utiliser la
clé publique de Chloé.

8
PKI OpenPGP philosophie
Au lieu d'avoir des Centres de Certification centralisés
comme la norme X.509, OpenPGP laisse à l'utilisateur les
choix suivants :
 Utiliser ou non la clé
 Signer ou non la clé
 Choisir le niveau de confiance de la clé.

Les clés publiques seront déposées sur des serveurs de


clés permettant ainsi à tout un chacun de récupérer les
clés de ses correspondants.

9
GPG créer ses clés (0)
Préparation :

De base, Ubuntu n'a pas de générateur de nombre aléatoire qui génère
suffisamment d'entropie aussi il faut installer et activer un démon qui
fournisse cette notion d’aléatoire

sudo apt-get install -y rng-tools


sudo /usr/sbin/rngd -r /dev/urandom

On installera gpg-agent de manière à mémoriser les passphrases

10
GPG créer ses clés (1)
#gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Sélectionnez le type de clef désiré :


(1) RSA et RSA (par défaut)
(2) DSA et Elgamal
(3) DSA (signature seule)
(4) RSA (signature seule)
Quel est votre choix ?

Remarque : Le cryptage et la signature nécessitent deux algorithmes.

11
GPG créer ses clés (2)
les clefs RSA peuvent faire entre 1024 et 4096 bits de longueur.
Quelle taille de clef désirez-vous ? (2048)
La taille demandée est 2048 bits
Veuillez indiquer le temps pendant lequel cette clef devrait être valable.
0 = la clef n'expire pas
<n> = la clef expire dans n jours
<n>w = la clef expire dans n semaines
<n>m = la clef expire dans n mois
<n>y = la clef expire dans n ans
Pendant combien de temps la clef est-elle valable ? (0) 5y
La clef expire le lun. 16 déc. 2019 14:35:21 CET
Est-ce correct ? (o/N)

12
GPG créer ses clés (3)
Une identité est nécessaire à la clef ; le programme la construit à partir
du nom réel, d'un commentaire et d'une adresse électronique de cette façon :


Nom réel : Martial Szpieg

Adresse électronique : martial.szpieg@insa-cvl.fr

Commentaire : Computer science teacher INSA Centre Val de Loire France

Vous avez sélectionné cette identité :


« Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr> »

Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique


ou (O)ui/(Q)uitter ?

Remarque : Ces trois informations vont permettre de générer l'UID de la clé 
13
GPG créer ses clés (4)
Une phrase de passe est nécessaire pour protéger votre clef secrète.

De nombreux octets aléatoires doivent être générés. Vous devriez faire


autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.
...+++++
..+++++
De nombreux octets aléatoires doivent être générés. Vous devriez faire
autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.
+++++
+++++

Répétition de l'information due au temps mis pour la génération

14
GPG créer ses clés (5)
gpg: clef EBD64434 marquée de confiance ultime.
les clefs publique et secrète ont été créées et signées.

gpg: vérification de la base de confiance


gpg: 3 marginale(s) nécessaire(s), 1 complète(s) nécessaire(s),
modèle de confiance PGP
gpg: profondeur : 0 valables : 4 signées : 1
confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 4 u.
gpg: profondeur : 1 valables : 1 signées : 0
confiance : 1 i., 0 n.d., 0 j., 0 m., 0 t., 0 u.
gpg: la prochaine vérification de la base de confiance aura lieu le 2015-11-04
pub 2048R/EBD64434 2014-12-17 [expire : 2019-12-16]
Empreinte de la clef = 3FD4 ED01 ACA1 B8C5 025F 1501 1496 0A31 EBD6 4434
uid Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr>
sub 2048R/EA762AD0 2014-12-17 [expire : 2019-12-16]

Résultat final 15
GPG manipuler sa clé
#gpg --edit-key EBD64434
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

La clef secrète est disponible.

pub 2048R/EBD64434 créé : 2014-12-17 expire : 2019-12-16 utilisation : SC


confiance : ultime validité : ultime
sub 2048R/EA762AD0 créé : 2014-12-17 expire : 2019-12-16 utilisation : E
[ ultime ] (1). Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr>

Nous sommes en mode interactif
PUBKEY_USAGE_SIG      S
PUBKEY_USAGE_CERT     C créer un certificat
PUBKEY_USAGE_ENC      E
PUBKEY_USAGE_AUTH     A 16
Insérer une sous-clé de cryptage
gpg> addkey
La clef est protégée.

Une phrase de passe est nécessaire pour déverrouiller la clef secrète de


l'utilisateur : « Martial Szpieg <martial.szpieg@ensi-bourges.fr> »
clef RSA de 2048 bits, identifiant 98E68395, créée le 2009-09-30

Sélectionnez le type de clef désiré :


(3) DSA (signature seule)
(4) RSA (signature seule)
(5) Elgamal (chiffrement seul)
(6) RSA (chiffrement seul)
Quel est votre choix ? 6

Nous sommes en mode interactif 17


Les magasins de clés
Dans le répertoire ~/.gnupgp des fichiers ont été créés

secring.pgp contient les clés secrètes


pubring.pgp contient les clés publiques
trustdb.gpg base de données de fiabilité des clés
gpg.conf paramètres de configuration de GnuPG

18
Indiquer sa confiance (1)
gpg> trust
pub 2048R/EBD64434 créé : 2014-12-17 expire : 2019-12-16 utilisation : SC
confiance : ultime validité : ultime
sub 2048R/EA762AD0 créé : 2014-12-17 expire : 2019-12-16 utilisation : E
[ ultime ] (1). Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr>
Décidez maintenant de la confiance que vous portez en cet utilisateur pour
vérifier les clefs des autres utilisateurs (en regardant les passeports, en
vérifiant les empreintes depuis diverses sources, etc.)
1 = je ne sais pas ou n'ai pas d'avis
2 = je ne fais PAS confiance
3 = je fais très légèrement confiance
4 = je fais entièrement confiance
5 = j'attribue une confiance ultime
m = retour au menu principal
Quelle est votre décision ?

19
Indiquer sa confiance (2)
unknown
On ne sait rien sur la façon dont le propriétaire signe les clés. Les clés de votre trousseau de
clés publiques ont par défaut ce niveau de confiance.
none
On sait que le propriétaire ne vérifie pas consciencieusement les clés avant de les signer.
marginal
Le propriétaire comprend l'implication de la signature des clés et valide les clés avant de les
signer.
full
Le propriétaire comprend complètement les implications de la signature des clés, et sa
signature sur une clé aurait la même valeur que votre signature.
Cette information est considérée comme privée elle est même enregistrée séparément de vos
trousseaux, dans une base de données distincte.
Si on indique none cela signifie que l'on ne fera pas confiance dans des clés validées avec cette
signature.

20
Validité d'une clé
La toile de confiance autorise l'élaboration d'algorithmes plus élaborés pour valider une clé.
Une clé est considérée comme valide si vous l'avez signée personnellement. Un algorithme
plus flexible peut maintenant être utilisé : une clé K est considérée comme valide si elle remplit
deux conditions :
I)

Elle est signée par suffisamment de clés valides, c'est-à-dire si

Vous l'avez signée personnellement

Elle a été signée par une clé à laquelle vous accordez toute votre confiance

Elle a été signée par trois clés auxquelles vous accordez une confiance marginale

II)
Le chemin des clés signées conduisant de K jusqu'à votre propre clé mesure moins de cinq
étapes.

Remarque : ces valeurs sont réglables.

21
Création d'un certificat de révocation (1)
#gpg -a --output martial.szpieg@insa-cvl.fr.asc.revoke –gen-revoke \ martial.szpieg@insa-
cvl.fr

sec 2048R/F673ADE5 2014-12-17 Martial Szpieg (Computer science teacher INSA Centre
Val de Loire France) <martial.szpieg@insa-cvl.fr>
Faut-il créer un certificat de révocation pour cette clef ? (o/N) o
choisissez la cause de la révocation :
0 = Aucune raison indiquée
...
Q = Annuler
(Vous devriez sûrement sélectionner 1 ici)
Quelle est votre décision ? 0
Entrez une description facultative, en terminant par une ligne vide :
> Pour utilisation ultérieure
>
Cause de révocation : Aucune raison indiquée
Pour utilisation ultérieure
Est-ce d'accord ? (o/N) 22
Création d'un certificat de révocation (2)
#Est-ce d'accord ? (o/N) o

Une phrase de passe est nécessaire pour déverrouiller la clef secrète de


l'utilisateur : « Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr> »
clef RSA de 2048 bits, identifiant F673ADE5, créée le 2014-12-17

Certificat de révocation créé.

Veuillez le déplacer sur un support que vous pouvez cacher ; toute personne
accédant à ce certificat peut l'utiliser pour rendre votre clef inutilisable.
Imprimer ce certificat et le stocker ailleurs est une bonne idée, au cas où le
support devienne illisible. Attention quand même : le système d'impression
utilisé pourrait stocker ces données et les rendre accessibles à d'autres.

23
Publication de la clé méthode 1
Mettre à disposition sa clé publique : sa page web ou ftp ; par mail ; ….

Pour cela il faut extraire la clé sous le format ASCII.

#gpg --output pubkey.martial.szpieg@insa-cvl.fr.gpg.txt --armor --export martial.szpieg@insa-


cvl.fr
#cat pubkey.martial.szpieg@insa-cvl.fr.gpg.txt
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQENBFSRjb4BCAC43uefBFgdwKg8dMXcABGriNc+yTwyx+qkovGP5BlxhFoFDob6
.........
J+LX/0ywZ3FVVD5fPgXJkDpRFcxCjgD8dW0rE5/PcWYXF7a3VMsAEQEAAYkBJQQY
=bBCz
-----END PGP PUBLIC KEY BLOCK-----
#

24
Publication de la clé méthode 2
Envoyer sa clé sur un serveur de clés.

Trouver un serveur de clés :


Lors de l'installation de GnuPG dans le fichier ~/.gnupg/gpg.conf on trouve une ligne
« keyserver » qui contient le serveur par défaut.
«
keyserver hkp://keys.gnupg.net
#keyserver mailto:pgp-public-keys@keys.nl.pgp.net
#keyserver ldap://keyserver.pgp.com »

Il en existe d'autres !!

Procéder à l'envoi :
##gpg --keyserver keys.gnupg.net --send-keys EBD64434
gpg: envoi de la clef EBD64434 au serveur hkp keys.gnupg.net

25
Publication de la clé méthode 2
Envoyer sa clé sur un serveur de clés.
Interconnexion des serveurs de clés

26
Chercher des clés
gpg --search-key jeremy.briffaut@ensi-bourges.fr
gpg: recherche de « jeremy.briffaut@ensi-bourges.fr » sur le serveur hkp keys.gnupg.net
(1) Jeremy Briffaut <jeremy.briffaut@ensi-bourges.fr>
J\xe9\x72\xe9\x6dy Briffaut <jeremy.briffaut@ensi-bourges.fr>
1024 bit DSA key D9547BC9, créé : 2005-03-07
(2) Jérémy Briffaut <jeremy.briffaut@ensi-bourges.fr>
1024 bit DSA key B06D38EB, créé : 2005-03-07

Keys 1-2 of 2 for "jeremy.briffaut@ensi-bourges.fr". Entrez le ou les nombres, (S)uivant, ou


(Q)uitter >Keys 1-2 of 2 for "jeremy.briffaut@ensi-bourges.fr". Entrez le ou les nombres,
(S)uivant, ou (Q)uitter >

27
Signer des clés(1)
Pour signer une clé publique d'une autre personne, il vous faut :

L'empreinte, le keyid (8 derniers caractères de l'empreinte de la clé) et l'identifiant UID de la


clé obtenu autrement que par INTERNET
La clé publique en question
L'adresse électronique attachée
Le nom est le prénom du demandeur
Une preuve de l'identité

28
Signer des clés(2)
pub 2048R/EBD64434 créé : 2014-12-17 expire : 2019-12-16 utilisation : SC
confiance : ultime validité : ultime
sub 2048R/EA762AD0 créé : 2014-12-17 expire : 2019-12-16 utilisation : E
[ ultime ] (1). Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr>
pub 2048R/EBD64434 créé : 2014-12-17 expire : 2019-12-16 utilisation : SC
confiance : ultime validité : ultime
Empreinte clef princip. : 3FD4 ED01 ACA1 B8C5 025F 1501 1496 0A31 EBD6 443
Martial Szpieg (Computer science teacher INSA Centre Val de Loire France)
<martial.szpieg@insa-cvl.fr>
Cette clef va expirer le 2019-12-16.
Voulez-vous vraiment signer cette clef avec votre
clef « Martial Szpieg <martial.szpieg@ensi-bourges.fr> » (98E68395)

Voulez-vous vraiment signer ? (o/N)

29
Key Signing party
 Signature de clés « web trust »

30
Destinations des clés signées
Une fois la clé signée mettez là à jour sur le serveur de clés où elle se trouve.

Il suffit de réutiliser la procédure d'envoi vue précédemment et la nouvelle signature sera


ajoutée à la clé publique.

gpg --keyserver keys.gnupg.net --send-keys EBD64434


gpg: envoi de la clef EBD64434 au serveur hkp keys.gnupg.net

Les principaux serveurs de clés se synchronisent périodiquement.

31
Interface graphique pour gpg sous Thunderbird
Il existe un plug-in nommé « Enigmail » qui permet de gérer de manière graphique magasins
de clés gpg et de crypter et/ou signer vos mails.

32
Enigmail gestion des clés

33
Enigmail gestion des clés
Générer des clés

34
Enigmail gestion des clés
Mettre à jour, chercher des clés

35
Enigmail écrire un message

36