PGP – 1ère partie : Concepts et outils de base

Article original Protecting Code Integrity with PGP — Part 1 : Basic Concepts and Tools écrit et posté par Konstantin Ryabitsev le 14 février 2018 sur Linux.com

Traduit par Gilles Gouget pour Librethic le 9 avril 2018.

https://creativecommons.org/licenses/by/3.0/

Protéger l’intégrité de votre code avec PGP – 1ère partie : Concepts et outils de base


Si vous écrivez du code à destination de dépôts publics, vous pouvez tirer bénéfice du guide pratique PGP fourni par cette série d’articles.

Image : Pixabay CC0

Dans cette série d’articles, nous jetons un regard approfondi sur l’utilisation de PGP pour garantir l’intégrité d’un logiciel. Ces articles constituent un guide pratique à destination des développeurs travaillant sur des projets de logiciels libres, et couvriront les sujets suivants :

  1. Les bases de PGP et les bonnes pratiques ;
  2. Comment utiliser PGP avec Git ;
  3. Comment protéger votre compte de développeur.

Si nous n’utilisons pas le terme « Libre » dans le sens de « gratuité », mais dans le sens de « liberté », les directives proposées dans cette série peuvent être utilisées pour tout logiciel reposant sur les contributions d’une équipe de développeurs distribuée. Si vous écrivez du code à destination de dépôts publics, vous pouvez tirer bénéfice de vous familiariser avec, et de suivre ce guide.

Structure

Chaque section est scindée en deux parties :

  • La check-list qui peut être adaptée aux besoins de votre projet ;
  • Une liste de considérations en format libre qui explique ce qui a dicté ces décisions, accompagnée d’instructions de configuration.

Niveau de priorité des Check-lists

Les items de chaque check-list indiquent un niveau de priorité dont nous espérons qu’il vous aidera à guider votre décision :

  • Les items (ESSENTIEL) devraient absolument être pris en considération. Leur non implémentation générera de grands risques pour le code qui sera apporté au projet open-source.
  • Les items qui seront (BONS) à avoir amélioreront la sécurité générale, mais modifieront votre façon d’interagir avec votre environnement de travail, et nécessiteront probablement d’assimiler de nouvelles habitudes et d’en désapprendre d’anciennes.

Souvenez-vous, il ne s’agit que de grandes lignes. Si vous sentez que ces niveaux de priorité ne reflètent pas les exigences de sécurité de votre projet, vous pouvez les ajuster à votre guise.

Concepts et outils PGP de base

Check-list

  1. Comprendre le rôle de PGP dans le développement du Logiciel Libre (ESSENTIEL) ;
  2. Comprendre les bases de la Cryptographie par Clés Publiques (ESSENTIEL) ;
  3. Comprendre le chiffrement PGP vs. La Signature PGP (ESSENTIEL) ;
  4. Comprendre les identités clés PGP (ESSENTIEL) ;
  5. Comprendre la validité des clés PGP (ESSENTIEL) ;
  6. Installer les utilitaires GnuPG (version 2.x) (ESSENTIEL).

Considérations

La communauté du Logiciel Libre s’appuie depuis longtemps sur PGP pour assurer l’authenticité et l’intégrité des logiciels qu’elle a produit. Vous n’en êtes peut-être pas conscients, mais que vous soyez un utilisateurs de Linux, Mac ou Windows, vous avez jusqu’à présent compté sur PGP pour assurer l’intégrité de votre environnement informatique :

  • Les distributions Linux reposent sur PGP pour s’assurer que les binaires ou les sources n’ont pas été altérés entre le moment où ils sont produits et le moment où ils sont installés par l’utilisateur final.
  • Les projets en Logiciel Libre fournissent la plupart du temps des signatures PGP détachées pour accompagner les archives des versions logicielles, de sorte à ce que les projets e aval puissent vérifier l’intégrité des versions téléchargées avant de les intégrer dans leurs propres distributions.
  • Les projets en logiciel libre reposent de façon ordinaire sur des signatures PGP à l’intérieur même du code de sorte à tracer la provenance et l’intégrité du code apporté par les développeurs du projet.

Ceci est très similaire aux mécanismes de certificats et de signature de code utilisés par les programmeurs travaillant sur des plate-formes propriétaires. En fait, les concepts au cœur de ces deux technologies sont quasiment les même – ils diffèrent principalement par les aspects techniques de leur implémentation et la façon dont ils délèguent la confiance. PGP ne repose pas sur des autorités de certification centralisées, mais laisse plutôt chaque utilisateur attribuer sa propre confiance à chaque certificat.

