OpenPGP, la norme définissant comment chiffrer et signer des messages en utilisant PGP, le format de chiffrement d’e-mails le plus utilisé, a reçu une mise à niveau majeure, introduisant diverses améliorations de sécurité et des algorithmes cryptographiques plus modernes.
Le PGP est utilisé pour sécuriser les messages électroniques depuis les années 90. Au cours des 25 dernières années, la norme a été mise à jour à plusieurs reprises. Cependant, les avancées cryptographiques ont continué à repousser les limites de la confidentialité et de la sécurité. Depuis 2016, année où nous avons commencé à maintenir OpenPGP.js(nouvelle fenêtre), l’une des bibliothèques de chiffrement d’e-mails open source les plus utilisées au monde, nous avons œuvré à moderniser le PGP tout en préservant l’un de ses principaux atouts — l’interopérabilité. Cela nous permet d’apporter le meilleur de la crypto moderne à Proton Mail tout en assurant que Proton Mail ne soit pas un jardin clos.
La normalisation garantit une interopérabilité future, et Proton a également été activement impliqué dans le processus de normalisation avec le groupe de travail OpenPGP à l’Internet Engineering Task Force (IETF). Le résultat de cela est l’« actualisation crypto(nouvelle fenêtre) » de la norme OpenPGP, comme elle a été surnommée, a apporté un chiffrement authentifié moderne, des courbes plus sécurisées, un hachage de mot de passe résistant à la mémoire, et plus encore.
En standardisant ces améliorations plutôt qu’en utilisant des protocoles propriétaires, nous ouvrons la voie à un écosystème de messagerie électronique plus sécurisé et nous garantissons que les e-mails chiffrés restent interopérables.
Améliorations de la sécurité
Voici un aperçu des plus grandes améliorations de sécurité dans l’actualisation crypto du PGP.
Chiffrement authentifié moderne (AEAD)
Un chiffrement moderne doit être résistant à la falsification clandestine. Un attaquant sans accès à votre clé secrète ne devrait pas pouvoir modifier votre message sans être détecté. Un chiffrement avec cette propriété est appelé « chiffrement authentifié ».
OpenPGP dispose depuis longtemps d’un chiffrement authentifié, utilisant un mécanisme appelé le « Code de détection de modification » (MDC). Bien que cela remplisse sa fonction, les schémas modernes de chiffrement authentifié atteignent le secret et l’authentification en un seul algorithme intégré. Ces modes de chiffrement, appelés algorithmes AEAD, offrent de meilleures performances au même niveau de sécurité.
La nouvelle norme inclut GCM, un algorithme AEAD disponible dans l’API de cryptographie Web, qui fournit des implémentations natives de primitives cryptographiques aux applications web et offre de meilleures performances et sécurité. Pour cette raison, nous commencerons bientôt à utiliser ce mode dans tous les produits Proton.
Courbes plus sécurisées
Nouveauté dans la spécification de l’actualisation crypto, un ensemble d’algorithmes de cryptographie à clé publique qui utilisent Curve25519 et Curve448 pour le chiffrement et le déchiffrement (X25519 et X448) et pour la signature et la vérification (Ed25519 et Ed448). Les membres de la communauté Proton savent que nous utilisons Curve25519 depuis des années. Néanmoins, ce sera la première fois qu’elle est formellement spécifiée.
Nous avons également proposé d’ajouter Curve25519 et Curve448 à l’API de cryptographie Web(nouvelle fenêtre). Certains navigateurs, tels que Chrome et Safari, ont commencé à implémenter Curve25519. Nous prévoyons d’utiliser cela dans OpenPGP.js pour améliorer encore la performance et la sécurité de nos applications web une fois qu’il sera disponible.
Fonction de hachage de mot de passe résistant à la mémoire
OpenPGP intègre des fonctions de hachage de mot de passe, qu’il nomme les « algorithmes string-to-key (S2K) ». Cependant, jusqu’à l’actualisation cryptographique, tous ces algorithmes étaient assez faibles. L’algorithme le plus robuste, « S2K itéré et salé », sale le mot de passe puis hache à plusieurs reprises le sel et le mot de passe en utilisant une fonction de hachage cryptographique telle que SHA-2 pour un nombre configurable d’itérations, mais avec une limite supérieure de 62 MiB sur les données hachées. Étant donné que le hachage SHA-2 est devenu très rapide et peu coûteux, cela ne suffit plus pour hacher de manière sécurisée un mot de passe. Pour cette raison, Proton a depuis longtemps recours à une fonction de hachage de mot de passe supplémentaire, bcrypt, pour hacher les mots de passe avant de les utiliser pour chiffrer les messages ou les clés OpenPGP.
OpenPGP va passer à Argon2(nouvelle fenêtre), le gagnant du concours de hachage de mots de passe. Cette fonction est «difficile sur la mémoire(nouvelle fenêtre)», ce qui signifie qu’elle nécessite une quantité significative de mémoire pour hacher un mot de passe. Cela rend plus difficile pour un attaquant d’optimiser le processus de devinette de mots de passe à l’aide de matériel dédié, tel que des circuits intégrés spécifiques à une application(nouvelle fenêtre), car la vitesse de hachage restera limitée par la vitesse de la mémoire. Avec la mise à jour de la norme OpenPGP, nous passerons également à Argon2 chez Proton.
Abandon des algorithmes obsolètes
L’actualisation cryptographique abandonne les primitives et algorithmes cryptographiques anciens, y compris les algorithmes de hachage MD5, SHA1 et RipeMD, les algorithmes symétriques IDEA, 3DES et CAST5, et les algorithmes de clé publique ElGamal, DSA et les clés RSA de moins de 3072 bits (le niveau de sécurité comparable à Curve25519). Ils sont tous considérés comme moins sécurisés que leurs alternatives modernes et, de ce fait, ne conviennent pas à l’utilisation dans de nouvelles données ou même à la consommation de données existantes dans certains cas. La norme par défaut de Proton a longtemps été Curve25519, qui est plus sécurisée.
Prévention des attaques par écrasement de clé
Un domaine de recherche de l’équipe Crypto de Proton a été les attaques par écrasement de clé, et en 2022, nous avons publié un article de recherche(nouvelle fenêtre) sur ce sujet en collaboration avec le professeur Kenneth Paterson de l’ETH Zurich. Cette recherche a également été présentée à la conférence ACM sur la sécurité informatique et des communications à Los Angeles en novembre 2022. Bien que nous ayons ajouté des correctifs de sécurité à OpenPGP.js et à GopenPGP(nouvelle fenêtre) dès la découverte de ces problèmes, la nouvelle spécification OpenPGP aborde les vulnérabilités de manière plus efficace.
Robustesse face aux vulnérabilités futures
Si la plupart des changements dans l’actualisation cryptographique visent à corriger les vulnérabilités connues ou à moderniser les primitives cryptographiques utilisées, certains visent à prévenir les vulnérabilités potentielles dans les primitives cryptographiques qui pourraient être découvertes à l’avenir et qui pourraient affecter OpenPGP.
En particulier, les signatures sont désormais salées, en d’autres termes, une valeur aléatoire est hachée avant le message ou le document signé. Cela rend plus difficile la réalisation d’une attaque par collision, où un attaquant remplace une signature d’un document donné par une signature d’un autre document qui partage le même préfixe, car cette signature peut avoir été hachée avec un sel différent, signifiant que le préfixe ne correspondrait pas.
Cela signifie que si une attaque telle que SHAttered(nouvelle fenêtre) (qui a démontré une collision dans SHA1) était jamais découverte contre les algorithmes de hachage actuels (comme SHA2), OpenPGP ne serait pas autant impacté.
Améliorations à venir
Après la publication de l’actualisation cryptographique de la norme OpenPGP, nous prévoyons de continuer à travailler avec le groupe de travail OpenPGP pour apporter une cryptographie encore plus avancée et des fonctionnalités supplémentaires à PGP, telles que :
Améliorations de sécurité
- Cryptographie post-quantique (un sujet sur lequel nous travaillons déjà. Nous publierons un article de blog séparé à ce sujet prochainement.)
- Confidentialité persistante (protection des messages envoyés aujourd’hui même si une clé est compromise demain)
- Séparation de domaine pour la signature et/ou le chiffrement
Facilitation de nouvelles fonctionnalités
- Transfert automatique utilisant le réchiffrement par procuration
- Clés symétriques persistantes pour le stockage à long terme de matériel de clé symétrique, de messages chiffrés symétriquement et d’attestations symétriques
- Révocateur désigné pour remplacer le mécanisme obsolète de clé de révocation
- Signatures d’attestation pour faciliter les certifications de tiers attestées par la première partie (1PA3PC).
- Clés supplantées pour faciliter la transition vers de nouvelles clés
- Interface OpenPGP sans état (SOP)
- Extensions au RFC 3156(nouvelle fenêtre) (PGP/MIME)
Spécifications et améliorations des mécanismes de découverte de clés basés sur le réseau
- Protocole de serveur de clés HTTP (HKP)
- Annuaire de clés Web (WKD)
Vous pouvez trouver des détails supplémentaires sur les sujets proposés ici(nouvelle fenêtre).
Spécification et implémentations
La mise à jour « rafraîchissement crypto » de la norme OpenPGP est actuellement en cours de révision par le directeur de la zone de sécurité de l’IETF. Une fois le document passé en revue, il sera publié en tant que nouvelle norme.
La spécification a été co-écrite par Daniel Huigens de Proton, Justus Winter de Sequoia-PGP et Niibe Yutaka de l’Initiative du Logiciel Libre du Japon (FSIJ). Elle a été éditée par Paul Wouters de Aiven. Les présidents du groupe de travail, Daniel Kahn Gillmor de l’American Civil Liberties Union (ACLU) et Stephen Farell du Trinity College de Dublin, ont dirigé le processus. Nous tenons à les remercier, ainsi que toutes les autres personnes qui ont contribué au rafraîchissement crypto, pour avoir aidé à rendre Internet plus sûr !
Nous avons déjà implémenté le rafraîchissement crypto dans OpenPGP.js et GopenPGP, les deux bibliothèques OpenPGP open source maintenues par Proton. Nous publierons bientôt de nouvelles versions avec ces améliorations afin que toute application utilisant ces bibliothèques, y compris Proton Mail, Proton Drive, Proton Pass et bien d’autres, puisse bénéficier des améliorations de sécurité et de performance du rafraîchissement crypto.
Nous tenons également à remercier le Sovereign Tech Fund(nouvelle fenêtre), une initiative financée par le ministère fédéral allemand de l’Économie et de l’Action Climatique qui soutient les projets open source contribuant à l’infrastructure numérique au service de l’intérêt public, pour avoir financé l’implémentation du rafraîchissement crypto dans OpenPGP.js et GopenPGP(nouvelle fenêtre).
Vous pouvez vérifier la progression de l’implémentation de diverses bibliothèques OpenPGP, y compris OpenPGP.js et GopenPGP, dans les résultats de la suite de tests d’interopérabilité OpenPGP pour le rafraîchissement crypto(nouvelle fenêtre). Sequoia-PGP a développé cette suite de tests, qui teste les implémentations OpenPGP pour l’interopérabilité afin de garantir que les messages électroniques peuvent être envoyés entre deux utilisateurs quelconques, indépendamment de l’application ou de l’implémentation OpenPGP qu’ils utilisent.
Impact
PGP est utilisé pour sécuriser de multiples services Proton tels que Proton Mail, Proton Drive et Proton Pass, mais ils sont loin d’être les seuls. Thunderbird, le populaire client de messagerie de bureau, offre une prise en charge intégrée pour OpenPGP. Mailvelope et Flowcrypt, deux extensions de navigateur utilisant OpenPGP.js, permettent à quiconque de chiffrer de bout en bout ses e-mails en utilisant OpenPGP même si leur fournisseur de messagerie électronique ne prend pas en charge le chiffrement de bout en bout. Ce dernier propose également des applications mobiles pour Android et iOS. Toutes ces applications, et bien d’autres encore, font partie de l’écosystème OpenPGP, permettant aux utilisateurs d’envoyer des messages chiffrés de manière interopérable sans être liés à un seul fournisseur ou application. La norme ouverte favorise l’innovation et évite le verrouillage, bénéficiant finalement aux utilisateurs finaux.
Grâce au rafraîchissement crypto, les millions de personnes qui utilisent ces applications bénéficieront de toutes les améliorations de sécurité et de performance mentionnées ci-dessus. Vos messages seront chiffrés de manière plus sécurisée, que vous communiquiez avec un autre utilisateur de Proton ou avec un utilisateur de l’une des autres applications prenant en charge OpenPGP.
Avec votre soutien, nous sommes impatients de continuer à développer une cryptographie interopérable, open source et basée sur des standards ouverts pour faire avancer la mission de Proton et de tout l’écosystème de la confidentialité open source.
Ce travail a été réalisé par Daniel Huigens, Lara Bruseghini et Lukas Burkhalter de l’équipe de Cryptographie de Proton.