From: Michel Bouissou To: pingouin@sphinx.i-quake.com Date: Mon, 17 Sep 2001 14:58:18 +0200 Subject: [pingouin] GnuPG: Certification des clés Séquence parano ;-) Re-bonjour, Quand on fait de la crypto et de la sécurité, il ne faut pas la faire à moitié, car une chaine n'a jamais que la force de son maillon le plus faible... Donc, si nous voulons nous montrer rationnels, nous allons devoir nous montrer un poil paranoïaques ;-) Vous avez vu avec quelle facilité, dans les exemples de mes précédents messages, j'ai créé des clés GnuPG au nom de "Albert Mudas". Pour autant, je ne m'appelle pas "Albert Mudas", et cette identité est donc fausse. J'aurais pu, avec la même facilité, créer des clés appelées "Jacques Chirac " ou "Georges W. Bush " ou "Jésus Christ ", et ces clés seraient bien évidemment des faux. Pour autant, je pourrais "signer" numériquement des messages avec ces "vraies-fausses clés", et ces signatures auraient alors l'air correctes. Mais elles n'auraient bien sûr aucune réelle valeur. De même, si j'étais en mesure d'intercepter les e-mails destinés à , une personne possédant la vraie-fausse clé publique correspondante pourrait chiffrer des messages pour Jésus Christ, persuadé que Lui seul pourrait les lire. Manque de bol, je possède la fausse clé, je ne suis pas Jésus ;-) et je peux intercepter son mail. Je peux donc tranquillement déchiffrer les mails adressés à Jésus. Je peux même ensuite les rechiffrer pour sa "vraie-vraie clé", et les lui retransmettre, rendant de ce fait mon interception difficile à détecter... Ceci s'appelle techniquement une "man in the middle attack", ou MITM attack. Et c'est à ce type d'attaque que la cryptographie à clé publique est le plus vulnérable: La cryptographie a clé publique ne peut offrir une réelle sécurité que si l'on peut être certain que: - Une clé publique appartient réellement à la personne à qui elle semble appartenir; - Seule cette personne détient la clé privée correspondante, et la "phrase secrète" permettant de l'utiliser. Ainsi, il ne faut surtout pas se fier aveuglément à une clé publique, sous prétexte qu'elle porte un certain nom. NOUS NE POUVONS FAIRE CONFIANCE A UNE CLE PUBLIQUE QUE: - Si nous sommes certain de l'identité de la personne à qui nous avons affaire; - Si nous sommes certain que la clé en notre possession appartient bien à cette personne. Ainsi, si un "ami de trente ans" que je connais parfaitement, me remet de la main à la main une disquette contenant sa clé publique, je peux faire confiance à cette clé. Mais si un de mes correspondants, que je ne connais pas "de visu", m'envoie "sa" clé publique par e-mail, je ne peux pas faire confiance à cette clé, car: - Je ne suis pas certain de l'identité réelle de mon correspondant; - Même s'il est "bien lui", je ne peux pas être certain que c'est bien lui qui m'a envoyé la clé publique que j'ai reçue, ou que cette clé n'a pas été interceptée et remplacée en chemin. Oui, je sais, je suis paranoïaque ;-) Mais c'est volontaire ;-))) Normalement, si nous ne pouvons être *certain* de la validité d'une clé publique, nous ne devrions pas l'utiliser pour chiffrer un message. Et, si nous l'utilisons quand même, nous ne devrions chiffrer avec cette clé que des messages non confidentiels, que nous accepterions d'envoyer "en clair", et dont l'interception éventuelle serait sans aucune conséquence. Heureusement, GnuPG (et PGP) ont prévu un dispositif permettant de gérer la validité des clés. Ce dispositif s'appelle le "web of trust" (réseau de confiance) Il repose sur la signature (la certification) de la clé d'une autre personne, par soi-même, ou une personne en qui nous avons confiance. GnuPG associe à chaque clé, deux variables qui sont: - Le niveau de validité; - Le niveau de confiance; Le niveau de validité indique la certitude que nous pouvons avoir qu'une clé donnée appartient bien à son propriétaire supposé. Cette validité peut être: - Ultime, quand il s'agit de notre propre clé (c'est-à-dire que nous possédons non seulement la clé publique, mais également la clé privée qui lui est associée). Dans ce cas, cette clé est "la nôtre", elle est donc axiomatiquement valide pour nous-même. - Complète, si c'est une clé que nous avons manuellement certifiée nous-même (nous décidons nous-même que cette clé est valide), en "signant" cette clé avec notre propre clé privée. Ainsi, si je signe la clé de Jean avec ma propre clé, je certifie que, selon moi, la clé de Jean est valide (et j'en prends l'entière responsabilité). Si je "signe" ainsi une clé d'un tiers, ma signature peut alors être soit non-exportable (ma certification n'aura d'effet que pour moi-même, mon propre GnuPG, dans mon propre trousseau), ou ma signature peut être "exportable", ce qui me permet de renvoyer la clé du tiers ainsi "certifiée" à son propriétaire, qui pourra alors distribuer sa clé revêtue de ma signature. Ainsi, je certifie PUBLIQUEMENT la validité de la clé de ce tiers. - Complète, si cette clé est signée par la clé d'un tiers, que nous possédons également la clé de ce tiers, et que nous avons défini que nous faisons "entirement confiance" en la clé de ce tiers pour certifier la validité d'une clé. Ainsi, si je reçois la clé de "Paul", et que cette clé me parvient signée de "Jacques", si je possède déjà la clé de "Jacques", qu'elle est valide dans mon trousseau, et que j'ai défini que je "fais entièrement confiance à Jacques" pour certifier une clé, alors mon GnuPG estimera que la clé de Paul est "valide", puisqu'elle est signée par une personne en qui j'ai confiance. - Partiellement valide: Si cette clé est signée par la clé d'un tiers en qui j'ai défini que j'avais "partiellement confiance" pour certifier des clés. => Si une clé porte plusieurs signatures de différentes personnes en qui j'ai "partiellement confiance", ces confiances "partielles" se cumulent, et la clé peut alors être considérée comme "entièrement valide". Comprenons bien le sens de cette validité et de cette certification: Le fait qu'une clé soit valide signifie UNIQUEMENT que j'ai la certitude, directe ou indirecte, que cette clé appartient bien à son propriétaire. Si je SIGNE moi-même la clé d'un tiers, je certifie personnellement que j'ai la certitude DIRECTE, et que j'ai moi-même contrôlé, que cette clé appartient bien à son propriétaire. Pour autant, je ne certifie absolument rien d'autre que cette appartenance. Ma signature sur une clé ne signifie notamment pas que je partage les opinions du propriétaire de cette clé, ni que c'est un ami, ni qu'il est honnête, ni qu'il est lui-même qualifié pour certifier des clés (selon moi). Ma signature sur une clé signifie, et signifie uniquement "Je certifie que cette clé appartient bien à la personne et à l'adresse e-mail revêtus de ma signature". Nous avons alors le deuxième paramètre, le paramètre de "confiance". Celui-ci n'est pas exportable, et n'a d'effet qu'à l'intérieur de mon trousseau. Il détermine la confiance que j'ai en le propriétaire de cette clé, pour certifier d'autres clés. Ce paramètre de confiance peut être: - Indéfinie (par défaut) ou "aucune confiance": La signature de cette personne sur une clé est sans valeur pour moi; - Partielle: La signature de cette personne sur une autre clé donne à cette clé une validité "partielle" dans mon trousseau. - Complète: La signature de cette personne sur une autre clé me suffit pour considérer que la clé ainsi signée est valide. Grâce à ce système, notre GnuPG est désormais en mesure de différencier les clés "valides", qui sont: - Les nôtres - Les clés que nous avons certifiées nous-même - Les clés qui ont été certifiées par des personnes en qui nous avons confiance en tant que certificateurs ...et les clés invalides, qui sont: - Toutes les clés dont la validité n'est pas définie par un des moyens indiqués ci-dessus. POUR SIGNER UNE CLE ET DEFINIR LA CONFIANCE ============================================= - Editer la clé concernée avec la commande: gpg --edit-key albert.mudas - Utiliser ensuite l'une des différentes fonctions disponibles: Commande> help quit quitter ce menu save enregistrer et quitter help afficher cette aide fpr afficher l'empreinte list lister la clé et les noms d'utilisateurs uid sélectionner le nom d'utilisateur N key sélectionner la clé secondaire N check lister les signatures sign signer la clé lsign signer la clé localement deluid enlever un utilisateur delkey enlever une clé secondaire delsig supprimer les signatures pref lister les préférences showpref lister les préférences trust changer la confiance revsig révoquer les signatures disable désactiver une clé enable activer une clé (Pour plus d'infos, voir "man gpg") Si l'on signe une clé avec la commande "sign", le système nous demandera si nous voulons signer toutes les identités (et adresses mail) présentes sur cette clé, ou certaines seulement. Nous ne devrions signer QUE les identités que nous avons personnellement contrôlées. Si nous attribuons à une clé une "signature exportable" (avec la commande sign), nous pouvons alors ensuite exporter la clé que nous avons ainsi signée, et la renvoyer à son propriétaire. Il recevra alors sa propre clé revêtue de notre signature (et pourra importer celle-ci dans son propre trousseau). Ainsi, quand il enverra désormais sa clé à ses correspondants, ceux-ci pourront voir que nous avons certifié cette clé. Pour lister les signatures présentes sur une clé: [michel@silenus michel]$ gpg --list-sigs albert.mudas pub 1024D/08989A8C 2001-09-17 Albert Mudas sig 08989A8C 2001-09-17 Albert Mudas uid Albert Mudas sig 08989A8C 2001-09-17 Albert Mudas sig 5C2BEE8F 2001-09-17 Michel Bouissou uid Albert Mudas sig 08989A8C 2001-09-17 Albert Mudas sig 5C2BEE8F 2001-09-17 Michel Bouissou sub 2048g/F3DC19F2 2001-09-17 sig 08989A8C 2001-09-17 Albert Mudas Si certaines signatures nous apparaissent avec: [Nom utilisateur introuvable], cela signifie que nous ne possédons pas dans notre trousseau la clé publique de l'utilisateur qui a signé (et donc, que nous ne savons pas qui il est) CONTROLE D'UNE CLE A DISTANCE ================================ Nous ne pouvons pas toujours recevoir des clés remises sur disquette de la main à la main pas des "amis de trente ans". Parfois, nous voulons certifier une clé, mais nous ne sommes pas en mesure d'en rencontrer physiquement le propriétaire, ni d'en obtenir directement la clé. Pour cela, nous pouvons vérifier l'identité de la personne par des moyens détournés (et digne du paranoïaque volontaire que nous sommes ;-) et contrôler la clé au moyen de "l'empreinte digitale" de celle-ci. Chaque clé possède en effet une "empreinte digitale" unique, qui peut la définir sans aucune ambigüité. Pour obtenir cette empreinte: [michel@silenus michel]$ gpg --fingerprint michel@bouissou.net pub 1024D/5C2BEE8F 1999-12-06 Michel Bouissou Key fingerprint = 9BA0 5D3B 1365 46AC 8848 B5FC 8ED8 6AB1 5C2B EE8F uid Michel Bouissou uid Michel Bouissou sub 4096g/BFDF9EB0 1999-12-06 La clé dont l'identifiant est 5C2BEE8F possède donc comme empreinte digitale: Key fingerprint = 9BA0 5D3B 1365 46AC 8848 B5FC 8ED8 6AB1 5C2B EE8F ...et nous pouvons contrôler cette empreinte à distance avec le propriétaire de la clé. Voici une méthode Jamesbondesque pour le faire: - Je reçois une clé publique de Albert Mudas - Je veux certifier cette clé (pour mon propre usage), ou M. Mudas me demande de bien vouloir certifier sa clé. - Je vais alors demander à M. Mudas ses coordonnées complètes, son adresse, et, par exemple, de me faxer une copie de ses pièces d'identité, en inscrivant sur le fax l'empreinte digitale de sa clé. - Une fois le fax reçu, je vais commencer par contrôler que l'empreinte digitale sur le fax correspond bien à l'empreinte digitale de la clé de M. Mudas qui est en ma possession. - Une fois cette vérification effectuée, je vais contrôler l'adresse (personnelle ou professionnelle) qui m'a été communiquée par M. Mudas, par un moyen indépendant de lui. Par exemple, je vais utiliser l'annuaire du téléphone pour y chercher M. Mudas, et vérifier qu'il habite bien à l'adresse qu'il m'a indiquée, et qui est inscrite sur ses pièces d'identité. Enfin, je vais appeler moi-même M. Mudas à son domicile (ou appeler le standard de Grosseboite.com et demander à parler à M. Mudas) à un moment choisi de moi et non convenu à l'avance. Je demanderai alors à M. Mudas de me confirmer qu'il est bien M. Mudas ;-) qu'il désire effectivement que je certifie sa clé, et je lui demanderai de me lire à nouveau "l'empreinte digitale de sa clé" au téléphone. Je posséderai alors "une certitude suffisante" quant à la clé de M. Mudas, et je pourrai alors la lui certifier, et lui en retourner une copie. Si, au cours de cette procédure, j'ai le moindre doute, alors, je ne signerai pas la clé de M. Mudas. Les puristes et les paranoïaques estimeront qu'une telle méthode est encore insuffisante, et n'accepteront de signer une clé qu'après une rencontre physique effective avec la personne dont la clé doit être certifiée (et un prélévement d'ADN ;-))) Bien. Une fois qu'une clé a été dûment certifiée et déterminée valide, nous pouvons désormais utiliser cette clé pour communiquer avec son propriétaire par des moyens chiffrés, et nous pouvons accorder au système un crédit suffisant pour transmettre éventuellement des données confidentielles. INTEGRATION DE LA VALIDITE DANS LES OUTILS D'E-MAIL =================================================== Les interfaces complètes entre GnuPG ou PGP et des outils de mail tiennent compte de la validité des clés. Par exemple, ils demandent confirmation avant de chiffrer pour une clé "non valide", ou signalent qu'une signature de message est "non valide". C'est le cas par exemple des plugins "Outlook Express" de PGP sous Windows. Dans KMail, par contre, le support de GnuPG est encore embryonnaire, et AUCUN CONTROLE DE VALIDITE N'EST EFFECTUE PAR KMAIL. KMail utilise sans avertissement toute clé présente dans le porte-clé, que celle-ci soit "valide" ou non. Il s'agit là d'une grave lacune de sécurité présente dans l'implémentation actuelle du support GnuPG/PGP de KMail, et il faut en être conscient. Pour éviter de se faire couillonner, il importe donc que l'utilisateur de KMail prenne soin de vérifier lui-même la validité de chaque clé qu'il importe (en utilisant directement GnuPG) et qu'il garde en mémoire la validité des clés de ses différents correspondants (ou qu'il la revérifie au besoin) Fin de la séquence parano. Ouf ! ;-) -- Michel Bouissou - OpenPGP DH/DSS ID 0x5C2BEE8F michel@bouissou.net Faites plaisir à votre ordinateur: Offrez-lui un pingouin ! _________________________________________________________ Liste de diffusion hébergée par Internet-Quake. http://www.i-quake.com Pour tout savoir sur cette liste ou pour vous désabonner, rendez-vous sur la page web: http://sympa.i-quake.com/wws/info/pingouin Pour vous désabonner directement par mail, envoyez un e-mail vide à l'adresse sympa@sympa.i-quake.com, avec pour sujet: signoff pingouin