tech-invite   World Map     

IETF     RFCs     Groups     SIP     ABNFs    |    3GPP     Specs     Gloss.     Arch.     IMS     UICC    |    Misc.    |    search     info

RFC 7516

Proposed STD
Pages: 51
Top     in Index     Prev     Next
in Group Index     Prev in Group     Next in Group     Group: JOSE

JSON Web Encryption (JWE)

Part 1 of 3, p. 1 to 15
None       Next RFC Part

 


Top       ToC       Page 1 
Internet Engineering Task Force (IETF)                          M. Jones
Request for Comments: 7516                                     Microsoft
Category: Standards Track                                  J. Hildebrand
ISSN: 2070-1721                                                    Cisco
                                                                May 2015


                       JSON Web Encryption (JWE)

Abstract

   JSON Web Encryption (JWE) represents encrypted content using
   JSON-based data structures.  Cryptographic algorithms and identifiers
   for use with this specification are described in the separate JSON
   Web Algorithms (JWA) specification and IANA registries defined by
   that specification.  Related digital signature and Message
   Authentication Code (MAC) capabilities are described in the separate
   JSON Web Signature (JWS) specification.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 5741.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   http://www.rfc-editor.org/info/rfc7516.

Copyright Notice

   Copyright (c) 2015 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Top       Page 2 
Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
     1.1.  Notational Conventions  . . . . . . . . . . . . . . . . .   4
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   5
   3.  JSON Web Encryption (JWE) Overview  . . . . . . . . . . . . .   8
     3.1.  JWE Compact Serialization Overview  . . . . . . . . . . .   8
     3.2.  JWE JSON Serialization Overview . . . . . . . . . . . . .   9
     3.3.  Example JWE . . . . . . . . . . . . . . . . . . . . . . .  10
   4.  JOSE Header . . . . . . . . . . . . . . . . . . . . . . . . .  11
     4.1.  Registered Header Parameter Names . . . . . . . . . . . .  11
       4.1.1.  "alg" (Algorithm) Header Parameter  . . . . . . . . .  12
       4.1.2.  "enc" (Encryption Algorithm) Header Parameter . . . .  12
       4.1.3.  "zip" (Compression Algorithm) Header Parameter  . . .  12
       4.1.4.  "jku" (JWK Set URL) Header Parameter  . . . . . . . .  13
       4.1.5.  "jwk" (JSON Web Key) Header Parameter . . . . . . . .  13
       4.1.6.  "kid" (Key ID) Header Parameter . . . . . . . . . . .  13
       4.1.7.  "x5u" (X.509 URL) Header Parameter  . . . . . . . . .  13
       4.1.8.  "x5c" (X.509 Certificate Chain) Header Parameter  . .  13
       4.1.9.  "x5t" (X.509 Certificate SHA-1 Thumbprint) Header
               Parameter . . . . . . . . . . . . . . . . . . . . . .  14
       4.1.10. "x5t#S256" (X.509 Certificate SHA-256 Thumbprint)
               Header Parameter  . . . . . . . . . . . . . . . . . .  14
       4.1.11. "typ" (Type) Header Parameter . . . . . . . . . . . .  14
       4.1.12. "cty" (Content Type) Header Parameter . . . . . . . .  14
       4.1.13. "crit" (Critical) Header Parameter  . . . . . . . . .  14
     4.2.  Public Header Parameter Names . . . . . . . . . . . . . .  14
     4.3.  Private Header Parameter Names  . . . . . . . . . . . . .  15
   5.  Producing and Consuming JWEs  . . . . . . . . . . . . . . . .  15
     5.1.  Message Encryption  . . . . . . . . . . . . . . . . . . .  15
     5.2.  Message Decryption  . . . . . . . . . . . . . . . . . . .  17
     5.3.  String Comparison Rules . . . . . . . . . . . . . . . . .  20
   6.  Key Identification  . . . . . . . . . . . . . . . . . . . . .  20
   7.  Serializations  . . . . . . . . . . . . . . . . . . . . . . .  20
     7.1.  JWE Compact Serialization . . . . . . . . . . . . . . . .  20
     7.2.  JWE JSON Serialization  . . . . . . . . . . . . . . . . .  20
       7.2.1.  General JWE JSON Serialization Syntax . . . . . . . .  21
       7.2.2.  Flattened JWE JSON Serialization Syntax . . . . . . .  23
   8.  TLS Requirements  . . . . . . . . . . . . . . . . . . . . . .  24
   9.  Distinguishing between JWS and JWE Objects  . . . . . . . . .  24
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  25
     10.1.  JSON Web Signature and Encryption Header Parameters
            Registration . . . . . . . . . . . . . . . . . . . . . .  25
       10.1.1.  Registry Contents  . . . . . . . . . . . . . . . . .  25
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  27
     11.1.  Key Entropy and Random Values  . . . . . . . . . . . . .  27
     11.2.  Key Protection . . . . . . . . . . . . . . . . . . . . .  27
     11.3.  Using Matching Algorithm Strengths . . . . . . . . . . .  28

