Problème PGP

Les ingénieurs de la cryptographie crient depuis des décennies sur les lacunes de PGP . Lorsque les développeurs ordinaires entendent cela, ils sont extrêmement surpris. Comment, PGP n'est pas bon? Pourquoi, alors, est-il conseillé de l'utiliser? La réponse est que PGP n'est vraiment pas bon et ne devrait jamais être recommandé à personne. Il doit disparaître.

Comme vous le verrez bientôt, PGP a beaucoup de problèmes. Si vous n'entrez pas dans les détails, la raison principale est que le programme a été développé dans les années 90, avant l'avènement de la cryptographie moderne sérieuse. Aucun ingénieur crypto compétent ne développera aujourd'hui un système sous cette forme et ne tolérera la plupart de ses défauts dans aucun autre système. Les cryptographes sérieux ont essentiellement abandonné PGP et n'y passent plus de temps (à quelques exceptions notables près ). Par conséquent, les problèmes bien connus du PGP restent non résolus pendant plus de dix ans.

Deux petites notes. Premièrement, l'article a été écrit pour les ingénieurs et non pour les avocats et les militants. Deuxièmement, «PGP» peut signifier beaucoup de choses, du standard OpenPGP à l'implémentation de référence dans GnuPG. Nous utilisons le terme «PGP» pour tout cela.

Les problèmes


Complexité absurde


Pour des raisons que personne ne comprend maintenant, PGP est basé sur un package. Le message PGP (dans le fichier .asc) est une archive de packages typés. Il existe au moins huit façons différentes de coder la longueur d'un paquet, selon que vous utilisez les «nouveaux» ou «anciens» paquets. Les paquets du «nouveau format» comme BER ont une longueur variable (essayez d'écrire une implémentation PGP, et la norme de codage ASN.1 vous semblera douce). Les packages peuvent avoir des sous-packages. Certaines options de package se chevauchent. La dernière attaque sur le serveur de clés est due au fait qu'en raison de ce format irresponsable, l'analyse de clés GnuPG part accidentellement en temps quadratique .

Et ce n'est qu'un encodage. Le vrai système est beaucoup plus compliqué. Il y a des clés et une prise. Identificateurs de clés, serveurs de clés et signatures de clés. Les clés sont uniquement destinées à la signature et uniquement au cryptage. De nombreux porte-clés. Révocation de certificat. Trois formats de compression différents. Que nous n'avons pas encore atteint le support des cartes à puce.

Conception de couteau suisse


Si vous vous perdez dans la forêt et ... je ne sais pas, par exemple, vous devez couper les revers sur un jean - oui, c'est très pratique que vous ayez des ciseaux sur votre couteau. Mais pour un travail sérieux, personne n'utilisera régulièrement de tels ciseaux.

Un couteau suisse fait une tonne de choses et tout va mal. PGP est un outil très médiocre pour signer des documents; il crypte relativement mal avec les mots de passe et fonctionne très mal avec les clés publiques. PGP n'est pas particulièrement bon pour les transferts de fichiers sécurisés. C'est une façon maladroite de signer des packages. Ce n'est pas très bon pour protéger les sauvegardes. Il s'agit d'un moyen extrêmement dangereux d'échanger des messages sécurisés.

À l'époque de MC Hammer, lorsque PGP est apparu, le «chiffrement» était une chose spéciale en soi; il y avait un outil pour envoyer des fichiers, des sauvegardes, pour crypter et signer des fichiers. La cryptographie moderne ne fonctionne pas comme ça, nous avons besoin d'outils spécialisés. La cryptographie pour la messagerie sécurisée est différente de la cryptographie pour la sauvegarde ou la signature de packages.

Marais à compatibilité descendante


PGP précède la cryptographie moderne et est très obsolète à cette époque. Si vous avez de la chance, votre GnuPG aura par défaut une clé RSA 2048 bits, un chiffrement CAST5 64 bits en CFB et une somme de contrôle MDC OpenPGP (à propos de laquelle plus tard). Si le chiffrement est effectué avec un mot de passe plutôt qu'avec une clé publique, le protocole OpenPGP établira l'algorithme de génération de clés S2K pour PGP. Pour le dire légèrement, ce ne sont pas les primitives qu'un ingénieur en cryptographie choisira pour un système moderne.

