Aperçu des algorithmes de signature JWT
Explorez les algorithmes de signature JSON Web Token (JWT), en couvrant deux des approches de cryptage asymétrique les plus populaires : RSA et EC. Découvrez les avantages et les inconvénients de chaque algorithme et comment Logto les utilise pour sécuriser vos jetons JWT.
Qu'est-ce qu'un JWT ?
JSON Web Token (JWT) est un moyen compact et sûr pour représenter des revendications de manière sécurisée. La structure comprend un en-tête, une charge utile et une signature.
De nos jours, les JWT ont été largement adoptés et jouent un rôle crucial dans OAuth 2.0 et OIDC. Mais comment un serveur d'autorisation vérifie et fait-il confiance à un JWT envoyé par un client ? Comment le jeton est-il émis et signé par l'émetteur ? Dans cet article de blog, nous parlerons du chiffrement asymétrique et approfondirons les avantages et les inconvénients des différents algorithmes de signature que Logto utilise dans ses jetons JWT.
Structure du JWT
Logto signe tous les jetons JWT, y compris les jetons d'identification et les jetons d'accès. Un JWT signé est également connu sous le nom de JWS (JSON Web Signature). Une structure de JWT signée se compose de trois parties : l'en-tête, la charge utile et la signature, séparées par des points (.
).
En-tête JOSE (JSON Object Signing and Encryption)
L'en-tête se compose généralement des parties suivantes :
- typ : Le type du jeton, qui est JWT.
- alg : L'algorithme de signature utilisé, tel que RS256 ou ES384.
- kid : Une indication indiquant quelle clé a été utilisée pour sécuriser le JWT.
Charge utile
La charge utile contient les revendications, qui sont des déclarations concernant une entité (généralement, l'utilisateur) et des données supplémentaires. Par exemple, un jeton d'identification peut contenir les revendications suivantes :
Signature
La signature est utilisée pour vérifier que l'expéditeur du JWT n'est pas un imposteur et que le message n'a pas été altéré. Lors de l'utilisation d'un JWT signé, vous devez vérifier la signature du jeton pour garantir l'intégrité du jeton. Consultez ce guide sur comment valider les jetons JWT pour protéger votre API.
Qu'est-ce que le chiffrement asymétrique ?
Le chiffrement asymétrique, également connu sous le nom de cryptographie à clé publique, un concept fondamental de la sécurité informatique et de la cryptographie, implique l'utilisation d'une paire unique de clés connexes : une clé publique et une clé privée.
Définitions des clés publiques et privées
- Clé publique : La clé publique, comme son nom l'indique, est conçue pour un partage ouvert. Dans le cadre des JWT et de systèmes similaires, la clé publique est utilisée pour la vérification de la signature, non pour le chiffrement. Lorsque des données sont signées avec la clé privée et que le destinataire possède la clé publique correspondante, il peut valider que les données ont été effectivement signées par le détenteur de la clé privée et n'ont pas été altérées lors de la transmission.
- Clé privée : En revanche, la clé privée est un secret bien gardé qui ne devrait être connu que de son propriétaire légitime. Dans le cadre des JWT, la clé privée est utilisée pour créer des signatures numériques qui peuvent être vérifiées par quiconque ayant accès à la clé publique correspondante.
Cet arrangement unique de clés constitue la base des mécanismes de transmission sécurisée des données et d'authentification des utilisateurs dans le monde numérique. Consultez cet article de blog pour plus de détails.
Algorithmes de clé de signature JWT populaires : RSA vs EC
Les algorithmes RSA (Rivest-Shamir-Adelman) et EC (Elliptic Curve) sont les deux « fonctions mathématiques » les plus couramment utilisées dans le chiffrement asymétrique.
En tant que développeurs, nous sommes souvent confrontés à un choix entre ces algorithmes lors de l'utilisation d'un cadre d'authentification et de ses JWT. Mais lequel serait votre choix ? Explorons les avantages et les inconvénients de chacun.
Algorithme de signature RSA (Ex. RSASHA256)
- Avantages :
- Large support : RSA est largement pris en charge sur diverses plateformes et bibliothèques, assurant la compatibilité dans un large éventail d'environnements.
- Longue expérience : RSA a une longue histoire de sécurité fiable, et ses algorithmes sont bien compris par la communauté cryptographique.
- Inconvénients :
- Tailles des clés : Les clés RSA sont plus longues pour atteindre le même niveau de sécurité que EC, ce qui se traduit par des tailles de jeton plus grandes et une surcharge computationnelle accrue.
- Performance : Les opérations RSA ont tendance à être plus lentes que EC, ce qui peut être un inconvénient dans des applications à fort trafic.
Algorithme de signature EC (Ex. ECDSASHA384)
- Avantages :
- Efficacité : EC offre des performances supérieures par rapport à RSA, le rendant idéal pour les applications contraintes en ressources ou avec des charges de trafic élevées.
- Tailles de clé compactes : Les clés EC sont bien plus courtes que leurs homologues RSA tout en offrant des niveaux de sécurité équivalents. Cela conduit à des besoins réduits en stockage et réseau et à des opérations cryptographiques accélérées.
- Sécurité : EC est hautement apprécié pour sa sécurité robuste, renforcée par les mathématiques complexes derrière les courbes elliptiques, le rendant résistant aux attaques par force brute.
- Inconvénients :
- Support limité : Certains anciens systèmes et bibliothèques peuvent manquer de support complet pour EC, potentiellement causant des problèmes de compatibilité. Par exemple, Cloudflare Zero Trust ne supporte pas les jetons signés EC.
- Complexité : La mise en œuvre de EC peut être plus complexe en raison des complexités mathématiques impliquées.
Choix des algorithmes de signature JWT de Logto
Logto a toujours été engagé envers les normes les plus élevées de sécurité et de flexibilité et tend à utiliser les solutions les plus modernes et performantes au cœur de son fonctionnement. EC offre une combinaison gagnante de sécurité robuste et d'efficacité computationnelle, la rendant idéale pour les besoins modernes d'authentification et d'autorisation. Par conséquent, EC a été notre algorithme de clé de signature par défaut depuis le début de notre produit.
Cependant, nous avons également reconnu que les jetons signés EC ne sont pas compatibles avec certains systèmes et cadres tiers, en particulier les plus anciens. Par conséquent, nous avons également introduit une fonctionnalité pour changer votre algorithme de clé de signature JWT en faisant tourner vos clés privées.
Donc si vous faites face au problème de ne pas pouvoir vous connecter à une plateforme tierce en raison de l'algorithme de signature JWT non pris en charge, c'est maintenant le moment de faire tourner et de sélectionner l'algorithme RSA pour votre nouvelle clé privée.
Cette fonctionnalité aide également à atténuer les risques associés à l'exposition ou à la compromission à long terme des clés. Faire tourner régulièrement les clés privées devrait être une pratique fondamentale dans la stratégie de sécurité de toute organisation et est fortement recommandé par Logto.
Récapitulatif : Les algorithmes de signature JWT couramment utilisés : RSA et EC
La signature des jetons JWT garantit l'intégrité et l'authenticité des données transmises. Le choix de l'algorithme de signature peut avoir un impact significatif sur la sécurité, la performance et la compatibilité de votre application.
Les algorithmes RSA et EC sont tous deux essentiels et populaires en cryptographie. Comprendre les avantages et les inconvénients ainsi que les principes mathématiques derrière ces algorithmes permet de prendre de meilleures décisions pour que votre application fonctionne avec un cadre d'authentification et d'autorisation.
Logto continuera d'explorer et de vous offrir une expérience utilisateur plus sécurisée et robuste.