Présentation GPG


Le 3 avril 2014 j’ai fais une petit présentation de GPG au cours de la session de cocoaheads.

La majorité des slides est reproduite ici.

GPG

(ou comment mettre la NSA en difficulté)

Présentation en deux parties

  • Première partie : théorie
  • Seconde partie : pratique

Première partie

Qu’est-ce que GPG ?

  • GnuPG (GNU Privacy Guard)
  • Implémentation libre de PGP (Pretty Good Privacy)
  • Chiffrement par clef asymétrique
  • Chiffrement point à point

Les versions de GPG

Il existe deux versions qui évoluent en parallèle.

  • GnuPG 1.4.16
  • GnuPG 2.0.22

La version 2.0 ajoute le fonctionnement sur carte à puce. La clef privée est stockée sur une telle carte et est protégée par le code PIN de celle-ci.

Vocabulaire

Chiffrer vs crypter

En résumé, les mots “crypter” et “cryptage” n’existent pas.

Principe de fonctionnement

  • Chacun possède 2 clefs :
    • clef privée qui doit rester privée (et sauvegardée) ;
    • clef publique, qui doit être diffusée (réseau de serveur de clefs publiques).

Quatre opérations de base

  • Signer un message, un fichier ;
  • chiffrer un message, un fichier ;
  • vérifier la signature d’un message, d’un fichier ;
  • déchiffrer un message, un fichier.

Signer un message, un fichier

Avec ma clef privée je peux signer un message ou un texte assurant mon/mes correspondant(s) que j’en suis bien l’auteur.

Chiffer un message, un fichier

Avec la clef publique du destinataire, je vais chiffrer un message ou un fichier. Seul le destinataire avec sa clef privée sera capable d’en déchiffrer le contenu.

Vérifier la signature d’un message, d’un fichier

En ayant la clef publique (récupérée d’un serveur) de l’expéditeur du message, je peux m’assurer qu’il en est bien l’auteur.

Déchiffer un message, un fichier

L’expéditeur ayant utilisé ma clef publique, je suis le seul à pouvoir le déchiffrer avec ma clef privée.

Le réseau de confiance

Rien ne me garantit que alice@exemple.com est bien Alice, du pays des merveilles.

Pour éviter ce problème, les clefs publiques sont signées par notre clef privée après que l’on a vérifié l’identité de la personne à l’aide d’une ou deux pièces d’identité officielle (carte d’identité, passeport, permis de conduite, etc.)

Comment ça marche ?

  • Alice et Bob signent mutuellement leurs clefs ;
  • Alice et Bob ont une confiance ultime dans la clef de l’autre.

signature de clefs

  • Christian et Alice ont également une confiance ultime l’un envers l’autre ;
  • Christian peut avoir une confiance marginale envers la clef de Bob.

Toile de confiance (simple)

  • Christian accorde sa confiance ultime à Daniel et de Étienne (et la réciproque s’applique) ;
  • Daniel et Étienne accordent une confiance ultime à Bob ;
  • Christian peut alors avoir une confiance complète dans la clef de Bob.

Toile de confiance (évolution)

On a donc 4 niveaux de confiance :

  • 0  →  pas confiance (je ne connais pas cette personne) ;
  • 1  →  confiance marginale (je la connais sans l’avoir rencontrée) ;
  • 2  →  confiance complète (j’ai rencontré plusieurs fois cette personne) ;
  • 3  →  confiance ultime (j’ai vérifié l’identité de cette personne et la concordance avec sa clef).

Fin de la première partie

Seconde partie

Où nous allons passer des slides à la démo constamment.

Travaux pratiques

On télécharge GPGSuite sur le site de (GPGTools)(https://gpgtools.org) et on installe.

Génération d’une paire de clefs

  • Nous choisissons une clef RSA/RSA d’une longueur d’au moins 4096 bits (on garde un multiple de 8, 8192 est une valeur admissible par exemple) ;
  • on donne une passe phrase pour notre paire de clef (attention, nous allons avoir besoin de nous en souvenir de temps en temps) ;
  • on décoche l’expiration de la clef (notre clef n’expire jamais).

En ligne de commande

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
	$ gpg gen-key
	Please select what kind of key you want:
	  (1) RSA and RSA (default)
	  (2) DSA and Elgamal
	  (3) DSA (sign only)
	  (4) RSA (sign only)
	Your selection?

	RSA keys may be between 1024 and 4096 bits long.
	What keysize do you want? (2048)

	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) 

	Is this correct (y/n)?
  