Nous avons beaucoup appris depuis que le nerd Steve Urkel a décoré les heures de grande écoute sur ABC. Nous avons appris que les textes chiffrés doivent être authentifiés (et le mode CFB évité), que les chiffrements par blocs 64 bits sont mauvais, que RSA n'est pas parfait, qu'une combinaison de compression et de chiffrement est dangereuse et que les KDF doivent être strictement générés à la fois dans le temps et dans la mémoire.

Peu importe ce que dit le RFC d'OpenPGP, vous ne ferez probablement rien de cette liste si vous utilisez PGP, et il est impossible de dire quand les recommandations commenceront à être mises en œuvre. Prenez les chiffres AEAD: Sequoia PGP dans Rust est par défaut en mode AEES AES-EAX. C'est super. Mais maintenant, personne ne peut lire leurs messages, car la plupart des versions de PGP ne savent pas ce qu'est le mode EAX, et ce n'est pas très cool. Dans chaque mauvais cryptosystème, le résultat final est une extension RFC qui prend en charge les courbes elliptiques ou AEAD, afin que ses partisans puissent crier dans les forums qu'ils prennent en charge la cryptographie moderne. La RFC n'a pas d'importance: seuls les paramètres réels. Nous avons inventé le cryptage authentifié il y a 20 ans, et PGP prendra bientôt sa retraite; assez d'excuses.

Soit vous avez une compatibilité descendante avec le programme des années 90, soit vous avez une bonne cryptographie; vous ne pouvez pas obtenir les deux .

Nasty UX


Il est difficile de le formuler mieux que Ted Unangst:

Il y a quelques années, une étude d'utilisabilité de PGP a été menée, dans laquelle un groupe d'experts techniques a été placé dans une pièce avec un ordinateur et invité à configurer PGP. Deux heures plus tard, aucun d'eux n'avait encore répondu.

Si vous avez besoin de vos propres données empiriques pour le confirmer, voici une expérience que vous pouvez faire: trouver un avocat loin des ordinateurs et l'aider à installer Signal par téléphone. Il s'en sortira probablement sans hystérie. Essayez maintenant de le faire avec PGP.

Secrets à long terme


PGP demande aux utilisateurs de garder la clé racine liée à leur identité presque pour toujours. La génération et l'échange de clés sont encombrants avec ces «parties signataires clés» et le «réseau de confiance», où les clés dépendent d'autres clés.

Les touches à long terme sont presque toujours inconfortables . Si vous continuez à utiliser la clé, elle devient finalement publique. Du point de vue d'une conception de système compétente, il est nécessaire de minimiser les dommages et de veiller à ce que l'utilisateur n'hésite pas une seconde lorsqu'il pense à générer une nouvelle clé, s'il existe au moins quelques inquiétudes quant à la sécurité de la clé actuelle.

Les fans de PGP répondront immédiatement: "C'est pourquoi vous devez garder les clés sur Yubikey." Mais selon une estimation approximative rapide, presque personne au monde n'utilise des Yubikeys chers, et cela ne devrait pas changer à l'avenir (nous pouvons à peine déployer U2F, et ces clés sont jetables). Nous ne pouvons pas accepter de mauvais cryptosystèmes simplement pour rendre les nerds Unix plus à l'aise avec leurs jouets.

Authentification cassée


Plus d'informations sur les primitives archaïques de PGP: en 2000, le groupe de travail OpenPGP s'est rendu compte qu'il était nécessaire d'authentifier le texte crypté et que les signatures PGP ne l'étaient pas. Par conséquent, OpenPGP a inventé le système MDC : les messages PGP avec MDC attachent le texte brut SHA-1 au texte brut lui-même, qui est ensuite chiffré (comme d'habitude) en mode CFB.