Top      ToC       Page 3 
     11.4.  Adaptive Chosen-Ciphertext Attacks . . . . . . . . . . .  28
     11.5.  Timing Attacks . . . . . . . . . . . . . . . . . . . . .  28
   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  29
     12.1.  Normative References . . . . . . . . . . . . . . . . . .  29
     12.2.  Informative References . . . . . . . . . . . . . . . . .  30
   Appendix A.  JWE Examples . . . . . . . . . . . . . . . . . . . .  32
     A.1.  Example JWE using RSAES-OAEP and AES GCM  . . . . . . . .  32
       A.1.1.  JOSE Header . . . . . . . . . . . . . . . . . . . . .  32
       A.1.2.  Content Encryption Key (CEK)  . . . . . . . . . . . .  32
       A.1.3.  Key Encryption  . . . . . . . . . . . . . . . . . . .  33
       A.1.4.  Initialization Vector . . . . . . . . . . . . . . . .  34
       A.1.5.  Additional Authenticated Data . . . . . . . . . . . .  35
       A.1.6.  Content Encryption  . . . . . . . . . . . . . . . . .  35
       A.1.7.  Complete Representation . . . . . . . . . . . . . . .  36
       A.1.8.  Validation  . . . . . . . . . . . . . . . . . . . . .  36
     A.2.  Example JWE using RSAES-PKCS1-v1_5 and
           AES_128_CBC_HMAC_SHA_256  . . . . . . . . . . . . . . . .  36
       A.2.1.  JOSE Header . . . . . . . . . . . . . . . . . . . . .  37
       A.2.2.  Content Encryption Key (CEK)  . . . . . . . . . . . .  37
       A.2.3.  Key Encryption  . . . . . . . . . . . . . . . . . . .  38
       A.2.4.  Initialization Vector . . . . . . . . . . . . . . . .  39
       A.2.5.  Additional Authenticated Data . . . . . . . . . . . .  40
       A.2.6.  Content Encryption  . . . . . . . . . . . . . . . . .  40
       A.2.7.  Complete Representation . . . . . . . . . . . . . . .  40
       A.2.8.  Validation  . . . . . . . . . . . . . . . . . . . . .  41
     A.3.  Example JWE Using AES Key Wrap and
           AES_128_CBC_HMAC_SHA_256  . . . . . . . . . . . . . . . .  41
       A.3.1.  JOSE Header . . . . . . . . . . . . . . . . . . . . .  41
       A.3.2.  Content Encryption Key (CEK)  . . . . . . . . . . . .  42
       A.3.3.  Key Encryption  . . . . . . . . . . . . . . . . . . .  42
       A.3.4.  Initialization Vector . . . . . . . . . . . . . . . .  42
       A.3.5.  Additional Authenticated Data . . . . . . . . . . . .  43
       A.3.6.  Content Encryption  . . . . . . . . . . . . . . . . .  43
       A.3.7.  Complete Representation . . . . . . . . . . . . . . .  43
       A.3.8.  Validation  . . . . . . . . . . . . . . . . . . . . .  44
     A.4.  Example JWE Using General JWE JSON Serialization  . . . .  44
       A.4.1.  JWE Per-Recipient Unprotected Headers . . . . . . . .  45
       A.4.2.  JWE Protected Header  . . . . . . . . . . . . . . . .  45
       A.4.3.  JWE Shared Unprotected Header . . . . . . . . . . . .  45
       A.4.4.  Complete JOSE Header Values . . . . . . . . . . . . .  45
       A.4.5.  Additional Authenticated Data . . . . . . . . . . . .  46
       A.4.6.  Content Encryption  . . . . . . . . . . . . . . . . .  46
       A.4.7.  Complete JWE JSON Serialization Representation  . . .  47
     A.5.  Example JWE Using Flattened JWE JSON Serialization  . . .  47
   Appendix B.  Example AES_128_CBC_HMAC_SHA_256 Computation . . . .  48
     B.1.  Extract MAC_KEY and ENC_KEY from Key  . . . . . . . . . .  48
     B.2.  Encrypt Plaintext to Create Ciphertext  . . . . . . . . .  49
     B.3.  64-Bit Big-Endian Representation of AAD Length  . . . . .  49

