6724 lines
194 KiB
Plaintext
6724 lines
194 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force (IETF) M. Miller
|
|||
|
Request for Comments: 7520 Cisco Systems, Inc.
|
|||
|
Category: Informational May 2015
|
|||
|
ISSN: 2070-1721
|
|||
|
|
|||
|
|
|||
|
Examples of Protecting Content Using
|
|||
|
JSON Object Signing and Encryption (JOSE)
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
This document contains a set of examples using JSON Object Signing
|
|||
|
and Encryption (JOSE) technology to protect data. These examples
|
|||
|
present a representative sampling of JSON Web Key (JWK) objects as
|
|||
|
well as various JSON Web Signature (JWS) and JSON Web Encryption
|
|||
|
(JWE) results given similar inputs.
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This document is not an Internet Standards Track specification; it is
|
|||
|
published for informational purposes.
|
|||
|
|
|||
|
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). Not all documents
|
|||
|
approved by the IESG are a candidate for any level of Internet
|
|||
|
Standard; see 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/rfc7520.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 1]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
1. Introduction ....................................................5
|
|||
|
1.1. Conventions Used in This Document ..........................5
|
|||
|
2. Terminology .....................................................6
|
|||
|
3. JSON Web Key Examples ...........................................6
|
|||
|
3.1. EC Public Key ..............................................6
|
|||
|
3.2. EC Private Key .............................................7
|
|||
|
3.3. RSA Public Key .............................................8
|
|||
|
3.4. RSA Private Key ............................................8
|
|||
|
3.5. Symmetric Key (MAC Computation) ...........................10
|
|||
|
3.6. Symmetric Key (Encryption) ................................11
|
|||
|
4. JSON Web Signature Examples ....................................11
|
|||
|
4.1. RSA v1.5 Signature ........................................12
|
|||
|
4.1.1. Input Factors ......................................12
|
|||
|
4.1.2. Signing Operation ..................................12
|
|||
|
4.1.3. Output Results .....................................13
|
|||
|
4.2. RSA-PSS Signature .........................................15
|
|||
|
4.2.1. Input Factors ......................................15
|
|||
|
4.2.2. Signing Operation ..................................16
|
|||
|
4.2.3. Output Results .....................................17
|
|||
|
4.3. ECDSA Signature ...........................................19
|
|||
|
4.3.1. Input Factors ......................................19
|
|||
|
4.3.2. Signing Operation ..................................19
|
|||
|
4.3.3. Output Results .....................................20
|
|||
|
4.4. HMAC-SHA2 Integrity Protection ............................21
|
|||
|
4.4.1. Input Factors ......................................22
|
|||
|
4.4.2. Signing Operation ..................................22
|
|||
|
4.4.3. Output Results .....................................23
|
|||
|
4.5. Signature with Detached Content ...........................24
|
|||
|
4.5.1. Input Factors ......................................25
|
|||
|
4.5.2. Signing Operation ..................................25
|
|||
|
4.5.3. Output Results .....................................26
|
|||
|
4.6. Protecting Specific Header Fields .........................27
|
|||
|
4.6.1. Input Factors ......................................27
|
|||
|
4.6.2. Signing Operation ..................................27
|
|||
|
4.6.3. Output Results .....................................28
|
|||
|
4.7. Protecting Content Only ...................................29
|
|||
|
4.7.1. Input Factors ......................................30
|
|||
|
4.7.2. Signing Operation ..................................30
|
|||
|
4.7.3. Output Results .....................................31
|
|||
|
4.8. Multiple Signatures .......................................32
|
|||
|
4.8.1. Input Factors ......................................32
|
|||
|
4.8.2. First Signing Operation ............................33
|
|||
|
4.8.3. Second Signing Operation ...........................34
|
|||
|
4.8.4. Third Signing Operation ............................36
|
|||
|
4.8.5. Output Results .....................................37
|
|||
|
5. JSON Web Encryption Examples ...................................39
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 2]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.1. Key Encryption Using RSA v1.5 and AES-HMAC-SHA2 ...........39
|
|||
|
5.1.1. Input Factors ......................................39
|
|||
|
5.1.2. Generated Factors ..................................41
|
|||
|
5.1.3. Encrypting the Key .................................41
|
|||
|
5.1.4. Encrypting the Content .............................42
|
|||
|
5.1.5. Output Results .....................................43
|
|||
|
5.2. Key Encryption Using RSA-OAEP with AES-GCM ................45
|
|||
|
5.2.1. Input Factors ......................................46
|
|||
|
5.2.2. Generated Factors ..................................47
|
|||
|
5.2.3. Encrypting the Key .................................48
|
|||
|
5.2.4. Encrypting the Content .............................48
|
|||
|
5.2.5. Output Results .....................................49
|
|||
|
5.3. Key Wrap Using PBES2-AES-KeyWrap with AES-CBC-HMAC-SHA2 ...52
|
|||
|
5.3.1. Input Factors ......................................53
|
|||
|
5.3.2. Generated Factors ..................................54
|
|||
|
5.3.3. Encrypting the Key .................................54
|
|||
|
5.3.4. Encrypting the Content .............................55
|
|||
|
5.3.5. Output Results .....................................56
|
|||
|
5.4. Key Agreement with Key Wrapping Using ECDH-ES and
|
|||
|
AES-KeyWrap with AES-GCM ..................................59
|
|||
|
5.4.1. Input Factors ......................................59
|
|||
|
5.4.2. Generated Factors ..................................60
|
|||
|
5.4.3. Encrypting the Key .................................60
|
|||
|
5.4.4. Encrypting the Content .............................61
|
|||
|
5.4.5. Output Results .....................................63
|
|||
|
5.5. Key Agreement Using ECDH-ES with AES-CBC-HMAC-SHA2 ........65
|
|||
|
5.5.1. Input Factors ......................................66
|
|||
|
5.5.2. Generated Factors ..................................66
|
|||
|
5.5.3. Key Agreement ......................................67
|
|||
|
5.5.4. Encrypting the Content .............................67
|
|||
|
5.5.5. Output Results .....................................68
|
|||
|
5.6. Direct Encryption Using AES-GCM ...........................70
|
|||
|
5.6.1. Input Factors ......................................70
|
|||
|
5.6.2. Generated Factors ..................................70
|
|||
|
5.6.3. Encrypting the Content .............................71
|
|||
|
5.6.4. Output Results .....................................72
|
|||
|
5.7. Key Wrap Using AES-GCM KeyWrap with AES-CBC-HMAC-SHA2 .....73
|
|||
|
5.7.1. Input Factors ......................................73
|
|||
|
5.7.2. Generated Factors ..................................74
|
|||
|
5.7.3. Encrypting the Key .................................74
|
|||
|
5.7.4. Encrypting the Content .............................75
|
|||
|
5.7.5. Output Results .....................................77
|
|||
|
5.8. Key Wrap Using AES-KeyWrap with AES-GCM ...................79
|
|||
|
5.8.1. Input Factors ......................................79
|
|||
|
5.8.2. Generated Factors ..................................80
|
|||
|
5.8.3. Encrypting the Key .................................80
|
|||
|
5.8.4. Encrypting the Content .............................80
|
|||
|
5.8.5. Output Results .....................................82
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 3]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.9. Compressed Content ........................................84
|
|||
|
5.9.1. Input Factors ......................................84
|
|||
|
5.9.2. Generated Factors ..................................84
|
|||
|
5.9.3. Encrypting the Key .................................85
|
|||
|
5.9.4. Encrypting the Content .............................85
|
|||
|
5.9.5. Output Results .....................................86
|
|||
|
5.10. Including Additional Authenticated Data ..................88
|
|||
|
5.10.1. Input Factors .....................................88
|
|||
|
5.10.2. Generated Factors .................................89
|
|||
|
5.10.3. Encrypting the Key ................................90
|
|||
|
5.10.4. Encrypting the Content ............................90
|
|||
|
5.10.5. Output Results ....................................91
|
|||
|
5.11. Protecting Specific Header Fields ........................93
|
|||
|
5.11.1. Input Factors .....................................93
|
|||
|
5.11.2. Generated Factors .................................94
|
|||
|
5.11.3. Encrypting the Key ................................94
|
|||
|
5.11.4. Encrypting the Content ............................94
|
|||
|
5.11.5. Output Results ....................................95
|
|||
|
5.12. Protecting Content Only ..................................97
|
|||
|
5.12.1. Input Factors .....................................97
|
|||
|
5.12.2. Generated Factors .................................98
|
|||
|
5.12.3. Encrypting the Key ................................98
|
|||
|
5.12.4. Encrypting the Content ............................98
|
|||
|
5.12.5. Output Results ....................................99
|
|||
|
5.13. Encrypting to Multiple Recipients .......................101
|
|||
|
5.13.1. Input Factors ....................................101
|
|||
|
5.13.2. Generated Factors ................................101
|
|||
|
5.13.3. Encrypting the Key to the First Recipient ........102
|
|||
|
5.13.4. Encrypting the Key to the Second Recipient .......103
|
|||
|
5.13.5. Encrypting the Key to the Third Recipient ........105
|
|||
|
5.13.6. Encrypting the Content ...........................106
|
|||
|
5.13.7. Output Results ...................................108
|
|||
|
6. Nesting Signatures and Encryption .............................110
|
|||
|
6.1. Signing Input Factors ....................................110
|
|||
|
6.2. Signing Operation ........................................112
|
|||
|
6.3. Signing Output ...........................................112
|
|||
|
6.4. Encryption Input Factors .................................113
|
|||
|
6.5. Encryption Generated Factors .............................113
|
|||
|
6.6. Encrypting the Key .......................................114
|
|||
|
6.7. Encrypting the Content ...................................114
|
|||
|
6.8. Encryption Output ........................................115
|
|||
|
7. Security Considerations .......................................119
|
|||
|
8. References ....................................................119
|
|||
|
8.1. Normative References .....................................119
|
|||
|
8.2. Informative References ...................................120
|
|||
|
Acknowledgements .................................................120
|
|||
|
Author's Address .................................................120
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 4]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
The JSON Object Signing and Encryption (JOSE) technologies -- JSON
|
|||
|
Web Signature [JWS], JSON Web Encryption [JWE], JSON Web Key [JWK],
|
|||
|
and JSON Web Algorithms [JWA] -- can be used collectively to encrypt
|
|||
|
and/or sign content using a variety of algorithms. While the full
|
|||
|
set of permutations is extremely large, and might be daunting to
|
|||
|
some, it is expected that most applications will only use a small set
|
|||
|
of algorithms to meet their needs.
|
|||
|
|
|||
|
This document provides a number of examples of signing or encrypting
|
|||
|
content using JOSE. While not exhaustive, it does compile a
|
|||
|
representative sampling of JOSE features. As much as possible, the
|
|||
|
same signature payload or encryption plaintext content is used to
|
|||
|
illustrate differences in various signing and encryption results.
|
|||
|
|
|||
|
This document also provides a number of example JWK objects. These
|
|||
|
examples illustrate the distinguishing properties of various key
|
|||
|
types and emphasize important characteristics. Most of the JWK
|
|||
|
examples are then used in the signature or encryption examples that
|
|||
|
follow.
|
|||
|
|
|||
|
All of the examples contained herein are available in a machine-
|
|||
|
readable format at <https://github.com/ietf-jose/cookbook>.
|
|||
|
|
|||
|
1.1. Conventions Used in This Document
|
|||
|
|
|||
|
This document separates data that are expected to be input to an
|
|||
|
implementation of JOSE from data that are expected to be generated by
|
|||
|
an implementation of JOSE. Each example, wherever possible, provides
|
|||
|
enough information both to replicate the results of this document and
|
|||
|
to validate the results by running its inverse operation (e.g.,
|
|||
|
signature results can be validated by performing the JWS verify).
|
|||
|
However, some algorithms inherently use random data; therefore,
|
|||
|
computations employing them cannot be exactly replicated. Such cases
|
|||
|
are explicitly stated in the relevant sections.
|
|||
|
|
|||
|
All instances of binary octet strings are represented using base64url
|
|||
|
[RFC4648] encoding.
|
|||
|
|
|||
|
Wherever possible and unless otherwise noted, the examples include
|
|||
|
the JWS or JWE Compact Serialization, general JWS or JWE JSON
|
|||
|
Serialization, and flattened JWS or JWE JSON Serialization.
|
|||
|
|
|||
|
All of the examples in this document have whitespace added to improve
|
|||
|
formatting and readability. Except for JWE Plaintext or JWS Payload
|
|||
|
content, whitespace is not part of the cryptographic operations nor
|
|||
|
the exchange results.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 5]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Unless otherwise noted, the JWE Plaintext or JWS Payload content does
|
|||
|
include " " (U+0020 SPACE) characters. Line breaks (U+000A LINE
|
|||
|
FEED) replace some " " (U+0020 SPACE) characters to improve
|
|||
|
readability but are not present in the JWE Plaintext or JWS Payload.
|
|||
|
|
|||
|
2. Terminology
|
|||
|
|
|||
|
This document inherits terminology regarding JSON Web Signature (JWS)
|
|||
|
technology from [JWS], terminology regarding JSON Web Encryption
|
|||
|
(JWE) technology from [JWE], terminology regarding JSON Web Key (JWK)
|
|||
|
technology from [JWK], and terminology regarding algorithms from
|
|||
|
[JWA].
|
|||
|
|
|||
|
3. JSON Web Key Examples
|
|||
|
|
|||
|
The following sections demonstrate how to represent various JWK and
|
|||
|
JWK Set objects.
|
|||
|
|
|||
|
3.1. EC Public Key
|
|||
|
|
|||
|
This example illustrates an Elliptic Curve (EC) public key. This
|
|||
|
example is the public key corresponding to the private key in
|
|||
|
Figure 2.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example",
|
|||
|
"use": "sig",
|
|||
|
"crv": "P-521",
|
|||
|
"x": "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9
|
|||
|
A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt",
|
|||
|
"y": "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVy
|
|||
|
SsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1"
|
|||
|
}
|
|||
|
|
|||
|
Figure 1: Elliptic Curve P-521 Public Key
|
|||
|
|
|||
|
The field "kty" value of "EC" identifies this as an Elliptic Curve
|
|||
|
key. The field "crv" identifies the curve, which is curve P-521 for
|
|||
|
this example. The values of the fields "x" and "y" are the
|
|||
|
base64url-encoded X and Y coordinates (respectively).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 6]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The values of the fields "x" and "y" decoded are the octets necessary
|
|||
|
to represent each full coordinate to the order of the curve. For a
|
|||
|
key over curve P-521, the values of the fields "x" and "y" are
|
|||
|
exactly 66 octets in length when decoded, padded with leading zero
|
|||
|
(0x00) octets to reach the expected length.
|
|||
|
|
|||
|
3.2. EC Private Key
|
|||
|
|
|||
|
This example illustrates an Elliptic Curve private key. This example
|
|||
|
is the private key corresponding to the public key in Figure 1.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example",
|
|||
|
"use": "sig",
|
|||
|
"crv": "P-521",
|
|||
|
"x": "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9
|
|||
|
A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt",
|
|||
|
"y": "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVy
|
|||
|
SsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1",
|
|||
|
"d": "AAhRON2r9cqXX1hg-RoI6R1tX5p2rUAYdmpHZoC1XNM56KtscrX6zb
|
|||
|
KipQrCW9CGZH3T4ubpnoTKLDYJ_fF3_rJt"
|
|||
|
}
|
|||
|
|
|||
|
Figure 2: Elliptic Curve P-521 Private Key
|
|||
|
|
|||
|
The field "kty" value of "EC" identifies this as an Elliptic Curve
|
|||
|
key. The field "crv" identifies the curve, which is curve P-521
|
|||
|
(also known as SECG curve secp521r1) for this example. The values of
|
|||
|
the fields "x" and "y" are the base64url-encoded X and Y coordinates
|
|||
|
(respectively). The field "d" value is the base64url-encoded private
|
|||
|
key.
|
|||
|
|
|||
|
The values of the fields "d", "x", and "y" decoded are the octets
|
|||
|
necessary to represent the private key or each full coordinate
|
|||
|
(respectively) to the order of the curve. For a key over curve
|
|||
|
P-521, the values of the "d", "x", and "y" fields are each exactly 66
|
|||
|
octets in length when decoded, padded with leading zero (0x00) octets
|
|||
|
to reach the expected length.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 7]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
3.3. RSA Public Key
|
|||
|
|
|||
|
This example illustrates an RSA public key. This example is the
|
|||
|
public key corresponding to the private key in Figure 4.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "RSA",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example",
|
|||
|
"use": "sig",
|
|||
|
"n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT
|
|||
|
-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqV
|
|||
|
wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-
|
|||
|
oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde
|
|||
|
3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC
|
|||
|
LqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5g
|
|||
|
HdrNP5zw",
|
|||
|
"e": "AQAB"
|
|||
|
}
|
|||
|
|
|||
|
Figure 3: RSA 2048-Bit Public Key
|
|||
|
|
|||
|
The field "kty" value of "RSA" identifies this as an RSA key. The
|
|||
|
fields "n" and "e" values are the modulus and (public) exponent
|
|||
|
(respectively) using the minimum octets necessary.
|
|||
|
|
|||
|
For a 2048-bit key, the field "n" value is 256 octets in length when
|
|||
|
decoded.
|
|||
|
|
|||
|
3.4. RSA Private Key
|
|||
|
|
|||
|
This example illustrates an RSA private key. This example is the
|
|||
|
private key corresponding to the public key in Figure 3.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 8]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
"kty": "RSA",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example",
|
|||
|
"use": "sig",
|
|||
|
"n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT
|
|||
|
-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqV
|
|||
|
wGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-
|
|||
|
oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde
|
|||
|
3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuC
|
|||
|
LqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5g
|
|||
|
HdrNP5zw",
|
|||
|
"e": "AQAB",
|
|||
|
"d": "bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78e
|
|||
|
iZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRld
|
|||
|
Y7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-b
|
|||
|
MwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU
|
|||
|
6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDj
|
|||
|
d18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOc
|
|||
|
OpBrQzwQ",
|
|||
|
"p": "3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nR
|
|||
|
aO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmG
|
|||
|
peNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8
|
|||
|
bUq0k",
|
|||
|
"q": "uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT
|
|||
|
8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7an
|
|||
|
V5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0
|
|||
|
s7pFc",
|
|||
|
"dp": "B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q
|
|||
|
1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn
|
|||
|
-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX
|
|||
|
59ehik",
|
|||
|
"dq": "CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pEr
|
|||
|
AMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJK
|
|||
|
bi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdK
|
|||
|
T1cYF8",
|
|||
|
"qi": "3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-N
|
|||
|
ZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDh
|
|||
|
jJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpP
|
|||
|
z8aaI4"
|
|||
|
}
|
|||
|
|
|||
|
Figure 4: RSA 2048-Bit Private Key
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 9]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The field "kty" value of "RSA" identifies this as an RSA key. The
|
|||
|
fields "n" and "e" values are the base64url-encoded modulus and
|
|||
|
(public) exponent (respectively) using the minimum number of octets
|
|||
|
necessary. The field "d" value is the base64url-encoded private
|
|||
|
exponent using the minimum number of octets necessary. The fields
|
|||
|
"p", "q", "dp", "dq", and "qi" are the base64url-encoded additional
|
|||
|
private information using the minimum number of octets necessary.
|
|||
|
|
|||
|
For a 2048-bit key, the field "n" is 256 octets in length when
|
|||
|
decoded, and the field "d" is not longer than 256 octets in length
|
|||
|
when decoded.
|
|||
|
|
|||
|
3.5. Symmetric Key (MAC Computation)
|
|||
|
|
|||
|
This example illustrates a symmetric key used for computing Message
|
|||
|
Authentication Codes (MACs).
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037",
|
|||
|
"use": "sig",
|
|||
|
"alg": "HS256",
|
|||
|
"k": "hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 5: HMAC SHA-256 Symmetric Key
|
|||
|
|
|||
|
The field "kty" value of "oct" identifies this as a symmetric key.
|
|||
|
The field "k" value is the symmetric key.
|
|||
|
|
|||
|
When used for the signing algorithm "HS256" (HMAC-SHA256), the field
|
|||
|
"k" value is 32 octets (or more) in length when decoded, padded with
|
|||
|
leading zero (0x00) octets to reach the minimum expected length.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 10]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
3.6. Symmetric Key (Encryption)
|
|||
|
|
|||
|
This example illustrates a symmetric key used for encryption.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "1e571774-2e08-40da-8308-e8d68773842d",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A256GCM",
|
|||
|
"k": "AAPapAv4LbFbiVawEjagUBluYqN5rhna-8nuldDvOx8"
|
|||
|
}
|
|||
|
|
|||
|
Figure 6: AES 256-Bit Symmetric Encryption Key
|
|||
|
|
|||
|
The field "kty" value of "oct" identifies this as a symmetric key.
|
|||
|
The field "k" value is the symmetric key.
|
|||
|
|
|||
|
For the content encryption algorithm "A256GCM", the field "k" value
|
|||
|
is exactly 32 octets in length when decoded, padded with leading zero
|
|||
|
(0x00) octets to reach the expected length.
|
|||
|
|
|||
|
4. JSON Web Signature Examples
|
|||
|
|
|||
|
The following sections demonstrate how to generate various JWS
|
|||
|
objects.
|
|||
|
|
|||
|
All of the signature examples use the following payload content (an
|
|||
|
abridged quote from "The Fellowship of the Ring" [LOTR-FELLOWSHIP]),
|
|||
|
serialized as UTF-8. The payload is presented here as a series of
|
|||
|
quoted strings that are concatenated to produce the JWS Payload. The
|
|||
|
sequence "\xe2\x80\x99" is substituted for (U+2019 RIGHT SINGLE
|
|||
|
QUOTATION MARK), and quotation marks (U+0022 QUOTATION MARK) are
|
|||
|
added for readability but are not present in the JWS Payload.
|
|||
|
|
|||
|
"It\xe2\x80\x99s a dangerous business, Frodo, going out your "
|
|||
|
"door. You step onto the road, and if you don't keep your feet, "
|
|||
|
"there\xe2\x80\x99s no knowing where you might be swept off "
|
|||
|
"to."
|
|||
|
|
|||
|
Figure 7: Payload Content Plaintext
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 11]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The payload -- with the sequence "\xe2\x80\x99" replaced with (U+2019
|
|||
|
RIGHT SINGLE QUOTATION MARK) and quotations marks (U+0022 QUOTATION
|
|||
|
MARK) are removed -- is encoded as UTF-8 and then as base64url
|
|||
|
[RFC4648]:
|
|||
|
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 8: Payload Content, base64url-encoded
|
|||
|
|
|||
|
4.1. RSA v1.5 Signature
|
|||
|
|
|||
|
This example illustrates signing content using the "RS256" (RSASSA-
|
|||
|
PKCS1-v1_5 with SHA-256) algorithm.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
4.1.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o RSA private key; this example uses the key from Figure 4.
|
|||
|
|
|||
|
o "alg" parameter of "RS256".
|
|||
|
|
|||
|
4.1.2. Signing Operation
|
|||
|
|
|||
|
The following is generated to complete the signing operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 9,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 10.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "RS256",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
|
|||
|
Figure 9: JWS Protected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 12]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
|
|||
|
Figure 10: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
The JWS Protected Header (Figure 10) and JWS Payload (Figure 8) are
|
|||
|
combined as described in Section 5.1 of [JWS] to produce the JWS
|
|||
|
Signing Input (Figure 11).
|
|||
|
|
|||
|
eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 11: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 11) produces the JWS Signature (Figure 12).
|
|||
|
|
|||
|
MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK
|
|||
|
ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J
|
|||
|
IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w
|
|||
|
W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP
|
|||
|
xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f
|
|||
|
cIe8u9ipH84ogoree7vjbU5y18kDquDg
|
|||
|
|
|||
|
Figure 12: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
4.1.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 9)
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature (Figure 12)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 13]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the JWS Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
.
|
|||
|
MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK
|
|||
|
ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J
|
|||
|
IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w
|
|||
|
W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP
|
|||
|
xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f
|
|||
|
cIe8u9ipH84ogoree7vjbU5y18kDquDg
|
|||
|
|
|||
|
Figure 13: JWS Compact Serialization
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2
|
|||
|
dpbnNAaG9iYml0b24uZXhhbXBsZSJ9",
|
|||
|
"signature": "MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHo
|
|||
|
xnW2e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII
|
|||
|
7PNDi84wnB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0Rnlt
|
|||
|
uYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPo
|
|||
|
cSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxU
|
|||
|
Ahb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJush
|
|||
|
Z41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 14: General JWS JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 14]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"protected": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbn
|
|||
|
NAaG9iYml0b24uZXhhbXBsZSJ9",
|
|||
|
"signature": "MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2
|
|||
|
e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84w
|
|||
|
nB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0RnltuYv746iYTh_q
|
|||
|
HRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9U
|
|||
|
zpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0
|
|||
|
KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogore
|
|||
|
e7vjbU5y18kDquDg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 15: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
4.2. RSA-PSS Signature
|
|||
|
|
|||
|
This example illustrates signing content using the "PS384" (RSASSA-
|
|||
|
PSS with SHA-384) algorithm.
|
|||
|
|
|||
|
Note that RSASSA-PSS uses random data to generate the signature; it
|
|||
|
might not be possible to exactly replicate the results in this
|
|||
|
section.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
4.2.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o RSA private key; this example uses the key from Figure 4.
|
|||
|
|
|||
|
o "alg" parameter of "PS384".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 15]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.2.2. Signing Operation
|
|||
|
|
|||
|
The following is generated to complete the signing operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 16,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 17.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "PS384",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
|
|||
|
Figure 16: JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
|
|||
|
Figure 17: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
The JWS Protected Header (Figure 17) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 18).
|
|||
|
|
|||
|
eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 18: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 18) produces the JWS Signature (Figure 19).
|
|||
|
|
|||
|
cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2I
|
|||
|
pN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXU
|
|||
|
vdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRX
|
|||
|
e8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT
|
|||
|
0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a
|
|||
|
6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw
|
|||
|
|
|||
|
Figure 19: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 16]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.2.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 17)
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature (Figure 19)
|
|||
|
|
|||
|
The resulting JWS object using the JWS Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
.
|
|||
|
cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2I
|
|||
|
pN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXU
|
|||
|
vdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRX
|
|||
|
e8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT
|
|||
|
0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a
|
|||
|
6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw
|
|||
|
|
|||
|
Figure 20: JWS Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 17]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2
|
|||
|
dpbnNAaG9iYml0b24uZXhhbXBsZSJ9",
|
|||
|
"signature": "cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy
|
|||
|
42miAh2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5
|
|||
|
dDDItllVo6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz2
|
|||
|
8zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vd
|
|||
|
z0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0q
|
|||
|
I0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uT
|
|||
|
OcbH510a6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 21: General JWS JSON Serialization
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"protected": "eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbn
|
|||
|
NAaG9iYml0b24uZXhhbXBsZSJ9",
|
|||
|
"signature": "cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42mi
|
|||
|
Ah2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllV
|
|||
|
o6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf
|
|||
|
8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vdz0TTrxUeT3lm8d9s
|
|||
|
hnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0qI0n6uiP1aCN_2_jLAeQT
|
|||
|
lqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a6GYmJUAfmWjwZ6oD
|
|||
|
4ifKo8DYM-X72Eaw"
|
|||
|
}
|
|||
|
|
|||
|
Figure 22: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 18]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.3. ECDSA Signature
|
|||
|
|
|||
|
This example illustrates signing content using the "ES512" (Elliptic
|
|||
|
Curve Digital Signature Algorithm (ECDSA) with curve P-521 and SHA-
|
|||
|
512) algorithm.
|
|||
|
|
|||
|
Note that ECDSA uses random data to generate the signature; it might
|
|||
|
not be possible to exactly replicate the results in this section.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
4.3.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o EC private key on the curve P-521; this example uses the key from
|
|||
|
Figure 2.
|
|||
|
|
|||
|
o "alg" parameter of "ES512".
|
|||
|
|
|||
|
4.3.2. Signing Operation
|
|||
|
|
|||
|
The following is generated before beginning the signature process:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 23,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 24.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "ES512",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
|
|||
|
Figure 23: JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
|
|||
|
Figure 24: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 19]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The JWS Protected Header (Figure 24) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 25).
|
|||
|
|
|||
|
eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 25: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 25) produces the JWS Signature (Figure 26).
|
|||
|
|
|||
|
AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb
|
|||
|
u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv
|
|||
|
AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2
|
|||
|
|
|||
|
Figure 26: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
4.3.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 24)
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature (Figure 26)
|
|||
|
|
|||
|
The resulting JWS object using the JWS Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZX
|
|||
|
hhbXBsZSJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
.
|
|||
|
AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvb
|
|||
|
u9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kv
|
|||
|
AD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2
|
|||
|
|
|||
|
Figure 27: JWS Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 20]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2
|
|||
|
dpbnNAaG9iYml0b24uZXhhbXBsZSJ9",
|
|||
|
"signature": "AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNl
|
|||
|
aAjP2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mt
|
|||
|
PBu_u_sDDyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBp
|
|||
|
HABlsbEPX6sFY8OcGDqoRuBomu9xQ2"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 28: General JWS JSON Serialization
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"protected": "eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbn
|
|||
|
NAaG9iYml0b24uZXhhbXBsZSJ9",
|
|||
|
"signature": "AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP
|
|||
|
2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sD
|
|||
|
DyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sF
|
|||
|
Y8OcGDqoRuBomu9xQ2"
|
|||
|
}
|
|||
|
|
|||
|
Figure 29: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
4.4. HMAC-SHA2 Integrity Protection
|
|||
|
|
|||
|
This example illustrates integrity protecting content using the
|
|||
|
"HS256" (HMAC-SHA-256) algorithm.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 21]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.4.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o HMAC symmetric key; this example uses the key from Figure 5.
|
|||
|
|
|||
|
o "alg" parameter of "HS256".
|
|||
|
|
|||
|
4.4.2. Signing Operation
|
|||
|
|
|||
|
The following is generated before completing the signing operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 30,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 31.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "HS256",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
}
|
|||
|
|
|||
|
Figure 30: JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
|
|||
|
Figure 31: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
The JWS Protected Header (Figure 31) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 32).
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 32: JWS Signing Input
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 22]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 32) produces the JWS Signature (Figure 33).
|
|||
|
|
|||
|
s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0
|
|||
|
|
|||
|
Figure 33: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
4.4.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 31)
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature (Figure 33)
|
|||
|
|
|||
|
The resulting JWS object using the JWS Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
.
|
|||
|
s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0
|
|||
|
|
|||
|
Figure 34: JWS Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 23]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LT
|
|||
|
RkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
|
|||
|
"signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
|
|||
|
0"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 35: General JWS JSON Serialization
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOW
|
|||
|
ItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
|
|||
|
"signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"
|
|||
|
}
|
|||
|
|
|||
|
Figure 36: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
4.5. Signature with Detached Content
|
|||
|
|
|||
|
This example illustrates a signature with detached content. This
|
|||
|
example is identical to other examples in Section 4, except the
|
|||
|
resulting JWS objects do not include the JWS Payload field. Instead,
|
|||
|
the application is expected to locate it elsewhere. For example, the
|
|||
|
signature might be in a metadata section, with the payload being the
|
|||
|
content.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 24]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.5.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o Signing key; this example uses the AES symmetric key from
|
|||
|
Figure 5.
|
|||
|
|
|||
|
o Signing algorithm; this example uses "HS256".
|
|||
|
|
|||
|
4.5.2. Signing Operation
|
|||
|
|
|||
|
The following is generated before completing the signing operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 37,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 38.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "HS256",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
}
|
|||
|
|
|||
|
Figure 37: JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
|
|||
|
Figure 38: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
The JWS Protected Header (Figure 38) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 39).
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 39: JWS Signing Input
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 25]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 39) produces the JWS Signature (Figure 40).
|
|||
|
|
|||
|
s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0
|
|||
|
|
|||
|
Figure 40: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
4.5.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 38)
|
|||
|
|
|||
|
o Signature (Figure 40)
|
|||
|
|
|||
|
The resulting JWS object using the JWS Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
.
|
|||
|
.
|
|||
|
s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0
|
|||
|
|
|||
|
Figure 41: General JWS JSON Serialization
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LT
|
|||
|
RkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
|
|||
|
"signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
|
|||
|
0"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 42: General JWS JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 26]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOW
|
|||
|
ItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
|
|||
|
"signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"
|
|||
|
}
|
|||
|
|
|||
|
Figure 43: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
4.6. Protecting Specific Header Fields
|
|||
|
|
|||
|
This example illustrates a signature where only certain Header
|
|||
|
Parameters are protected. Since this example contains both
|
|||
|
unprotected and protected Header Parameters, only the general JWS
|
|||
|
JSON Serialization and flattened JWS JSON Serialization are possible.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
4.6.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o Signing key; this example uses the AES symmetric key from
|
|||
|
Figure 5.
|
|||
|
|
|||
|
o Signing algorithm; this example uses "HS256".
|
|||
|
|
|||
|
4.6.2. Signing Operation
|
|||
|
|
|||
|
The following are generated before completing the signing operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 44,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 45.
|
|||
|
|
|||
|
o JWS Unprotected Header; this example uses the header from
|
|||
|
Figure 46.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "HS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 44: JWS Protected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 27]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiJ9
|
|||
|
|
|||
|
Figure 45: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
{
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
}
|
|||
|
|
|||
|
Figure 46: JWS Unprotected Header JSON
|
|||
|
|
|||
|
The JWS Protected Header (Figure 45) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 47).
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 47: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 47) produces the JWS Signature (Figure 48).
|
|||
|
|
|||
|
bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr20
|
|||
|
|
|||
|
Figure 48: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
4.6.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 45)
|
|||
|
|
|||
|
o JWS Unprotected Header (Figure 46)
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature (Figure 48)
|
|||
|
|
|||
|
The JWS Compact Serialization is not presented because it does not
|
|||
|
support this use case.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 28]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiJ9",
|
|||
|
"header": {
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
},
|
|||
|
"signature": "bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr2
|
|||
|
0"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 49: General JWS JSON Serialization
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiJ9",
|
|||
|
"header": {
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
},
|
|||
|
"signature": "bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr20"
|
|||
|
}
|
|||
|
|
|||
|
Figure 50: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
4.7. Protecting Content Only
|
|||
|
|
|||
|
This example illustrates a signature where none of the Header
|
|||
|
Parameters are protected. Since this example contains only
|
|||
|
unprotected Header Parameters, only the general JWS JSON
|
|||
|
Serialization and flattened JWS JSON Serialization are possible.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 29]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.7.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o Signing key; this example uses the AES symmetric key from
|
|||
|
Figure 5.
|
|||
|
|
|||
|
o Signing algorithm; this example uses "HS256".
|
|||
|
|
|||
|
4.7.2. Signing Operation
|
|||
|
|
|||
|
The following is generated before completing the signing operation:
|
|||
|
|
|||
|
o JWS Unprotected Header; this example uses the header from
|
|||
|
Figure 51.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "HS256",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
}
|
|||
|
|
|||
|
Figure 51: JWS Unprotected Header JSON
|
|||
|
|
|||
|
The empty string (as there is no JWS Protected Header) and JWS
|
|||
|
Payload (Figure 8) are combined as described in [JWS] to produce the
|
|||
|
JWS Signing Input (Figure 52).
|
|||
|
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 52: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 52) produces the JWS Signature (Figure 53).
|
|||
|
|
|||
|
xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZuk
|
|||
|
|
|||
|
Figure 53: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 30]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.7.3. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Unprotected Header (Figure 51)
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature (Figure 53)
|
|||
|
|
|||
|
The JWS Compact Serialization is not presented because it does not
|
|||
|
support this use case.
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"header": {
|
|||
|
"alg": "HS256",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
},
|
|||
|
"signature": "xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZu
|
|||
|
k"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 54: General JWS JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 31]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the flattened JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"header": {
|
|||
|
"alg": "HS256",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
},
|
|||
|
"signature": "xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZuk"
|
|||
|
}
|
|||
|
|
|||
|
Figure 55: Flattened JWS JSON Serialization
|
|||
|
|
|||
|
4.8. Multiple Signatures
|
|||
|
|
|||
|
This example illustrates multiple signatures applied to the same
|
|||
|
payload. Since this example contains more than one signature, only
|
|||
|
the JSON General Serialization is possible.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
4.8.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the content from Figure 7,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 8.
|
|||
|
|
|||
|
o Signing keys; this example uses the following:
|
|||
|
|
|||
|
* RSA private key from Figure 4 for the first signature
|
|||
|
|
|||
|
* EC private key from Figure 2 for the second signature
|
|||
|
|
|||
|
* AES symmetric key from Figure 5 for the third signature
|
|||
|
|
|||
|
o Signing algorithms; this example uses the following:
|
|||
|
|
|||
|
* "RS256" for the first signature
|
|||
|
|
|||
|
* "ES512" for the second signature
|
|||
|
|
|||
|
* "HS256" for the third signature
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 32]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.8.2. First Signing Operation
|
|||
|
|
|||
|
The following are generated before completing the first signing
|
|||
|
operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 56,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 57.
|
|||
|
|
|||
|
o JWS Unprotected Header; this example uses the header from
|
|||
|
Figure 58.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "RS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 56: Signature #1 JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJSUzI1NiJ9
|
|||
|
|
|||
|
Figure 57: Signature #1 JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
{
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
|
|||
|
Figure 58: Signature #1 JWS Unprotected Header JSON
|
|||
|
|
|||
|
The JWS Protected Header (Figure 57) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 59).
|
|||
|
|
|||
|
eyJhbGciOiJSUzI1NiJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 59: JWS Signing Input
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 33]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 59) produces the JWS Signature (Figure 60).
|
|||
|
|
|||
|
MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5NvyG53uoimic1tcMdSg-qpt
|
|||
|
rzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFcryNFiHkSw129EghGpwkpxaTn_THJTC
|
|||
|
glNbADko1MZBCdwzJxwqZc-1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjy
|
|||
|
tKSeAMbhMBdMma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqB
|
|||
|
BCXbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK64jU6_TPt
|
|||
|
QHiJeQJxz9G3Tx-083B745_AfYOnlC9w
|
|||
|
|
|||
|
Figure 60: JWS Signature #1, base64url-encoded
|
|||
|
|
|||
|
The following is the assembled first signature serialized as JSON:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJSUzI1NiJ9",
|
|||
|
"header": {
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
},
|
|||
|
"signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5NvyG53u
|
|||
|
oimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFcryNFiHkS
|
|||
|
w129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc-1RlpO2HibUY
|
|||
|
yXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdMma622_BG5t4sdbuC
|
|||
|
HtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBCXbYoQJwt7mxPftHmNlGo
|
|||
|
OSMxR_3thmXTCm4US-xiNOyhbm8afKK64jU6_TPtQHiJeQJxz9G3Tx-0
|
|||
|
83B745_AfYOnlC9w"
|
|||
|
}
|
|||
|
|
|||
|
Figure 61: Signature #1 JSON
|
|||
|
|
|||
|
4.8.3. Second Signing Operation
|
|||
|
|
|||
|
The following is generated before completing the second signing
|
|||
|
operation:
|
|||
|
|
|||
|
o JWS Unprotected Header; this example uses the header from
|
|||
|
Figure 62.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "ES512",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
|
|||
|
Figure 62: Signature #2 JWS Unprotected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 34]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The empty string (as there is no JWS Protected Header) and JWS
|
|||
|
Payload (Figure 8) are combined as described in [JWS] to produce the
|
|||
|
JWS Signing Input (Figure 63).
|
|||
|
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 63: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 63) produces the JWS Signature (Figure 64).
|
|||
|
|
|||
|
ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhcdCoFZFFjfISu0Cdkn9Yb
|
|||
|
dlmi54ho0x924DUz8sK7ZXkhc7AFM8ObLfTvNCrqcI3Jkl2U5IX3utNhODH6v7
|
|||
|
xgy1Qahsn0fyb4zSAkje8bAWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD
|
|||
|
|
|||
|
Figure 64: JWS Signature #2, base64url-encoded
|
|||
|
|
|||
|
The following is the assembled second signature serialized as JSON:
|
|||
|
|
|||
|
{
|
|||
|
"header": {
|
|||
|
"alg": "ES512",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
},
|
|||
|
"signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhcdCoF
|
|||
|
ZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8ObLfTvNCrq
|
|||
|
cI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8bAWz4vIfj5pCM
|
|||
|
Yxxm4fgV3q7ZYhm5eD"
|
|||
|
}
|
|||
|
|
|||
|
Figure 65: Signature #2 JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 35]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
4.8.4. Third Signing Operation
|
|||
|
|
|||
|
The following is generated before completing the third signing
|
|||
|
operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from Figure 66,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 67.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "HS256",
|
|||
|
"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
|
|||
|
}
|
|||
|
|
|||
|
Figure 66: Signature #3 JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
|
|||
|
Figure 67: Signature #3 JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
The JWS Protected Header (Figure 67) and JWS Payload (Figure 8) are
|
|||
|
combined as described in [JWS] to produce the JWS Signing Input
|
|||
|
(Figure 68).
|
|||
|
|
|||
|
eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LW
|
|||
|
VlZjMxNGJjNzAzNyJ9
|
|||
|
.
|
|||
|
SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH
|
|||
|
lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk
|
|||
|
b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm
|
|||
|
UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4
|
|||
|
|
|||
|
Figure 68: JWS Signing Input
|
|||
|
|
|||
|
Performing the signature operation over the JWS Signing Input
|
|||
|
(Figure 68) produces the JWS Signature (Figure 69).
|
|||
|
|
|||
|
s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0
|
|||
|
|
|||
|
Figure 69: JWS Signature #3, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 36]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The following is the assembled third signature serialized as JSON:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOW
|
|||
|
ItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
|
|||
|
"signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"
|
|||
|
}
|
|||
|
|
|||
|
Figure 70: Signature #3 JSON
|
|||
|
|
|||
|
4.8.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o Payload content (Figure 8)
|
|||
|
|
|||
|
o Signature #1 JSON (Figure 61)
|
|||
|
|
|||
|
o Signature #2 JSON (Figure 65)
|
|||
|
|
|||
|
o Signature #3 JSON (Figure 70)
|
|||
|
|
|||
|
The JWS Compact Serialization is not presented because it does not
|
|||
|
support this use case; the flattened JWS JSON Serialization is not
|
|||
|
presented because there is more than one signature.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 37]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the general JWS JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
|
|||
|
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
|
|||
|
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
|
|||
|
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
|
|||
|
ZiB0by4",
|
|||
|
"signatures": [
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJSUzI1NiJ9",
|
|||
|
"header": {
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
},
|
|||
|
"signature": "MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5Nvy
|
|||
|
G53uoimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFc
|
|||
|
ryNFiHkSw129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc
|
|||
|
-1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdM
|
|||
|
ma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBC
|
|||
|
XbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK6
|
|||
|
4jU6_TPtQHiJeQJxz9G3Tx-083B745_AfYOnlC9w"
|
|||
|
},
|
|||
|
{
|
|||
|
"header": {
|
|||
|
"alg": "ES512",
|
|||
|
"kid": "bilbo.baggins@hobbiton.example"
|
|||
|
},
|
|||
|
"signature": "ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhc
|
|||
|
dCoFZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8Ob
|
|||
|
LfTvNCrqcI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8b
|
|||
|
AWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD"
|
|||
|
},
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LT
|
|||
|
RkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9",
|
|||
|
"signature": "s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p
|
|||
|
0"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 71: General JWS JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 38]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5. JSON Web Encryption Examples
|
|||
|
|
|||
|
The following sections demonstrate how to generate various JWE
|
|||
|
objects.
|
|||
|
|
|||
|
All of the encryption examples (unless otherwise noted) use the
|
|||
|
following Plaintext content (an abridged quote from "The Fellowship
|
|||
|
of the Ring" [LOTR-FELLOWSHIP]), serialized as UTF-8. The Plaintext
|
|||
|
is presented here as a series of quoted strings that are concatenated
|
|||
|
to produce the JWE Plaintext. The sequence "\xe2\x80\x93" is
|
|||
|
substituted for (U+2013 EN DASH), and quotation marks (U+0022
|
|||
|
QUOTATION MARK) are added for readability but are not present in the
|
|||
|
JWE Plaintext.
|
|||
|
|
|||
|
"You can trust us to stick with you through thick and "
|
|||
|
"thin\xe2\x80\x93to the bitter end. And you can trust us to "
|
|||
|
"keep any secret of yours\xe2\x80\x93closer than you keep it "
|
|||
|
"yourself. But you cannot trust us to let you face trouble "
|
|||
|
"alone, and go off without a word. We are your friends, Frodo."
|
|||
|
|
|||
|
Figure 72: Plaintext Content
|
|||
|
|
|||
|
5.1. Key Encryption Using RSA v1.5 and AES-HMAC-SHA2
|
|||
|
|
|||
|
This example illustrates encrypting content using the "RSA1_5"
|
|||
|
(RSAES-PKCS1-v1_5) key encryption algorithm and the "A128CBC-HS256"
|
|||
|
(AES-128-CBC-HMAC-SHA-256) content encryption algorithm.
|
|||
|
|
|||
|
Note that RSAES-PKCS1-v1_5 uses random data to generate the
|
|||
|
ciphertext; it might not be possible to exactly replicate the results
|
|||
|
in this section.
|
|||
|
|
|||
|
Note that only the RSA public key is necessary to perform the
|
|||
|
encryption. However, the example includes the RSA private key to
|
|||
|
allow readers to validate the output.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.1.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o RSA public key; this example uses the key from Figure 73.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 39]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
o "alg" parameter of "RSA1_5".
|
|||
|
|
|||
|
o "enc" parameter of "A128CBC-HS256".
|
|||
|
|
|||
|
{
|
|||
|
"kty": "RSA",
|
|||
|
"kid": "frodo.baggins@hobbiton.example",
|
|||
|
"use": "enc",
|
|||
|
"n": "maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegT
|
|||
|
HVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx
|
|||
|
6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5U
|
|||
|
NwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4c
|
|||
|
R5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oy
|
|||
|
pBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYA
|
|||
|
VotGlvMQ",
|
|||
|
"e": "AQAB",
|
|||
|
"d": "Kn9tgoHfiTVi8uPu5b9TnwyHwG5dK6RE0uFdlpCGnJN7ZEi963R7wy
|
|||
|
bQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO
|
|||
|
5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6
|
|||
|
Oe1mY0vHTI3FucjSM86Nff4oIENt43r2fspgEPGRrdE6fpLc9Oaq-qeP
|
|||
|
1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PN
|
|||
|
miuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2v
|
|||
|
pzj85bQQ",
|
|||
|
"p": "2DwQmZ43FoTnQ8IkUj3BmKRf5Eh2mizZA5xEJ2MinUE3sdTYKSLtaE
|
|||
|
oekX9vbBZuWxHdVhM6UnKCJ_2iNk8Z0ayLYHL0_G21aXf9-unynEpUsH
|
|||
|
7HHTklLpYAzOOx1ZgVljoxAdWNn3hiEFrjZLZGS7lOH-a3QQlDDQoJOJ
|
|||
|
2VFmU",
|
|||
|
"q": "te8LY4-W7IyaqH1ExujjMqkTAlTeRbv0VLQnfLY2xINnrWdwiQ93_V
|
|||
|
F099aP1ESeLja2nw-6iKIe-qT7mtCPozKfVtUYfz5HrJ_XY2kfexJINb
|
|||
|
9lhZHMv5p1skZpeIS-GPHCC6gRlKo1q-idn_qxyusfWv7WAxlSVfQfk8
|
|||
|
d6Et0",
|
|||
|
"dp": "UfYKcL_or492vVc0PzwLSplbg4L3-Z5wL48mwiswbpzOyIgd2xHTH
|
|||
|
QmjJpFAIZ8q-zf9RmgJXkDrFs9rkdxPtAsL1WYdeCT5c125Fkdg317JV
|
|||
|
RDo1inX7x2Kdh8ERCreW8_4zXItuTl_KiXZNU5lvMQjWbIw2eTx1lpsf
|
|||
|
lo0rYU",
|
|||
|
"dq": "iEgcO-QfpepdH8FWd7mUFyrXdnOkXJBCogChY6YKuIHGc_p8Le9Mb
|
|||
|
pFKESzEaLlN1Ehf3B6oGBl5Iz_ayUlZj2IoQZ82znoUrpa9fVYNot87A
|
|||
|
CfzIG7q9Mv7RiPAderZi03tkVXAdaBau_9vs5rS-7HMtxkVrxSUvJY14
|
|||
|
TkXlHE",
|
|||
|
"qi": "kC-lzZOqoFaZCr5l0tOVtREKoVqaAYhQiqIRGL-MzS4sCmRkxm5vZ
|
|||
|
lXYx6RtE1n_AagjqajlkjieGlxTTThHD8Iga6foGBMaAr5uR1hGQpSc7
|
|||
|
Gl7CF1DZkBJMTQN6EshYzZfxW08mIO8M6Rzuh0beL6fG9mkDcIyPrBXx
|
|||
|
2bQ_mM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 73: RSA 2048-Bit Key, in JWK Format
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 40]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
(NOTE: While the key includes the private parameters, only the public
|
|||
|
parameters "e" and "n" are necessary for the encryption operation.)
|
|||
|
|
|||
|
5.1.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 74.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 75.
|
|||
|
|
|||
|
3qyTVhIWt5juqZUCpfRqpvauwB956MEJL2Rt-8qXKSo
|
|||
|
|
|||
|
Figure 74: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
bbd5sTkYwhAIqfHsx8DayA
|
|||
|
|
|||
|
Figure 75: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.1.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 74) with
|
|||
|
the RSA key (Figure 73) results in the following Encrypted Key:
|
|||
|
|
|||
|
laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzfTihJBuuzxg0V7yk1WClnQePF
|
|||
|
vG2K-pvSlWc9BRIazDrn50RcRai__3TDON395H3c62tIouJJ4XaRvYHFjZTZ2G
|
|||
|
Xfz8YAImcc91Tfk0WXC2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcG
|
|||
|
TSLUeeCt36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8Vl
|
|||
|
zNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOh
|
|||
|
MBs9M8XL223Fg47xlGsMXdfuY-4jaqVw
|
|||
|
|
|||
|
Figure 76: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 41]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.1.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the Plaintext:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from Figure 77,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 78.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "RSA1_5",
|
|||
|
"kid": "frodo.baggins@hobbiton.example",
|
|||
|
"enc": "A128CBC-HS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 77: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm
|
|||
|
V4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0
|
|||
|
|
|||
|
Figure 78: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation on the Plaintext
|
|||
|
(Figure 72) using the following:
|
|||
|
|
|||
|
o CEK (Figure 74);
|
|||
|
|
|||
|
o Initialization Vector (Figure 75); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 77) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 79.
|
|||
|
|
|||
|
o Authentication Tag from Figure 80.
|
|||
|
|
|||
|
0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62JhJvGZ4_FNVSiGc_r
|
|||
|
aa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wnI3Jvo0mkpEEnlDmZvDu_k8O
|
|||
|
WzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc2VbVbK4dQKPdNTjPPEmRqcaGeTWZV
|
|||
|
yeSUvf5k59yJZxRuSvWFf6KrNtmRdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0
|
|||
|
zT5CbL5Qlw3sRc7u_hg0yKVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2
|
|||
|
O6_7uInMGhFeX4ctHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VW
|
|||
|
i7lzA6BP430m
|
|||
|
|
|||
|
Figure 79: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
kvKuFBXHe5mQr4lqgobAUg
|
|||
|
|
|||
|
Figure 80: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 42]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.1.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 78)
|
|||
|
|
|||
|
o Encrypted Key (Figure 76)
|
|||
|
|
|||
|
o Initialization Vector (Figure 75)
|
|||
|
|
|||
|
o Ciphertext (Figure 79)
|
|||
|
|
|||
|
o Authentication Tag (Figure 80)
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW5zQGhvYmJpdG9uLm
|
|||
|
V4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0
|
|||
|
.
|
|||
|
laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzfTihJBuuzxg0V7yk1WClnQePF
|
|||
|
vG2K-pvSlWc9BRIazDrn50RcRai__3TDON395H3c62tIouJJ4XaRvYHFjZTZ2G
|
|||
|
Xfz8YAImcc91Tfk0WXC2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcG
|
|||
|
TSLUeeCt36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8Vl
|
|||
|
zNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOh
|
|||
|
MBs9M8XL223Fg47xlGsMXdfuY-4jaqVw
|
|||
|
.
|
|||
|
bbd5sTkYwhAIqfHsx8DayA
|
|||
|
.
|
|||
|
0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62JhJvGZ4_FNVSiGc_r
|
|||
|
aa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wnI3Jvo0mkpEEnlDmZvDu_k8O
|
|||
|
WzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc2VbVbK4dQKPdNTjPPEmRqcaGeTWZV
|
|||
|
yeSUvf5k59yJZxRuSvWFf6KrNtmRdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0
|
|||
|
zT5CbL5Qlw3sRc7u_hg0yKVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2
|
|||
|
O6_7uInMGhFeX4ctHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VW
|
|||
|
i7lzA6BP430m
|
|||
|
.
|
|||
|
kvKuFBXHe5mQr4lqgobAUg
|
|||
|
|
|||
|
Figure 81: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 43]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzf
|
|||
|
TihJBuuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai_
|
|||
|
_3TDON395H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WX
|
|||
|
C2F5Xbb71ClQ1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt
|
|||
|
36r1Kt3OSj7EyBQXoZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8
|
|||
|
VlzNmoxaGMny3YnGir5Wf6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx
|
|||
|
1BpyIfgvfjOhMBs9M8XL223Fg47xlGsMXdfuY-4jaqVw"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW
|
|||
|
5zQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In
|
|||
|
0",
|
|||
|
"iv": "bbd5sTkYwhAIqfHsx8DayA",
|
|||
|
"ciphertext": "0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62
|
|||
|
JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn
|
|||
|
I3Jvo0mkpEEnlDmZvDu_k8OWzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc
|
|||
|
2VbVbK4dQKPdNTjPPEmRqcaGeTWZVyeSUvf5k59yJZxRuSvWFf6KrNtm
|
|||
|
RdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0zT5CbL5Qlw3sRc7u_hg0y
|
|||
|
KVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2O6_7uInMGhFeX4c
|
|||
|
tHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VWi7lzA6BP4
|
|||
|
30m",
|
|||
|
"tag": "kvKuFBXHe5mQr4lqgobAUg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 82: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 44]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJSU0ExXzUiLCJraWQiOiJmcm9kby5iYWdnaW
|
|||
|
5zQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In
|
|||
|
0",
|
|||
|
"encrypted_key": "laLxI0j-nLH-_BgLOXMozKxmy9gffy2gTdvqzfTihJ
|
|||
|
Buuzxg0V7yk1WClnQePFvG2K-pvSlWc9BRIazDrn50RcRai__3TDON39
|
|||
|
5H3c62tIouJJ4XaRvYHFjZTZ2GXfz8YAImcc91Tfk0WXC2F5Xbb71ClQ
|
|||
|
1DDH151tlpH77f2ff7xiSxh9oSewYrcGTSLUeeCt36r1Kt3OSj7EyBQX
|
|||
|
oZlN7IxbyhMAfgIe7Mv1rOTOI5I8NQqeXXW8VlzNmoxaGMny3YnGir5W
|
|||
|
f6Qt2nBq4qDaPdnaAuuGUGEecelIO1wx1BpyIfgvfjOhMBs9M8XL223F
|
|||
|
g47xlGsMXdfuY-4jaqVw",
|
|||
|
"iv": "bbd5sTkYwhAIqfHsx8DayA",
|
|||
|
"ciphertext": "0fys_TY_na7f8dwSfXLiYdHaA2DxUjD67ieF7fcVbIR62
|
|||
|
JhJvGZ4_FNVSiGc_raa0HnLQ6s1P2sv3Xzl1p1l_o5wR_RsSzrS8Z-wn
|
|||
|
I3Jvo0mkpEEnlDmZvDu_k8OWzJv7eZVEqiWKdyVzFhPpiyQU28GLOpRc
|
|||
|
2VbVbK4dQKPdNTjPPEmRqcaGeTWZVyeSUvf5k59yJZxRuSvWFf6KrNtm
|
|||
|
RdZ8R4mDOjHSrM_s8uwIFcqt4r5GX8TKaI0zT5CbL5Qlw3sRc7u_hg0y
|
|||
|
KVOiRytEAEs3vZkcfLkP6nbXdC_PkMdNS-ohP78T2O6_7uInMGhFeX4c
|
|||
|
tHG7VelHGiT93JfWDEQi5_V9UN1rhXNrYu-0fVMkZAKX3VWi7lzA6BP4
|
|||
|
30m",
|
|||
|
"tag": "kvKuFBXHe5mQr4lqgobAUg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 83: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.2. Key Encryption Using RSA-OAEP with AES-GCM
|
|||
|
|
|||
|
This example illustrates encrypting content using the "RSA-OAEP"
|
|||
|
(RSAES-OAEP) key encryption algorithm and the "A256GCM" (AES-GCM)
|
|||
|
content encryption algorithm.
|
|||
|
|
|||
|
Note that RSAES-OAEP uses random data to generate the ciphertext; it
|
|||
|
might not be possible to exactly replicate the results in this
|
|||
|
section.
|
|||
|
|
|||
|
Note that only the RSA public key is necessary to perform the
|
|||
|
encryption. However, the example includes the RSA private key to
|
|||
|
allow readers to validate the output.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 45]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.2.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the Plaintext from Figure 72.
|
|||
|
|
|||
|
o RSA public key; this example uses the key from Figure 84.
|
|||
|
|
|||
|
o "alg" parameter of "RSA-OAEP".
|
|||
|
|
|||
|
o "enc" parameter of "A256GCM".
|
|||
|
|
|||
|
{
|
|||
|
"kty": "RSA",
|
|||
|
"kid": "samwise.gamgee@hobbiton.example",
|
|||
|
"use": "enc",
|
|||
|
"n": "wbdxI55VaanZXPY29Lg5hdmv2XhvqAhoxUkanfzf2-5zVUxa6prHRr
|
|||
|
I4pP1AhoqJRlZfYtWWd5mmHRG2pAHIlh0ySJ9wi0BioZBl1XP2e-C-Fy
|
|||
|
XJGcTy0HdKQWlrfhTm42EW7Vv04r4gfao6uxjLGwfpGrZLarohiWCPnk
|
|||
|
Nrg71S2CuNZSQBIPGjXfkmIy2tl_VWgGnL22GplyXj5YlBLdxXp3XeSt
|
|||
|
sqo571utNfoUTU8E4qdzJ3U1DItoVkPGsMwlmmnJiwA7sXRItBCivR4M
|
|||
|
5qnZtdw-7v4WuR4779ubDuJ5nalMv2S66-RPcnFAzWSKxtBDnFJJDGIU
|
|||
|
e7Tzizjg1nms0Xq_yPub_UOlWn0ec85FCft1hACpWG8schrOBeNqHBOD
|
|||
|
FskYpUc2LC5JA2TaPF2dA67dg1TTsC_FupfQ2kNGcE1LgprxKHcVWYQb
|
|||
|
86B-HozjHZcqtauBzFNV5tbTuB-TpkcvJfNcFLlH3b8mb-H_ox35FjqB
|
|||
|
SAjLKyoeqfKTpVjvXhd09knwgJf6VKq6UC418_TOljMVfFTWXUxlnfhO
|
|||
|
OnzW6HSSzD1c9WrCuVzsUMv54szidQ9wf1cYWf3g5qFDxDQKis99gcDa
|
|||
|
iCAwM3yEBIzuNeeCa5dartHDb1xEB_HcHSeYbghbMjGfasvKn0aZRsnT
|
|||
|
yC0xhWBlsolZE",
|
|||
|
"e": "AQAB",
|
|||
|
"alg": "RSA-OAEP",
|
|||
|
"d": "n7fzJc3_WG59VEOBTkayzuSMM780OJQuZjN_KbH8lOZG25ZoA7T4Bx
|
|||
|
cc0xQn5oZE5uSCIwg91oCt0JvxPcpmqzaJZg1nirjcWZ-oBtVk7gCAWq
|
|||
|
-B3qhfF3izlbkosrzjHajIcY33HBhsy4_WerrXg4MDNE4HYojy68TcxT
|
|||
|
2LYQRxUOCf5TtJXvM8olexlSGtVnQnDRutxEUCwiewfmmrfveEogLx9E
|
|||
|
A-KMgAjTiISXxqIXQhWUQX1G7v_mV_Hr2YuImYcNcHkRvp9E7ook0876
|
|||
|
DhkO8v4UOZLwA1OlUX98mkoqwc58A_Y2lBYbVx1_s5lpPsEqbbH-nqIj
|
|||
|
h1fL0gdNfihLxnclWtW7pCztLnImZAyeCWAG7ZIfv-Rn9fLIv9jZ6r7r
|
|||
|
-MSH9sqbuziHN2grGjD_jfRluMHa0l84fFKl6bcqN1JWxPVhzNZo01yD
|
|||
|
F-1LiQnqUYSepPf6X3a2SOdkqBRiquE6EvLuSYIDpJq3jDIsgoL8Mo1L
|
|||
|
oomgiJxUwL_GWEOGu28gplyzm-9Q0U0nyhEf1uhSR8aJAQWAiFImWH5W
|
|||
|
_IQT9I7-yrindr_2fWQ_i1UgMsGzA7aOGzZfPljRy6z-tY_KuBG00-28
|
|||
|
S_aWvjyUc-Alp8AUyKjBZ-7CWH32fGWK48j1t-zomrwjL_mnhsPbGs0c
|
|||
|
9WsWgRzI-K8gE",
|
|||
|
"p": "7_2v3OQZzlPFcHyYfLABQ3XP85Es4hCdwCkbDeltaUXgVy9l9etKgh
|
|||
|
vM4hRkOvbb01kYVuLFmxIkCDtpi-zLCYAdXKrAK3PtSbtzld_XZ9nlsY
|
|||
|
a_QZWpXB_IrtFjVfdKUdMz94pHUhFGFj7nr6NNxfpiHSHWFE1zD_AC3m
|
|||
|
Y46J961Y2LRnreVwAGNw53p07Db8yD_92pDa97vqcZOdgtybH9q6uma-
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 46]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
RFNhO1AoiJhYZj69hjmMRXx-x56HO9cnXNbmzNSCFCKnQmn4GQLmRj9s
|
|||
|
fbZRqL94bbtE4_e0Zrpo8RNo8vxRLqQNwIy85fc6BRgBJomt8QdQvIgP
|
|||
|
gWCv5HoQ",
|
|||
|
"q": "zqOHk1P6WN_rHuM7ZF1cXH0x6RuOHq67WuHiSknqQeefGBA9PWs6Zy
|
|||
|
KQCO-O6mKXtcgE8_Q_hA2kMRcKOcvHil1hqMCNSXlflM7WPRPZu2qCDc
|
|||
|
qssd_uMbP-DqYthH_EzwL9KnYoH7JQFxxmcv5An8oXUtTwk4knKjkIYG
|
|||
|
RuUwfQTus0w1NfjFAyxOOiAQ37ussIcE6C6ZSsM3n41UlbJ7TCqewzVJ
|
|||
|
aPJN5cxjySPZPD3Vp01a9YgAD6a3IIaKJdIxJS1ImnfPevSJQBE79-EX
|
|||
|
e2kSwVgOzvt-gsmM29QQ8veHy4uAqca5dZzMs7hkkHtw1z0jHV90epQJ
|
|||
|
JlXXnH8Q",
|
|||
|
"dp": "19oDkBh1AXelMIxQFm2zZTqUhAzCIr4xNIGEPNoDt1jK83_FJA-xn
|
|||
|
x5kA7-1erdHdms_Ef67HsONNv5A60JaR7w8LHnDiBGnjdaUmmuO8XAxQ
|
|||
|
J_ia5mxjxNjS6E2yD44USo2JmHvzeeNczq25elqbTPLhUpGo1IZuG72F
|
|||
|
ZQ5gTjXoTXC2-xtCDEUZfaUNh4IeAipfLugbpe0JAFlFfrTDAMUFpC3i
|
|||
|
XjxqzbEanflwPvj6V9iDSgjj8SozSM0dLtxvu0LIeIQAeEgT_yXcrKGm
|
|||
|
pKdSO08kLBx8VUjkbv_3Pn20Gyu2YEuwpFlM_H1NikuxJNKFGmnAq9Lc
|
|||
|
nwwT0jvoQ",
|
|||
|
"dq": "S6p59KrlmzGzaQYQM3o0XfHCGvfqHLYjCO557HYQf72O9kLMCfd_1
|
|||
|
VBEqeD-1jjwELKDjck8kOBl5UvohK1oDfSP1DleAy-cnmL29DqWmhgwM
|
|||
|
1ip0CCNmkmsmDSlqkUXDi6sAaZuntyukyflI-qSQ3C_BafPyFaKrt1fg
|
|||
|
dyEwYa08pESKwwWisy7KnmoUvaJ3SaHmohFS78TJ25cfc10wZ9hQNOrI
|
|||
|
ChZlkiOdFCtxDqdmCqNacnhgE3bZQjGp3n83ODSz9zwJcSUvODlXBPc2
|
|||
|
AycH6Ci5yjbxt4Ppox_5pjm6xnQkiPgj01GpsUssMmBN7iHVsrE7N2iz
|
|||
|
nBNCeOUIQ",
|
|||
|
"qi": "FZhClBMywVVjnuUud-05qd5CYU0dK79akAgy9oX6RX6I3IIIPckCc
|
|||
|
iRrokxglZn-omAY5CnCe4KdrnjFOT5YUZE7G_Pg44XgCXaarLQf4hl80
|
|||
|
oPEf6-jJ5Iy6wPRx7G2e8qLxnh9cOdf-kRqgOS3F48Ucvw3ma5V6KGMw
|
|||
|
QqWFeV31XtZ8l5cVI-I3NzBS7qltpUVgz2Ju021eyc7IlqgzR98qKONl
|
|||
|
27DuEES0aK0WE97jnsyO27Yp88Wa2RiBrEocM89QZI1seJiGDizHRUP4
|
|||
|
UZxw9zsXww46wy0P6f9grnYp7t8LkyDDk8eoI4KX6SNMNVcyVS9IWjlq
|
|||
|
8EzqZEKIA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 84: RSA 4096-Bit Key
|
|||
|
|
|||
|
(NOTE: While the key includes the private parameters, only the public
|
|||
|
parameters "e" and "n" are necessary for the encryption operation.)
|
|||
|
|
|||
|
5.2.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 85.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 86.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 47]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
mYMfsggkTAm0TbvtlFh2hyoXnbEzJQjMxmgLN3d8xXA
|
|||
|
|
|||
|
Figure 85: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
-nBoKLH0YkLZPSI9
|
|||
|
|
|||
|
Figure 86: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.2.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 85) with
|
|||
|
the RSA key (Figure 84) produces the following Encrypted Key:
|
|||
|
|
|||
|
rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNuh7lCiud48LxeolRdtFF4nzQi
|
|||
|
beYOl5S_PJsAXZwSXtDePz9hk-BbtsTBqC2UsPOdwjC9NhNupNNu9uHIVftDyu
|
|||
|
cvI6hvALeZ6OGnhNV4v1zx2k7O1D89mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58
|
|||
|
-Aad3FzMuo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8Bpx
|
|||
|
KdUV9ScfJQTcYm6eJEBz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pK
|
|||
|
IIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7
|
|||
|
pZfPYDSXZyS0CfKKkMozT_qiCwZTSz4duYnt8hS4Z9sGthXn9uDqd6wycMagnQ
|
|||
|
fOTs_lycTWmY-aqWVDKhjYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe3
|
|||
|
8UjQb0lvXn1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
|
|||
|
06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8aKaOnx6ASE5
|
|||
|
Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xDEdHAVCGRzN3woEI2ozDR
|
|||
|
s
|
|||
|
|
|||
|
Figure 87: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.2.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the Plaintext:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from Figure 88,
|
|||
|
encoded using base64url [RFC4648] to produce Figure 89.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "RSA-OAEP",
|
|||
|
"kid": "samwise.gamgee@hobbiton.example",
|
|||
|
"enc": "A256GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 88: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2FtZ2VlQGhvYmJpdG
|
|||
|
9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0
|
|||
|
|
|||
|
Figure 89: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 48]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext
|
|||
|
(Figure 72) with the following:
|
|||
|
|
|||
|
o CEK (Figure 85);
|
|||
|
|
|||
|
o Initialization Vector (Figure 86); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 89) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 90.
|
|||
|
|
|||
|
o Authentication Tag from Figure 91.
|
|||
|
|
|||
|
o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6UJuJowOHC5ytjqYgR
|
|||
|
L-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYxrXfVzIIaRdhYtEMRBvBWbEw
|
|||
|
P7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lhhNcizPersuhw5f-pGYzseva-TUaL8
|
|||
|
iWnctc-sSwy7SQmRkfhDjwbz0fz6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML
|
|||
|
7Cc2GxgvI7zqWo0YIEc7aCflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSV
|
|||
|
maPpOslY2n525DxDfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw
|
|||
|
|
|||
|
Figure 90: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
UCGiqJxhBI3IFVdPalHHvA
|
|||
|
|
|||
|
Figure 91: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.2.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 89)
|
|||
|
|
|||
|
o Encrypted Key (Figure 87)
|
|||
|
|
|||
|
o Initialization Vector (Figure 86)
|
|||
|
|
|||
|
o Ciphertext (Figure 90)
|
|||
|
|
|||
|
o Authentication Tag (Figure 91)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 49]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2FtZ2VlQGhvYmJpdG
|
|||
|
9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0
|
|||
|
.
|
|||
|
rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNuh7lCiud48LxeolRdtFF4nzQi
|
|||
|
beYOl5S_PJsAXZwSXtDePz9hk-BbtsTBqC2UsPOdwjC9NhNupNNu9uHIVftDyu
|
|||
|
cvI6hvALeZ6OGnhNV4v1zx2k7O1D89mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58
|
|||
|
-Aad3FzMuo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8Bpx
|
|||
|
KdUV9ScfJQTcYm6eJEBz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pK
|
|||
|
IIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7
|
|||
|
pZfPYDSXZyS0CfKKkMozT_qiCwZTSz4duYnt8hS4Z9sGthXn9uDqd6wycMagnQ
|
|||
|
fOTs_lycTWmY-aqWVDKhjYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe3
|
|||
|
8UjQb0lvXn1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
|
|||
|
06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8aKaOnx6ASE5
|
|||
|
Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xDEdHAVCGRzN3woEI2ozDR
|
|||
|
s
|
|||
|
.
|
|||
|
-nBoKLH0YkLZPSI9
|
|||
|
.
|
|||
|
o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6UJuJowOHC5ytjqYgR
|
|||
|
L-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYxrXfVzIIaRdhYtEMRBvBWbEw
|
|||
|
P7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lhhNcizPersuhw5f-pGYzseva-TUaL8
|
|||
|
iWnctc-sSwy7SQmRkfhDjwbz0fz6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML
|
|||
|
7Cc2GxgvI7zqWo0YIEc7aCflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSV
|
|||
|
maPpOslY2n525DxDfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw
|
|||
|
.
|
|||
|
UCGiqJxhBI3IFVdPalHHvA
|
|||
|
|
|||
|
Figure 92: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 50]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNu
|
|||
|
h7lCiud48LxeolRdtFF4nzQibeYOl5S_PJsAXZwSXtDePz9hk-Bb
|
|||
|
tsTBqC2UsPOdwjC9NhNupNNu9uHIVftDyucvI6hvALeZ6OGnhNV4
|
|||
|
v1zx2k7O1D89mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58-Aad3FzM
|
|||
|
uo3Fn9buEP2yXakLXYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8B
|
|||
|
pxKdUV9ScfJQTcYm6eJEBz3aSwIaK4T3-dwWpuBOhROQXBosJzS1
|
|||
|
asnuHtVMt2pKIIfux5BC6huIvmY7kzV7W7aIUrpYm_3H4zYvyMeq
|
|||
|
5pGqFmW2k8zpO878TRlZx7pZfPYDSXZyS0CfKKkMozT_qiCwZTSz
|
|||
|
4duYnt8hS4Z9sGthXn9uDqd6wycMagnQfOTs_lycTWmY-aqWVDKh
|
|||
|
jYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO2AWBe38UjQb0lvXn
|
|||
|
1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G7S2rscw5lQQU
|
|||
|
06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDPTr6Cbo8a
|
|||
|
KaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ69xD
|
|||
|
EdHAVCGRzN3woEI2ozDRs"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2
|
|||
|
FtZ2VlQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0",
|
|||
|
"iv": "-nBoKLH0YkLZPSI9",
|
|||
|
"ciphertext": "o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6
|
|||
|
UJuJowOHC5ytjqYgRL-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYx
|
|||
|
rXfVzIIaRdhYtEMRBvBWbEwP7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lh
|
|||
|
hNcizPersuhw5f-pGYzseva-TUaL8iWnctc-sSwy7SQmRkfhDjwbz0fz
|
|||
|
6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML7Cc2GxgvI7zqWo0YIEc7a
|
|||
|
CflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSVmaPpOslY2n525Dx
|
|||
|
DfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw",
|
|||
|
"tag": "UCGiqJxhBI3IFVdPalHHvA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 93: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 51]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6InNhbXdpc2UuZ2
|
|||
|
FtZ2VlQGhvYmJpdG9uLmV4YW1wbGUiLCJlbmMiOiJBMjU2R0NNIn0",
|
|||
|
"encrypted_key": "rT99rwrBTbTI7IJM8fU3Eli7226HEB7IchCxNuh7lC
|
|||
|
iud48LxeolRdtFF4nzQibeYOl5S_PJsAXZwSXtDePz9hk-BbtsTBqC2U
|
|||
|
sPOdwjC9NhNupNNu9uHIVftDyucvI6hvALeZ6OGnhNV4v1zx2k7O1D89
|
|||
|
mAzfw-_kT3tkuorpDU-CpBENfIHX1Q58-Aad3FzMuo3Fn9buEP2yXakL
|
|||
|
XYa15BUXQsupM4A1GD4_H4Bd7V3u9h8Gkg8BpxKdUV9ScfJQTcYm6eJE
|
|||
|
Bz3aSwIaK4T3-dwWpuBOhROQXBosJzS1asnuHtVMt2pKIIfux5BC6huI
|
|||
|
vmY7kzV7W7aIUrpYm_3H4zYvyMeq5pGqFmW2k8zpO878TRlZx7pZfPYD
|
|||
|
SXZyS0CfKKkMozT_qiCwZTSz4duYnt8hS4Z9sGthXn9uDqd6wycMagnQ
|
|||
|
fOTs_lycTWmY-aqWVDKhjYNRf03NiwRtb5BE-tOdFwCASQj3uuAgPGrO
|
|||
|
2AWBe38UjQb0lvXn1SpyvYZ3WFc7WOJYaTa7A8DRn6MC6T-xDmMuxC0G
|
|||
|
7S2rscw5lQQU06MvZTlFOt0UvfuKBa03cxA_nIBIhLMjY2kOTxQMmpDP
|
|||
|
Tr6Cbo8aKaOnx6ASE5Jx9paBpnNmOOKH35j_QlrQhDWUN6A2Gg8iFayJ
|
|||
|
69xDEdHAVCGRzN3woEI2ozDRs",
|
|||
|
"iv": "-nBoKLH0YkLZPSI9",
|
|||
|
"ciphertext": "o4k2cnGN8rSSw3IDo1YuySkqeS_t2m1GXklSgqBdpACm6
|
|||
|
UJuJowOHC5ytjqYgRL-I-soPlwqMUf4UgRWWeaOGNw6vGW-xyM01lTYx
|
|||
|
rXfVzIIaRdhYtEMRBvBWbEwP7ua1DRfvaOjgZv6Ifa3brcAM64d8p5lh
|
|||
|
hNcizPersuhw5f-pGYzseva-TUaL8iWnctc-sSwy7SQmRkfhDjwbz0fz
|
|||
|
6kFovEgj64X1I5s7E6GLp5fnbYGLa1QUiML7Cc2GxgvI7zqWo0YIEc7a
|
|||
|
CflLG1-8BboVWFdZKLK9vNoycrYHumwzKluLWEbSVmaPpOslY2n525Dx
|
|||
|
DfWaVFUfKQxMF56vn4B9QMpWAbnypNimbM8zVOw",
|
|||
|
"tag": "UCGiqJxhBI3IFVdPalHHvA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 94: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.3. Key Wrap Using PBES2-AES-KeyWrap with AES-CBC-HMAC-SHA2
|
|||
|
|
|||
|
The example illustrates encrypting content using the
|
|||
|
"PBES2-HS512+A256KW" (PBES2 Password-based Encryption using HMAC-
|
|||
|
SHA-512 and AES-256-KeyWrap) key encryption algorithm with the
|
|||
|
"A128CBC-HS256" (AES-128-CBC-HMAC-SHA-256) content encryption
|
|||
|
algorithm.
|
|||
|
|
|||
|
A common use of password-based encryption is the import/export of
|
|||
|
keys. Therefore, this example uses a JWK Set for the Plaintext
|
|||
|
content instead of the Plaintext from Figure 72.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 52]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Note that if password-based encryption is used for multiple
|
|||
|
recipients, it is expected that each recipient use different values
|
|||
|
for the PBES2 parameters "p2s" and "p2c".
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.3.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the Plaintext from Figure 95
|
|||
|
(NOTE: All whitespace was added for readability).
|
|||
|
|
|||
|
o Password; this example uses the password from Figure 96 -- with
|
|||
|
the sequence "\xe2\x80\x93" replaced with (U+2013 EN DASH).
|
|||
|
|
|||
|
o "alg" parameter of "PBES2-HS512+A256KW".
|
|||
|
|
|||
|
o "enc" parameter of "A128CBC-HS256".
|
|||
|
|
|||
|
{
|
|||
|
"keys": [
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "77c7e2b8-6e13-45cf-8672-617b5b45243a",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A128GCM",
|
|||
|
"k": "XctOhJAkA-pD9Lh7ZgW_2A"
|
|||
|
},
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A128KW",
|
|||
|
"k": "GZy6sIZ6wl9NJOKB-jnmVQ"
|
|||
|
},
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A256GCMKW",
|
|||
|
"k": "qC57l_uxcm7Nm3K-ct4GFjx8tM1U8CZ0NLBvdQstiS8"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
Figure 95: Plaintext Content
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 53]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
entrap_o\xe2\x80\x93peter_long\xe2\x80\x93credit_tun
|
|||
|
|
|||
|
Figure 96: Password
|
|||
|
|
|||
|
5.3.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 97.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 98.
|
|||
|
|
|||
|
uwsjJXaBK407Qaf0_zpcpmr1Cs0CC50hIUEyGNEt3m0
|
|||
|
|
|||
|
Figure 97: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
VBiCzVHNoLiR3F4V82uoTQ
|
|||
|
|
|||
|
Figure 98: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.3.3. Encrypting the Key
|
|||
|
|
|||
|
The following are generated before encrypting the CEK:
|
|||
|
|
|||
|
o Salt input; this example uses the salt input from Figure 99.
|
|||
|
|
|||
|
o Iteration count; this example uses the iteration count 8192.
|
|||
|
|
|||
|
8Q1SzinasR3xchYz6ZZcHA
|
|||
|
|
|||
|
Figure 99: Salt Input, base64url-encoded
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 97) with
|
|||
|
the following:
|
|||
|
|
|||
|
o Password (Figure 96);
|
|||
|
|
|||
|
o Salt input (Figure 99), encoded as an octet string; and
|
|||
|
|
|||
|
o Iteration count (8192)
|
|||
|
|
|||
|
produces the following Encrypted Key:
|
|||
|
|
|||
|
d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlUtFPWdgtURtmeDV1g
|
|||
|
|
|||
|
Figure 100: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 54]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.3.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 101, encoded using base64url [RFC4648] to produce
|
|||
|
Figure 102.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "PBES2-HS512+A256KW",
|
|||
|
"p2s": "8Q1SzinasR3xchYz6ZZcHA",
|
|||
|
"p2c": 8192,
|
|||
|
"cty": "jwk-set+json",
|
|||
|
"enc": "A128CBC-HS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 101: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOiI4UTFTemluYXNSM3
|
|||
|
hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOiJqd2stc2V0K2pzb24iLCJl
|
|||
|
bmMiOiJBMTI4Q0JDLUhTMjU2In0
|
|||
|
|
|||
|
Figure 102: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext
|
|||
|
(Figure 95) with the following:
|
|||
|
|
|||
|
o CEK (Figure 97);
|
|||
|
|
|||
|
o Initialization Vector (Figure 98); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 102) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 103.
|
|||
|
|
|||
|
o Authentication Tag from Figure 104.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 55]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2nsnGIX86vMXqIi6IR
|
|||
|
sfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpDjEYCNA_XOmzg8yZR9oyjo6l
|
|||
|
TF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_hkBsnuoqoM3dwejXBtIodN84PeqMb
|
|||
|
6asmas_dpSsz7H10fC5ni9xIz424givB1YLldF6exVmL93R3fOoOJbmk2GBQZL
|
|||
|
_SEGllv2cQsBgeprARsaQ7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKd
|
|||
|
PQMTlVJKkqtV4Ru5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrok
|
|||
|
AKYPqmXUeRdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-
|
|||
|
zl5tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdTw8V
|
|||
|
3kobXZ77ulMwDs4p
|
|||
|
|
|||
|
Figure 103: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
0HlwodAhOCILG5SQ2LQ9dg
|
|||
|
|
|||
|
Figure 104: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.3.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 102)
|
|||
|
|
|||
|
o Encrypted Key (Figure 100)
|
|||
|
|
|||
|
o Initialization Vector (Figure 98)
|
|||
|
|
|||
|
o Ciphertext (Figure 103)
|
|||
|
|
|||
|
o Authentication Tag (Figure 104)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 56]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOiI4UTFTemluYXNSM3
|
|||
|
hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOiJqd2stc2V0K2pzb24iLCJl
|
|||
|
bmMiOiJBMTI4Q0JDLUhTMjU2In0
|
|||
|
.
|
|||
|
d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlUtFPWdgtURtmeDV1g
|
|||
|
.
|
|||
|
VBiCzVHNoLiR3F4V82uoTQ
|
|||
|
.
|
|||
|
23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2nsnGIX86vMXqIi6IR
|
|||
|
sfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpDjEYCNA_XOmzg8yZR9oyjo6l
|
|||
|
TF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_hkBsnuoqoM3dwejXBtIodN84PeqMb
|
|||
|
6asmas_dpSsz7H10fC5ni9xIz424givB1YLldF6exVmL93R3fOoOJbmk2GBQZL
|
|||
|
_SEGllv2cQsBgeprARsaQ7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKd
|
|||
|
PQMTlVJKkqtV4Ru5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrok
|
|||
|
AKYPqmXUeRdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-
|
|||
|
zl5tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdTw8V
|
|||
|
3kobXZ77ulMwDs4p
|
|||
|
.
|
|||
|
0HlwodAhOCILG5SQ2LQ9dg
|
|||
|
|
|||
|
Figure 105: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 57]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlU
|
|||
|
tFPWdgtURtmeDV1g"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOi
|
|||
|
I4UTFTemluYXNSM3hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOi
|
|||
|
Jqd2stc2V0K2pzb24iLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0",
|
|||
|
"iv": "VBiCzVHNoLiR3F4V82uoTQ",
|
|||
|
"ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2
|
|||
|
nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD
|
|||
|
jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_
|
|||
|
hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42
|
|||
|
4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ
|
|||
|
7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru
|
|||
|
5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe
|
|||
|
RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5
|
|||
|
tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT
|
|||
|
w8V3kobXZ77ulMwDs4p",
|
|||
|
"tag": "0HlwodAhOCILG5SQ2LQ9dg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 106: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 58]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJQQkVTMi1IUzUxMitBMjU2S1ciLCJwMnMiOi
|
|||
|
I4UTFTemluYXNSM3hjaFl6NlpaY0hBIiwicDJjIjo4MTkyLCJjdHkiOi
|
|||
|
Jqd2stc2V0K2pzb24iLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0",
|
|||
|
"encrypted_key": "d3qNhUWfqheyPp4H8sjOWsDYajoej4c5Je6rlUtFPW
|
|||
|
dgtURtmeDV1g",
|
|||
|
"iv": "VBiCzVHNoLiR3F4V82uoTQ",
|
|||
|
"ciphertext": "23i-Tb1AV4n0WKVSSgcQrdg6GRqsUKxjruHXYsTHAJLZ2
|
|||
|
nsnGIX86vMXqIi6IRsfywCRFzLxEcZBRnTvG3nhzPk0GDD7FMyXhUHpD
|
|||
|
jEYCNA_XOmzg8yZR9oyjo6lTF6si4q9FZ2EhzgFQCLO_6h5EVg3vR75_
|
|||
|
hkBsnuoqoM3dwejXBtIodN84PeqMb6asmas_dpSsz7H10fC5ni9xIz42
|
|||
|
4givB1YLldF6exVmL93R3fOoOJbmk2GBQZL_SEGllv2cQsBgeprARsaQ
|
|||
|
7Bq99tT80coH8ItBjgV08AtzXFFsx9qKvC982KLKdPQMTlVJKkqtV4Ru
|
|||
|
5LEVpBZXBnZrtViSOgyg6AiuwaS-rCrcD_ePOGSuxvgtrokAKYPqmXUe
|
|||
|
RdjFJwafkYEkiuDCV9vWGAi1DH2xTafhJwcmywIyzi4BqRpmdn_N-zl5
|
|||
|
tuJYyuvKhjKv6ihbsV_k1hJGPGAxJ6wUpmwC4PTQ2izEm0TuSE8oMKdT
|
|||
|
w8V3kobXZ77ulMwDs4p",
|
|||
|
"tag": "0HlwodAhOCILG5SQ2LQ9dg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 107: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.4. Key Agreement with Key Wrapping Using ECDH-ES and AES-KeyWrap with
|
|||
|
AES-GCM
|
|||
|
|
|||
|
This example illustrates encrypting content using the "ECDH-
|
|||
|
ES+A128KW" (Elliptic Curve Diffie-Hellman Ephemeral-Static with AES-
|
|||
|
128-KeyWrap) key encryption algorithm and the "A128GCM" (AES-GCM)
|
|||
|
content encryption algorithm.
|
|||
|
|
|||
|
Note that only the EC public key is necessary to perform the key
|
|||
|
agreement. However, the example includes the EC private key to allow
|
|||
|
readers to validate the output.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.4.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o EC public key; this example uses the public key from Figure 108.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 59]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
o "alg" parameter of "ECDH-ES+A128KW".
|
|||
|
|
|||
|
o "enc" parameter of "A128GCM".
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"kid": "peregrin.took@tuckborough.example",
|
|||
|
"use": "enc",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "YU4rRUzdmVqmRtWOs2OpDE_T5fsNIodcG8G5FWPrTPMyxpzsSOGaQL
|
|||
|
pe2FpxBmu2",
|
|||
|
"y": "A8-yxCHxkfBz3hKZfI1jUYMjUhsEveZ9THuwFjH2sCNdtksRJU7D5-
|
|||
|
SkgaFL1ETP",
|
|||
|
"d": "iTx2pk7wW-GqJkHcEkFQb2EFyYcO7RugmaW3mRrQVAOUiPommT0Idn
|
|||
|
YK2xDlZh-j"
|
|||
|
}
|
|||
|
|
|||
|
Figure 108: Elliptic Curve P-384 Key, in JWK Format
|
|||
|
|
|||
|
(NOTE: While the key includes the private parameters, only the public
|
|||
|
parameters "crv", "x", and "y" are necessary for the encryption
|
|||
|
operation.)
|
|||
|
|
|||
|
5.4.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 109.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 110.
|
|||
|
|
|||
|
Nou2ueKlP70ZXDbq9UrRwg
|
|||
|
|
|||
|
Figure 109: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
mH-G2zVqgztUtnW_
|
|||
|
|
|||
|
Figure 110: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.4.3. Encrypting the Key
|
|||
|
|
|||
|
To encrypt the Content Encryption Key, the following is generated:
|
|||
|
|
|||
|
o Ephemeral EC private key on the same curve as the EC public key;
|
|||
|
this example uses the private key from Figure 111.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 60]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "uBo4kHPw6kbjx5l0xowrd_oYzBmaz-GKFZu4xAFFkbYiWgutEK6iuE
|
|||
|
DsQ6wNdNg3",
|
|||
|
"y": "sp3p5SGhZVC2faXumI-e9JU2Mo8KpoYrFDr5yPNVtW4PgEwZOyQTA-
|
|||
|
JdaY8tb7E0",
|
|||
|
"d": "D5H4Y_5PSKZvhfVFbcCYJOtcGZygRgfZkpsBr59Icmmhe9sW6nkZ8W
|
|||
|
fwhinUfWJg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 111: Ephemeral Elliptic Curve P-384 Key, in JWK Format
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 109)
|
|||
|
with the following:
|
|||
|
|
|||
|
o The static Elliptic Curve public key (Figure 108); and
|
|||
|
|
|||
|
o The ephemeral Elliptic Curve private key (Figure 111)
|
|||
|
|
|||
|
produces the following JWE Encrypted Key:
|
|||
|
|
|||
|
0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2
|
|||
|
|
|||
|
Figure 112: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.4.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 113, encoded to base64url [RFC4648] as Figure 114.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "ECDH-ES+A128KW",
|
|||
|
"kid": "peregrin.took@tuckborough.example",
|
|||
|
"epk": {
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "uBo4kHPw6kbjx5l0xowrd_oYzBmaz-GKFZu4xAFFkbYiWgutEK6i
|
|||
|
uEDsQ6wNdNg3",
|
|||
|
"y": "sp3p5SGhZVC2faXumI-e9JU2Mo8KpoYrFDr5yPNVtW4PgEwZOyQT
|
|||
|
A-JdaY8tb7E0"
|
|||
|
},
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 113: JWE Protected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 61]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcmVncmluLnRvb2tAdH
|
|||
|
Vja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdHkiOiJFQyIsImNydiI6IlAt
|
|||
|
Mzg0IiwieCI6InVCbzRrSFB3Nmtiang1bDB4b3dyZF9vWXpCbWF6LUdLRlp1NH
|
|||
|
hBRkZrYllpV2d1dEVLNml1RURzUTZ3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMy
|
|||
|
ZmFYdW1JLWU5SlUyTW84S3BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWT
|
|||
|
h0YjdFMCJ9LCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
|
|||
|
Figure 114: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation on the Plaintext
|
|||
|
(Figure 72) using the following:
|
|||
|
|
|||
|
o CEK (Figure 109);
|
|||
|
|
|||
|
o Initialization Vector (Figure 110); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 114) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 115.
|
|||
|
|
|||
|
o Authentication Tag from Figure 116.
|
|||
|
|
|||
|
tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz5NJ76oID7lpnAi_cP
|
|||
|
WJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzsXaEwDdXta9Mn5B7cCBoJKB0
|
|||
|
IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05jMwbKkTe2yK3mjF6SBAsgicQDVCkc
|
|||
|
Y9BLluzx1RmC3ORXaM0JaHPB93YcdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w0
|
|||
|
3XdLkjXIuEr2hWgeP-nkUZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu
|
|||
|
07WNhjzJEPc4jVntRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ
|
|||
|
|
|||
|
Figure 115: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
WuGzxmcreYjpHGJoa17EBg
|
|||
|
|
|||
|
Figure 116: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 62]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.4.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 114)
|
|||
|
|
|||
|
o Encrypted Key (Figure 112)
|
|||
|
|
|||
|
o Initialization Vector (Figure 110)
|
|||
|
|
|||
|
o Ciphertext (Figure 115)
|
|||
|
|
|||
|
o Authentication Tag (Figure 116)
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcmVncmluLnRvb2tAdH
|
|||
|
Vja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdHkiOiJFQyIsImNydiI6IlAt
|
|||
|
Mzg0IiwieCI6InVCbzRrSFB3Nmtiang1bDB4b3dyZF9vWXpCbWF6LUdLRlp1NH
|
|||
|
hBRkZrYllpV2d1dEVLNml1RURzUTZ3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMy
|
|||
|
ZmFYdW1JLWU5SlUyTW84S3BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWT
|
|||
|
h0YjdFMCJ9LCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
.
|
|||
|
0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2
|
|||
|
.
|
|||
|
mH-G2zVqgztUtnW_
|
|||
|
.
|
|||
|
tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz5NJ76oID7lpnAi_cP
|
|||
|
WJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzsXaEwDdXta9Mn5B7cCBoJKB0
|
|||
|
IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05jMwbKkTe2yK3mjF6SBAsgicQDVCkc
|
|||
|
Y9BLluzx1RmC3ORXaM0JaHPB93YcdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w0
|
|||
|
3XdLkjXIuEr2hWgeP-nkUZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu
|
|||
|
07WNhjzJEPc4jVntRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ
|
|||
|
.
|
|||
|
WuGzxmcreYjpHGJoa17EBg
|
|||
|
|
|||
|
Figure 117: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 63]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcm
|
|||
|
VncmluLnRvb2tAdHVja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdH
|
|||
|
kiOiJFQyIsImNydiI6IlAtMzg0IiwieCI6InVCbzRrSFB3Nmtiang1bD
|
|||
|
B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT
|
|||
|
Z3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMyZmFYdW1JLWU5SlUyTW84S3
|
|||
|
BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWTh0YjdFMCJ9LCJlbm
|
|||
|
MiOiJBMTI4R0NNIn0",
|
|||
|
"iv": "mH-G2zVqgztUtnW_",
|
|||
|
"ciphertext": "tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz
|
|||
|
5NJ76oID7lpnAi_cPWJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzs
|
|||
|
XaEwDdXta9Mn5B7cCBoJKB0IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05
|
|||
|
jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y
|
|||
|
cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU
|
|||
|
ZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu07WNhjzJEPc4jVn
|
|||
|
tRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ",
|
|||
|
"tag": "WuGzxmcreYjpHGJoa17EBg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 118: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 64]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImtpZCI6InBlcm
|
|||
|
VncmluLnRvb2tAdHVja2Jvcm91Z2guZXhhbXBsZSIsImVwayI6eyJrdH
|
|||
|
kiOiJFQyIsImNydiI6IlAtMzg0IiwieCI6InVCbzRrSFB3Nmtiang1bD
|
|||
|
B4b3dyZF9vWXpCbWF6LUdLRlp1NHhBRkZrYllpV2d1dEVLNml1RURzUT
|
|||
|
Z3TmROZzMiLCJ5Ijoic3AzcDVTR2haVkMyZmFYdW1JLWU5SlUyTW84S3
|
|||
|
BvWXJGRHI1eVBOVnRXNFBnRXdaT3lRVEEtSmRhWTh0YjdFMCJ9LCJlbm
|
|||
|
MiOiJBMTI4R0NNIn0",
|
|||
|
"encrypted_key": "0DJjBXri_kBcC46IkU5_Jk9BqaQeHdv2",
|
|||
|
"iv": "mH-G2zVqgztUtnW_",
|
|||
|
"ciphertext": "tkZuOO9h95OgHJmkkrfLBisku8rGf6nzVxhRM3sVOhXgz
|
|||
|
5NJ76oID7lpnAi_cPWJRCjSpAaUZ5dOR3Spy7QuEkmKx8-3RCMhSYMzs
|
|||
|
XaEwDdXta9Mn5B7cCBoJKB0IgEnj_qfo1hIi-uEkUpOZ8aLTZGHfpl05
|
|||
|
jMwbKkTe2yK3mjF6SBAsgicQDVCkcY9BLluzx1RmC3ORXaM0JaHPB93Y
|
|||
|
cdSDGgpgBWMVrNU1ErkjcMqMoT_wtCex3w03XdLkjXIuEr2hWgeP-nkU
|
|||
|
ZTPU9EoGSPj6fAS-bSz87RCPrxZdj_iVyC6QWcqAu07WNhjzJEPc4jVn
|
|||
|
tRJ6K53NgPQ5p99l3Z408OUqj4ioYezbS6vTPlQ",
|
|||
|
"tag": "WuGzxmcreYjpHGJoa17EBg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 119: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.5. Key Agreement Using ECDH-ES with AES-CBC-HMAC-SHA2
|
|||
|
|
|||
|
This example illustrates encrypting content using the "ECDH-ES"
|
|||
|
(Elliptic Curve Diffie-Hellman Ephemeral-Static) key agreement
|
|||
|
algorithm and the "A128CBC-HS256" (AES-128-CBC-HMAC-SHA-256) content
|
|||
|
encryption algorithm.
|
|||
|
|
|||
|
Note that only the EC public key is necessary to perform the key
|
|||
|
agreement. However, the example includes the EC private key to allow
|
|||
|
readers to validate the output.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 65]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.5.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o EC public key; this example uses the public key from Figure 120.
|
|||
|
|
|||
|
o "alg" parameter of "ECDH-ES".
|
|||
|
|
|||
|
o "enc" parameter of "A128CBC-HS256".
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"kid": "meriadoc.brandybuck@buckland.example",
|
|||
|
"use": "enc",
|
|||
|
"crv": "P-256",
|
|||
|
"x": "Ze2loSV3wrroKUN_4zhwGhCqo3Xhu1td4QjeQ5wIVR0",
|
|||
|
"y": "HlLtdXARY_f55A3fnzQbPcm6hgr34Mp8p-nuzQCE0Zw",
|
|||
|
"d": "r_kHyZ-a06rmxM3yESK84r1otSg-aQcVStkRhA-iCM8"
|
|||
|
}
|
|||
|
|
|||
|
Figure 120: Elliptic Curve P-256 Key
|
|||
|
|
|||
|
(NOTE: While the key includes the private parameters, only the public
|
|||
|
parameters "crv", "x", and "y" are necessary for the encryption
|
|||
|
operation.)
|
|||
|
|
|||
|
5.5.2. Generated Factors
|
|||
|
|
|||
|
The following is generated before encrypting:
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 121.
|
|||
|
|
|||
|
yc9N8v5sYyv3iGQT926IUg
|
|||
|
|
|||
|
Figure 121: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
NOTE: The Content Encryption Key (CEK) is not randomly generated;
|
|||
|
instead, it is determined using ECDH-ES key agreement.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 66]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.5.3. Key Agreement
|
|||
|
|
|||
|
The following is generated to agree on a CEK:
|
|||
|
|
|||
|
o Ephemeral private key; this example uses the private key from
|
|||
|
Figure 122.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-256",
|
|||
|
"x": "mPUKT_bAWGHIhg0TpjjqVsP1rXWQu_vwVOHHtNkdYoA",
|
|||
|
"y": "8BQAsImGeAS46fyWw5MhYfGTT0IjBpFw2SS34Dv4Irs",
|
|||
|
"d": "AtH35vJsQ9SGjYfOsjUxYXQKrPH3FjZHmEtSKoSN8cM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 122: Ephemeral Private Key, in JWK Format
|
|||
|
|
|||
|
Performing the ECDH operation using the static EC public key
|
|||
|
(Figure 120) over the ephemeral private key (Figure 122) produces the
|
|||
|
following CEK:
|
|||
|
|
|||
|
hzHdlfQIAEehb8Hrd_mFRhKsKLEzPfshfXs9l6areCc
|
|||
|
|
|||
|
Figure 123: Agreed-to Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
5.5.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 124, encoded to base64url [RFC4648] as Figure 125.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "ECDH-ES",
|
|||
|
"kid": "meriadoc.brandybuck@buckland.example",
|
|||
|
"epk": {
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-256",
|
|||
|
"x": "mPUKT_bAWGHIhg0TpjjqVsP1rXWQu_vwVOHHtNkdYoA",
|
|||
|
"y": "8BQAsImGeAS46fyWw5MhYfGTT0IjBpFw2SS34Dv4Irs"
|
|||
|
},
|
|||
|
"enc": "A128CBC-HS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 124: JWE Protected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 67]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
eyJhbGciOiJFQ0RILUVTIiwia2lkIjoibWVyaWFkb2MuYnJhbmR5YnVja0BidW
|
|||
|
NrbGFuZC5leGFtcGxlIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYi
|
|||
|
LCJ4IjoibVBVS1RfYkFXR0hJaGcwVHBqanFWc1AxclhXUXVfdndWT0hIdE5rZF
|
|||
|
lvQSIsInkiOiI4QlFBc0ltR2VBUzQ2ZnlXdzVNaFlmR1RUMElqQnBGdzJTUzM0
|
|||
|
RHY0SXJzIn0sImVuYyI6IkExMjhDQkMtSFMyNTYifQ
|
|||
|
|
|||
|
Figure 125: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation on the Plaintext
|
|||
|
(Figure 72) using the following:
|
|||
|
|
|||
|
o CEK (Figure 123);
|
|||
|
|
|||
|
o Initialization Vector (Figure 121); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 125) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 126.
|
|||
|
|
|||
|
o Authentication Tag from Figure 127.
|
|||
|
|
|||
|
BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4OPKbWE1zSTEFjDfhU9
|
|||
|
IPIOSA9Bml4m7iDFwA-1ZXvHteLDtw4R1XRGMEsDIqAYtskTTmzmzNa-_q4F_e
|
|||
|
vAPUmwlO-ZG45Mnq4uhM1fm_D9rBtWolqZSF3xGNNkpOMQKF1Cl8i8wjzRli7-
|
|||
|
IXgyirlKQsbhhqRzkv8IcY6aHl24j03C-AR2le1r7URUhArM79BY8soZU0lzwI
|
|||
|
-sD5PZ3l4NDCCei9XkoIAfsXJWmySPoeRb2Ni5UZL4mYpvKDiwmyzGd65KqVw7
|
|||
|
MsFfI_K767G9C9Azp73gKZD0DyUn1mn0WW5LmyX_yJ-3AROq8p1WZBfG-ZyJ61
|
|||
|
95_JGG2m9Csg
|
|||
|
|
|||
|
Figure 126: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
WCCkNa-x4BeB9hIDIfFuhg
|
|||
|
|
|||
|
Figure 127: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.5.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 114)
|
|||
|
|
|||
|
o Initialization Vector (Figure 110)
|
|||
|
|
|||
|
o Ciphertext (Figure 115)
|
|||
|
|
|||
|
o Authentication Tag (Figure 116)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 68]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Only the general JWE JSON Serialization is presented because the
|
|||
|
flattened JWE JSON Serialization is identical.
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJFQ0RILUVTIiwia2lkIjoibWVyaWFkb2MuYnJhbmR5YnVja0BidW
|
|||
|
NrbGFuZC5leGFtcGxlIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYi
|
|||
|
LCJ4IjoibVBVS1RfYkFXR0hJaGcwVHBqanFWc1AxclhXUXVfdndWT0hIdE5rZF
|
|||
|
lvQSIsInkiOiI4QlFBc0ltR2VBUzQ2ZnlXdzVNaFlmR1RUMElqQnBGdzJTUzM0
|
|||
|
RHY0SXJzIn0sImVuYyI6IkExMjhDQkMtSFMyNTYifQ
|
|||
|
.
|
|||
|
.
|
|||
|
yc9N8v5sYyv3iGQT926IUg
|
|||
|
.
|
|||
|
BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4OPKbWE1zSTEFjDfhU9
|
|||
|
IPIOSA9Bml4m7iDFwA-1ZXvHteLDtw4R1XRGMEsDIqAYtskTTmzmzNa-_q4F_e
|
|||
|
vAPUmwlO-ZG45Mnq4uhM1fm_D9rBtWolqZSF3xGNNkpOMQKF1Cl8i8wjzRli7-
|
|||
|
IXgyirlKQsbhhqRzkv8IcY6aHl24j03C-AR2le1r7URUhArM79BY8soZU0lzwI
|
|||
|
-sD5PZ3l4NDCCei9XkoIAfsXJWmySPoeRb2Ni5UZL4mYpvKDiwmyzGd65KqVw7
|
|||
|
MsFfI_K767G9C9Azp73gKZD0DyUn1mn0WW5LmyX_yJ-3AROq8p1WZBfG-ZyJ61
|
|||
|
95_JGG2m9Csg
|
|||
|
.
|
|||
|
WCCkNa-x4BeB9hIDIfFuhg
|
|||
|
|
|||
|
Figure 128: JWE Compact Serialization
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJFQ0RILUVTIiwia2lkIjoibWVyaWFkb2MuYn
|
|||
|
JhbmR5YnVja0BidWNrbGFuZC5leGFtcGxlIiwiZXBrIjp7Imt0eSI6Ik
|
|||
|
VDIiwiY3J2IjoiUC0yNTYiLCJ4IjoibVBVS1RfYkFXR0hJaGcwVHBqan
|
|||
|
FWc1AxclhXUXVfdndWT0hIdE5rZFlvQSIsInkiOiI4QlFBc0ltR2VBUz
|
|||
|
Q2ZnlXdzVNaFlmR1RUMElqQnBGdzJTUzM0RHY0SXJzIn0sImVuYyI6Ik
|
|||
|
ExMjhDQkMtSFMyNTYifQ",
|
|||
|
"iv": "yc9N8v5sYyv3iGQT926IUg",
|
|||
|
"ciphertext": "BoDlwPnTypYq-ivjmQvAYJLb5Q6l-F3LIgQomlz87yW4O
|
|||
|
PKbWE1zSTEFjDfhU9IPIOSA9Bml4m7iDFwA-1ZXvHteLDtw4R1XRGMEs
|
|||
|
DIqAYtskTTmzmzNa-_q4F_evAPUmwlO-ZG45Mnq4uhM1fm_D9rBtWolq
|
|||
|
ZSF3xGNNkpOMQKF1Cl8i8wjzRli7-IXgyirlKQsbhhqRzkv8IcY6aHl2
|
|||
|
4j03C-AR2le1r7URUhArM79BY8soZU0lzwI-sD5PZ3l4NDCCei9XkoIA
|
|||
|
fsXJWmySPoeRb2Ni5UZL4mYpvKDiwmyzGd65KqVw7MsFfI_K767G9C9A
|
|||
|
zp73gKZD0DyUn1mn0WW5LmyX_yJ-3AROq8p1WZBfG-ZyJ6195_JGG2m9
|
|||
|
Csg",
|
|||
|
"tag": "WCCkNa-x4BeB9hIDIfFuhg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 129: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 69]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.6. Direct Encryption Using AES-GCM
|
|||
|
|
|||
|
This example illustrates encrypting content using a previously
|
|||
|
exchanged key directly and the "A128GCM" (AES-GCM) content encryption
|
|||
|
algorithm.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.6.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 130.
|
|||
|
|
|||
|
o "alg" parameter of "dir".
|
|||
|
|
|||
|
o "enc" parameter of "A128GCM".
|
|||
|
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "77c7e2b8-6e13-45cf-8672-617b5b45243a",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A128GCM",
|
|||
|
"k": "XctOhJAkA-pD9Lh7ZgW_2A"
|
|||
|
}
|
|||
|
|
|||
|
Figure 130: AES 128-Bit Key, in JWK Format
|
|||
|
|
|||
|
5.6.2. Generated Factors
|
|||
|
|
|||
|
The following is generated before encrypting:
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 131.
|
|||
|
|
|||
|
refa467QzzKx6QAB
|
|||
|
|
|||
|
Figure 131: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 70]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.6.3. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 132, encoded as base64url [RFC4648] to produce Figure 133.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "dir",
|
|||
|
"kid": "77c7e2b8-6e13-45cf-8672-617b5b45243a",
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 132: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJkaXIiLCJraWQiOiI3N2M3ZTJiOC02ZTEzLTQ1Y2YtODY3Mi02MT
|
|||
|
diNWI0NTI0M2EiLCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
|
|||
|
Figure 133: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the encryption operation on the Plaintext (Figure 72)
|
|||
|
using the following:
|
|||
|
|
|||
|
o CEK (Figure 130);
|
|||
|
|
|||
|
o Initialization Vector (Figure 131); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 133) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 134.
|
|||
|
|
|||
|
o Authentication Tag from Figure 135.
|
|||
|
|
|||
|
JW_i_f52hww_ELQPGaYyeAB6HYGcR559l9TYnSovc23XJoBcW29rHP8yZOZG7Y
|
|||
|
hLpT1bjFuvZPjQS-m0IFtVcXkZXdH_lr_FrdYt9HRUYkshtrMmIUAyGmUnd9zM
|
|||
|
DB2n0cRDIHAzFVeJUDxkUwVAE7_YGRPdcqMyiBoCO-FBdE-Nceb4h3-FtBP-c_
|
|||
|
BIwCPTjb9o0SbdcdREEMJMyZBH8ySWMVi1gPD9yxi-aQpGbSv_F9N4IZAxscj5
|
|||
|
g-NJsUPbjk29-s7LJAGb15wEBtXphVCgyy53CoIKLHHeJHXex45Uz9aKZSRSIn
|
|||
|
ZI-wjsY0yu3cT4_aQ3i1o-tiE-F8Ios61EKgyIQ4CWao8PFMj8TTnp
|
|||
|
|
|||
|
Figure 134: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
vbb32Xvllea2OtmHAdccRQ
|
|||
|
|
|||
|
Figure 135: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 71]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.6.4. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 133)
|
|||
|
|
|||
|
o Initialization Vector (Figure 131)
|
|||
|
|
|||
|
o Ciphertext (Figure 134)
|
|||
|
|
|||
|
o Authentication Tag (Figure 135)
|
|||
|
|
|||
|
Only the general JWE JSON Serialization is presented because the
|
|||
|
flattened JWE JSON Serialization is identical.
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJkaXIiLCJraWQiOiI3N2M3ZTJiOC02ZTEzLTQ1Y2YtODY3Mi02MT
|
|||
|
diNWI0NTI0M2EiLCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
.
|
|||
|
.
|
|||
|
refa467QzzKx6QAB
|
|||
|
.
|
|||
|
JW_i_f52hww_ELQPGaYyeAB6HYGcR559l9TYnSovc23XJoBcW29rHP8yZOZG7Y
|
|||
|
hLpT1bjFuvZPjQS-m0IFtVcXkZXdH_lr_FrdYt9HRUYkshtrMmIUAyGmUnd9zM
|
|||
|
DB2n0cRDIHAzFVeJUDxkUwVAE7_YGRPdcqMyiBoCO-FBdE-Nceb4h3-FtBP-c_
|
|||
|
BIwCPTjb9o0SbdcdREEMJMyZBH8ySWMVi1gPD9yxi-aQpGbSv_F9N4IZAxscj5
|
|||
|
g-NJsUPbjk29-s7LJAGb15wEBtXphVCgyy53CoIKLHHeJHXex45Uz9aKZSRSIn
|
|||
|
ZI-wjsY0yu3cT4_aQ3i1o-tiE-F8Ios61EKgyIQ4CWao8PFMj8TTnp
|
|||
|
.
|
|||
|
vbb32Xvllea2OtmHAdccRQ
|
|||
|
|
|||
|
Figure 136: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 72]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJkaXIiLCJraWQiOiI3N2M3ZTJiOC02ZTEzLT
|
|||
|
Q1Y2YtODY3Mi02MTdiNWI0NTI0M2EiLCJlbmMiOiJBMTI4R0NNIn0",
|
|||
|
"iv": "refa467QzzKx6QAB",
|
|||
|
"ciphertext": "JW_i_f52hww_ELQPGaYyeAB6HYGcR559l9TYnSovc23XJ
|
|||
|
oBcW29rHP8yZOZG7YhLpT1bjFuvZPjQS-m0IFtVcXkZXdH_lr_FrdYt9
|
|||
|
HRUYkshtrMmIUAyGmUnd9zMDB2n0cRDIHAzFVeJUDxkUwVAE7_YGRPdc
|
|||
|
qMyiBoCO-FBdE-Nceb4h3-FtBP-c_BIwCPTjb9o0SbdcdREEMJMyZBH8
|
|||
|
ySWMVi1gPD9yxi-aQpGbSv_F9N4IZAxscj5g-NJsUPbjk29-s7LJAGb1
|
|||
|
5wEBtXphVCgyy53CoIKLHHeJHXex45Uz9aKZSRSInZI-wjsY0yu3cT4_
|
|||
|
aQ3i1o-tiE-F8Ios61EKgyIQ4CWao8PFMj8TTnp",
|
|||
|
"tag": "vbb32Xvllea2OtmHAdccRQ"
|
|||
|
}
|
|||
|
|
|||
|
Figure 137: General JWE JSON Serialization
|
|||
|
|
|||
|
5.7. Key Wrap Using AES-GCM KeyWrap with AES-CBC-HMAC-SHA2
|
|||
|
|
|||
|
This example illustrates encrypting content using the "A256GCMKW"
|
|||
|
(AES-256-GCM-KeyWrap) key encryption algorithm with the "A128CBC-
|
|||
|
HS256" (AES-128-CBC-HMAC-SHA-256) content encryption algorithm.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.7.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o AES symmetric key; this example uses the key from Figure 138.
|
|||
|
|
|||
|
o "alg" parameter of "A256GCMKW".
|
|||
|
|
|||
|
o "enc" parameter of "A128CBC-HS256".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 73]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A256GCMKW",
|
|||
|
"k": "qC57l_uxcm7Nm3K-ct4GFjx8tM1U8CZ0NLBvdQstiS8"
|
|||
|
}
|
|||
|
|
|||
|
Figure 138: AES 256-Bit Key
|
|||
|
|
|||
|
5.7.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 139.
|
|||
|
|
|||
|
o Initialization Vector for content encryption; this example uses
|
|||
|
the Initialization Vector from Figure 140.
|
|||
|
|
|||
|
UWxARpat23nL9ReIj4WG3D1ee9I4r-Mv5QLuFXdy_rE
|
|||
|
|
|||
|
Figure 139: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
gz6NjyEFNm_vm8Gj6FwoFQ
|
|||
|
|
|||
|
Figure 140: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.7.3. Encrypting the Key
|
|||
|
|
|||
|
The following is generated before encrypting the CEK:
|
|||
|
|
|||
|
o Initialization Vector for key wrapping; this example uses the
|
|||
|
Initialization Vector from Figure 141.
|
|||
|
|
|||
|
KkYT0GX_2jHlfqN_
|
|||
|
|
|||
|
Figure 141: Initialization Vector for Key Wrapping, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 74]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 139)
|
|||
|
with the following:
|
|||
|
|
|||
|
o AES symmetric key (Figure 138);
|
|||
|
|
|||
|
o Initialization Vector (Figure 141); and
|
|||
|
|
|||
|
o The empty string as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Encrypted Key from Figure 142.
|
|||
|
|
|||
|
o Authentication Tag from Figure 143.
|
|||
|
|
|||
|
lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElLvYNok
|
|||
|
|
|||
|
Figure 142: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
kfPduVQ3T3H6vnewt--ksw
|
|||
|
|
|||
|
Figure 143: Authentication Tag from Key Wrapping, base64url-encoded
|
|||
|
|
|||
|
5.7.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 144, encoded to base64url [RFC4648] as Figure 145.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A256GCMKW",
|
|||
|
"kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
|
|||
|
"tag": "kfPduVQ3T3H6vnewt--ksw",
|
|||
|
"iv": "KkYT0GX_2jHlfqN_",
|
|||
|
"enc": "A128CBC-HS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 144: JWE Protected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 75]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
eyJhbGciOiJBMjU2R0NNS1ciLCJraWQiOiIxOGVjMDhlMS1iZmE5LTRkOTUtYj
|
|||
|
IwNS0yYjRkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdVZRM1QzSDZ2bmV3dC0ta3N3
|
|||
|
IiwiaXYiOiJLa1lUMEdYXzJqSGxmcU5fIiwiZW5jIjoiQTEyOENCQy1IUzI1Ni
|
|||
|
J9
|
|||
|
|
|||
|
Figure 145: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext
|
|||
|
(Figure 72) with the following:
|
|||
|
|
|||
|
o CEK (Figure 139);
|
|||
|
|
|||
|
o Initialization Vector (Figure 140); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 145) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 146.
|
|||
|
|
|||
|
o Authentication Tag from Figure 147.
|
|||
|
|
|||
|
Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8EqoDZHyFKFBupS8iaE
|
|||
|
eVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyWtZKX0gxKdy6HgLvqoGNbZCz
|
|||
|
LjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQHLcqAHxy51449xkjZ7ewzZaGV3eFq
|
|||
|
hpco8o4DijXaG5_7kp3h2cajRfDgymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hde
|
|||
|
b6yhdTynCRmu-kqtO5Dec4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0Jtj
|
|||
|
xAj4UPI61oONK7zzFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR
|
|||
|
1B-gxpNk3xWU
|
|||
|
|
|||
|
Figure 146: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
DKW7jrb4WaRSNfbXVPlT5g
|
|||
|
|
|||
|
Figure 147: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 76]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.7.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 145)
|
|||
|
|
|||
|
o Encrypted Key (Figure 142)
|
|||
|
|
|||
|
o Initialization Vector (Figure 140)
|
|||
|
|
|||
|
o Ciphertext (Figure 146)
|
|||
|
|
|||
|
o Authentication Tag (Figure 147)
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJBMjU2R0NNS1ciLCJraWQiOiIxOGVjMDhlMS1iZmE5LTRkOTUtYj
|
|||
|
IwNS0yYjRkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdVZRM1QzSDZ2bmV3dC0ta3N3
|
|||
|
IiwiaXYiOiJLa1lUMEdYXzJqSGxmcU5fIiwiZW5jIjoiQTEyOENCQy1IUzI1Ni
|
|||
|
J9
|
|||
|
.
|
|||
|
lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElLvYNok
|
|||
|
.
|
|||
|
gz6NjyEFNm_vm8Gj6FwoFQ
|
|||
|
.
|
|||
|
Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8EqoDZHyFKFBupS8iaE
|
|||
|
eVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyWtZKX0gxKdy6HgLvqoGNbZCz
|
|||
|
LjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQHLcqAHxy51449xkjZ7ewzZaGV3eFq
|
|||
|
hpco8o4DijXaG5_7kp3h2cajRfDgymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hde
|
|||
|
b6yhdTynCRmu-kqtO5Dec4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0Jtj
|
|||
|
xAj4UPI61oONK7zzFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR
|
|||
|
1B-gxpNk3xWU
|
|||
|
.
|
|||
|
DKW7jrb4WaRSNfbXVPlT5g
|
|||
|
|
|||
|
Figure 148: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 77]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElL
|
|||
|
vYNok"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJBMjU2R0NNS1ciLCJraWQiOiIxOGVjMDhlMS
|
|||
|
1iZmE5LTRkOTUtYjIwNS0yYjRkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdV
|
|||
|
ZRM1QzSDZ2bmV3dC0ta3N3IiwiaXYiOiJLa1lUMEdYXzJqSGxmcU5fIi
|
|||
|
wiZW5jIjoiQTEyOENCQy1IUzI1NiJ9",
|
|||
|
"iv": "gz6NjyEFNm_vm8Gj6FwoFQ",
|
|||
|
"ciphertext": "Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8E
|
|||
|
qoDZHyFKFBupS8iaEeVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyW
|
|||
|
tZKX0gxKdy6HgLvqoGNbZCzLjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQ
|
|||
|
HLcqAHxy51449xkjZ7ewzZaGV3eFqhpco8o4DijXaG5_7kp3h2cajRfD
|
|||
|
gymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hdeb6yhdTynCRmu-kqtO5Dec
|
|||
|
4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0JtjxAj4UPI61oONK7z
|
|||
|
zFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR1B-gxpNk3
|
|||
|
xWU",
|
|||
|
"tag": "DKW7jrb4WaRSNfbXVPlT5g"
|
|||
|
}
|
|||
|
|
|||
|
Figure 149: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 78]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJBMjU2R0NNS1ciLCJpdiI6IktrWVQwR1hfMm
|
|||
|
pIbGZxTl8iLCJraWQiOiIxOGVjMDhlMS1iZmE5LTRkOTUtYjIwNS0yYj
|
|||
|
RkZDFkNDMyMWQiLCJ0YWciOiJrZlBkdVZRM1QzSDZ2bmV3dC0ta3N3Ii
|
|||
|
wiZW5jIjoiQTEyOENCQy1IUzI1NiJ9",
|
|||
|
"encrypted_key": "lJf3HbOApxMEBkCMOoTnnABxs_CvTWUmZQ2ElLvYNo
|
|||
|
k",
|
|||
|
"iv": "gz6NjyEFNm_vm8Gj6FwoFQ",
|
|||
|
"ciphertext": "Jf5p9-ZhJlJy_IQ_byKFmI0Ro7w7G1QiaZpI8OaiVgD8E
|
|||
|
qoDZHyFKFBupS8iaEeVIgMqWmsuJKuoVgzR3YfzoMd3GxEm3VxNhzWyW
|
|||
|
tZKX0gxKdy6HgLvqoGNbZCzLjqcpDiF8q2_62EVAbr2uSc2oaxFmFuIQ
|
|||
|
HLcqAHxy51449xkjZ7ewzZaGV3eFqhpco8o4DijXaG5_7kp3h2cajRfD
|
|||
|
gymuxUbWgLqaeNQaJtvJmSMFuEOSAzw9Hdeb6yhdTynCRmu-kqtO5Dec
|
|||
|
4lT2OMZKpnxc_F1_4yDJFcqb5CiDSmA-psB2k0JtjxAj4UPI61oONK7z
|
|||
|
zFIu4gBfjJCndsZfdvG7h8wGjV98QhrKEnR7xKZ3KCr0_qR1B-gxpNk3
|
|||
|
xWU",
|
|||
|
"tag": "NvBveHr_vonkvflfnUrmBQ"
|
|||
|
}
|
|||
|
|
|||
|
Figure 150: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.8. Key Wrap Using AES-KeyWrap with AES-GCM
|
|||
|
|
|||
|
The following example illustrates content encryption using the
|
|||
|
"A128KW" (AES-128-KeyWrap) key encryption algorithm and the "A128GCM"
|
|||
|
(AES-128-GCM) content encryption algorithm.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.8.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o AES symmetric key; this example uses the key from Figure 151.
|
|||
|
|
|||
|
o "alg" parameter of "A128KW".
|
|||
|
|
|||
|
o "enc" parameter of "A128GCM".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 79]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
"kty": "oct",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"use": "enc",
|
|||
|
"alg": "A128KW",
|
|||
|
"k": "GZy6sIZ6wl9NJOKB-jnmVQ"
|
|||
|
}
|
|||
|
|
|||
|
Figure 151: AES 128-Bit Key
|
|||
|
|
|||
|
5.8.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key; this example uses
|
|||
|
the key from Figure 152.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 153.
|
|||
|
|
|||
|
aY5_Ghmk9KxWPBLu_glx1w
|
|||
|
|
|||
|
Figure 152: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
Qx0pmsDa8KnJc9Jo
|
|||
|
|
|||
|
Figure 153: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.8.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 152)
|
|||
|
with the AES symmetric key (Figure 151) produces the following
|
|||
|
Encrypted Key:
|
|||
|
|
|||
|
CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx
|
|||
|
|
|||
|
Figure 154: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.8.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 155, encoded to base64url [RFC4648] as Figure 156.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 80]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 155: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
|
|||
|
04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
|
|||
|
Figure 156: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption over the Plaintext (Figure 72) with
|
|||
|
the following:
|
|||
|
|
|||
|
o CEK (Figure 152);
|
|||
|
|
|||
|
o Initialization Vector (Figure 153); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 156) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 157.
|
|||
|
|
|||
|
o Authentication Tag from Figure 158.
|
|||
|
|
|||
|
AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1bTdhtFJgJxeVmJkLD6
|
|||
|
1A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGkd3EkU0vjHi9gTlb90qSYFfe
|
|||
|
F0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiYSoYJVSpf7ej6zaYcMv3WwdxDFl8RE
|
|||
|
wOhNImk2Xld2JXq6BR53TSFkyT7PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-p
|
|||
|
uQsmthc9Zg0ojmJfqqFvETUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRa
|
|||
|
a8Z7MOZ7UGxGIMvEmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF
|
|||
|
|
|||
|
Figure 157: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
ER7MWJZ1FBI_NKvn7Zb1Lw
|
|||
|
|
|||
|
Figure 158: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 81]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.8.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 156)
|
|||
|
|
|||
|
o Encrypted Key (Figure 154)
|
|||
|
|
|||
|
o Initialization Vector (Figure 153)
|
|||
|
|
|||
|
o Ciphertext (Figure 157)
|
|||
|
|
|||
|
o Authentication Tag (Figure 158)
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
|
|||
|
04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
.
|
|||
|
CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx
|
|||
|
.
|
|||
|
Qx0pmsDa8KnJc9Jo
|
|||
|
.
|
|||
|
AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1bTdhtFJgJxeVmJkLD6
|
|||
|
1A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGkd3EkU0vjHi9gTlb90qSYFfe
|
|||
|
F0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiYSoYJVSpf7ej6zaYcMv3WwdxDFl8RE
|
|||
|
wOhNImk2Xld2JXq6BR53TSFkyT7PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-p
|
|||
|
uQsmthc9Zg0ojmJfqqFvETUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRa
|
|||
|
a8Z7MOZ7UGxGIMvEmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF
|
|||
|
.
|
|||
|
ER7MWJZ1FBI_NKvn7Zb1Lw
|
|||
|
|
|||
|
Figure 159: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 82]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
|
|||
|
MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
|
|||
|
0",
|
|||
|
"iv": "Qx0pmsDa8KnJc9Jo",
|
|||
|
"ciphertext": "AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1b
|
|||
|
TdhtFJgJxeVmJkLD61A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGk
|
|||
|
d3EkU0vjHi9gTlb90qSYFfeF0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiY
|
|||
|
SoYJVSpf7ej6zaYcMv3WwdxDFl8REwOhNImk2Xld2JXq6BR53TSFkyT7
|
|||
|
PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-puQsmthc9Zg0ojmJfqqFvE
|
|||
|
TUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRaa8Z7MOZ7UGxGIMv
|
|||
|
EmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF",
|
|||
|
"tag": "ER7MWJZ1FBI_NKvn7Zb1Lw"
|
|||
|
}
|
|||
|
|
|||
|
Figure 160: General JWE JSON Serialization
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
|
|||
|
MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
|
|||
|
0",
|
|||
|
"encrypted_key": "CBI6oDw8MydIx1IBntf_lQcw2MmJKIQx",
|
|||
|
"iv": "Qx0pmsDa8KnJc9Jo",
|
|||
|
"ciphertext": "AwliP-KmWgsZ37BvzCefNen6VTbRK3QMA4TkvRkH0tP1b
|
|||
|
TdhtFJgJxeVmJkLD61A1hnWGetdg11c9ADsnWgL56NyxwSYjU1ZEHcGk
|
|||
|
d3EkU0vjHi9gTlb90qSYFfeF0LwkcTtjbYKCsiNJQkcIp1yeM03OmuiY
|
|||
|
SoYJVSpf7ej6zaYcMv3WwdxDFl8REwOhNImk2Xld2JXq6BR53TSFkyT7
|
|||
|
PwVLuq-1GwtGHlQeg7gDT6xW0JqHDPn_H-puQsmthc9Zg0ojmJfqqFvE
|
|||
|
TUxLAF-KjcBTS5dNy6egwkYtOt8EIHK-oEsKYtZRaa8Z7MOZ7UGxGIMv
|
|||
|
EmxrGCPeJa14slv2-gaqK0kEThkaSqdYw0FkQZF",
|
|||
|
"tag": "ER7MWJZ1FBI_NKvn7Zb1Lw"
|
|||
|
}
|
|||
|
|
|||
|
Figure 161: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 83]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.9. Compressed Content
|
|||
|
|
|||
|
This example illustrates encrypting content that is first compressed.
|
|||
|
It reuses the AES symmetric key, key encryption algorithm, and
|
|||
|
content encryption algorithm from Section 5.8.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.9.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o Recipient encryption key; this example uses the key from
|
|||
|
Figure 151.
|
|||
|
|
|||
|
o Key encryption algorithm; this example uses "A128KW".
|
|||
|
|
|||
|
o Content encryption algorithm; this example uses "A128GCM".
|
|||
|
|
|||
|
o "zip" parameter of "DEF".
|
|||
|
|
|||
|
5.9.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o Compressed Plaintext from the original Plaintext content;
|
|||
|
compressing Figure 72 using the DEFLATE [RFC1951] algorithm
|
|||
|
produces the compressed Plaintext from Figure 162.
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 163.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 164.
|
|||
|
|
|||
|
bY_BDcIwDEVX-QNU3QEOrIA4pqlDokYxchxVvbEDGzIJbioOSJwc-f___HPjBu
|
|||
|
8KVFpVtAplVE1-wZo0YjNZo3C7R5v72pV5f5X382VWjYQpqZKAyjziZOr2B7kQ
|
|||
|
PSy6oZIXUnDYbVKN4jNXi2u0yB7t1qSHTjmMODf9QgvrDzfTIQXnyQRuUya4zI
|
|||
|
WG3vTOdir0v7BRHFYWq3k1k1A_gSDJqtcBF-GZxw8
|
|||
|
|
|||
|
Figure 162: Compressed Plaintext, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 84]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
hC-MpLZSuwWv8sexS6ydfw
|
|||
|
|
|||
|
Figure 163: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
p9pUq6XHY0jfEZIl
|
|||
|
|
|||
|
Figure 164: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.9.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 163)
|
|||
|
with the AES symmetric key (Figure 151) produces the following
|
|||
|
Encrypted Key:
|
|||
|
|
|||
|
5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi
|
|||
|
|
|||
|
Figure 165: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.9.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 166, encoded to base64url [RFC4648] as Figure 167.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"enc": "A128GCM",
|
|||
|
"zip": "DEF"
|
|||
|
}
|
|||
|
|
|||
|
Figure 166: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
|
|||
|
04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIiwiemlwIjoiREVGIn0
|
|||
|
|
|||
|
Figure 167: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 85]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the content encryption operation over the compressed
|
|||
|
Plaintext (Figure 162, encoded as an octet string) with the
|
|||
|
following:
|
|||
|
|
|||
|
o CEK (Figure 163);
|
|||
|
|
|||
|
o Initialization Vector (Figure 164); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 167) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 168.
|
|||
|
|
|||
|
o Authentication Tag from Figure 169.
|
|||
|
|
|||
|
HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6VB8hry57tDZ61jXyez
|
|||
|
SPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWGml8blyiMQmOn9J--XhhlYg0
|
|||
|
m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDHj0aBMG6152PsM-w5E_o2B3jDbrYBK
|
|||
|
hpYA7qi3AyijnCJ7BP9rr3U8kxExCpG3mK420TjOw
|
|||
|
|
|||
|
Figure 168: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
VILuUwuIxaLVmh5X-T7kmA
|
|||
|
|
|||
|
Figure 169: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.9.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 167)
|
|||
|
|
|||
|
o Encrypted Key (Figure 165)
|
|||
|
|
|||
|
o Initialization Vector (Figure 164)
|
|||
|
|
|||
|
o Ciphertext (Figure 168)
|
|||
|
|
|||
|
o Authentication Tag (Figure 169)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 86]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
|
|||
|
04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIiwiemlwIjoiREVGIn0
|
|||
|
.
|
|||
|
5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi
|
|||
|
.
|
|||
|
p9pUq6XHY0jfEZIl
|
|||
|
.
|
|||
|
HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6VB8hry57tDZ61jXyez
|
|||
|
SPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWGml8blyiMQmOn9J--XhhlYg0
|
|||
|
m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDHj0aBMG6152PsM-w5E_o2B3jDbrYBK
|
|||
|
hpYA7qi3AyijnCJ7BP9rr3U8kxExCpG3mK420TjOw
|
|||
|
.
|
|||
|
VILuUwuIxaLVmh5X-T7kmA
|
|||
|
|
|||
|
Figure 170: JWE Compact Serialization
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
|
|||
|
MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIi
|
|||
|
wiemlwIjoiREVGIn0",
|
|||
|
"iv": "p9pUq6XHY0jfEZIl",
|
|||
|
"ciphertext": "HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6V
|
|||
|
B8hry57tDZ61jXyezSPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWG
|
|||
|
ml8blyiMQmOn9J--XhhlYg0m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDH
|
|||
|
j0aBMG6152PsM-w5E_o2B3jDbrYBKhpYA7qi3AyijnCJ7BP9rr3U8kxE
|
|||
|
xCpG3mK420TjOw",
|
|||
|
"tag": "VILuUwuIxaLVmh5X-T7kmA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 171: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 87]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
|
|||
|
MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIi
|
|||
|
wiemlwIjoiREVGIn0",
|
|||
|
"encrypted_key": "5vUT2WOtQxKWcekM_IzVQwkGgzlFDwPi",
|
|||
|
"iv": "p9pUq6XHY0jfEZIl",
|
|||
|
"ciphertext": "HbDtOsdai1oYziSx25KEeTxmwnh8L8jKMFNc1k3zmMI6V
|
|||
|
B8hry57tDZ61jXyezSPt0fdLVfe6Jf5y5-JaCap_JQBcb5opbmT60uWG
|
|||
|
ml8blyiMQmOn9J--XhhlYg0m-BHaqfDO5iTOWxPxFMUedx7WCy8mxgDH
|
|||
|
j0aBMG6152PsM-w5E_o2B3jDbrYBKhpYA7qi3AyijnCJ7BP9rr3U8kxE
|
|||
|
xCpG3mK420TjOw",
|
|||
|
"tag": "VILuUwuIxaLVmh5X-T7kmA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 172: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.10. Including Additional Authenticated Data
|
|||
|
|
|||
|
This example illustrates encrypting content that includes additional
|
|||
|
authenticated data. As this example includes an additional top-level
|
|||
|
property not present in the JWE Compact Serialization, only the
|
|||
|
flattened JWE JSON Serialization and general JWE JSON Serialization
|
|||
|
are possible.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.10.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o Recipient encryption key; this example uses the key from
|
|||
|
Figure 151.
|
|||
|
|
|||
|
o Key encryption algorithm; this example uses "A128KW".
|
|||
|
|
|||
|
o Content encryption algorithm; this example uses "A128GCM".
|
|||
|
|
|||
|
o Additional Authenticated Data; this example uses a vCard [RFC7095]
|
|||
|
from Figure 173, serialized to UTF-8.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 88]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
[
|
|||
|
"vcard",
|
|||
|
[
|
|||
|
[ "version", {}, "text", "4.0" ],
|
|||
|
[ "fn", {}, "text", "Meriadoc Brandybuck" ],
|
|||
|
[ "n", {},
|
|||
|
"text", [
|
|||
|
"Brandybuck", "Meriadoc", "Mr.", ""
|
|||
|
]
|
|||
|
],
|
|||
|
[ "bday", {}, "text", "TA 2982" ],
|
|||
|
[ "gender", {}, "text", "M" ]
|
|||
|
]
|
|||
|
]
|
|||
|
|
|||
|
Figure 173: Additional Authenticated Data, in JSON Format
|
|||
|
|
|||
|
NOTE: Whitespace between JSON values was added for readability.
|
|||
|
|
|||
|
5.10.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 174.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 175.
|
|||
|
|
|||
|
o Encoded Additional Authenticated Data (AAD); this example uses the
|
|||
|
Additional Authenticated Data from Figure 173, encoded to
|
|||
|
base64url [RFC4648] as Figure 176.
|
|||
|
|
|||
|
75m1ALsYv10pZTKPWrsqdg
|
|||
|
|
|||
|
Figure 174: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
veCx9ece2orS7c_N
|
|||
|
|
|||
|
Figure 175: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
WyJ2Y2FyZCIsW1sidmVyc2lvbiIse30sInRleHQiLCI0LjAiXSxbImZuIix7fS
|
|||
|
widGV4dCIsIk1lcmlhZG9jIEJyYW5keWJ1Y2siXSxbIm4iLHt9LCJ0ZXh0Iixb
|
|||
|
IkJyYW5keWJ1Y2siLCJNZXJpYWRvYyIsIk1yLiIsIiJdXSxbImJkYXkiLHt9LC
|
|||
|
J0ZXh0IiwiVEEgMjk4MiJdLFsiZ2VuZGVyIix7fSwidGV4dCIsIk0iXV1d
|
|||
|
|
|||
|
Figure 176: Additional Authenticated Data, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 89]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.10.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 174)
|
|||
|
with the AES symmetric key (Figure 151) produces the following
|
|||
|
Encrypted Key:
|
|||
|
|
|||
|
4YiiQ_ZzH76TaIkJmYfRFgOV9MIpnx4X
|
|||
|
|
|||
|
Figure 177: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.10.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 178, encoded to base64url [RFC4648] as Figure 179.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 178: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04MzMyLTQzZDktYTQ2OC
|
|||
|
04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn0
|
|||
|
|
|||
|
Figure 179: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext with
|
|||
|
the following:
|
|||
|
|
|||
|
o CEK (Figure 174);
|
|||
|
|
|||
|
o Initialization Vector (Figure 175); and
|
|||
|
|
|||
|
o Concatenation of the JWE Protected Header (Figure 179), ".", and
|
|||
|
the base64url [RFC4648] encoding of Figure 173 as authenticated
|
|||
|
data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 180.
|
|||
|
|
|||
|
o Authentication Tag from Figure 181.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 90]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Z_3cbr0k3bVM6N3oSNmHz7Lyf3iPppGf3Pj17wNZqteJ0Ui8p74SchQP8xygM1
|
|||
|
oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14T_4NFqF-p2Mx8zkbKxI7oPK
|
|||
|
8KNarFbyxIDvICNqBLba-v3uzXBdB89fzOI-Lv4PjOFAQGHrgv1rjXAmKbgkft
|
|||
|
9cB4WeyZw8MldbBhc-V_KWZslrsLNygon_JJWd_ek6LQn5NRehvApqf9ZrxB4a
|
|||
|
q3FXBxOxCys35PhCdaggy2kfUfl2OkwKnWUbgXVD1C6HxLIlqHhCwXDG59weHr
|
|||
|
RDQeHyMRoBljoV3X_bUTJDnKBFOod7nLz-cj48JMx3SnCZTpbQAkFV
|
|||
|
|
|||
|
Figure 180: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
vOaH_Rajnpy_3hOtqvZHRA
|
|||
|
|
|||
|
Figure 181: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.10.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 179)
|
|||
|
|
|||
|
o Encrypted Key (Figure 177)
|
|||
|
|
|||
|
o Initialization Vector (Figure 175)
|
|||
|
|
|||
|
o Additional Authenticated Data (Figure 176)
|
|||
|
|
|||
|
o Ciphertext (Figure 180)
|
|||
|
|
|||
|
o Authentication Tag (Figure 181)
|
|||
|
|
|||
|
The JWE Compact Serialization is not presented because it does not
|
|||
|
support this use case.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 91]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "4YiiQ_ZzH76TaIkJmYfRFgOV9MIpnx4X"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
|
|||
|
MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
|
|||
|
0",
|
|||
|
"iv": "veCx9ece2orS7c_N",
|
|||
|
"aad": "WyJ2Y2FyZCIsW1sidmVyc2lvbiIse30sInRleHQiLCI0LjAiXSxb
|
|||
|
ImZuIix7fSwidGV4dCIsIk1lcmlhZG9jIEJyYW5keWJ1Y2siXSxbIm4i
|
|||
|
LHt9LCJ0ZXh0IixbIkJyYW5keWJ1Y2siLCJNZXJpYWRvYyIsIk1yLiIs
|
|||
|
IiJdXSxbImJkYXkiLHt9LCJ0ZXh0IiwiVEEgMjk4MiJdLFsiZ2VuZGVy
|
|||
|
Iix7fSwidGV4dCIsIk0iXV1d",
|
|||
|
"ciphertext": "Z_3cbr0k3bVM6N3oSNmHz7Lyf3iPppGf3Pj17wNZqteJ0
|
|||
|
Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14
|
|||
|
T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
|
|||
|
OI-Lv4PjOFAQGHrgv1rjXAmKbgkft9cB4WeyZw8MldbBhc-V_KWZslrs
|
|||
|
LNygon_JJWd_ek6LQn5NRehvApqf9ZrxB4aq3FXBxOxCys35PhCdaggy
|
|||
|
2kfUfl2OkwKnWUbgXVD1C6HxLIlqHhCwXDG59weHrRDQeHyMRoBljoV3
|
|||
|
X_bUTJDnKBFOod7nLz-cj48JMx3SnCZTpbQAkFV",
|
|||
|
"tag": "vOaH_Rajnpy_3hOtqvZHRA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 182: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 92]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJhbGciOiJBMTI4S1ciLCJraWQiOiI4MWIyMDk2NS04Mz
|
|||
|
MyLTQzZDktYTQ2OC04MjE2MGFkOTFhYzgiLCJlbmMiOiJBMTI4R0NNIn
|
|||
|
0",
|
|||
|
"encrypted_key": "4YiiQ_ZzH76TaIkJmYfRFgOV9MIpnx4X",
|
|||
|
"aad": "WyJ2Y2FyZCIsW1sidmVyc2lvbiIse30sInRleHQiLCI0LjAiXSxb
|
|||
|
ImZuIix7fSwidGV4dCIsIk1lcmlhZG9jIEJyYW5keWJ1Y2siXSxbIm4i
|
|||
|
LHt9LCJ0ZXh0IixbIkJyYW5keWJ1Y2siLCJNZXJpYWRvYyIsIk1yLiIs
|
|||
|
IiJdXSxbImJkYXkiLHt9LCJ0ZXh0IiwiVEEgMjk4MiJdLFsiZ2VuZGVy
|
|||
|
Iix7fSwidGV4dCIsIk0iXV1d",
|
|||
|
"iv": "veCx9ece2orS7c_N",
|
|||
|
"ciphertext": "Z_3cbr0k3bVM6N3oSNmHz7Lyf3iPppGf3Pj17wNZqteJ0
|
|||
|
Ui8p74SchQP8xygM1oFRWCNzeIa6s6BcEtp8qEFiqTUEyiNkOWDNoF14
|
|||
|
T_4NFqF-p2Mx8zkbKxI7oPK8KNarFbyxIDvICNqBLba-v3uzXBdB89fz
|
|||
|
OI-Lv4PjOFAQGHrgv1rjXAmKbgkft9cB4WeyZw8MldbBhc-V_KWZslrs
|
|||
|
LNygon_JJWd_ek6LQn5NRehvApqf9ZrxB4aq3FXBxOxCys35PhCdaggy
|
|||
|
2kfUfl2OkwKnWUbgXVD1C6HxLIlqHhCwXDG59weHrRDQeHyMRoBljoV3
|
|||
|
X_bUTJDnKBFOod7nLz-cj48JMx3SnCZTpbQAkFV",
|
|||
|
"tag": "vOaH_Rajnpy_3hOtqvZHRA"
|
|||
|
}
|
|||
|
|
|||
|
Figure 183: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.11. Protecting Specific Header Fields
|
|||
|
|
|||
|
This example illustrates encrypting content where only certain JOSE
|
|||
|
Header Parameters are protected. As this example includes parameters
|
|||
|
in the JWE Shared Unprotected Header, only the general JWE JSON
|
|||
|
Serialization and flattened JWE JSON Serialization are possible.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.11.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o Recipient encryption key; this example uses the key from
|
|||
|
Figure 151.
|
|||
|
|
|||
|
o Key encryption algorithm; this example uses "A128KW".
|
|||
|
|
|||
|
o Content encryption algorithm; this example uses "A128GCM".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 93]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.11.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 184.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 185.
|
|||
|
|
|||
|
WDgEptBmQs9ouUvArz6x6g
|
|||
|
|
|||
|
Figure 184: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
WgEJsDS9bkoXQ3nR
|
|||
|
|
|||
|
Figure 185: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.11.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 184)
|
|||
|
with the AES symmetric key (Figure 151) produces the following
|
|||
|
Encrypted Key:
|
|||
|
|
|||
|
jJIcM9J-hbx3wnqhf5FlkEYos0sHsF0H
|
|||
|
|
|||
|
Figure 186: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.11.4. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 187, encoded to base64url [RFC4648] as Figure 188.
|
|||
|
|
|||
|
{
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 187: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJlbmMiOiJBMTI4R0NNIn0
|
|||
|
|
|||
|
Figure 188: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 94]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext with
|
|||
|
the following:
|
|||
|
|
|||
|
o CEK (Figure 184);
|
|||
|
|
|||
|
o Initialization Vector (Figure 185); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 188) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 189.
|
|||
|
|
|||
|
o Authentication Tag from Figure 190.
|
|||
|
|
|||
|
lIbCyRmRJxnB2yLQOTqjCDKV3H30ossOw3uD9DPsqLL2DM3swKkjOwQyZtWsFL
|
|||
|
YMj5YeLht_StAn21tHmQJuuNt64T8D4t6C7kC9OCCJ1IHAolUv4MyOt80MoPb8
|
|||
|
fZYbNKqplzYJgIL58g8N2v46OgyG637d6uuKPwhAnTGm_zWhqc_srOvgiLkzyF
|
|||
|
XPq1hBAURbc3-8BqeRb48iR1-_5g5UjWVD3lgiLCN_P7AW8mIiFvUNXBPJK3nO
|
|||
|
WL4teUPS8yHLbWeL83olU4UAgL48x-8dDkH23JykibVSQju-f7e-1xreHWXzWL
|
|||
|
Hs1NqBbre0dEwK3HX_xM0LjUz77Krppgegoutpf5qaKg3l-_xMINmf
|
|||
|
|
|||
|
Figure 189: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
fNYLqpUe84KD45lvDiaBAQ
|
|||
|
|
|||
|
Figure 190: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.11.5. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Shared Unprotected Header (Figure 191)
|
|||
|
|
|||
|
o JWE Protected Header (Figure 188)
|
|||
|
|
|||
|
o Encrypted Key (Figure 186)
|
|||
|
|
|||
|
o Initialization Vector (Figure 185)
|
|||
|
|
|||
|
o Ciphertext (Figure 189)
|
|||
|
|
|||
|
o Authentication Tag (Figure 190)
|
|||
|
|
|||
|
The JWE Compact Serialization is not presented because it does not
|
|||
|
support this use case.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 95]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The following JWE Shared Unprotected Header is generated before
|
|||
|
assembling the output results:
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8"
|
|||
|
}
|
|||
|
|
|||
|
Figure 191: JWE Shared Unprotected Header JSON
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "jJIcM9J-hbx3wnqhf5FlkEYos0sHsF0H"
|
|||
|
}
|
|||
|
],
|
|||
|
"unprotected": {
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8"
|
|||
|
},
|
|||
|
"protected": "eyJlbmMiOiJBMTI4R0NNIn0",
|
|||
|
"iv": "WgEJsDS9bkoXQ3nR",
|
|||
|
"ciphertext": "lIbCyRmRJxnB2yLQOTqjCDKV3H30ossOw3uD9DPsqLL2D
|
|||
|
M3swKkjOwQyZtWsFLYMj5YeLht_StAn21tHmQJuuNt64T8D4t6C7kC9O
|
|||
|
CCJ1IHAolUv4MyOt80MoPb8fZYbNKqplzYJgIL58g8N2v46OgyG637d6
|
|||
|
uuKPwhAnTGm_zWhqc_srOvgiLkzyFXPq1hBAURbc3-8BqeRb48iR1-_5
|
|||
|
g5UjWVD3lgiLCN_P7AW8mIiFvUNXBPJK3nOWL4teUPS8yHLbWeL83olU
|
|||
|
4UAgL48x-8dDkH23JykibVSQju-f7e-1xreHWXzWLHs1NqBbre0dEwK3
|
|||
|
HX_xM0LjUz77Krppgegoutpf5qaKg3l-_xMINmf",
|
|||
|
"tag": "fNYLqpUe84KD45lvDiaBAQ"
|
|||
|
}
|
|||
|
|
|||
|
Figure 192: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 96]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"protected": "eyJlbmMiOiJBMTI4R0NNIn0",
|
|||
|
"unprotected": {
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8"
|
|||
|
},
|
|||
|
"encrypted_key": "jJIcM9J-hbx3wnqhf5FlkEYos0sHsF0H",
|
|||
|
"iv": "WgEJsDS9bkoXQ3nR",
|
|||
|
"ciphertext": "lIbCyRmRJxnB2yLQOTqjCDKV3H30ossOw3uD9DPsqLL2D
|
|||
|
M3swKkjOwQyZtWsFLYMj5YeLht_StAn21tHmQJuuNt64T8D4t6C7kC9O
|
|||
|
CCJ1IHAolUv4MyOt80MoPb8fZYbNKqplzYJgIL58g8N2v46OgyG637d6
|
|||
|
uuKPwhAnTGm_zWhqc_srOvgiLkzyFXPq1hBAURbc3-8BqeRb48iR1-_5
|
|||
|
g5UjWVD3lgiLCN_P7AW8mIiFvUNXBPJK3nOWL4teUPS8yHLbWeL83olU
|
|||
|
4UAgL48x-8dDkH23JykibVSQju-f7e-1xreHWXzWLHs1NqBbre0dEwK3
|
|||
|
HX_xM0LjUz77Krppgegoutpf5qaKg3l-_xMINmf",
|
|||
|
"tag": "fNYLqpUe84KD45lvDiaBAQ"
|
|||
|
}
|
|||
|
|
|||
|
Figure 193: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
5.12. Protecting Content Only
|
|||
|
|
|||
|
This example illustrates encrypting content where none of the JOSE
|
|||
|
header parameters are protected. As this example includes parameters
|
|||
|
only in the JWE Shared Unprotected Header, only the flattened JWE
|
|||
|
JSON Serialization and general JWE JSON Serialization are possible.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.12.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 72.
|
|||
|
|
|||
|
o Recipient encryption key; this example uses the key from
|
|||
|
Figure 151.
|
|||
|
|
|||
|
o Key encryption algorithm; this example uses "A128KW".
|
|||
|
|
|||
|
o Content encryption algorithm; this example uses "A128GCM".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 97]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.12.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key; this example the
|
|||
|
key from Figure 194.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 195.
|
|||
|
|
|||
|
KBooAFl30QPV3vkcZlXnzQ
|
|||
|
|
|||
|
Figure 194: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
YihBoVOGsR1l7jCD
|
|||
|
|
|||
|
Figure 195: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.12.3. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 194)
|
|||
|
with the AES symmetric key (Figure 151) produces the following
|
|||
|
Encrypted Key:
|
|||
|
|
|||
|
244YHfO_W7RMpQW81UjQrZcq5LSyqiPv
|
|||
|
|
|||
|
Figure 196: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
5.12.4. Encrypting the Content
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext
|
|||
|
(Figure 72) using the following:
|
|||
|
|
|||
|
o CEK (Figure 194);
|
|||
|
|
|||
|
o Initialization Vector (Figure 195); and
|
|||
|
|
|||
|
o Empty string as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 197.
|
|||
|
|
|||
|
o Authentication Tag from Figure 198.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 98]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
qtPIMMaOBRgASL10dNQhOa7Gqrk7Eal1vwht7R4TT1uq-arsVCPaIeFwQfzrSS
|
|||
|
6oEUWbBtxEasE0vC6r7sphyVziMCVJEuRJyoAHFSP3eqQPb4Ic1SDSqyXjw_L3
|
|||
|
svybhHYUGyQuTmUQEDjgjJfBOifwHIsDsRPeBz1NomqeifVPq5GTCWFo5k_MNI
|
|||
|
QURR2Wj0AHC2k7JZfu2iWjUHLF8ExFZLZ4nlmsvJu_mvifMYiikfNfsZAudISO
|
|||
|
a6O73yPZtL04k_1FI7WDfrb2w7OqKLWDXzlpcxohPVOLQwpA3mFNRKdY-bQz4Z
|
|||
|
4KX9lfz1cne31N4-8BKmojpw-OdQjKdLOGkC445Fb_K1tlDQXw2sBF
|
|||
|
|
|||
|
Figure 197: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
e2m0Vm7JvjK2VpCKXS-kyg
|
|||
|
|
|||
|
Figure 198: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
5.12.5. Output Results
|
|||
|
|
|||
|
The JWE Compact Serialization is not presented because it does not
|
|||
|
support this use case.
|
|||
|
|
|||
|
The following JWE Shared Unprotected Header is generated before
|
|||
|
assembling the output results:
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 199: JWE Shared Unprotected Header JSON
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Shared Unprotected Header (Figure 199)
|
|||
|
|
|||
|
o Encrypted Key (Figure 196)
|
|||
|
|
|||
|
o Initialization Vector (Figure 195)
|
|||
|
|
|||
|
o Ciphertext (Figure 197)
|
|||
|
|
|||
|
o Authentication Tag (Figure 198)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 99]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "244YHfO_W7RMpQW81UjQrZcq5LSyqiPv"
|
|||
|
}
|
|||
|
],
|
|||
|
"unprotected": {
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"enc": "A128GCM"
|
|||
|
},
|
|||
|
"iv": "YihBoVOGsR1l7jCD",
|
|||
|
"ciphertext": "qtPIMMaOBRgASL10dNQhOa7Gqrk7Eal1vwht7R4TT1uq-
|
|||
|
arsVCPaIeFwQfzrSS6oEUWbBtxEasE0vC6r7sphyVziMCVJEuRJyoAHF
|
|||
|
SP3eqQPb4Ic1SDSqyXjw_L3svybhHYUGyQuTmUQEDjgjJfBOifwHIsDs
|
|||
|
RPeBz1NomqeifVPq5GTCWFo5k_MNIQURR2Wj0AHC2k7JZfu2iWjUHLF8
|
|||
|
ExFZLZ4nlmsvJu_mvifMYiikfNfsZAudISOa6O73yPZtL04k_1FI7WDf
|
|||
|
rb2w7OqKLWDXzlpcxohPVOLQwpA3mFNRKdY-bQz4Z4KX9lfz1cne31N4
|
|||
|
-8BKmojpw-OdQjKdLOGkC445Fb_K1tlDQXw2sBF",
|
|||
|
"tag": "e2m0Vm7JvjK2VpCKXS-kyg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 200: General JWE JSON Serialization
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"unprotected": {
|
|||
|
"alg": "A128KW",
|
|||
|
"kid": "81b20965-8332-43d9-a468-82160ad91ac8",
|
|||
|
"enc": "A128GCM"
|
|||
|
},
|
|||
|
"encrypted_key": "244YHfO_W7RMpQW81UjQrZcq5LSyqiPv",
|
|||
|
"iv": "YihBoVOGsR1l7jCD",
|
|||
|
"ciphertext": "qtPIMMaOBRgASL10dNQhOa7Gqrk7Eal1vwht7R4TT1uq-
|
|||
|
arsVCPaIeFwQfzrSS6oEUWbBtxEasE0vC6r7sphyVziMCVJEuRJyoAHF
|
|||
|
SP3eqQPb4Ic1SDSqyXjw_L3svybhHYUGyQuTmUQEDjgjJfBOifwHIsDs
|
|||
|
RPeBz1NomqeifVPq5GTCWFo5k_MNIQURR2Wj0AHC2k7JZfu2iWjUHLF8
|
|||
|
ExFZLZ4nlmsvJu_mvifMYiikfNfsZAudISOa6O73yPZtL04k_1FI7WDf
|
|||
|
rb2w7OqKLWDXzlpcxohPVOLQwpA3mFNRKdY-bQz4Z4KX9lfz1cne31N4
|
|||
|
-8BKmojpw-OdQjKdLOGkC445Fb_K1tlDQXw2sBF",
|
|||
|
"tag": "e2m0Vm7JvjK2VpCKXS-kyg"
|
|||
|
}
|
|||
|
|
|||
|
Figure 201: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 100]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
5.13. Encrypting to Multiple Recipients
|
|||
|
|
|||
|
This example illustrates encryption content for multiple recipients.
|
|||
|
As this example has multiple recipients, only the general JWE JSON
|
|||
|
Serialization is possible.
|
|||
|
|
|||
|
Note that RSAES-PKCS1-v1_5 uses random data to generate the
|
|||
|
ciphertext; it might not be possible to exactly replicate the results
|
|||
|
in this section.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
5.13.1. Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the Plaintext from Figure 72.
|
|||
|
|
|||
|
o Recipient keys; this example uses the following:
|
|||
|
|
|||
|
* The RSA public key from Figure 73 for the first recipient.
|
|||
|
|
|||
|
* The EC public key from Figure 108 for the second recipient.
|
|||
|
|
|||
|
* The AES symmetric key from Figure 138 for the third recipient.
|
|||
|
|
|||
|
o Key encryption algorithms; this example uses the following:
|
|||
|
|
|||
|
* "RSA1_5" for the first recipient.
|
|||
|
|
|||
|
* "ECDH-ES+A256KW" for the second recipient.
|
|||
|
|
|||
|
* "A256GCMKW" for the third recipient.
|
|||
|
|
|||
|
o Content encryption algorithm; this example uses "A128CBC-HS256".
|
|||
|
|
|||
|
5.13.2. Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 202.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 203.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 101]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
zXayeJ4gvm8NJr3IUInyokTUO-LbQNKEhe_zWlYbdpQ
|
|||
|
|
|||
|
Figure 202: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
VgEIHY20EnzUtZFl2RpB1g
|
|||
|
|
|||
|
Figure 203: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
5.13.3. Encrypting the Key to the First Recipient
|
|||
|
|
|||
|
Performing the "RSA1_5" key encryption operation over the CEK
|
|||
|
(Figure 202) with the first recipient's RSA key (Figure 73) produces
|
|||
|
the following Encrypted Key:
|
|||
|
|
|||
|
dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zjwj4w6Y5G4XJQsNNIBiqyvUUA
|
|||
|
OcpL7S7-cFe7Pio7gV_Q06WmCSa-vhW6me4bWrBf7cHwEQJdXihidAYWVajJIa
|
|||
|
KMXMvFRMV6iDlRr076DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-w
|
|||
|
qjw0-b-S1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYS
|
|||
|
rRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-d
|
|||
|
bHcGlihqc_wGgho9fLMK8JOArYLcMDNQ
|
|||
|
|
|||
|
Figure 204: Recipient #1 Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
The following is generated after encrypting the CEK for the first
|
|||
|
recipient:
|
|||
|
|
|||
|
o Recipient JWE Unprotected Header from Figure 205.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "RSA1_5",
|
|||
|
"kid": "frodo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
|
|||
|
Figure 205: Recipient #1 JWE Per-Recipient Unprotected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 102]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The following is the assembled first recipient JSON:
|
|||
|
|
|||
|
{
|
|||
|
"encrypted_key": "dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zjwj4w
|
|||
|
6Y5G4XJQsNNIBiqyvUUAOcpL7S7-cFe7Pio7gV_Q06WmCSa-vhW6me4b
|
|||
|
WrBf7cHwEQJdXihidAYWVajJIaKMXMvFRMV6iDlRr076DFthg2_AV0_t
|
|||
|
SiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7
|
|||
|
Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdk
|
|||
|
MHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wG
|
|||
|
gho9fLMK8JOArYLcMDNQ",
|
|||
|
"header": {
|
|||
|
"alg": "RSA1_5",
|
|||
|
"kid": "frodo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Figure 206: Recipient #1 JSON
|
|||
|
|
|||
|
5.13.4. Encrypting the Key to the Second Recipient
|
|||
|
|
|||
|
The following is generated before encrypting the CEK for the second
|
|||
|
recipient:
|
|||
|
|
|||
|
o Ephemeral EC private key on the same curve as the EC public key;
|
|||
|
this example uses the private key from Figure 207.
|
|||
|
|
|||
|
{
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xAn2Dt
|
|||
|
MRb25Ma2CX",
|
|||
|
"y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pOMbw9
|
|||
|
1fzZ84pbfm",
|
|||
|
"d": "1DKHfTv-PiifVw2VBHM_ZiVcwOMxkOyANS_lQHJcrDxVY3jhVCvZPw
|
|||
|
MxJKIE793C"
|
|||
|
}
|
|||
|
|
|||
|
Figure 207: Ephemeral Private Key for Recipient #2, in JWK Format
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 103]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the "ECDH-ES+A256KW" key encryption operation over the CEK
|
|||
|
(Figure 202) with the following:
|
|||
|
|
|||
|
o Static Elliptic Curve public key (Figure 108).
|
|||
|
|
|||
|
o Ephemeral Elliptic Curve private key (Figure 207).
|
|||
|
|
|||
|
produces the following Encrypted Key:
|
|||
|
|
|||
|
ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHixJuw_elY4gSSId_w
|
|||
|
|
|||
|
Figure 208: Recipient #2 Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
The following is generated after encrypting the CEK for the second
|
|||
|
recipient:
|
|||
|
|
|||
|
o Recipient JWE Unprotected Header from Figure 209.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "ECDH-ES+A256KW",
|
|||
|
"kid": "peregrin.took@tuckborough.example",
|
|||
|
"epk": {
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xAn2
|
|||
|
DtMRb25Ma2CX",
|
|||
|
"y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pOMb
|
|||
|
w91fzZ84pbfm"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Figure 209: Recipient #2 JWE Per-Recipient Unprotected Header JSON
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 104]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The following is the assembled second recipient JSON:
|
|||
|
|
|||
|
{
|
|||
|
"encrypted_key": "ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHixJuw
|
|||
|
_elY4gSSId_w",
|
|||
|
"header": {
|
|||
|
"alg": "ECDH-ES+A256KW",
|
|||
|
"kid": "peregrin.took@tuckborough.example",
|
|||
|
"epk": {
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xA
|
|||
|
n2DtMRb25Ma2CX",
|
|||
|
"y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pO
|
|||
|
Mbw91fzZ84pbfm"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Figure 210: Recipient #2 JSON
|
|||
|
|
|||
|
5.13.5. Encrypting the Key to the Third Recipient
|
|||
|
|
|||
|
The following is generated before encrypting the CEK for the third
|
|||
|
recipient:
|
|||
|
|
|||
|
o Initialization Vector for key wrapping; this example uses the
|
|||
|
Initialization Vector from Figure 211.
|
|||
|
|
|||
|
AvpeoPZ9Ncn9mkBn
|
|||
|
|
|||
|
Figure 211: Recipient #2 Initialization Vector for Key Wrapping,
|
|||
|
base64url-encoded
|
|||
|
|
|||
|
Performing the "A256GCMKW" key encryption operation over the CEK
|
|||
|
(Figure 202) with the following:
|
|||
|
|
|||
|
o AES symmetric key (Figure 138); and
|
|||
|
|
|||
|
o Initialization Vector (Figure 211)
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Encrypted Key from Figure 212.
|
|||
|
|
|||
|
o Authentication Tag from Figure 213.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 105]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-WyTpS1E
|
|||
|
|
|||
|
Figure 212: Recipient #3 Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
59Nqh1LlYtVIhfD3pgRGvw
|
|||
|
|
|||
|
Figure 213: Recipient #3 Authentication Tag from Key Wrapping,
|
|||
|
base64url-encoded
|
|||
|
|
|||
|
The following is generated after encrypting the CEK for the third
|
|||
|
recipient:
|
|||
|
|
|||
|
o Recipient JWE Unprotected Header; this example uses the header
|
|||
|
from Figure 214.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "A256GCMKW",
|
|||
|
"kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
|
|||
|
"tag": "59Nqh1LlYtVIhfD3pgRGvw",
|
|||
|
"iv": "AvpeoPZ9Ncn9mkBn"
|
|||
|
}
|
|||
|
|
|||
|
Figure 214: Recipient #3 JWE Per-Recipient Unprotected Header JSON
|
|||
|
|
|||
|
The following is the assembled third recipient JSON:
|
|||
|
|
|||
|
{
|
|||
|
"encrypted_key": "a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-WyTpS1
|
|||
|
E",
|
|||
|
"header": {
|
|||
|
"alg": "A256GCMKW",
|
|||
|
"kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
|
|||
|
"tag": "59Nqh1LlYtVIhfD3pgRGvw",
|
|||
|
"iv": "AvpeoPZ9Ncn9mkBn"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Figure 215: Recipient #3 JSON
|
|||
|
|
|||
|
5.13.6. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the content:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 216, encoded to base64url [RFC4648] as Figure 217.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 106]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
"enc": "A128CBC-HS256"
|
|||
|
}
|
|||
|
|
|||
|
Figure 216: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0
|
|||
|
|
|||
|
Figure 217: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext
|
|||
|
(Figure 72) with the following:
|
|||
|
|
|||
|
o CEK (Figure 202),
|
|||
|
|
|||
|
o Initialization Vector (Figure 203), and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 217) as the authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 218.
|
|||
|
|
|||
|
o Authentication Tag from Figure 219.
|
|||
|
|
|||
|
ajm2Q-OpPXCr7-MHXicknb1lsxLdXxK_yLds0KuhJzfWK04SjdxQeSw2L9mu3a
|
|||
|
_k1C55kCQ_3xlkcVKC5yr__Is48VOoK0k63_QRM9tBURMFqLByJ8vOYQX0oJW4
|
|||
|
VUHJLmGhF-tVQWB7Kz8mr8zeE7txF0MSaP6ga7-siYxStR7_G07Thd1jh-zGT0
|
|||
|
wxM5g-VRORtq0K6AXpLlwEqRp7pkt2zRM0ZAXqSpe1O6FJ7FHLDyEFnD-zDIZu
|
|||
|
kLpCbzhzMDLLw2-8I14FQrgi-iEuzHgIJFIJn2wh9Tj0cg_kOZy9BqMRZbmYXM
|
|||
|
Y9YQjorZ_P_JYG3ARAIF3OjDNqpdYe-K_5Q5crGJSDNyij_ygEiItR5jssQVH2
|
|||
|
ofDQdLChtazE
|
|||
|
|
|||
|
Figure 218: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
BESYyFN7T09KY7i8zKs5_g
|
|||
|
|
|||
|
Figure 219: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 107]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The following is generated after encrypting the Plaintext:
|
|||
|
|
|||
|
o JWE Shared Unprotected Header parameters; this example uses the
|
|||
|
header from Figure 220.
|
|||
|
|
|||
|
{
|
|||
|
"cty": "text/plain"
|
|||
|
}
|
|||
|
|
|||
|
Figure 220: JWE Shared Unprotected Header JSON
|
|||
|
|
|||
|
5.13.7. Output Results
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o Recipient #1 JSON (Figure 206)
|
|||
|
|
|||
|
o Recipient #2 JSON (Figure 210)
|
|||
|
|
|||
|
o Recipient #3 JSON (Figure 215)
|
|||
|
|
|||
|
o Initialization Vector (Figure 203)
|
|||
|
|
|||
|
o Ciphertext (Figure 218)
|
|||
|
|
|||
|
o Authentication Tag (Figure 219)
|
|||
|
|
|||
|
The JWE Compact Serialization is not presented because it does not
|
|||
|
support this use case; the flattened JWE JSON Serialization is not
|
|||
|
presented because there is more than one recipient.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 108]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zj
|
|||
|
wj4w6Y5G4XJQsNNIBiqyvUUAOcpL7S7-cFe7Pio7gV_Q06WmCSa-
|
|||
|
vhW6me4bWrBf7cHwEQJdXihidAYWVajJIaKMXMvFRMV6iDlRr076
|
|||
|
DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S
|
|||
|
1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbe
|
|||
|
YSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n
|
|||
|
5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ",
|
|||
|
"header": {
|
|||
|
"alg": "RSA1_5",
|
|||
|
"kid": "frodo.baggins@hobbiton.example"
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
"encrypted_key": "ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHi
|
|||
|
xJuw_elY4gSSId_w",
|
|||
|
"header": {
|
|||
|
"alg": "ECDH-ES+A256KW",
|
|||
|
"kid": "peregrin.took@tuckborough.example",
|
|||
|
"epk": {
|
|||
|
"kty": "EC",
|
|||
|
"crv": "P-384",
|
|||
|
"x": "Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhs
|
|||
|
E2xAn2DtMRb25Ma2CX",
|
|||
|
"y": "VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEj
|
|||
|
I1pOMbw91fzZ84pbfm"
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
"encrypted_key": "a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-Wy
|
|||
|
TpS1E",
|
|||
|
"header": {
|
|||
|
"alg": "A256GCMKW",
|
|||
|
"kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
|
|||
|
"tag": "59Nqh1LlYtVIhfD3pgRGvw",
|
|||
|
"iv": "AvpeoPZ9Ncn9mkBn"
|
|||
|
}
|
|||
|
}
|
|||
|
],
|
|||
|
"unprotected": {
|
|||
|
"cty": "text/plain"
|
|||
|
},
|
|||
|
"protected": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0",
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 109]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
"iv": "VgEIHY20EnzUtZFl2RpB1g",
|
|||
|
"ciphertext": "ajm2Q-OpPXCr7-MHXicknb1lsxLdXxK_yLds0KuhJzfWK
|
|||
|
04SjdxQeSw2L9mu3a_k1C55kCQ_3xlkcVKC5yr__Is48VOoK0k63_QRM
|
|||
|
9tBURMFqLByJ8vOYQX0oJW4VUHJLmGhF-tVQWB7Kz8mr8zeE7txF0MSa
|
|||
|
P6ga7-siYxStR7_G07Thd1jh-zGT0wxM5g-VRORtq0K6AXpLlwEqRp7p
|
|||
|
kt2zRM0ZAXqSpe1O6FJ7FHLDyEFnD-zDIZukLpCbzhzMDLLw2-8I14FQ
|
|||
|
rgi-iEuzHgIJFIJn2wh9Tj0cg_kOZy9BqMRZbmYXMY9YQjorZ_P_JYG3
|
|||
|
ARAIF3OjDNqpdYe-K_5Q5crGJSDNyij_ygEiItR5jssQVH2ofDQdLCht
|
|||
|
azE",
|
|||
|
"tag": "BESYyFN7T09KY7i8zKs5_g"
|
|||
|
}
|
|||
|
|
|||
|
Figure 221: General JWE JSON Serialization
|
|||
|
|
|||
|
6. Nesting Signatures and Encryption
|
|||
|
|
|||
|
This example illustrates nesting a JSON Web Signature (JWS) structure
|
|||
|
within a JSON Web Encryption (JWE) structure. The signature uses the
|
|||
|
"PS256" (RSASSA-PSS) algorithm; the encryption uses the "RSA-OAEP"
|
|||
|
(RSAES-OAEP) key encryption algorithm and the "A128GCM" (AES-GCM)
|
|||
|
content encryption algorithm.
|
|||
|
|
|||
|
Note that RSASSA-PSS uses random data to generate the signature, and
|
|||
|
RSAES-OAEP uses random data to generate the ciphertext; it might not
|
|||
|
be possible to exactly replicate the results in this section.
|
|||
|
|
|||
|
Note that whitespace is added for readability as described in
|
|||
|
Section 1.1.
|
|||
|
|
|||
|
6.1. Signing Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the signing operation:
|
|||
|
|
|||
|
o Payload content; this example uses the JSON Web Token [JWT]
|
|||
|
content from Figure 222, encoded as base64url [RFC4648] to produce
|
|||
|
Figure 223.
|
|||
|
|
|||
|
o RSA private key; this example uses the key from Figure 224.
|
|||
|
|
|||
|
o "alg" parameter of "PS256".
|
|||
|
|
|||
|
{
|
|||
|
"iss": "hobbiton.example",
|
|||
|
"exp": 1300819380,
|
|||
|
"http://example.com/is_root": true
|
|||
|
}
|
|||
|
|
|||
|
Figure 222: Payload Content, in JSON Format
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 110]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
eyJpc3MiOiJob2JiaXRvbi5leGFtcGxlIiwiZXhwIjoxMzAwODE5MzgwLCJodH
|
|||
|
RwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0
|
|||
|
|
|||
|
Figure 223: Payload Content, base64url-encoded
|
|||
|
|
|||
|
{
|
|||
|
"kty": "RSA",
|
|||
|
"kid": "hobbiton.example",
|
|||
|
"use": "sig",
|
|||
|
"n": "kNrPIBDXMU6fcyv5i-QHQAQ-K8gsC3HJb7FYhYaw8hXbNJa-t8q0lD
|
|||
|
KwLZgQXYV-ffWxXJv5GGrlZE4GU52lfMEegTDzYTrRQ3tepgKFjMGg6I
|
|||
|
y6fkl1ZNsx2gEonsnlShfzA9GJwRTmtKPbk1s-hwx1IU5AT-AIelNqBg
|
|||
|
cF2vE5W25_SGGBoaROVdUYxqETDggM1z5cKV4ZjDZ8-lh4oVB07bkac6
|
|||
|
LQdHpJUUySH_Er20DXx30Kyi97PciXKTS-QKXnmm8ivyRCmux22ZoPUi
|
|||
|
nd2BKC5OiG4MwALhaL2Z2k8CsRdfy-7dg7z41Rp6D0ZeEvtaUp4bX4aK
|
|||
|
raL4rTfw",
|
|||
|
"e": "AQAB",
|
|||
|
"d": "ZLe_TIxpE9-W_n2VBa-HWvuYPtjvxwVXClJFOpJsdea8g9RMx34qEO
|
|||
|
EtnoYc2un3CZ3LtJi-mju5RAT8YSc76YJds3ZVw0UiO8mMBeG6-iOnvg
|
|||
|
obobNx7K57-xjTJZU72EjOr9kB7z6ZKwDDq7HFyCDhUEcYcHFVc7iL_6
|
|||
|
TibVhAhOFONWlqlJgEgwVYd0rybNGKifdnpEbwyHoMwY6HM1qvnEFgP7
|
|||
|
iZ0YzHUT535x6jj4VKcdA7ZduFkhUauysySEW7mxZM6fj1vdjJIy9LD1
|
|||
|
fIz30Xv4ckoqhKF5GONU6tNmMmNgAD6gIViyEle1PrIxl1tBhCI14bRW
|
|||
|
-zrpHgAQ",
|
|||
|
"p": "yKWYoNIAqwMRQlgIBOdT1NIcbDNUUs2Rh-pBaxD_mIkweMt4Mg-0-B
|
|||
|
2iSYvMrs8horhonV7vxCQagcBAATGW-hAafUehWjxWSH-3KccRM8toL4
|
|||
|
e0q7M-idRDOBXSoe7Z2-CV2x_ZCY3RP8qp642R13WgXqGDIM4MbUkZSj
|
|||
|
cY9-c",
|
|||
|
"q": "uND4o15V30KDzf8vFJw589p1vlQVQ3NEilrinRUPHkkxaAzDzccGgr
|
|||
|
WMWpGxGFFnNL3w5CqPLeU76-5IVYQq0HwYVl0hVXQHr7sgaGu-483Ad3
|
|||
|
ENcL23FrOnF45m7_2ooAstJDe49MeLTTQKrSIBl_SKvqpYvfSPTczPcZ
|
|||
|
kh9Kk",
|
|||
|
"dp": "jmTnEoq2qqa8ouaymjhJSCnsveUXnMQC2gAneQJRQkFqQu-zV2PKP
|
|||
|
KNbPvKVyiF5b2-L3tM3OW2d2iNDyRUWXlT7V5l0KwPTABSTOnTqAmYCh
|
|||
|
Gi8kXXdlhcrtSvXldBakC6saxwI_TzGGY2MVXzc2ZnCvCXHV4qjSxOrf
|
|||
|
P3pHFU",
|
|||
|
"dq": "R9FUvU88OVzEkTkXl3-5-WusE4DjHmndeZIlu3rifBdfLpq_P-iWP
|
|||
|
BbGaq9wzQ1c-J7SzCdJqkEJDv5yd2C7rnZ6kpzwBh_nmL8zscAk1qsun
|
|||
|
nt9CJGAYz7-sGWy1JGShFazfP52ThB4rlCJ0YuEaQMrIzpY77_oLAhpm
|
|||
|
DA0hLk",
|
|||
|
"qi": "S8tC7ZknW6hPITkjcwttQOPLVmRfwirRlFAViuDb8NW9CrV_7F2Oq
|
|||
|
UZCqmzHTYAumwGFHI1WVRep7anleWaJjxC_1b3fq_al4qH3Pe-EKiHg6
|
|||
|
IMazuRtZLUROcThrExDbF5dYbsciDnfRUWLErZ4N1Be0bnxYuPqxwKd9
|
|||
|
QZwMo0"
|
|||
|
}
|
|||
|
|
|||
|
Figure 224: RSA 2048-Bit Private Key, in JWK Format
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 111]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
6.2. Signing Operation
|
|||
|
|
|||
|
The following is generated to complete the signing operation:
|
|||
|
|
|||
|
o JWS Protected Header; this example uses the header from
|
|||
|
Figure 225, encoded using base64url [RFC4648] to produce
|
|||
|
Figure 226.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "PS256",
|
|||
|
"typ": "JWT"
|
|||
|
}
|
|||
|
|
|||
|
Figure 225: JWS Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9
|
|||
|
|
|||
|
Figure 226: JWS Protected Header, base64url-encoded
|
|||
|
|
|||
|
Performing the signature operation over the combined JWS Protected
|
|||
|
Header (Figure 226) and payload content (Figure 222) produces the
|
|||
|
following signature:
|
|||
|
|
|||
|
dPpMqwRZxFYi1UfcDAaf8M99o7kwUWtiXZ-ByvVuJih4MhJ_aZqciprz0OWaIA
|
|||
|
kIvn1qskChirjKvY9ESZNUCP4JjvfyPS-nqjJxYoA5ztWOyFk2cZNIPXjcJXSQ
|
|||
|
wXPO9tEe-v4VSqgD0aKHqPxYog4N6Cz1lKph1U1sYDSI67_bLL7elg_vkjfMp5
|
|||
|
_W5l5LuUYGMeh6hxQIaIUXf9EwV2JmvTMuZ-vBOWy0Sniy1EFo72CRTvmtrIf5
|
|||
|
AROo5MNliY3KtUxeP-SOmD-LEYwW9SlkohYzMVAZDDOrVbv7KVRHpeYNaK75KE
|
|||
|
QqdCEEkS_rskZS-Qtt_nlegTWh1mEYaA
|
|||
|
|
|||
|
Figure 227: JWS Signature, base64url-encoded
|
|||
|
|
|||
|
6.3. Signing Output
|
|||
|
|
|||
|
The following compose the resulting JWS object:
|
|||
|
|
|||
|
o JWS Protected Header (Figure 226)
|
|||
|
|
|||
|
o Payload content (Figure 223)
|
|||
|
|
|||
|
o Signature (Figure 227)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 112]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWS object using the JWS Compact Serialization (which
|
|||
|
is the plaintext input to the following encryption operation):
|
|||
|
|
|||
|
eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9
|
|||
|
.
|
|||
|
eyJpc3MiOiJob2JiaXRvbi5leGFtcGxlIiwiZXhwIjoxMzAwODE5MzgwLCJodH
|
|||
|
RwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0
|
|||
|
.
|
|||
|
dPpMqwRZxFYi1UfcDAaf8M99o7kwUWtiXZ-ByvVuJih4MhJ_aZqciprz0OWaIA
|
|||
|
kIvn1qskChirjKvY9ESZNUCP4JjvfyPS-nqjJxYoA5ztWOyFk2cZNIPXjcJXSQ
|
|||
|
wXPO9tEe-v4VSqgD0aKHqPxYog4N6Cz1lKph1U1sYDSI67_bLL7elg_vkjfMp5
|
|||
|
_W5l5LuUYGMeh6hxQIaIUXf9EwV2JmvTMuZ-vBOWy0Sniy1EFo72CRTvmtrIf5
|
|||
|
AROo5MNliY3KtUxeP-SOmD-LEYwW9SlkohYzMVAZDDOrVbv7KVRHpeYNaK75KE
|
|||
|
QqdCEEkS_rskZS-Qtt_nlegTWh1mEYaA
|
|||
|
|
|||
|
Figure 228: JWS Compact Serialization
|
|||
|
|
|||
|
6.4. Encryption Input Factors
|
|||
|
|
|||
|
The following are supplied before beginning the encryption process:
|
|||
|
|
|||
|
o Plaintext content; this example uses the content from Figure 228.
|
|||
|
|
|||
|
o RSA public key; this example uses the key from Figure 84.
|
|||
|
|
|||
|
o "alg" parameter of "RSA-OAEP".
|
|||
|
|
|||
|
o "enc" parameter of "A128GCM".
|
|||
|
|
|||
|
6.5. Encryption Generated Factors
|
|||
|
|
|||
|
The following are generated before encrypting:
|
|||
|
|
|||
|
o AES symmetric key as the Content Encryption Key (CEK); this
|
|||
|
example uses the key from Figure 229.
|
|||
|
|
|||
|
o Initialization Vector; this example uses the Initialization Vector
|
|||
|
from Figure 230.
|
|||
|
|
|||
|
0RHSNYwN-6-2QBGsYTZLSQ
|
|||
|
|
|||
|
Figure 229: Content Encryption Key, base64url-encoded
|
|||
|
|
|||
|
GbX1i9kXz0sxXPmA
|
|||
|
|
|||
|
Figure 230: Initialization Vector, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 113]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
6.6. Encrypting the Key
|
|||
|
|
|||
|
Performing the key encryption operation over the CEK (Figure 229)
|
|||
|
with the RSA key (Figure 84) produces the following Encrypted Key:
|
|||
|
|
|||
|
a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVhjurCyrBg3I7YhCRYjphDOOS4
|
|||
|
E7rXbr2Fn6NyQq-A-gqT0FXqNjVOGrG-bi13mwy7RoYhjTkBEC6P7sMYMXXx4g
|
|||
|
zMedpiJHQVeyI-zkZV7A9matpgevAJWrXzOUysYGTtwoSN6gtUVtlLaivjvb21
|
|||
|
O0ul4YxSHV-ByK1kyeetRp_fuYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e5I
|
|||
|
R7nany-25_UmC2urosNkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5o6yV64x6yzDU
|
|||
|
F_5JCIdl-Qv6H5dMVIY7q1eKpXcV1lWO_2FefEBqXxXvIjLeZivjNkzogCq3-I
|
|||
|
apSjVFnMjBxjpYLT8muaawo1yy1XXMuinIpNcOY3n4KKrXLrCcteX85m4IIHMZ
|
|||
|
a38s1Hpr56fPPseMA-Jltmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3kJusAa
|
|||
|
mBKOYwfk7JhLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15qJIEXNJtqnblp
|
|||
|
ymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TXuPC8yDDhi1smxS_X_x
|
|||
|
pkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX2Fo_GnVrNwlK7Lgxw6FSQvDO
|
|||
|
0
|
|||
|
|
|||
|
Figure 231: Encrypted Key, base64url-encoded
|
|||
|
|
|||
|
6.7. Encrypting the Content
|
|||
|
|
|||
|
The following is generated before encrypting the Plaintext:
|
|||
|
|
|||
|
o JWE Protected Header; this example uses the header from
|
|||
|
Figure 232, encoded using base64url [RFC4648] to produce
|
|||
|
Figure 233.
|
|||
|
|
|||
|
{
|
|||
|
"alg": "RSA-OAEP",
|
|||
|
"cty": "JWT",
|
|||
|
"enc": "A128GCM"
|
|||
|
}
|
|||
|
|
|||
|
Figure 232: JWE Protected Header JSON
|
|||
|
|
|||
|
eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYyI6IkExMjhHQ00ifQ
|
|||
|
|
|||
|
Figure 233: JWE Protected Header, base64url-encoded
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 114]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
Performing the content encryption operation over the Plaintext
|
|||
|
(Figure 228) with the following:
|
|||
|
|
|||
|
o CEK (Figure 229);
|
|||
|
|
|||
|
o Initialization Vector (Figure 230); and
|
|||
|
|
|||
|
o JWE Protected Header (Figure 233) as authenticated data
|
|||
|
|
|||
|
produces the following:
|
|||
|
|
|||
|
o Ciphertext from Figure 234.
|
|||
|
|
|||
|
o Authentication Tag from Figure 235.
|
|||
|
|
|||
|
SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBNgCe2OFMf66cSJ8k2Q
|
|||
|
kxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAvVLsAXB0_UTCBGyBg3C2bWLX
|
|||
|
qZlfJAAoJRUPRk-BimYZY81zVBuIhc7HsQePCpu33SzMsFHjn4lP_idrJz_glZ
|
|||
|
TNgKDt8zdnUPauKTKDNOH1DD4fuzvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9C
|
|||
|
hMPqW1QNhzuX_Zul3bvrJwr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEa
|
|||
|
ulV18l4Fg9tLejdkAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2
|
|||
|
zI3Q_1sYjKUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUr
|
|||
|
lx4gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gYjLf
|
|||
|
hn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5XmnwZMyNc
|
|||
|
9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMxtlMizR88NKU1WkB
|
|||
|
siXMCjy1Noue7MD-ShDp5dmM
|
|||
|
|
|||
|
Figure 234: Ciphertext, base64url-encoded
|
|||
|
|
|||
|
KnIKEhN8U-3C9s4gtSpjSw
|
|||
|
|
|||
|
Figure 235: Authentication Tag, base64url-encoded
|
|||
|
|
|||
|
6.8. Encryption Output
|
|||
|
|
|||
|
The following compose the resulting JWE object:
|
|||
|
|
|||
|
o JWE Protected Header (Figure 233)
|
|||
|
|
|||
|
o Encrypted Key (Figure 231)
|
|||
|
|
|||
|
o Initialization Vector (Figure 230)
|
|||
|
|
|||
|
o Ciphertext (Figure 234)
|
|||
|
|
|||
|
o Authentication Tag (Figure 235)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 115]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the JWE Compact Serialization:
|
|||
|
|
|||
|
eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYyI6IkExMjhHQ00ifQ
|
|||
|
.
|
|||
|
a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVhjurCyrBg3I7YhCRYjphDOOS4
|
|||
|
E7rXbr2Fn6NyQq-A-gqT0FXqNjVOGrG-bi13mwy7RoYhjTkBEC6P7sMYMXXx4g
|
|||
|
zMedpiJHQVeyI-zkZV7A9matpgevAJWrXzOUysYGTtwoSN6gtUVtlLaivjvb21
|
|||
|
O0ul4YxSHV-ByK1kyeetRp_fuYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e5I
|
|||
|
R7nany-25_UmC2urosNkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5o6yV64x6yzDU
|
|||
|
F_5JCIdl-Qv6H5dMVIY7q1eKpXcV1lWO_2FefEBqXxXvIjLeZivjNkzogCq3-I
|
|||
|
apSjVFnMjBxjpYLT8muaawo1yy1XXMuinIpNcOY3n4KKrXLrCcteX85m4IIHMZ
|
|||
|
a38s1Hpr56fPPseMA-Jltmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3kJusAa
|
|||
|
mBKOYwfk7JhLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15qJIEXNJtqnblp
|
|||
|
ymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TXuPC8yDDhi1smxS_X_x
|
|||
|
pkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX2Fo_GnVrNwlK7Lgxw6FSQvDO
|
|||
|
0
|
|||
|
.
|
|||
|
GbX1i9kXz0sxXPmA
|
|||
|
.
|
|||
|
SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBNgCe2OFMf66cSJ8k2Q
|
|||
|
kxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAvVLsAXB0_UTCBGyBg3C2bWLX
|
|||
|
qZlfJAAoJRUPRk-BimYZY81zVBuIhc7HsQePCpu33SzMsFHjn4lP_idrJz_glZ
|
|||
|
TNgKDt8zdnUPauKTKDNOH1DD4fuzvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9C
|
|||
|
hMPqW1QNhzuX_Zul3bvrJwr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEa
|
|||
|
ulV18l4Fg9tLejdkAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2
|
|||
|
zI3Q_1sYjKUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUr
|
|||
|
lx4gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gYjLf
|
|||
|
hn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5XmnwZMyNc
|
|||
|
9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMxtlMizR88NKU1WkB
|
|||
|
siXMCjy1Noue7MD-ShDp5dmM
|
|||
|
.
|
|||
|
KnIKEhN8U-3C9s4gtSpjSw
|
|||
|
|
|||
|
Figure 236: JWE Compact Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 116]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the general JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"recipients": [
|
|||
|
{
|
|||
|
"encrypted_key": "a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVh
|
|||
|
jurCyrBg3I7YhCRYjphDOOS4E7rXbr2Fn6NyQq-A-gqT0FXqNjVO
|
|||
|
GrG-bi13mwy7RoYhjTkBEC6P7sMYMXXx4gzMedpiJHQVeyI-zkZV
|
|||
|
7A9matpgevAJWrXzOUysYGTtwoSN6gtUVtlLaivjvb21O0ul4YxS
|
|||
|
HV-ByK1kyeetRp_fuYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e
|
|||
|
5IR7nany-25_UmC2urosNkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5
|
|||
|
o6yV64x6yzDUF_5JCIdl-Qv6H5dMVIY7q1eKpXcV1lWO_2FefEBq
|
|||
|
XxXvIjLeZivjNkzogCq3-IapSjVFnMjBxjpYLT8muaawo1yy1XXM
|
|||
|
uinIpNcOY3n4KKrXLrCcteX85m4IIHMZa38s1Hpr56fPPseMA-Jl
|
|||
|
tmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3kJusAamBKOYwfk7J
|
|||
|
hLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15qJIEXNJtqnblp
|
|||
|
ymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TXuPC8yDDh
|
|||
|
i1smxS_X_xpkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX2Fo_
|
|||
|
GnVrNwlK7Lgxw6FSQvDO0"
|
|||
|
}
|
|||
|
],
|
|||
|
"protected": "eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYy
|
|||
|
I6IkExMjhHQ00ifQ",
|
|||
|
"iv": "GbX1i9kXz0sxXPmA",
|
|||
|
"ciphertext": "SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBN
|
|||
|
gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv
|
|||
|
VLsAXB0_UTCBGyBg3C2bWLXqZlfJAAoJRUPRk-BimYZY81zVBuIhc7Hs
|
|||
|
QePCpu33SzMsFHjn4lP_idrJz_glZTNgKDt8zdnUPauKTKDNOH1DD4fu
|
|||
|
zvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9ChMPqW1QNhzuX_Zul3bvrJ
|
|||
|
wr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEaulV18l4Fg9tLejd
|
|||
|
kAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2zI3Q_1sYj
|
|||
|
KUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUrlx4
|
|||
|
gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gY
|
|||
|
jLfhn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5
|
|||
|
XmnwZMyNc9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMx
|
|||
|
tlMizR88NKU1WkBsiXMCjy1Noue7MD-ShDp5dmM",
|
|||
|
"tag": "KnIKEhN8U-3C9s4gtSpjSw"
|
|||
|
}
|
|||
|
|
|||
|
Figure 237: General JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 117]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
The resulting JWE object using the flattened JWE JSON Serialization:
|
|||
|
|
|||
|
{
|
|||
|
"encrypted_key": "a0JHRoITfpX4qRewImjlStn8m3CPxBV1ueYlVhjurC
|
|||
|
yrBg3I7YhCRYjphDOOS4E7rXbr2Fn6NyQq-A-gqT0FXqNjVOGrG-bi13
|
|||
|
mwy7RoYhjTkBEC6P7sMYMXXx4gzMedpiJHQVeyI-zkZV7A9matpgevAJ
|
|||
|
WrXzOUysYGTtwoSN6gtUVtlLaivjvb21O0ul4YxSHV-ByK1kyeetRp_f
|
|||
|
uYJxHoKLQL9P424sKx2WGYb4zsBIPF4ssl_e5IR7nany-25_UmC2uros
|
|||
|
NkoFz9cQ82MypZP8gqbQJyPN-Fpp4Z-5o6yV64x6yzDUF_5JCIdl-Qv6
|
|||
|
H5dMVIY7q1eKpXcV1lWO_2FefEBqXxXvIjLeZivjNkzogCq3-IapSjVF
|
|||
|
nMjBxjpYLT8muaawo1yy1XXMuinIpNcOY3n4KKrXLrCcteX85m4IIHMZ
|
|||
|
a38s1Hpr56fPPseMA-Jltmt-a9iEDtOzhtxz8AXy9tsCAZV2XBWNG8c3
|
|||
|
kJusAamBKOYwfk7JhLRDgOnJjlJLhn7TI4UxDp9dCmUXEN6z0v23W15q
|
|||
|
JIEXNJtqnblpymooeWAHCT4e_Owbim1g0AEpTHUdA2iiLNs9WTX_H_TX
|
|||
|
uPC8yDDhi1smxS_X_xpkIHkiIHWDOLx03BpqDTivpKkBYwqP2UZkcxqX
|
|||
|
2Fo_GnVrNwlK7Lgxw6FSQvDO0",
|
|||
|
"protected": "eyJhbGciOiJSU0EtT0FFUCIsImN0eSI6IkpXVCIsImVuYy
|
|||
|
I6IkExMjhHQ00ifQ",
|
|||
|
"iv": "GbX1i9kXz0sxXPmA",
|
|||
|
"ciphertext": "SZI4IvKHmwpazl_pJQXX3mHv1ANnOU4Wf9-utWYUcKrBN
|
|||
|
gCe2OFMf66cSJ8k2QkxaQD3_R60MGE9ofomwtky3GFxMeGRjtpMt9OAv
|
|||
|
VLsAXB0_UTCBGyBg3C2bWLXqZlfJAAoJRUPRk-BimYZY81zVBuIhc7Hs
|
|||
|
QePCpu33SzMsFHjn4lP_idrJz_glZTNgKDt8zdnUPauKTKDNOH1DD4fu
|
|||
|
zvDYfDIAfqGPyL5sVRwbiXpXdGokEszM-9ChMPqW1QNhzuX_Zul3bvrJ
|
|||
|
wr7nuGZs4cUScY3n8yE3AHCLurgls-A9mz1X38xEaulV18l4Fg9tLejd
|
|||
|
kAuQZjPbqeHQBJe4IwGD5Ee0dQ-Mtz4NnhkIWx-YKBb_Xo2zI3Q_1sYj
|
|||
|
KUuis7yWW-HTr_vqvFt0bj7WJf2vzB0TZ3dvsoGaTvPH2dyWwumUrlx4
|
|||
|
gmPUzBdwTO6ubfYSDUEEz5py0d_OtWeUSYcCYBKD-aM7tXg26qJo21gY
|
|||
|
jLfhn9zy-W19sOCZGuzgFjPhawXHpvnj_t-0_ES96kogjJLxS1IMU9Y5
|
|||
|
XmnwZMyNc9EIwnogsCg-hVuvzyP0sIruktmI94_SL1xgMl7o03phcTMx
|
|||
|
tlMizR88NKU1WkBsiXMCjy1Noue7MD-ShDp5dmM",
|
|||
|
"tag": "KnIKEhN8U-3C9s4gtSpjSw"
|
|||
|
}
|
|||
|
|
|||
|
Figure 238: Flattened JWE JSON Serialization
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 118]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
7. Security Considerations
|
|||
|
|
|||
|
This document is designed to provide examples for developers to use
|
|||
|
in checking their implementations. As such, it does not follow some
|
|||
|
of the security considerations and recommendations in the core
|
|||
|
documents (i.e., [JWS], [JWE], [JWK], and [JWA]). For instance:
|
|||
|
|
|||
|
o it does not always generate a new CEK value for every encrypted
|
|||
|
example;
|
|||
|
|
|||
|
o it does not always generate a new Initialization Vector (IV) value
|
|||
|
for every encrypted example; and
|
|||
|
|
|||
|
o it does not always generate a new ephemeral key for every
|
|||
|
ephemeral key example.
|
|||
|
|
|||
|
For each example, data that is expected to be generated for each
|
|||
|
signing or encryption operation is isolated to sections titled
|
|||
|
"Generated Factors".
|
|||
|
|
|||
|
8. References
|
|||
|
|
|||
|
8.1. Normative References
|
|||
|
|
|||
|
[JWA] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518,
|
|||
|
DOI 10.17487/RFC7518, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7518>.
|
|||
|
|
|||
|
[JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)",
|
|||
|
RFC 7516, DOI 10.17487/RFC7516, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7516>.
|
|||
|
|
|||
|
[JWK] Jones, M., "JSON Web Key (JWK)", RFC 7517,
|
|||
|
DOI 10.17487/RFC7517, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7517>.
|
|||
|
|
|||
|
[JWS] Jones, M., Bradley, J., and N. Sakimura, "JSON Web
|
|||
|
Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May
|
|||
|
2015, <http://www.rfc-editor.org/info/rfc7515>.
|
|||
|
|
|||
|
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
|
|||
|
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
|
|||
|
<http://www.rfc-editor.org/info/rfc4648>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 119]
|
|||
|
|
|||
|
RFC 7520 JOSE Cookbook May 2015
|
|||
|
|
|||
|
|
|||
|
8.2. Informative References
|
|||
|
|
|||
|
[JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
|
|||
|
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
|
|||
|
<http://www.rfc-editor.org/info/rfc7519>.
|
|||
|
|
|||
|
[LOTR-FELLOWSHIP]
|
|||
|
Tolkien, J., "The Fellowship of the Ring", HarperCollins
|
|||
|
Publishers, ePub Edition, ISBN 9780061952838, March 2009.
|
|||
|
|
|||
|
[RFC1951] Deutsch, P., "DEFLATE Compressed Data Format Specification
|
|||
|
version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996,
|
|||
|
<http://www.rfc-editor.org/info/rfc1951>.
|
|||
|
|
|||
|
[RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095,
|
|||
|
DOI 10.17487/RFC7095, January 2014,
|
|||
|
<http://www.rfc-editor.org/info/rfc7095>.
|
|||
|
|
|||
|
Acknowledgements
|
|||
|
|
|||
|
Most of the examples herein use quotes and character names found in
|
|||
|
the novel "The Fellowship of the Ring" [LOTR-FELLOWSHIP], written by
|
|||
|
J. R. R. Tolkien.
|
|||
|
|
|||
|
Thanks to Richard Barnes, Brian Campbell, Mike Jones, and Jim Schaad
|
|||
|
for their input and review of the text. Thanks to Brian Campbell for
|
|||
|
verifying the Compact Serialization examples.
|
|||
|
|
|||
|
Author's Address
|
|||
|
|
|||
|
Matthew Miller
|
|||
|
Cisco Systems, Inc.
|
|||
|
|
|||
|
EMail: mamille2@cisco.com
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Miller Informational [Page 120]
|
|||
|
|