Si vous vous demandez comment PGP gère cela lorsque les systèmes modernes utilisent des schémas AEAD relativement complexes (car ils ne peuvent pas simplement attacher SHA-1 au texte en clair), alors c'est une bonne question. Comment décririez-vous ce dessin animé? PGP MDC peut être effacé des messages - il est codé de telle manière qu'il est assez simple de couper les 22 derniers octets du texte chiffré. Pour maintenir la compatibilité descendante avec les anciens messages dangereux, PGP a introduit un nouveau type de package qui signale la nécessité d'une vérification MDC. Si vous utilisez le mauvais type, MDC n'est pas vérifié. Même si vous le faites, le nouveau format de paquet SEIP est assez proche du format SE dangereux, ce qui pourrait potentiellement inciter le destinataire à réduire le chiffre; Trevor Perrin a réduit SEIP à seulement 16 bits de sécurité .

Enfin, même si tout se passe bien, l'implémentation de référence PGP produira du texte en clair non authentifié sur demande, même si le MDC ne correspond pas .

Identités incohérentes


PGP est une application, un ensemble d'intégrations avec d'autres applications, un format de fichier, un réseau social et une sous-culture.

PGP met en avant le concept d'identité cryptographique. Vous créez une clé, l'enregistrez dans un trousseau, imprimez son empreinte digitale sur une carte de visite et la publiez sur le serveur de clés. Vous signez les clés de quelqu'un d'autre. À leur tour, ils peuvent ou non s'appuyer sur vos signatures pour vérifier d'autres clés. Certaines personnes essaient de rencontrer d'autres utilisateurs de PGP en personne pour échanger des clés et s'inscrire de manière plus sécurisée dans ce «réseau de confiance». D'autres organisent des fêtes de signature clés. Si vous imaginez toute cette activité, il devient clair à quel point il est difficile pour les fans PGP dédiés de passer aux nouvelles technologies.

Mais tout ce système ne fonctionne pas dans la pratique. Ni un réseau de confiance avec des signatures de clés, ni des serveurs de clés, ni des parties. Les gens ordinaires feront confiance à tout ce qui ressemble à une clé PGP, peu importe d'où elle vient - comment peuvent-ils ne pas faire confiance, même s'il est difficile pour un expert de formuler comment évaluer la clé? Les experts ne font pas confiance aux clés qu'ils n'ont pas personnellement reçues. Tous les autres comptent sur des services de distribution de clés centralisés. Les mécanismes de distribution des clés PGP sont un cirque.

Fuites de métadonnées


Pendant une seconde, oubliez la débâcle des e-mails (nous y reviendrons plus tard). PGP lui-même peut divulguer des métadonnées. En utilisation normale, les messages sont directement associés à des identificateurs de clé qui sont associés à l'identifiant d'utilisateur à travers le réseau de confiance PGP. De plus, une proportion assez importante d'utilisateurs PGP utilisent des serveurs de clés qui émettent eux-mêmes sur le réseau que les utilisateurs PGP échangent des messages entre eux.

Pas de secret direct


Exemple: la cryptographie pour la messagerie sécurisée nécessite le secret de retransmission. La confidentialité directe signifie que si un attaquant reçoit votre clé, il ne pourra toujours pas lire les messages précédents. Dans la cryptographie moderne, nous supposons que l'adversaire écrit tout sur un stockage infini. Les opposants au PGP sont les gouvernements mondiaux. Bien sûr, certains d'entre eux le font. Contre des adversaires sérieux, le piratage de la cryptographie sans secret direct n'est qu'une question de temps.