Top      ToC       Page 4 
     B.4.  Initialization Vector Value . . . . . . . . . . . . . . .  49
     B.5.  Create Input to HMAC Computation  . . . . . . . . . . . .  50
     B.6.  Compute HMAC Value  . . . . . . . . . . . . . . . . . . .  50
     B.7.  Truncate HMAC Value to Create Authentication Tag  . . . .  50
   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  50
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  51

1.  Introduction

   JSON Web Encryption (JWE) represents encrypted content using JSON-
   based data structures [RFC7159].  The JWE cryptographic mechanisms
   encrypt and provide integrity protection for an arbitrary sequence of
   octets.

   Two closely related serializations for JWEs are defined.  The JWE
   Compact Serialization is a compact, URL-safe representation intended
   for space constrained environments such as HTTP Authorization headers
   and URI query parameters.  The JWE JSON Serialization represents JWEs
   as JSON objects and enables the same content to be encrypted to
   multiple parties.  Both share the same cryptographic underpinnings.

   Cryptographic algorithms and identifiers for use with this
   specification are described in the separate JSON Web Algorithms (JWA)
   [JWA] specification and IANA registries defined by that
   specification.  Related digital signature and MAC capabilities are
   described in the separate JSON Web Signature (JWS) [JWS]
   specification.

   Names defined by this specification are short because a core goal is
   for the resulting representations to be compact.

1.1.  Notational Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   "Key words for use in RFCs to Indicate Requirement Levels" [RFC2119].
   The interpretation should only be applied when the terms appear in
   all capital letters.

   BASE64URL(OCTETS) denotes the base64url encoding of OCTETS, per
   Section 2 of [JWS].

   UTF8(STRING) denotes the octets of the UTF-8 [RFC3629] representation
   of STRING, where STRING is a sequence of zero or more Unicode
   [UNICODE] characters.

Top      ToC       Page 5 
   ASCII(STRING) denotes the octets of the ASCII [RFC20] representation
   of STRING, where STRING is a sequence of zero or more ASCII
   characters.

   The concatenation of two values A and B is denoted as A || B.

2.  Terminology

   The terms "JSON Web Signature (JWS)", "Base64url Encoding",
   "Collision-Resistant Name", "Header Parameter", "JOSE Header", and
   "StringOrURI" are defined by the JWS specification [JWS].

   The terms "Ciphertext", "Digital Signature", "Initialization Vector
   (IV)", "Message Authentication Code (MAC)", and "Plaintext" are
   defined by the "Internet Security Glossary, Version 2" [RFC4949].

   These terms are defined by this specification:

   JSON Web Encryption (JWE)
      A data structure representing an encrypted and integrity-protected
      message.

   Authenticated Encryption with Associated Data (AEAD)
      An AEAD algorithm is one that encrypts the plaintext, allows
      Additional Authenticated Data to be specified, and provides an
      integrated content integrity check over the ciphertext and
      Additional Authenticated Data.  AEAD algorithms accept two inputs,
      the plaintext and the Additional Authenticated Data value, and
      produce two outputs, the ciphertext and the Authentication Tag
      value.  AES Galois/Counter Mode (GCM) is one such algorithm.

   Additional Authenticated Data (AAD)
      An input to an AEAD operation that is integrity protected but not
      encrypted.

   Authentication Tag
      An output of an AEAD operation that ensures the integrity of the
      ciphertext and the Additional Authenticated Data.  Note that some
      algorithms may not use an Authentication Tag, in which case this
      value is the empty octet sequence.

   Content Encryption Key (CEK)
      A symmetric key for the AEAD algorithm used to encrypt the
      plaintext to produce the ciphertext and the Authentication Tag.