La paire de clefs apparait dans GPG Keychain Access

  • sec/pub indique que nous avons une clef privée (sec) et une clef publique (pub).

En ligne de commande

1
2
3
4
5
6
7
	$ gpg list-key        
	/home/jfoucry/.gnupg/pubring.gpg
	
	pub   3072D/0x6471A4FFEC35F55F 2013-11-27
	uid                 [ultimate] Jacques Foucry <jacques@foucry.net>
	sub   3072g/0x8331C03EF910B0EF 2013-11-27
  

Génération d’un certificat de révocation

S’il arrive un malheur à notre clef, il est PRIMORDIAL pour notre sécurité et celle de notre réseau de confiance, de pouvoir dire que cette clef n’est plus valide.

On génère tout de suite un certificat de révocation que l’on conserve, sur un média sécurisé (en plusieurs exemplaires s’il le faut).

La génération de ce certificat se fait dans le menu Clef  →  Générer certificat de révocation.

Mieux vaut avoir ce certificat sur soit en cas de perte du portable.

En ligne de commande

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
	$ gpg output /tmp/revoke.asc gen-revoke EC35F55F

	sec  3072D/0x6471A4FFEC35F55F 2013-11-27 Jacques Foucry <jacques@foucry.net>

	Create a revocation certificate for this key? (y/N) y
	Please select the reason for the revocation:
	  0 = No reason specified
	  1 = Key has been compromised
	  2 = Key is superseded
	  3 = Key is no longer used
	  Q = Cancel
	(Probably you want to select 1 here)
	Your decision? 0
	Enter an optional description; end it with an empty line:
	> 
	Reason for revocation: No reason specified
	(No description given)
	Is this okay? (y/N) y
  

Maintenant, on jure et on crache

Je veux que vous juriez sur ce que vous avez de plus cher que dès ce soir en rentrant vous allez sauvegarder sur un média sécurisé (un CD avec un dmg chiffré par exemple) le répertoire .gnupg qui se trouve dans votre répertoire de départ et le certificat de révocation.

Envoi sur un serveur de clef

Nous pouvons maintenant envoyer notre clef sur un serveur de clef. Menu Clef  →  Envoyer à un serveur de clef.

En ligne de commande

	$ gpg keyserver subkeys.pgp.net send EC35F55F

Récupérer les clefs des copains

Nous allons récupérer les clefs des copains. Commençons par la mienne, jacques@foucry.net, ID EC35F55F.

Dès à présent vous pouvez m’envoyer un message signé avec votre clef privée, voire chiffé avec ma clef publique.

En ligne de commande

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
	$ gpg search-key marcel.durand keyserver hkp://keyserver.ubuntu.com
	gpg: searching for "marcel.durand" from hkp server keyserver.ubuntu.com
	(1)	marcel.durand (NS key) <marcel.durand@example.com>
		  1024 bit DSA key 0x3CD3072E, created: 2011-05-05
	Keys 1-1 of 1 for "marcel.durand".  Enter number(s), N)ext, or Q)uit > 1
	gpg: requesting key 0x3CD3072E from hkp server keyserver.ubuntu.com
	gpg: key 0x536497A13CD3072E: public key "marcel.durand (NS key) <marcel.durand@example.com>" imported
	gpg: Total number processed: 1
	gpg:               imported: 1
  

Mais vous n’avez pas confiance en ma clef.