Notre but est de mettre votre projet sur les rails en utilisant PGP pour la traçabilité de la provenance et de l’intégrité du code, en observant les meilleures pratiques et les précautions élémentaires de sécurité.

Survol tout à fait basique des opérations PGP

Vous n’avez pas besoin de connaître les détails exacts du fonctionnement de PGP – comprendre le concept de base suffit pour être à même de l’utiliser avec succès pour ce qui nous occupe. PGP repose sur de la cryptographie à clé publique pour convertir du texte brut en texte chiffré. Ce processus requiert deux clés distinctes :

  • Une clé publique connue de tous ;
  • Une clé privée seulement connue du propriétaire.

Chiffrement

Pour le chiffrement, PGP utilise la clé publique du propriétaire pour créer un message qui n’est déchiffrable qu’en utilisant la clé privée du propriétaire :

  1. L’expéditeur génère une clé de chiffrement aléatoire (« clé de session ») ;
  2. L’expéditeur chiffre son contenu en utilisant cette clé de session (chiffrement symétrique) ;
  3. L’expéditeur chiffre la clé de session en utilisant la clé PGP publique du destinataire ;
  4. L’expéditeur envoie à la fois le contenu chiffré et la clé de session chiffrée au destinataire.

Pour déchiffrer :

  1. Le destinataire déchiffre la clé de session en utilisant sa clé privée ;
  2. Le destinataire utilise la clé de session pour déchiffrer le contenu du message.

Signatures

Pour créer des signatures, les clés privées/publiques sont utilisées dans l’autre sens :

  1. Le signataire génère la somme de contrôle des contenus ;
  2. Le signataire utilise sa propre clé privée PGP pour chiffrer cette somme ;
  3. Le signataire fournit cette somme chiffrée avec les contenus.

Pour vérifier la signature :

  1. Le vérificateur génère sa propre somme de contrôle des contenus
  2. Le vérificateur utilise la clé PGP publique du signataire pour déchiffrer la somme de contrôle fournie ;
  3. Si les sommes de contrôle correspondent, l’intégrité des contenus est vérifiée.

Utilisation combinée

Fréquemment, les messages chiffrés sont également signés avec la propre clé PGP de l’expéditeur. Cela devrait être l’usage par défaut du moment que l’on utilise des messages chiffrés, car le chiffrement sans authentification n’a pas vraiment de sens (à moins que vous ne soyez un lanceur d’alerte ou un agent secret ayant besoin d’une plausible réfutabilité).

Comprendre les identités de clé

Chaque clé PGP doit avoir une ou plusieurs identités qui lui sont associées. Habituellement, une identité correspond au nom complet de la personne et à son adresse électronique au format suivant :

Alice Engineer <alice.engineer@example.com>

Elle contiendra aussi parfois un commentaire entre parenthèses, pour que l’utilisateur final en sache un peu plus sur cette clé en particulier :

Bob Designer (obsolete 1024-bit key) <bob.designer@example.com>

Puisque les personnes peuvent être associées à des entités professionnelles et personnelles multiples, elles peuvent avoir plusieurs identités sur la même clé :

Quand des identités multiples sont utilisées, l’une d’entre elles sera indiquée comme étant « l’identité principale » pour rendre la recherche plus facile.

Comprendre la validité des clés

Pour être en mesure d’utiliser la clé publique d’une personne pour le chiffrement ou la vérification, vous devez être sûr qu’elle appartient vraiment à la bonne personne (Alice) et non à un imposteur (Ève). Pour PGP, cette certitude est appelée « validité de clé » :

  • Validité : pleine – signifie que la clé est certainement à Alice ;
  • Validité : marginale – signifie que l’on est à peu près sûr que celle clé appartienne à Alice ;
  • Validité : inconnue – signifie qu’il n’y a aucune assurance que cette clé appartienne à Alice.

« Toile de confiance » (Web of Trust – WOT) contre « confiance à la première utilisation » (Trust on First Use – TOFU)

PGP incorpore un mécanisme de délégation de confiance connu sous le nom de « Toile de confiance » (ou « Réseau de confiance »). Au cœur de ce mécanisme, c’est une tentative de remplacer le besoin d’une autorité de certification centralisée du monde HTTPS/TLS. Au lieu d’avoir des éditeurs de logiciel variés qui vous dictent qui devrait être votre entité de certification de confiance, PGP laisse cette responsabilité à chaque utilisateur.