Top      ToC       Page 6 
   JWE Encrypted Key
      Encrypted Content Encryption Key value.  Note that for some
      algorithms, the JWE Encrypted Key value is specified as being the
      empty octet sequence.

   JWE Initialization Vector
      Initialization Vector value used when encrypting the plaintext.
      Note that some algorithms may not use an Initialization Vector, in
      which case this value is the empty octet sequence.

   JWE AAD
      Additional value to be integrity protected by the authenticated
      encryption operation.  This can only be present when using the JWE
      JSON Serialization.  (Note that this can also be achieved when
      using either the JWE Compact Serialization or the JWE JSON
      Serialization by including the AAD value as an integrity-protected
      Header Parameter value, but at the cost of the value being double
      base64url encoded.)

   JWE Ciphertext
      Ciphertext value resulting from authenticated encryption of the
      plaintext with Additional Authenticated Data.

   JWE Authentication Tag
      Authentication Tag value resulting from authenticated encryption
      of the plaintext with Additional Authenticated Data.

   JWE Protected Header
      JSON object that contains the Header Parameters that are integrity
      protected by the authenticated encryption operation.  These
      parameters apply to all recipients of the JWE.  For the JWE
      Compact Serialization, this comprises the entire JOSE Header.  For
      the JWE JSON Serialization, this is one component of the JOSE
      Header.

   JWE Shared Unprotected Header
      JSON object that contains the Header Parameters that apply to all
      recipients of the JWE that are not integrity protected.  This can
      only be present when using the JWE JSON Serialization.

   JWE Per-Recipient Unprotected Header
      JSON object that contains Header Parameters that apply to a single
      recipient of the JWE.  These Header Parameter values are not
      integrity protected.  This can only be present when using the JWE
      JSON Serialization.

   JWE Compact Serialization
      A representation of the JWE as a compact, URL-safe string.

Top      ToC       Page 7 
   JWE JSON Serialization
      A representation of the JWE as a JSON object.  The JWE JSON
      Serialization enables the same content to be encrypted to multiple
      parties.  This representation is neither optimized for compactness
      nor URL safe.

   Key Management Mode
      A method of determining the Content Encryption Key value to use.
      Each algorithm used for determining the CEK value uses a specific
      Key Management Mode.  Key Management Modes employed by this
      specification are Key Encryption, Key Wrapping, Direct Key
      Agreement, Key Agreement with Key Wrapping, and Direct Encryption.

   Key Encryption
      A Key Management Mode in which the CEK value is encrypted to the
      intended recipient using an asymmetric encryption algorithm.

   Key Wrapping
      A Key Management Mode in which the CEK value is encrypted to the
      intended recipient using a symmetric key wrapping algorithm.

   Direct Key Agreement
      A Key Management Mode in which a key agreement algorithm is used
      to agree upon the CEK value.

   Key Agreement with Key Wrapping
      A Key Management Mode in which a key agreement algorithm is used
      to agree upon a symmetric key used to encrypt the CEK value to the
      intended recipient using a symmetric key wrapping algorithm.

   Direct Encryption
      A Key Management Mode in which the CEK value used is the secret
      symmetric key value shared between the parties.

