4. JOSE Header (En-tête JOSE)
Pour un JWE, les membres de l'objet JSON représentant l'en-tête JOSE décrivent le chiffrement appliqué au texte en clair et éventuellement d'autres propriétés du JWE. Les noms de paramètres d'en-tête dans l'en-tête JOSE doivent (MUST) être uniques, comme spécifié dans la section 4 de [JWS]. Les règles concernant le traitement des paramètres d'en-tête qui ne sont pas compris par l'implémentation sont également les mêmes. Les classes de noms de paramètres d'en-tête sont également les mêmes.
4.1 Registered Header Parameter Names (Noms de paramètres d'en-tête enregistrés)
Les noms de paramètres d'en-tête suivants pour une utilisation dans les JWE sont enregistrés dans le registre IANA "JSON Web Signature and Encryption Header Parameters" établi par [JWS], avec des significations définies ci-dessous.
Comme indiqué par le registre commun, JWS et JWE partagent un espace de paramètres d'en-tête commun. Lorsqu'un paramètre est utilisé par les deux spécifications, son utilisation doit être compatible entre les spécifications.
4.1.1 "alg" (Algorithm) Header Parameter (Paramètre d'en-tête d'algorithme)
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "alg" sont les mêmes que définies dans la section 4.1.1 de [JWS], sauf que le paramètre d'en-tête identifie l'algorithme cryptographique utilisé pour chiffrer ou déterminer la valeur de la CEK. Si la valeur "alg" ne représente pas un algorithme pris en charge, ou s'il n'y a pas de clé disponible pour utilisation avec cet algorithme pour le destinataire, alors le contenu chiffré ne peut pas être déchiffré.
Une liste des valeurs "alg" définies pour cette utilisation peut être trouvée dans le registre IANA "JSON Web Signature and Encryption Algorithms" établi par [JWA]; le contenu initial de ce registre est constitué des valeurs définies dans la section 4.1 de [JWA].
4.1.2 "enc" (Encryption Algorithm) Header Parameter (Paramètre d'en-tête d'algorithme de chiffrement)
Le paramètre d'en-tête "enc" (encryption algorithm, algorithme de chiffrement) identifie l'algorithme de chiffrement de contenu utilisé pour effectuer un chiffrement authentifié sur le texte en clair afin de produire le texte chiffré et le tag d'authentification. Cet algorithme doit (MUST) être un algorithme AEAD avec une longueur de clé spécifiée. Si la valeur "enc" ne représente pas un algorithme pris en charge, alors le contenu chiffré ne peut pas être déchiffré. La valeur "enc" doit soit être enregistrée dans le registre IANA "JSON Web Signature and Encryption Algorithms" établi par [JWA], soit être une valeur qui contient un nom résistant aux collisions. La valeur "enc" est une chaîne ASCII sensible à la casse contenant une valeur StringOrURI. Ce paramètre d'en-tête doit (MUST) être présent et doit (MUST) être compris et traité par les implémentations.
Une liste des valeurs "enc" définies pour cette utilisation peut être trouvée dans le registre IANA "JSON Web Signature and Encryption Algorithms" établi par [JWA]; le contenu initial de ce registre est constitué des valeurs définies dans la section 5.1 de [JWA].
4.1.3 "zip" (Compression Algorithm) Header Parameter (Paramètre d'en-tête d'algorithme de compression)
Le "zip" (compression algorithm, algorithme de compression) appliqué au texte en clair avant le chiffrement, le cas échéant. La valeur "zip" définie par cette spécification est:
- "DEF" - Compression avec l'algorithme DEFLATE [RFC1951]
D'autres valeurs peuvent (MAY) être utilisées. Les valeurs d'algorithme de compression peuvent être enregistrées dans le registre IANA "JSON Web Encryption Compression Algorithms" établi par [JWA]. La valeur "zip" est une chaîne sensible à la casse. Si aucun paramètre "zip" n'est présent, aucune compression n'est appliquée au texte en clair avant le chiffrement. Lorsqu'il est utilisé, ce paramètre d'en-tête doit (MUST) être protégé en intégrité; par conséquent, il doit (MUST) apparaître uniquement dans l'en-tête protégé JWE. L'utilisation de ce paramètre d'en-tête est optionnelle (OPTIONAL). Ce paramètre d'en-tête doit (MUST) être compris et traité par les implémentations.
4.1.4 "jku" (JWK Set URL) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "jku" sont les mêmes que définies dans la section 4.1.2 de [JWS], sauf que la ressource JWK Set contient la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE.
4.1.5 "jwk" (JSON Web Key) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "jwk" sont les mêmes que définies dans la section 4.1.3 de [JWS], sauf que la clé est la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE.
4.1.6 "kid" (Key ID) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "kid" sont les mêmes que définies dans la section 4.1.4 de [JWS], sauf que l'indice de clé fait référence à la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE. Ce paramètre permet aux expéditeurs de signaler explicitement un changement de clé aux destinataires JWE.
4.1.7 "x5u" (X.509 URL) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "x5u" sont les mêmes que définies dans la section 4.1.5 de [JWS], sauf que le certificat de clé publique X.509 ou la chaîne de certificats [RFC5280] contient la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE.
4.1.8 "x5c" (X.509 Certificate Chain) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "x5c" sont les mêmes que définies dans la section 4.1.6 de [JWS], sauf que le certificat de clé publique X.509 ou la chaîne de certificats [RFC5280] contient la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE.
Voir l'annexe B de [JWS] pour un exemple de valeur "x5c".
4.1.9 "x5t" (X.509 Certificate SHA-1 Thumbprint) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "x5t" sont les mêmes que définies dans la section 4.1.7 de [JWS], sauf que le certificat référencé par l'empreinte contient la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE. Notez que les empreintes de certificat sont parfois également appelées empreintes digitales de certificat.
4.1.10 "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "x5t#S256" sont les mêmes que définies dans la section 4.1.8 de [JWS], sauf que le certificat référencé par l'empreinte contient la clé publique vers laquelle le JWE a été chiffré; cela peut être utilisé pour déterminer la clé privée nécessaire pour déchiffrer le JWE. Notez que les empreintes de certificat sont parfois également appelées empreintes digitales de certificat.
4.1.11 "typ" (Type) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "typ" sont les mêmes que définies dans la section 4.1.9 de [JWS], sauf que le type est celui de ce JWE complet.
4.1.12 "cty" (Content Type) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "cty" sont les mêmes que définies dans la section 4.1.10 de [JWS], sauf que le type est celui du contenu sécurisé (le texte en clair).
4.1.13 "crit" (Critical) Header Parameter
La signification, la syntaxe et les règles de traitement pour le paramètre d'en-tête "crit" sont les mêmes que définies dans la section 4.1.11 de [JWS], sauf que les paramètres d'en-tête pour un JWE sont référencés, plutôt que les paramètres d'en-tête pour un JWS.
4.2 Public Header Parameter Names (Noms de paramètres d'en-tête publics)
Des noms de paramètres d'en-tête supplémentaires peuvent être définis par ceux qui utilisent les JWE. Cependant, afin d'éviter les collisions, tout nouveau nom de paramètre d'en-tête doit soit être enregistré dans le registre IANA "JSON Web Signature and Encryption Header Parameters" établi par [JWS], soit être un nom public: une valeur qui contient un nom résistant aux collisions. Dans chaque cas, le définisseur du nom ou de la valeur doit prendre des précautions raisonnables pour s'assurer qu'il contrôle la partie de l'espace de noms qu'il utilise pour définir le nom du paramètre d'en-tête.
Les nouveaux paramètres d'en-tête doivent être introduits avec parcimonie, car ils peuvent entraîner des JWE non interopérables.
4.3 Private Header Parameter Names (Noms de paramètres d'en-tête privés)
Un producteur et un consommateur d'un JWE peuvent convenir d'utiliser des noms de paramètres d'en-tête qui sont des noms privés: des noms qui ne sont pas des noms de paramètres d'en-tête enregistrés (section 4.1) ou des noms de paramètres d'en-tête publics (section 4.2). Contrairement aux noms de paramètres d'en-tête publics, les noms de paramètres d'en-tête privés sont sujets à collision et doivent être utilisés avec prudence.