Malheureusement, peu de personnes comprennent comment fonctionne la toile de confiance, et encore moins se soucient de la maintenir. Elle demeure un aspect important des spécification d’OpenPGP, mais les versions récentes de GnuPG (2.2 et suivantes) ont implémenté un mécanisme alternatif appelé ’confiance à la première utilisation’ (Trust on First Use – TOFU).

Vous pouvez concevoir TOFU comme une approche « à la SSH » de la confiance. Avec SSH, la première fois que vous vous connectez à un système distant, l’empreinte de sa clé est enregistrée et mémorisée. Si la clé change ultérieurement, le client SSH vous alertera et refusera de se connecter, vous obligeant à prendre la décision de faire ou non confiance à ce changement de clé.

De façon similaire, la première fois que vous importez la clé PGP d’une personne, elle est considérée digne de confiance. Si ultérieurement GnuPG tombe sur une autre clé avec la même identité, la clé importée précédemment et la nouvelle clé seront toutes deux considérées comme invalides et vous devrez choisir manuellement laquelle des deux conserver.

Dans ce guide, nous utiliserons le modèle de confiance TOFU.

Installer le logiciel OpenPGP

Tout d’abord, il est important de faire la distinction entre PGP, OpenPGP, GnuPG et gpg :

  • PGP (« Pretty Good Privacy », « intimité plutôt bonne ») est le nom du logiciel commercial à l’origine ;
  • OpenPGP est le standard IETF (Internet Engineering Task Force) compatible avec l’outil PGP originel ;
  • GnuPG (« Gnu Privacy Guard ») est un logiciel libre qui implémente le standard OpenPGP ;
  • L’outil en ligne de commande pour GnuPG est appelé « gpg ».

De nos jours, le terme « PGP » est presque universellement utilisé en référence au « standard OpenPGP », et non plus au logiciel commercial, ainsi on utilise indifféremment « PGP » et « OpenPGP ». Les terme « GnuPG » et ’gpg’ ne devraient n’être utilisés que pour faire référence à ces outils, et non au résultat qu’ils produisent ou aux fonctions PGP qu’ils implémentent. Par exemple :

  • Une clé PGP (et non GnuPG ou GPG) ;
  • Une signature PGP (et non GnuPG ou GPG) ;
  • Un serveur de clés PGP (et non GnuPG ou GPG).

Comprendre ceci vous épargnera des ’en fait…’ pédants d’autres utilisateurs de PGP sur lesquels vous pourriez tomber.

Installer GnuPG

Si vous utilisez Linux, vous devriez déjà avoir GnuPG d’installé. Sur un Mac, il vous faut installer GPG-Suite ou bien vous pouvez utiliser brew install gnupg2. Sur un PC sous Windows, vous devrez installer GPG4Win, et il vous faudra probablement ajuster quelques commandes dans ce guide pour que cela marche, à moins que vous soyez dans un environnement de type UNIX. Pour toutes les autres plate-formes, il vous faudra chercher vous-même où le télécharger et comment installer GnuPG.

GnuPG 1 vs. 2

Les versions 1 et 2 de GnuPG utilisent toutes deux le même standard mais fournissent des librairies et des outils en ligne de commande incompatibles, aussi de nombreuses distributions incluent à la fois l’ancienne version 1 et la dernière version 2. Vous devez vous assurer de toujours utiliser GnuPG v.2.

Tout d’abord, exécutez :

$ gpg --version | head -n1

Si vous voyez gpg (GnuPG) 1.4.x, alors vous utilisez GnuPG v.1. Essayez la commande gpg2 :

$ gpg2 --version | head -n2

Si vous voyez gpg (GnuPG) 2.x.x, vous pouvez y aller. Ce guide considérera que vous avez la version 2.2 de GnuPG (ou ultérieure). Si vous utilisez la version 2.0 de GnuPG, certaines commandes dans ce guide ne fonctionneront pas, et vous devriez songer à installer la dernière version 2.2 de GnuPG.

S’assurer de toujours utiliser Gnu v.2

Si vous avez à la fois les commande gpg et gpg2, vous devez vous assurer de toujours utiliser GnuPG v.2, et non l’ancienne version. Vous pouvez vous en assurer en créant l’alias suivant :

$ alias gpg=gpg2

Vous pouvez mettre ça dans votre .bashrc pour être sûr que ce soit toujours chargé quand vous utilisez les commandes gpg.

Dans la 2e partie de cette série, nous expliquerons les étapes de base pour générer et protéger votre clé PGP maître.

Les autres articles de la série sur PGP

- 1ère partie : Concepts et outils de base
- 2ème partie : Générer une clé maitre