Pour garantir la confidentialité directe dans la pratique, vous conservez généralement deux clés secrètes: une clé de session à court terme et une clé de confiance à long terme. La clé de session est éphémère (généralement un produit d'échange DH), et la clé de confiance la signe, de sorte que la personne au milieu ne peut pas utiliser sa propre clé. Théoriquement, le secret direct peut être réalisé avec les outils PGP. Bien sûr, presque personne ne fait ça.

Clés de hache


La clé publique OpenBSD signifie que la chaîne Base64 est suffisamment courte pour tenir au milieu d'une phrase dans un e-mail; une clé privée qui n'est pas un format d'échange n'est qu'une chaîne. Et la clé publique PGP est un gigantesque document Base64; si vous les utilisez souvent, vous avez probablement déjà l'habitude de les coller dans une pièce jointe plutôt que de les coller dans des messages afin de ne pas les endommager. La clé signify est générée par l'algorithme avancé Ed25519 et PGP par le RSA plus faible.

Vous pourriez penser que cela n'a pas d'importance, mais c'est important; des ordres de grandeur plus de personnes utilisent SSH et gèrent les clés SSH que PGP. Les clés SSH sont faciles à gérer; PGP - non.

Réconciliation


PGP prend en charge les courbes p ElGamal, RSA, NIST, Brainpool, Curve25519, SHA-1, SHA-2, RIPEMD160, IDEA, 3DES, CAST5, AES. Ce n'est pas une liste complète de ce que PGP prend en charge.

Si au cours des 20 dernières années, nous avons appris trois choses importantes sur la cryptographie, au moins deux d'entre elles, c'est que la réconciliation et la compatibilité sont mauvaises. En règle générale, les lacunes des cryptosystèmes apparaissent dans les implémentations plutôt que dans les primitives, et la cryptocompatibilité expansive augmente le nombre d'implémentations. Les protocoles modernes, tels que TLS 1.3, cherchent à se débarrasser de la rétrocompatibilité avec des archaïsmes comme RSA, plutôt que de l'ajouter. Les systèmes plus récents ne prennent en charge qu'un ensemble de primitives et un numéro de version simple. Si l'une de ces primitives échoue, vous vous débarrassez de cette version et supprimez immédiatement l'ancien protocole entier.

Si nous n'avons pas de chance et après 20 ans, les gens continueront à utiliser PGP, cela restera la seule raison pour laquelle la norme CAST5 est appliquée au moins quelque part. Nous ne pouvons pas le dire plus clairement et nous devons le répéter plusieurs fois: soit vous avez une compatibilité descendante avec le programme des années 90, soit vous avez une bonne cryptographie; vous ne pouvez pas obtenir les deux.

Code de corbeille


L'implémentation standard de facto de PGP est GnuPG. Ce programme n'est pas très bien écrit. Il existe une base de code étendue en langage C avec duplication de fonctionnalités (par exemple, dans la description d'une récente attaque par déni de service sur l'analyse SKS, il est dit qu'il a plusieurs analyseurs clés) avec un long historique de CVE, allant de la corruption de mémoire aux attaques cryptographiques via des canaux tiers. Parfois, il était possible de supprimer l'authentification des messages, mais GnuPG ne l'a pas remarqué. Vous pourriez lui donner les clés sans l'empreinte correcte. En 2018, la vulnérabilité Efail a été causée par le fait que GnuPG a fourni du texte en clair non authentifié sur demande. GnuPG n'est pas bon.

GnuPG est à la fois l'implémentation de référence pour PGP et la base de la plupart des autres outils d'intégration de cryptographie PGP. Il ne va nulle part. S'appuyer sur PGP signifie s'appuyer sur GPG.

Les réponses


Pour convaincre une personne d'abandonner PGP, il est important de lui expliquer que PGP n'a rien à remplacer, et c'est normal . Un outil alternatif dépend de la tâche.

Conversations


Utilisez Signal. Ou Wire, ou WhatsApp, ou un autre messager sécurisé basé sur le protocole Signal.

Les messagers sécurisés modernes sont spécialement conçus pour la messagerie. Ils utilisent des prises de contact d'authentification confidentielles, des annulations de messages, des cliquets cryptographiques , qui émettent une clé pour chaque échange de messages, et, bien sûr, des primitives de chiffrement modernes. Les messagers sont très faciles à utiliser, sans tracas avec les clés et les sous-clés. Si vous utilisez Signal, vous obtenez encore plus: vous obtenez un système si paranoïaque sur la sauvegarde des métadonnées privées des serveurs qu'il tunnelise même les requêtes de recherche Giphy pour éviter les attaques d'analyse de trafic, et jusqu'à récemment, il ne supportait même pas les profils utilisateur.

Cryptage des e-mails


Ne fais pas ça.

L'email n'est pas sécurisé . Même avec PGP, il s'agit de texte brut par défaut, c'est-à-dire que même si vous faites tout correctement, un destinataire complètement raisonnable de la lettre, faisant des choses absolument raisonnables, citera nécessairement le texte brut de votre message chiffré à quelqu'un d'autre dans CC (nous ne connaissons pas l'utilisateur de l'e-mail Courrier PGP, qui ne l'a pas rencontré). Il n'y a pas de secret direct dans l'e-mail PGP. Les métadonnées des e-mails, y compris l'objet (qui est littéralement le contenu du message), sont toujours transmises en texte clair.

Si vous avez besoin d'une autre raison, lisez l' article de vulnérabilité Efail . La communauté GnuPG, qui n'a pas divulgué d'informations sur Efail , critique violemment cet article, mais il a été accepté par Usenix Security (l'un des meilleurs centres académiques pour la sécurité des logiciels) et Black Hat USA (la principale conférence sur la sécurité des logiciels). C'est l'une des meilleures attaques cryptographiques des cinq dernières années - et une bombe assez destructrice contre l'écosystème PGP. Comme vous le verrez dans l'article, S / MIME n'est pas mieux.

Il ne sera jamais réparé. Pour rendre le courrier électronique vraiment sécurisé, vous devez tunneler un autre protocole par courrier électronique (vous serez toujours vulnérable à une attaque avec analyse du trafic). C'est juste le point, pourquoi faire semblant?

Le cryptage des e-mails clique sur des problèmes. Encourager les utilisateurs à crypter les e-mails si quelque chose les menace est une négligence exceptionnelle. Quiconque vous parle de la sécurité des communications par e-mail avec le cryptage PGP met ses étranges préférences au-dessus de votre sécurité.

Envoi de fichiers


Utilisez le trou de ver magique . Les clients de trous de ver utilisent l'authentification par clé unique avec l'authentification par mot de passe (PAKE) pour crypter les fichiers. C'est facile (au moins pour les nerds), sûr et amusant: tout le monde à qui nous avons montré le «trou de taupe» a immédiatement commencé à parcourir tous les fichiers d'affilée, comme nous le faisons.

Quelqu'un lance immédiatement le programme d'installation de Windows sur Rust ou Go, c'est un programme trop cool pour ne pas l'utiliser.

Si vous parlez à des avocats, pas à des ingénieurs, Signal fait un excellent travail de transfert de fichiers. Pour le rapport d'erreurs, publiez le numéro de signal, pas la clé PGP.

Chiffrement de sauvegarde


Utilisez Tarsnap. Colin expliquera comment Tarsnap est optimisé pour protéger les sauvegardes . Ou bien, prenez n'importe quel autre outil de chiffrement de sauvegarde; ce ne sera pas aussi bon que Tarsnap, mais ce sera toujours mieux que PGP.

Besoin de sauvegardes hors ligne? Utilisez le cryptage d'image disque; il est intégré aux versions modernes de Windows, Linux et macOS. Le chiffrement complet du disque n'est pas très bon, mais il fait un excellent travail de cette tâche, et il est plus simple et plus sûr que PGP.

Signature du package


Utilisez Signify / Minisign. Ted Unangst vous dira tout . Cet outil est utilisé pour signer des packages dans OpenBSD. C'est très simple et applique des signatures modernes. Frank Denis Minisign (l'un des développeurs de libsodium) implémente le même design sur Windows et macOS; Il a des liaisons avec Go, Rust, Python, Javascript et .NET; Il est même compatible avec Signify.

Cryptage des données d'application


Utilisez libsodium : c'est une bibliothèque universelle avec une interface dans laquelle il est difficile de se tromper, et vous n'avez pas besoin d'un binaire pour fonctionner.

Cryptage de fichiers


C'est vraiment un problème. Si vous disposez de / not / backup, / not / archive pour un stockage hors ligne à long terme, / not / file encryption pour le transfert et / not / encryption des disques virtuels que vous montez / démontez au besoin, alors il n'y a pas un bon outil pour crypter les fichiers. À d'autres fins, Filippo Walsorda développe un outil d' âge , il semble prometteur, mais pas encore prêt.

J'espère que c'est un cas d'utilisation assez étroit. Nous travaillons dans le domaine de la sécurité des logiciels et traitons les données confidentielles, y compris les rapports d'erreurs (un autre cas très courant quand ils crient «Nous avons besoin de PGP!»), Mais n'utilisons presque jamais PGP.

Source: https://habr.com/ru/post/fr460827/


All Articles