Nov 23, 2024

Wiki

Python

Aide

edit SideBar

Search

Les Reseaux De Confiance


Présentation du problème

Un premier exemple

Imaginons qu'une clé que l'on vient de télécharger (à partir d'un serveur de clés) ne soit pas réellement la clé de la personne à laquelle on pense, mais qu'elle a été substituée par une tierce personne mal intentionnée.

Si on envoie un message chiffré en utilisant cette clé, cette tierce personne aura accès à notre message en clair. Il pourra le ré-émettre, après l'avoir lu, en le chiffrant avec la clé réelle du destinataire.

Total : une personne aura lu le message sans qu'aucune des deux extrémités ne soit au courant.

Deuxième exemple

Le fait de télécharger une clé à partir d'un serveur ne garantit pas son authenticité.

Par exemple, si on reçoit un message chiffré provenant soi-disant de Philip Zimmermann (le créateur de PGP), alors on ira chercher sa clé sur les serveurs, et on pourrait penser que le message que l'on déchiffrera sera authentique. Cependant, beaucoup de fausses clés de Zimmermann circulent, qui sont en fait autant de contrefaçons.

Conclusion : il va falloir être en mesure d'authentifier toutes ces clés.

La signature des clés

Vers la signature des clés

Pour l'instant, les différentes clés qu'on a pu récupérer par l'intermédiaire des serveurs de clés sont à vrai dire inutilisables, car elles ne sont pas suffisamment sûres.

Nous allons donc utiliser des mécanismes de signature des clés, et de contre-signature.

L'empreinte d'une clé

Il est possible de générer une empreinte (fingerprint) des différentes clés de son trousseau, par exemple de la sienne :

  $ gpg --fingerprint guyeux

  pub   1024D/347AE5F2 2007-12-10
  Empreinte de la clé = 6F8D 2FE4 8FF1 4A96 C8B4  06F3 49B7 113F 347A E5F2
  uid                  Christophe Guyeux <guyeux@iut-bm.univ-fcomte.fr>
  sub   2048g/A40D23C8 2007-12-10

L'échange d'empreintes

On peut alors noter sur un support facilement transportable (typiquement, une carte de visite) le fingerprint correspondant à sa propre clé publique.

Lorsqu'on va rencontrer physiquement une personne avec qui on sera susceptible d'avoir des échanges utilisant GnuPG ou PGP, alors on s'échangera ses fingerprints mutuels.

L'échange doit comporter une vérification de l'identité réelle de la personne, grâce aux papiers d'identité par exemple.

La vérification

Une fois qu'on a récupéré le fingerprint de la personne, on peut télécharger la clé publique à partir d'un serveur : les 8 derniers caractères du fingerprint correspondent à l'ID de la clé publique.

En relançant la commande

  gpg --fingerprint

on aura l'empreinte correspondant à la clé téléchargée.

Il ne restera plus qu'à comparer le fingerprint obtenu et celui marqué sur la carte de visite.

Signatures et contre-signatures

Améliorations, ou comment éviter la rencontre physique

Pour l'instant, on ne peut donc utiliser GnuPG qu'avec des personnes qu'on aurait rencontré physiquement.

C'est là qu'entrent en jeu deux mécanismes :

  • les contre-signatures,
  • les réseaux de confiance.

On va donc contre-signer la clé publique que l'on vient de télécharger.

Le principe

La clé publique de notre trousseau va être légèrement modifiée.

On va en effet y ajouter un petit morceau de signature propre à nous, généré par notre clé secrète.

On attestera ainsi qu'on est d'accord sur le fait que cette clé publique appartient bien à son propriétaire : quiconque, nous faisant confiance, pourra donc aussi avoir confiance en ladite clé.

La commande

Il suffit d'utiliser la commande

  $ gpg --sign-key idPersonne

Si la personne possède plusieurs UIDs, il est possible de les signer tous ou de choisir ceux qu'on veux signer.

Avertissement

Il ne faut jamais signer une clé sur la bonne foi d'une tierce personne ou si une personne a envoyé son fingerprint par mail, etc.

La signature d'une clé doit se faire uniquement après vérification en réel de la personne, avec transfert physique du fingerprint.

Mais, que faire de la clé signée ?

On vient donc de signer (contre-signer en fait) la clé publique de notre interlocuteur. On va maintenant dire au reste du monde qu'on a signé la clé de l'autre personne...

On peut soit envoyer à son propriétaire la clé signée : on exporte la clé et on l'envoie :

  gpg --export --armor idPersonne 

ou on l'envoie directement sur un serveur de clés :

  gpg --keyserver pgp.mit.edu --send-key idPersonne

L'usage fait que généralement, on fait les deux.

Vérification des signatures

Lorsqu'on envoie la clé au serveur de clés, ou lorsqu'on réimporte une clé qui a été signée depuis, cette dernière n'est pas écrasée, mais les signatures sont extraites et ajoutées le cas échéant.

Les clés qu'on a récupérées ont donc peut-être été signées par d'autres personnes.

Pour le voir, il suffit de taper la commande :

  gpg --list-sigs

Effets de la signature

On remarque qu'on a sa propre clé auto-signée.

De plus, la clé qu'on a récupéré a été signée par plusieurs personnes que l'on ne connait pas. En effet, on n'a pas leur clé publique dans notre trousseau.

Si on importe par exemple la clé d'UID 0xB4C5FE7F, on aurait la réponse suivante :

  $ gpg --list-sigs
  /home/guyeux/.gnupg/pubring.gpg
  -------------------------------
  pub   1024D/B52FF09E 2009-01-30
  uid                  Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>
  sig 3        B52FF09E 2009-01-30  Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>
  sub   4096g/5552598C 2009-01-30
  sig          B52FF09E 2009-01-30  Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>
  -------------------------------
  pub   1024D/CE63A2E7 2000-02-23
  uid                  Benoit <benoit@parinux.org>
  sig          5ED61FDA 2000-06-06 [User id not found :  sig CE63A2E7 2000-02-23 Benoit <benoit@parinux.org>
  sig B4C5FE7F 2001-07-18 Olivier Berger <oberger@april.org>
  sub   2048g/B5A97C83 2000-02-23
  sig         CE63A2E7 2000-02-23 Benoit <benoit@parinux.org>

On peut donc savoir qui sont les personnes qui ont signé les clés de notre trousseau.

Vérifications des signatures

Avec l'option --list-sigs, on sait juste que la clé a été signée par un certain nombre de personnes, sans le vérifier.

On peut demander à GnuPG de vérifier les différentes signatures qu'il possède de chaque clé avec les clés qu'il a dans son trousseau...

  $ gpg --check-sigs
  /home/guyeux/.gnupg/pubring.gpg
  -------------------------------
  pub   1024D/B52FF09E 2009-01-30
  uid                  Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>
  sig!3        B52FF09E 2009-01-30  Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>
  sub   4096g/5552598C 2009-01-30
  sig!         B52FF09E 2009-01-30  Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>
  -------------------------------
  pub   1024D/CE63A2E7 2000-02-23
  uid                  Benoit <benoit@parinux.org>
  sig? 5ED61FDA 2000-06-06
  sig! CE63A2E7 2000-02-23 Benoit <benoit@parinux.org>
  sig! B4C5FE7F 2001-07-18 Olivier Berger <oberger@april.org>
  sub   2048g/B5A97C83 2000-02-23
  sig! CE63A2E7 2000-02-23 Benoit <benoit@parinux.org>
  • Les ? correspondant à des signatures qui n'ont pas été vérifiées (on ne possède pas la clé publique pour vérifier).
  • Les ! indiquent que la signature correspond à la clé publique que l'on a sur notre trousseau.

Réseau de confiance

Qu'est-ce que c'est ?

Il peut donc être intéressant de récupérer fréquemment les nouvelles signatures des clés qui font partie de notre trousseau.

Une manière simple est de passer par un script à glisser dans son crontab, une fois par jour.

Dans un premier temps, ce processus tisse un réseau de confiance autour de soi, avec les personnes que l'on connaît, et avec qui on se fait des échanges de clés...

Cas d'une clé d'une personne de confiance

Puis, on est amené à récupérer un jour la clé d'une personne inconnue, appelons-la Charlie.

  • On ne connait pas personnellement Charlie, on ne l'a jamais vu, mais Charlie connaît Bernard.
  • Or, on connaît bien Bernard, c'est un bon ami, et on a confiance en lui.

On a échangé nos clés tous les deux, et B et C en ont fait de même. Vu qu'on a confiance en B, on peut se dire qu'il a bien fait les choses.

Il a donc bien signé la clé de C en suivant le protocole requis (échange physique des fingerprints, contrôle de l'identité). On peut alors se dire qu'il y a 99% de chances pour que la clé de C soit la bonne.

Mais on n'en sera jamais sûr à 100%. C'est pourquoi, dans un cas pareil, il ne faut jamais signer une clé qu'on a contrôlée par ce moyen.

Cas d'une clé d'une personne méconnue

Imaginons que B ne soit pas quelqu'un que l'on connaît bien. Cela peut être une personne avec qui on a fait un échange de fingerprints la seule fois où on l'a rencontré, mais qu'on ne connaît pas pour autant.

On ne peut pas être sûr que la vérification de la clé de C s'est faite dans de bonnes conditions.

Donc on ne va pas faire autant confiance à la clé publique de C (on va dire, 40% par exemple).

Mise en forme de cette confiance

Afin de mettre cette confiance en forme, il est possible d'attribuer plusieurs niveaux de confiance à un utilisateur.

Pour se faire il faut éditer la clé...

  $ gpg --edit-key christophe
  gpg (GnuPG) 1.4.9; Copyright (C) 2008 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 clé secrète est disponible.

  pub  1024D/B52FF09E  créé: 2009-01-30  expire: jamais   utilisation: SC  
                       confiance: ultime        validité: ultime
  sub  4096g/5552598C  créé: 2009-01-30  expire: jamais   utilisation: E   
 [ ultime ] (1). Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>

  Commande> 

Puis exécuter la commande trust :

  Commande> trust
  pub  1024D/B52FF09E  créé: 2009-01-30  expire: jamais   utilisation: SC  
                       confiance: ultime        validité: ultime
  sub  4096g/5552598C  créé: 2009-01-30  expire: jamais   utilisation: E   
 [ ultime ] (1). Christophe Guyeux (Clé du boulot) <christophe.guyeux@univ-fcomte.fr>

  Décidez maintenant à quel point vous avez confiance en cet utilisateur
  pour qu'il vérifie les clés des autres utilisateurs (vous pouvez
  vérifier son passeport, vérifier les empreintes de plusieurs sources
  différentes, etc.)

    1 = ne sais pas ou ne dirai pas
    2 = je ne fais PAS confiance
    3 = je crois marginalement
    4 = je fais entièrement confiance
    5 = je donne une confiance ultime
    m = retour au menu principal

  Votre décision ? 

Tout ce qu'il reste à faire, c'est indiquer le niveau de confiance pour cet utilisateur...

Page Actions

Recent Changes

Group & Page

Back Links