En ligne de commande

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	$ gpg -u 7FABA469 sign-key 3CD3072E

	pub  1024D/0x536497A13CD3072E  created: 2011-05-05  expires: never       usage: SC  
	                               trust: unknown       validity: unknown
	sub  2048g/0xE9EC462DF2C2E6E2  created: 2011-05-05  expires: never       usage: E   
	[ unknown] (1). marcel.durand (NS key) <marcel.durand@example.com>


	pub  1024D/0x536497A13CD3072E  created: 2011-05-05  expires: never       usage: SC  
	                               trust: unknown       validity: unknown
	 Primary key fingerprint: D14F 53DB 1762 467B D6BC  E3FA 5364 97A1 3CD3 072E

	     marcel.durand (NS key) <marcel.durand@example.com>

	Are you sure that you want to sign this key with your
	key "Jacques Foucry <jacques.foucry@example.com>" (0x980AC6C97FABA469)

	Really sign? (y/N) y

	You need a passphrase to unlock the secret key for
	user: "Jacques Foucry <jacques.foucry@example.com>"
	3072-bit DSA key, ID 0x980AC6C97FABA469, created 2013-12-02
  
La passphrase de votre clef vous sera demandée.

Mise à jour des clefs

Le menu Clef → Mettre à jour serveur de clés met bien à jour ma clef et on peut voir qui a signé ma clef.

En ligne de commande

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
	$ gpg send-keys keyserver hkp://keyserver.ubuntu.com:80
	$ gpg refresh-keys keyserver hkp://keyserver.ubuntu.com:80
	gpg: key 0x536497A13CD3072E: "marcel.durand (NS key) <marcel.durand@example.com>" not changed
	gpg: Total number processed: 12
	gpg:              unchanged: 8
	gpg:         new signatures: 18
	gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
	gpg: depth: 0  valid:   2  signed:   9  trust: 0-, 0q, 0n, 0m, 0f, 2u
	gpg: depth: 1  valid:   9  signed:   2  trust: 8-, 0q, 0n, 0m, 1f, 0u
	gpg: depth: 2  valid:   1  signed:   0  trust: 1-, 0q, 0n, 0m, 0f, 0u
	gpg: next trustdb check due at 2016-02-15

	$ gpg list-sigs 3CD3072E
	pub   1024D/0x536497A13CD3072E 2011-05-05
	uid                 [  full  ] marcel.durand (NS key) <marcel.durand@example.com>
	sig 3        0x536497A13CD3072E 2011-05-05  marcel.durand (NS key) <marcel.durand@example.com>
	sig          0x980AC6C97FABA469 2014-03-10  Jacques Foucry <jacques.foucry@example.com>
	sub   2048g/0xE9EC462DF2C2E6E2 2011-05-05
	sig          0x536497A13CD3072E 2011-05-05  marcel.durand (NS key) <marcel.durand@example.com1$/
  

Maintenant, à vous de jouer

Signez les clefs de vos voisins, faites signer vos clefs, étendez le réseau de confiance, il est temps de rendre la surveillance plus coûteuse et donc moins aisée.

Une chiffro fête

Lors d’une chiffro fête, on vient avec sa (ses) pièce(s) d’identité et des empreintes de notre clef :

  • Nom : Jacques Foucry
  • Identifiant : jacques@foucry.net
  • Short ID : EC35F55F
  • Empreinte : 5DDB D0BD B373 ED3A 0348 5F6B 6471 A4FF EC35 F55F

Avez-vous remarqué que le short ID ce sont les 8 derniers caractères de l’empreinte ?

En ligne de commande

1
2
3
4
5
	$ gpg fingerprint jacques@foucry.net
	pub   3072D/0x6471A4FFEC35F55F 2013-11-27
	      Key fingerprint = 5DDB D0BD B373 ED3A 0348  5F6B 6471 A4FF EC35 F55F
	uid                 [ultimate] Jacques Foucry <jacques@foucry.net>
	sub   3072g/0x8331C03EF910B0EF 2013-11-27

J’obtiens les informations nécessaires

On échange nos empreintes, on vérifie les identités, et de retour à la maison, on signe toutes les clefs dont nous avons les empreintes ET vérifié l’identité du porteur.

À propos de Phil Zimmerman

Il est actuellement partie prenante dans le projet blackphone.

Pour aller plus loin

Le dernier mot

Cette petite conf est dédiée à Chelsea Elizabeth Manning (née Bradley Manning), à Edward Snowden, à Julian Assange et à tous les lanceurs d’alertes qui nous ouvrent les yeux sur les pratiques plus que douteuse de NOS GOUVERNEMENTS.

powered by FreeBSD