Top      ToC       Page 8 
3.  JSON Web Encryption (JWE) Overview

   JWE represents encrypted content using JSON data structures and
   base64url encoding.  These JSON data structures MAY contain
   whitespace and/or line breaks before or after any JSON values or
   structural characters, in accordance with Section 2 of RFC 7159
   [RFC7159].  A JWE represents these logical values (each of which is
   defined in Section 2):

   o  JOSE Header
   o  JWE Encrypted Key
   o  JWE Initialization Vector
   o  JWE AAD
   o  JWE Ciphertext
   o  JWE Authentication Tag

   For a JWE, the JOSE Header members are the union of the members of
   these values (each of which is defined in Section 2):

   o  JWE Protected Header
   o  JWE Shared Unprotected Header
   o  JWE Per-Recipient Unprotected Header

   JWE utilizes authenticated encryption to ensure the confidentiality
   and integrity of the plaintext and the integrity of the JWE Protected
   Header and the JWE AAD.

   This document defines two serializations for JWEs: a compact, URL-
   safe serialization called the JWE Compact Serialization and a JSON
   serialization called the JWE JSON Serialization.  In both
   serializations, the JWE Protected Header, JWE Encrypted Key, JWE
   Initialization Vector, JWE Ciphertext, and JWE Authentication Tag are
   base64url encoded, since JSON lacks a way to directly represent
   arbitrary octet sequences.  When present, the JWE AAD is also
   base64url encoded.

3.1.  JWE Compact Serialization Overview

   In the JWE Compact Serialization, no JWE Shared Unprotected Header or
   JWE Per-Recipient Unprotected Header are used.  In this case, the
   JOSE Header and the JWE Protected Header are the same.

Top      ToC       Page 9 
   In the JWE Compact Serialization, a JWE is represented as the
   concatenation:

      BASE64URL(UTF8(JWE Protected Header)) || '.' ||
      BASE64URL(JWE Encrypted Key) || '.' ||
      BASE64URL(JWE Initialization Vector) || '.' ||
      BASE64URL(JWE Ciphertext) || '.' ||
      BASE64URL(JWE Authentication Tag)

   See Section 7.1 for more information about the JWE Compact
   Serialization.

3.2.  JWE JSON Serialization Overview

   In the JWE JSON Serialization, one or more of the JWE Protected
   Header, JWE Shared Unprotected Header, and JWE Per-Recipient
   Unprotected Header MUST be present.  In this case, the members of the
   JOSE Header are the union of the members of the JWE Protected Header,
   JWE Shared Unprotected Header, and JWE Per-Recipient Unprotected
   Header values that are present.

   In the JWE JSON Serialization, a JWE is represented as a JSON object
   containing some or all of these eight members:

      "protected", with the value BASE64URL(UTF8(JWE Protected Header))
      "unprotected", with the value JWE Shared Unprotected Header
      "header", with the value JWE Per-Recipient Unprotected Header
      "encrypted_key", with the value BASE64URL(JWE Encrypted Key)
      "iv", with the value BASE64URL(JWE Initialization Vector)
      "ciphertext", with the value BASE64URL(JWE Ciphertext)
      "tag", with the value BASE64URL(JWE Authentication Tag)
      "aad", with the value BASE64URL(JWE AAD)

   The six base64url-encoded result strings and the two unprotected JSON
   object values are represented as members within a JSON object.  The
   inclusion of some of these values is OPTIONAL.  The JWE JSON
   Serialization can also encrypt the plaintext to multiple recipients.
   See Section 7.2 for more information about the JWE JSON
   Serialization.

Top      ToC       Page 10 
3.3.  Example JWE

   This example encrypts the plaintext "The true sign of intelligence is
   not knowledge but imagination." to the recipient.

   The following example JWE Protected Header declares that:

   o  The Content Encryption Key is encrypted to the recipient using the
      RSAES-OAEP [RFC3447] algorithm to produce the JWE Encrypted Key.

   o  Authenticated encryption is performed on the plaintext using the
      AES GCM [AES] [NIST.800-38D] algorithm with a 256-bit key to
      produce the ciphertext and the Authentication Tag.

     {"alg":"RSA-OAEP","enc":"A256GCM"}

   Encoding this JWE Protected Header as BASE64URL(UTF8(JWE Protected
   Header)) gives this value:

     eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ

   The remaining steps to finish creating this JWE are:

   o  Generate a random Content Encryption Key (CEK).

   o  Encrypt the CEK with the recipient's public key using the RSAES-
      OAEP algorithm to produce the JWE Encrypted Key.

   o  Base64url-encode the JWE Encrypted Key.

   o  Generate a random JWE Initialization Vector.

   o  Base64url-encode the JWE Initialization Vector.

   o  Let the Additional Authenticated Data encryption parameter be
      ASCII(BASE64URL(UTF8(JWE Protected Header))).

   o  Perform authenticated encryption on the plaintext with the AES GCM
      algorithm using the CEK as the encryption key, the JWE
      Initialization Vector, and the Additional Authenticated Data
      value, requesting a 128-bit Authentication Tag output.

   o  Base64url-encode the ciphertext.

   o  Base64url-encode the Authentication Tag.

