Table des matières
PGP
Pretty Good Privacy (PGP) est un programme de cryptage qui assure la confidentialité et l'authentification cryptographique de la communication des données. PGP est utilisé pour signer, crypter et décrypter des textes, des e-mails, des fichiers, des répertoires et des partitions de disque entières et pour augmenter la sécurité des communications par e-mail. Phil Zimmermann a développé PGP en 1991.
PGP et les logiciels similaires suivent la norme OpenPGP, une norme ouverte de logiciel de cryptage PGP, standard (RFC 4880) pour le cryptage et le décryptage des données.
Distinctions lexicographiques
- PGP - Pretty Good Privacy
- OpenPGP - version libre de PGP
- GPG - GNU PG: implémentation d'OpenPGP par la Free Software Fondation
Conception
Le cryptage PGP utilise une combinaison en série de hachage, de compression de données, de cryptographie à clé symétrique et enfin de cryptographie à clé publique ; chaque étape utilise un des nombreux algorithmes pris en charge. Chaque clé publique est liée à un nom d'utilisateur ou à une adresse électronique. La première version de ce système était généralement connue sous le nom de “web of trust” pour contraster avec le système X.509, qui utilise une approche hiérarchique basée sur l'autorité de certification et qui a été ajouté aux implémentations PGP par la suite. Les versions actuelles du cryptage PGP comprennent les deux options par le biais d'un serveur de gestion de clés automatisé.
Empreinte PGP
Une empreinte de clé publique est une version abrégée d'une clé publique. À partir d'une empreinte digitale, quelqu'un peut valider la clé publique correspondante correcte. Une empreinte digitale comme C3A6 5E46 7B54 77DF 3C4C 9790 4D22 B3CA 5B32 FF66 peut être imprimée sur une carte de visite.
Compatibilité
À mesure que PGP évolue, les versions qui prennent en charge les nouvelles fonctionnalités et les nouveaux algorithmes sont capables de créer des messages cryptés que les anciens systèmes PGP ne peuvent pas décrypter, même avec une clé privée valide. Il est donc essentiel que les partenaires de la communication PGP comprennent les capacités de chacun ou, du moins, s'accordent sur les paramètres de PGP.
Confidentialité
PGP peut être utilisé pour envoyer des messages de manière confidentielle. Pour cela, PGP utilise un système de cryptographie hybride en combinant le cryptage à clé symétrique et le cryptage à clé publique. Le message est chiffré à l'aide d'un algorithme de chiffrement symétrique, qui nécessite une clé symétrique générée par l'expéditeur. La clé symétrique n'est utilisée qu'une seule fois et est également appelée clé de session. Le message et sa clé de session sont envoyés au destinataire. La clé de session doit être envoyée au destinataire pour qu'il sache comment déchiffrer le message, mais pour le protéger pendant la transmission, elle est cryptée avec la clé publique du destinataire. Seule la clé privée du destinataire peut décrypter la clé de session et l'utiliser pour décrypter le message de manière symétrique.
Signatures numériques
PGP prend en charge l'authentification et la vérification de l'intégrité des messages. Cela est utilisé pour détecter si un message a été altéré depuis son émission (la propriété d'intégrité du message) et pour déterminer s'il a été effectivement envoyé par la personne ou l'entité prétendue (une signature numérique). Comme le contenu est crypté, toute modification du message entraîne l'échec du décryptage avec la clé appropriée. L'expéditeur utilise PGP pour créer une signature numérique pour le message avec les algorithmes RSA ou DSA. Pour ce faire, PGP calcule un hachage (également appelé résumé du message) à partir du texte en clair et crée ensuite la signature numérique à partir de ce hachage en utilisant la clé privée de l'expéditeur.
Toile de confiance
Article détaillé : Toile de confiance
Tant pour le cryptage des messages que pour la vérification des signatures, il est essentiel que la clé publique utilisée pour envoyer des messages à une personne ou une entité “appartienne” effectivement au destinataire. Le simple fait de télécharger une clé publique de quelque part ne garantit pas de manière fiable cette association ; une usurpation d'identité délibérée (ou accidentelle) est possible. Depuis sa première version, PGP a toujours inclus des dispositions pour la distribution des clés publiques des utilisateurs dans une “certification d'identité”, qui est également construite de manière cryptographique afin que toute altération (ou altération accidentelle) soit facilement détectable. Cependant, il ne suffit pas de créer un certificat impossible à modifier sans être détecté; cela ne peut empêcher la corruption qu'après la création du certificat, pas avant. Les utilisateurs doivent également s'assurer par un moyen quelconque que la clé publique d'un certificat appartient bien à la personne ou à l'entité qui la réclame. Une clé publique donnée (ou plus précisément, les informations liant un nom d'utilisateur à une clé) peut être signée numériquement par un utilisateur tiers pour attester de l'association entre quelqu'un (en fait un nom d'utilisateur) et la clé. Plusieurs niveaux de confiance peuvent être inclus dans de telles signatures. Bien que de nombreux programmes lisent et écrivent ces informations, peu d'entre eux (voire aucun) incluent ce niveau de certification lorsqu'ils calculent s'il faut faire confiance à une clé.
Le protocole du réseau de confiance a été décrit pour la première fois par Phil Zimmermann en 1992, dans le manuel de la version 2.0 de PGP :
<html>
Au fil du temps, vous accumulerez les clés d'autres personnes que vous voudrez peut-être désigner comme des introducteurs de confiance. Tous les autres choisiront chacun leur propre personne de confiance. Et chacun accumulera et distribuera progressivement avec sa clé une collection de signatures de certification d'autres personnes, en espérant que toute personne qui la recevra fera confiance à au moins une ou deux de ces signatures. Cela entraînera l'émergence d'un réseau de confiance décentralisé, tolérant aux fautes, pour toutes les clés publiques.
</html>
Le mécanisme de toile de confiance présente des avantages par rapport à un système d'infrastructure à clé publique géré de manière centralisée, comme celui utilisé par S/MIME, mais qui n'a pas été utilisé de manière universelle. Les utilisateurs doivent être prêts à accepter les certificats et à en vérifier la validité manuellement ou doivent simplement les accepter. Aucune solution satisfaisante n'a été trouvée pour le problème sous-jacent.
Certificats
Dans la spécification OpenPGP (plus récente), les signatures de confiance peuvent être utilisées pour soutenir la création d'autorités de certification. Une signature de confiance indique à la fois que la clé appartient à son propriétaire déclaré et que le propriétaire de la clé est digne de confiance pour signer d'autres clés à un niveau inférieur au sien. Une signature de niveau 0 est comparable à un réseau de signatures de confiance puisque seule la validité de la clé est certifiée. Une signature de niveau 1 est comparable à la confiance que l'on a dans une autorité de certification car une clé signée au niveau 1 peut émettre un nombre illimité de signatures de niveau 0. Une signature de niveau 2 est très similaire à l'hypothèse de confiance sur laquelle les utilisateurs doivent se baser lorsqu'ils utilisent la liste d'autorités de certification par défaut (comme celles incluses dans les navigateurs web) ; elle permet au propriétaire de la clé de faire d'autres clés des autorités de certification.
Les versions PGP ont toujours inclus un moyen d'annuler (“révoquer”) les certificats d'identité. Une clé privée perdue ou compromise l'exigera si la sécurité de la communication doit être conservée par l'utilisateur. Cela est plus ou moins équivalent aux listes de révocation de certificats des systèmes PKI centralisés. Les versions récentes de PGP prennent également en charge les dates d'expiration des certificats.
Le problème de l'identification correcte d'une clé publique comme appartenant à un utilisateur particulier n'est pas propre à PGP. Tous les systèmes de cryptographie à clé publique/clé privée ont le même problème, même s'il est légèrement différent, et aucune solution pleinement satisfaisante n'est connue. Le système original de PGP laisse au moins à l'utilisateur la décision d'utiliser ou non son système d'approbation/vérification, alors que la plupart des autres systèmes PKI ne le font pas, exigeant au contraire que chaque certificat attesté par une autorité centrale de certification soit accepté comme correct.
Qualité de la sécurité
Pour autant que l'on sache, il n'existe aucune méthode connue qui permette à une personne ou à un groupe de casser le cryptage PGP par des moyens cryptographiques ou informatiques. En effet, en 1995, le cryptographe Bruce Schneier a décrit une première version comme étant “la plus proche du cryptage de niveau militaire”. Les premières versions de PGP se sont avérées présenter des vulnérabilités théoriques et les versions actuelles sont donc recommandées. En plus de protéger les données en transit sur un réseau, le cryptage PGP peut également être utilisé pour protéger les données stockées à long terme, comme les fichiers sur disque. Ces options de stockage à long terme sont également connues sous le nom de données au repos, c'est-à-dire des données stockées, et non en transit.
La sécurité cryptographique du cryptage PGP repose sur l'hypothèse que les algorithmes utilisés sont inviolables par une cryptanalyse directe avec les équipements et techniques actuels.
OpenPGP
Au sein de PGP Inc, les questions relatives aux brevets continuaient de susciter des inquiétudes. RSADSI contestait le maintien de la licence Viacrypt RSA à la société nouvellement fusionnée. La société a adopté une norme interne informelle qu'elle a appelée “PGP non grevée” qui “n'utiliserait aucun algorithme présentant des difficultés de licence”. En raison de l'importance du cryptage PGP dans le monde entier, beaucoup voulaient écrire leur propre logiciel qui interopérerait avec PGP 5. Zimmermann a acquis la conviction qu'une norme ouverte pour le cryptage PGP était essentielle pour eux et pour la communauté cryptographique dans son ensemble. En juillet 1997, PGP Inc. a proposé à l'IETF de créer un standard appelé OpenPGP. Ils ont donné à l'IETF l'autorisation d'utiliser le nom OpenPGP pour décrire cette nouvelle norme ainsi que tout programme qui la soutient. L'IETF a accepté la proposition et a créé le groupe de travail OpenPGP.
OpenPGP est sur la piste des standards Internet et est en cours de développement actif. De nombreux clients de messagerie électronique offrent une sécurité du courrier électronique conforme à OpenPGP, comme le décrit la RFC 3156. La spécification actuelle est la RFC 4880 (novembre 2007), qui succède à la RFC 2440. La RFC 4880 spécifie une suite d'algorithmes requis comprenant le cryptage ElGamal, DSA, Triple DES et SHA-1. En plus de ces algorithmes, la norme recommande RSA comme décrit dans PKCS #1 v1.5 pour le cryptage et la signature, ainsi que AES-128, CAST-128 et IDEA. De nombreux autres algorithmes sont également pris en charge. La norme a été étendue pour prendre en charge le chiffrement Camellia par la RFC 5581 en 2009, et la signature et l'échange de clés basés sur la cryptographie sur courbe elliptique (ECC) (c'est-à-dire ECDSA et ECDH) par la RFC 6637 en 2012. La prise en charge du cryptage ECC a été ajoutée par la proposition de RFC 4880bis en 2014.
La Free Software Foundation a développé son propre programme conforme à OpenPGP appelé GNU Privacy Guard (abrégé GnuPG ou GPG). GnuPG est disponible gratuitement avec tout le code source sous la licence publique générale GNU (GPL) et est maintenu séparément de plusieurs interfaces utilisateur graphiques (GUI) qui interagissent avec la bibliothèque GnuPG pour les fonctions de cryptage, de décryptage et de signature (voir KGPG, Seahorse, MacGPG). Plusieurs autres fournisseurs ont également développé des logiciels compatibles avec OpenPGP.
Le développement d'une bibliothèque open source conforme à OpenPGP, OpenPGP.js, écrite en JavaScript, a permis aux applications web d'utiliser le cryptage PGP dans le navigateur web.
- PGP
- RFC 1991 Formats d'échange de messages PGP (obsolète)
- OpenPGP
- RFC 2440 OpenPGP Message Format (obsolète)
- RFC 4880 Format de message OpenPGP
- RFC 5581 The Camellia Cipher in OpenPGP
- RFC 6637 Cryptographie sur courbe elliptique (ECC) dans OpenPGP
- RFC 4880bis (projet) Format de message OpenPGP
- PGP/MIME
- RFC 2015 MIME Security with Pretty Good Privacy (PGP)
- RFC 3156 Sécurité MIME avec OpenPGP
Le cryptage d'OpenPGP peut assurer la livraison sécurisée des fichiers et des messages, ainsi que la vérification de l'identité de la personne qui a créé ou envoyé le message, grâce à un processus appelé signature numérique. La suite bureautique open source LibreOffice a mis en œuvre la signature de documents avec OpenPGP à partir de la version 5.4.0 sous Linux. L'utilisation d'OpenPGP pour la communication nécessite la participation de l'expéditeur et du destinataire. OpenPGP peut également être utilisé pour sécuriser des fichiers sensibles lorsqu'ils sont stockés dans des endroits vulnérables comme des appareils mobiles ou dans le nuage.