Top      ToC       Page 11 
   o  Assemble the final representation: The Compact Serialization of
      this result is the string BASE64URL(UTF8(JWE Protected Header)) ||
      '.' || BASE64URL(JWE Encrypted Key) || '.' || BASE64URL(JWE
      Initialization Vector) || '.' || BASE64URL(JWE Ciphertext) || '.'
      || BASE64URL(JWE Authentication Tag).

   The final result in this example (with line breaks for display
   purposes only) is:

     eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.
     OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGe
     ipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDb
     Sv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaV
     mqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je8
     1860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi
     6UklfCpIMfIjf7iGdXKHzg.
     48V1_ALb6US04U3b.
     5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6ji
     SdiwkIr3ajwQzaBtQD_A.
     XFBoMYUZodetZdvTiFvSkQ

   See Appendix A.1 for the complete details of computing this JWE.  See
   Appendix A for additional examples, including examples using the JWE
   JSON Serialization in Sections A.4 and A.5.

4.  JOSE Header

   For a JWE, the members of the JSON object(s) representing the JOSE
   Header describe the encryption applied to the plaintext and
   optionally additional properties of the JWE.  The Header Parameter
   names within the JOSE Header MUST be unique, just as described in
   Section 4 of [JWS].  The rules about handling Header Parameters that
   are not understood by the implementation are also the same.  The
   classes of Header Parameter names are likewise the same.

4.1.  Registered Header Parameter Names

   The following Header Parameter names for use in JWEs are registered
   in the IANA "JSON Web Signature and Encryption Header Parameters"
   registry established by [JWS], with meanings as defined below.

   As indicated by the common registry, JWSs and JWEs share a common
   Header Parameter space; when a parameter is used by both
   specifications, its usage must be compatible between the
   specifications.

Top      ToC       Page 12 
4.1.1.  "alg" (Algorithm) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "alg" Header Parameter defined in Section 4.1.1 of [JWS], except
   that the Header Parameter identifies the cryptographic algorithm used
   to encrypt or determine the value of the CEK.  The encrypted content
   is not usable if the "alg" value does not represent a supported
   algorithm, or if the recipient does not have a key that can be used
   with that algorithm.

   A list of defined "alg" values for this use can be found in the IANA
   "JSON Web Signature and Encryption Algorithms" registry established
   by [JWA]; the initial contents of this registry are the values
   defined in Section 4.1 of [JWA].

4.1.2.  "enc" (Encryption Algorithm) Header Parameter

   The "enc" (encryption algorithm) Header Parameter identifies the
   content encryption algorithm used to perform authenticated encryption
   on the plaintext to produce the ciphertext and the Authentication
   Tag.  This algorithm MUST be an AEAD algorithm with a specified key
   length.  The encrypted content is not usable if the "enc" value does
   not represent a supported algorithm.  "enc" values should either be
   registered in the IANA "JSON Web Signature and Encryption Algorithms"
   registry established by [JWA] or be a value that contains a
   Collision-Resistant Name.  The "enc" value is a case-sensitive ASCII
   string containing a StringOrURI value.  This Header Parameter MUST be
   present and MUST be understood and processed by implementations.

   A list of defined "enc" values for this use can be found in the IANA
   "JSON Web Signature and Encryption Algorithms" registry established
   by [JWA]; the initial contents of this registry are the values
   defined in Section 5.1 of [JWA].

4.1.3.  "zip" (Compression Algorithm) Header Parameter

   The "zip" (compression algorithm) applied to the plaintext before
   encryption, if any.  The "zip" value defined by this specification
   is:

   o  "DEF" - Compression with the DEFLATE [RFC1951] algorithm

   Other values MAY be used.  Compression algorithm values can be
   registered in the IANA "JSON Web Encryption Compression Algorithms"
   registry established by [JWA].  The "zip" value is a case-sensitive
   string.  If no "zip" parameter is present, no compression is applied
   to the plaintext before encryption.  When used, this Header Parameter
   MUST be integrity protected; therefore, it MUST occur only within the

Top      ToC       Page 13 
   JWE Protected Header.  Use of this Header Parameter is OPTIONAL.
   This Header Parameter MUST be understood and processed by
   implementations.

4.1.4.  "jku" (JWK Set URL) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "jku" Header Parameter defined in Section 4.1.2 of [JWS], except
   that the JWK Set resource contains the public key to which the JWE
   was encrypted; this can be used to determine the private key needed
   to decrypt the JWE.

4.1.5.  "jwk" (JSON Web Key) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "jwk" Header Parameter defined in Section 4.1.3 of [JWS], except
   that the key is the public key to which the JWE was encrypted; this
   can be used to determine the private key needed to decrypt the JWE.

4.1.6.  "kid" (Key ID) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "kid" Header Parameter defined in Section 4.1.4 of [JWS], except
   that the key hint references the public key to which the JWE was
   encrypted; this can be used to determine the private key needed to
   decrypt the JWE.  This parameter allows originators to explicitly
   signal a change of key to JWE recipients.

4.1.7.  "x5u" (X.509 URL) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "x5u" Header Parameter defined in Section 4.1.5 of [JWS], except
   that the X.509 public key certificate or certificate chain [RFC5280]
   contains the public key to which the JWE was encrypted; this can be
   used to determine the private key needed to decrypt the JWE.

4.1.8.  "x5c" (X.509 Certificate Chain) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "x5c" Header Parameter defined in Section 4.1.6 of [JWS], except
   that the X.509 public key certificate or certificate chain [RFC5280]
   contains the public key to which the JWE was encrypted; this can be
   used to determine the private key needed to decrypt the JWE.

   See Appendix B of [JWS] for an example "x5c" value.

Top      ToC       Page 14 
4.1.9.  "x5t" (X.509 Certificate SHA-1 Thumbprint) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "x5t" Header Parameter defined in Section 4.1.7 of [JWS], except
   that the certificate referenced by the thumbprint contains the public
   key to which the JWE was encrypted; this can be used to determine the
   private key needed to decrypt the JWE.  Note that certificate
   thumbprints are also sometimes known as certificate fingerprints.

4.1.10.  "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Header
         Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "x5t#S256" Header Parameter defined in Section 4.1.8 of [JWS],
   except that the certificate referenced by the thumbprint contains the
   public key to which the JWE was encrypted; this can be used to
   determine the private key needed to decrypt the JWE.  Note that
   certificate thumbprints are also sometimes known as certificate
   fingerprints.

4.1.11.  "typ" (Type) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "typ" Header Parameter defined in Section 4.1.9 of [JWS], except
   that the type is that of this complete JWE.

4.1.12.  "cty" (Content Type) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "cty" Header Parameter defined in Section 4.1.10 of [JWS], except
   that the type is that of the secured content (the plaintext).

4.1.13.  "crit" (Critical) Header Parameter

   This parameter has the same meaning, syntax, and processing rules as
   the "crit" Header Parameter defined in Section 4.1.11 of [JWS],
   except that Header Parameters for a JWE are being referred to, rather
   than Header Parameters for a JWS.

4.2.  Public Header Parameter Names

   Additional Header Parameter names can be defined by those using JWEs.
   However, in order to prevent collisions, any new Header Parameter
   name should either be registered in the IANA "JSON Web Signature and
   Encryption Header Parameters" registry established by [JWS] or be a
   Public Name: a value that contains a Collision-Resistant Name.  In
   each case, the definer of the name or value needs to take reasonable

Top      ToC       Page 15 
   precautions to make sure they are in control of the part of the
   namespace they use to define the Header Parameter name.

   New Header Parameters should be introduced sparingly, as they can
   result in non-interoperable JWEs.

4.3.  Private Header Parameter Names

   A producer and consumer of a JWE may agree to use Header Parameter
   names that are Private Names: names that are not Registered Header
   Parameter names (Section 4.1) or Public Header Parameter names
   (Section 4.2).  Unlike Public Header Parameter names, Private Header
   Parameter names are subject to collision and should be used with
   caution.



(page 15 continued on part 2)

Next RFC Part