| < draft-ietf-ace-cbor-web-token-09.txt | draft-ietf-ace-cbor-web-token-10.txt > | |||
|---|---|---|---|---|
| ACE Working Group M. Jones | ACE Working Group M. Jones | |||
| Internet-Draft Microsoft | Internet-Draft Microsoft | |||
| Intended status: Standards Track E. Wahlstroem | Intended status: Standards Track E. Wahlstroem | |||
| Expires: April 29, 2018 | Expires: June 20, 2018 | |||
| S. Erdtman | S. Erdtman | |||
| Spotify AB | Spotify AB | |||
| H. Tschofenig | H. Tschofenig | |||
| ARM Ltd. | ARM Ltd. | |||
| October 26, 2017 | December 17, 2017 | |||
| CBOR Web Token (CWT) | CBOR Web Token (CWT) | |||
| draft-ietf-ace-cbor-web-token-09 | draft-ietf-ace-cbor-web-token-10 | |||
| Abstract | Abstract | |||
| CBOR Web Token (CWT) is a compact means of representing claims to be | CBOR Web Token (CWT) is a compact means of representing claims to be | |||
| transferred between two parties. The claims in a CWT are encoded in | transferred between two parties. The claims in a CWT are encoded in | |||
| the Concise Binary Object Representation (CBOR) and CBOR Object | the Concise Binary Object Representation (CBOR) and CBOR Object | |||
| Signing and Encryption (COSE) is used for added application layer | Signing and Encryption (COSE) is used for added application layer | |||
| security protection. A claim is a piece of information asserted | security protection. A claim is a piece of information asserted | |||
| about a subject and is represented as a name/value pair consisting of | about a subject and is represented as a name/value pair consisting of | |||
| a claim name and a claim value. CWT is derived from JSON Web Token | a claim name and a claim value. CWT is derived from JSON Web Token | |||
| (JWT), but uses CBOR rather than JSON. | (JWT) but uses CBOR rather than JSON. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on April 29, 2018. | This Internet-Draft will expire on June 20, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 27 ¶ | skipping to change at page 2, line 27 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. CBOR Related Terminology . . . . . . . . . . . . . . . . 3 | 1.1. CBOR Related Terminology . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Claims . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Claims . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. Registered Claims . . . . . . . . . . . . . . . . . . . . 5 | 3.1. Registered Claims . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1.1. iss (Issuer) Claim . . . . . . . . . . . . . . . . . 5 | 3.1.1. iss (Issuer) Claim . . . . . . . . . . . . . . . . . 5 | |||
| 3.1.2. sub (Subject) Claim . . . . . . . . . . . . . . . . . 5 | 3.1.2. sub (Subject) Claim . . . . . . . . . . . . . . . . . 5 | |||
| 3.1.3. aud (Audience) Claim . . . . . . . . . . . . . . . . 5 | 3.1.3. aud (Audience) Claim . . . . . . . . . . . . . . . . 5 | |||
| 3.1.4. exp (Expiration Time) Claim . . . . . . . . . . . . . 5 | 3.1.4. exp (Expiration Time) Claim . . . . . . . . . . . . . 5 | |||
| 3.1.5. nbf (Not Before) Claim . . . . . . . . . . . . . . . 5 | 3.1.5. nbf (Not Before) Claim . . . . . . . . . . . . . . . 5 | |||
| 3.1.6. iat (Issued At) Claim . . . . . . . . . . . . . . . . 5 | 3.1.6. iat (Issued At) Claim . . . . . . . . . . . . . . . . 6 | |||
| 3.1.7. cti (CWT ID) Claim . . . . . . . . . . . . . . . . . 6 | 3.1.7. cti (CWT ID) Claim . . . . . . . . . . . . . . . . . 6 | |||
| 4. Summary of the claim names, keys, and value types . . . . . . 6 | 4. Summary of the claim names, keys, and value types . . . . . . 6 | |||
| 5. CBOR Tags and Claim Values . . . . . . . . . . . . . . . . . 6 | 5. CBOR Tags and Claim Values . . . . . . . . . . . . . . . . . 6 | |||
| 6. CWT CBOR Tag . . . . . . . . . . . . . . . . . . . . . . . . 6 | 6. CWT CBOR Tag . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 7. Creating and Validating CWTs . . . . . . . . . . . . . . . . 7 | 7. Creating and Validating CWTs . . . . . . . . . . . . . . . . 7 | |||
| 7.1. Creating a CWT . . . . . . . . . . . . . . . . . . . . . 7 | 7.1. Creating a CWT . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7.2. Validating a CWT . . . . . . . . . . . . . . . . . . . . 8 | 7.2. Validating a CWT . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 9.1. CBOR Web Token (CWT) Claims Registry . . . . . . . . . . 10 | 9.1. CBOR Web Token (CWT) Claims Registry . . . . . . . . . . 10 | |||
| 9.1.1. Registration Template . . . . . . . . . . . . . . . . 10 | 9.1.1. Registration Template . . . . . . . . . . . . . . . . 10 | |||
| 9.1.2. Initial Registry Contents . . . . . . . . . . . . . . 11 | 9.1.2. Initial Registry Contents . . . . . . . . . . . . . . 11 | |||
| 9.2. Media Type Registration . . . . . . . . . . . . . . . . . 13 | 9.2. Media Type Registration . . . . . . . . . . . . . . . . . 13 | |||
| 9.2.1. Registry Contents . . . . . . . . . . . . . . . . . . 13 | 9.2.1. Registry Contents . . . . . . . . . . . . . . . . . . 13 | |||
| 9.3. CoAP Content-Formats Registration . . . . . . . . . . . . 13 | 9.3. CoAP Content-Formats Registration . . . . . . . . . . . . 13 | |||
| 9.3.1. Registry Contents . . . . . . . . . . . . . . . . . . 13 | 9.3.1. Registry Contents . . . . . . . . . . . . . . . . . . 14 | |||
| 9.4. CBOR Tag registration . . . . . . . . . . . . . . . . . . 14 | 9.4. CBOR Tag registration . . . . . . . . . . . . . . . . . . 14 | |||
| 9.4.1. Registry Contents . . . . . . . . . . . . . . . . . . 14 | 9.4.1. Registry Contents . . . . . . . . . . . . . . . . . . 14 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 14 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 14 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 15 | 10.2. Informative References . . . . . . . . . . . . . . . . . 15 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 15 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| A.1. Example CWT Claims Set . . . . . . . . . . . . . . . . . 15 | A.1. Example CWT Claims Set . . . . . . . . . . . . . . . . . 16 | |||
| A.2. Example keys . . . . . . . . . . . . . . . . . . . . . . 16 | A.2. Example keys . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| A.2.1. 128-bit Symmetric Key . . . . . . . . . . . . . . . . 16 | A.2.1. 128-bit Symmetric Key . . . . . . . . . . . . . . . . 16 | |||
| A.2.2. 256-bit Symmetric Key . . . . . . . . . . . . . . . . 16 | A.2.2. 256-bit Symmetric Key . . . . . . . . . . . . . . . . 17 | |||
| A.2.3. ECDSA P-256 256-bit COSE Key . . . . . . . . . . . . 17 | A.2.3. ECDSA P-256 256-bit COSE Key . . . . . . . . . . . . 17 | |||
| A.3. Example Signed CWT . . . . . . . . . . . . . . . . . . . 17 | A.3. Example Signed CWT . . . . . . . . . . . . . . . . . . . 17 | |||
| A.4. Example MACed CWT . . . . . . . . . . . . . . . . . . . . 18 | A.4. Example MACed CWT . . . . . . . . . . . . . . . . . . . . 18 | |||
| A.5. Example Encrypted CWT . . . . . . . . . . . . . . . . . . 19 | A.5. Example Encrypted CWT . . . . . . . . . . . . . . . . . . 19 | |||
| A.6. Example Nested CWT . . . . . . . . . . . . . . . . . . . 20 | A.6. Example Nested CWT . . . . . . . . . . . . . . . . . . . 20 | |||
| A.7. Example MACed CWT with a floating-point value . . . . . . 21 | A.7. Example MACed CWT with a floating-point value . . . . . . 21 | |||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 22 | Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 22 | |||
| Appendix C. Document History . . . . . . . . . . . . . . . . . . 22 | Appendix C. Document History . . . . . . . . . . . . . . . . . . 22 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| skipping to change at page 4, line 4 ¶ | skipping to change at page 3, line 51 ¶ | |||
| In JSON, maps are called objects and only have one kind of map key: a | In JSON, maps are called objects and only have one kind of map key: a | |||
| string. CBOR uses strings, negative integers, and unsigned integers | string. CBOR uses strings, negative integers, and unsigned integers | |||
| as map keys. The integers are used for compactness of encoding and | as map keys. The integers are used for compactness of encoding and | |||
| easy comparison. The inclusion of strings allows for an additional | easy comparison. The inclusion of strings allows for an additional | |||
| range of short encoded values to be used. | range of short encoded values to be used. | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| "Key words for use in RFCs to Indicate Requirement Levels" [RFC2119]. | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | ||||
| This document reuses terminology from JWT [RFC7519] and COSE | This document reuses terminology from JWT [RFC7519] and COSE | |||
| [RFC8152]. | [RFC8152]. | |||
| StringOrURI | StringOrURI | |||
| The "StringOrURI" term has the same meaning, syntax, and | The "StringOrURI" term has the same meaning, syntax, and | |||
| processing rules as the "StringOrUri" term defined in Section 2 of | processing rules as the "StringOrURI" term defined in Section 2 of | |||
| JWT [RFC7519], except that it uses a CBOR text string instead of a | JWT [RFC7519], except that it uses a CBOR text string instead of a | |||
| JSON string value. | JSON string value. | |||
| NumericDate | NumericDate | |||
| The "NumericDate" term has the same meaning, syntax, and | The "NumericDate" term has the same meaning, syntax, and | |||
| processing rules as the "NumericDate" term defined in Section 2 of | processing rules as the "NumericDate" term defined in Section 2 of | |||
| JWT [RFC7519], except that the CBOR numeric date representation | JWT [RFC7519], except that the CBOR numeric date representation | |||
| (from Section 2.4.1 of [RFC7049]) is used. The encoding is | (from Section 2.4.1 of [RFC7049]) is used. The encoding is | |||
| modified so that the leading tag 1 (epoch-based date/time) MUST be | modified so that the leading tag 1 (epoch-based date/time) MUST be | |||
| omitted. | omitted. | |||
| skipping to change at page 5, line 31 ¶ | skipping to change at page 5, line 31 ¶ | |||
| The "sub" (subject) claim has the same meaning, syntax, and | The "sub" (subject) claim has the same meaning, syntax, and | |||
| processing rules as the "sub" claim defined in Section 4.1.2 of JWT | processing rules as the "sub" claim defined in Section 4.1.2 of JWT | |||
| [RFC7519], except that the value is of type StringOrURI. The Claim | [RFC7519], except that the value is of type StringOrURI. The Claim | |||
| Key 2 is used to identify this claim. | Key 2 is used to identify this claim. | |||
| 3.1.3. aud (Audience) Claim | 3.1.3. aud (Audience) Claim | |||
| The "aud" (audience) claim has the same meaning, syntax, and | The "aud" (audience) claim has the same meaning, syntax, and | |||
| processing rules as the "aud" claim defined in Section 4.1.3 of JWT | processing rules as the "aud" claim defined in Section 4.1.3 of JWT | |||
| [RFC7519], except that the value is of type StringOrURI. The Claim | [RFC7519], except that the value of the audience claim is of type | |||
| Key 3 is used to identify this claim. | StringOrURI when it is not an array or the values of the audience | |||
| array elements are of type StringOrURI when the audience claim value | ||||
| is an array. The Claim Key 3 is used to identify this claim. | ||||
| 3.1.4. exp (Expiration Time) Claim | 3.1.4. exp (Expiration Time) Claim | |||
| The "exp" (expiration time) claim has the same meaning, syntax, and | The "exp" (expiration time) claim has the same meaning, syntax, and | |||
| processing rules as the "exp" claim defined in Section 4.1.4 of JWT | processing rules as the "exp" claim defined in Section 4.1.4 of JWT | |||
| [RFC7519], except that the value is of type NumericDate. The Claim | [RFC7519], except that the value is of type NumericDate. The Claim | |||
| Key 4 is used to identify this claim. | Key 4 is used to identify this claim. | |||
| 3.1.5. nbf (Not Before) Claim | 3.1.5. nbf (Not Before) Claim | |||
| skipping to change at page 6, line 4 ¶ | skipping to change at page 6, line 9 ¶ | |||
| The "nbf" (not before) claim has the same meaning, syntax, and | The "nbf" (not before) claim has the same meaning, syntax, and | |||
| processing rules as the "nbf" claim defined in Section 4.1.5 of JWT | processing rules as the "nbf" claim defined in Section 4.1.5 of JWT | |||
| [RFC7519], except that the value is of type NumericDate. The Claim | [RFC7519], except that the value is of type NumericDate. The Claim | |||
| Key 5 is used to identify this claim. | Key 5 is used to identify this claim. | |||
| 3.1.6. iat (Issued At) Claim | 3.1.6. iat (Issued At) Claim | |||
| The "iat" (issued at) claim has the same meaning, syntax, and | The "iat" (issued at) claim has the same meaning, syntax, and | |||
| processing rules as the "iat" claim defined in Section 4.1.6 of JWT | processing rules as the "iat" claim defined in Section 4.1.6 of JWT | |||
| [RFC7519], except that the value is of type NumericDate. The Claim | [RFC7519], except that the value is of type NumericDate. The Claim | |||
| Key 6 is used to identify this claim. | Key 6 is used to identify this claim. | |||
| 3.1.7. cti (CWT ID) Claim | 3.1.7. cti (CWT ID) Claim | |||
| The "cti" (CWT ID) claim has the same meaning, syntax, and processing | The "cti" (CWT ID) claim has the same meaning, syntax, and processing | |||
| rules as the "jti" claim defined in Section 4.1.7 of JWT [RFC7519], | rules as the "jti" claim defined in Section 4.1.7 of JWT [RFC7519], | |||
| except that the value is of type binary string. The Claim Key 7 is | except that the value is of type byte string. The Claim Key 7 is | |||
| used to identify this claim. | used to identify this claim. | |||
| 4. Summary of the claim names, keys, and value types | 4. Summary of the claim names, keys, and value types | |||
| /---------+-----+----------------------------------\ | +------+-----+----------------------------------+ | |||
| | Name | Key | Value type | | | Name | Key | Value type | | |||
| |---------+-----+----------------------------------| | +------+-----+----------------------------------+ | |||
| | iss | 1 | text string | | | iss | 1 | text string | | |||
| | sub | 2 | text string | | | sub | 2 | text string | | |||
| | aud | 3 | text string | | | aud | 3 | text string | | |||
| | exp | 4 | integer or floating-point number | | | exp | 4 | integer or floating-point number | | |||
| | nbf | 5 | integer or floating-point number | | | nbf | 5 | integer or floating-point number | | |||
| | iat | 6 | integer or floating-point number | | | iat | 6 | integer or floating-point number | | |||
| | cti | 7 | binary string | | | cti | 7 | byte string | | |||
| \---------+-----+----------------------------------/ | +------+-----+----------------------------------+ | |||
| Figure 1: Summary of the claim names, keys, and value types | Table 1: Summary of the claim names, keys, and value types | |||
| 5. CBOR Tags and Claim Values | 5. CBOR Tags and Claim Values | |||
| The claim values defined in this specification MUST NOT be prefixed | The claim values defined in this specification MUST NOT be prefixed | |||
| with any CBOR tag. For instance, while CBOR tag 1 (epoch-based date/ | with any CBOR tag. For instance, while CBOR tag 1 (epoch-based date/ | |||
| time) could logically be prefixed to values of the "exp", "nbf", and | time) could logically be prefixed to values of the "exp", "nbf", and | |||
| "iat" claims, this is unnecessary, since the representation of the | "iat" claims, this is unnecessary, since the representation of the | |||
| claim values is already specified by the claim definitions. Tagging | claim values is already specified by the claim definitions. Tagging | |||
| claim values would only take up extra space without adding | claim values would only take up extra space without adding | |||
| information. However, this does not prohibit future claim | information. However, this does not prohibit future claim | |||
| skipping to change at page 7, line 7 ¶ | skipping to change at page 7, line 9 ¶ | |||
| How to determine that a CBOR data structure is a CWT is application- | How to determine that a CBOR data structure is a CWT is application- | |||
| dependent. In some cases, this information is known from the | dependent. In some cases, this information is known from the | |||
| application context, such as from the position of the CWT in a data | application context, such as from the position of the CWT in a data | |||
| structure at which the value must be a CWT. One method of indicating | structure at which the value must be a CWT. One method of indicating | |||
| that a CBOR object is a CWT is the use of the "application/cwt" | that a CBOR object is a CWT is the use of the "application/cwt" | |||
| content type by a transport protocol. | content type by a transport protocol. | |||
| This section defines the CWT CBOR tag as another means for | This section defines the CWT CBOR tag as another means for | |||
| applications to declare that a CBOR data structure is a CWT. Its use | applications to declare that a CBOR data structure is a CWT. Its use | |||
| is optional, and is intended for use in cases in which this | is optional and is intended for use in cases in which this | |||
| information would not otherwise be known. | information would not otherwise be known. | |||
| If present, the CWT tag MUST prefix a tagged object using one of the | If present, the CWT tag MUST prefix a tagged object using one of the | |||
| COSE CBOR tags. In this example, the COSE_Mac0 tag is used. The | COSE CBOR tags. In this example, the COSE_Mac0 tag is used. The | |||
| actual COSE_Mac0 object has been excluded from this example. | actual COSE_Mac0 object has been excluded from this example. | |||
| / CWT CBOR tag / 61( | / CWT CBOR tag / 61( | |||
| / COSE_Mac0 CBOR tag / 17( | / COSE_Mac0 CBOR tag / 17( | |||
| / COSE_Mac0 object / | / COSE_Mac0 object / | |||
| ) | ) | |||
| ) | ) | |||
| Figure 2: Example of a CWT tag usage | Figure 1: Example of a CWT tag usage | |||
| 7. Creating and Validating CWTs | 7. Creating and Validating CWTs | |||
| 7.1. Creating a CWT | 7.1. Creating a CWT | |||
| To create a CWT, the following steps are performed. The order of the | To create a CWT, the following steps are performed. The order of the | |||
| steps is not significant in cases where there are no dependencies | steps is not significant in cases where there are no dependencies | |||
| between the inputs and outputs of the steps. | between the inputs and outputs of the steps. | |||
| 1. Create a CWT Claims Set containing the desired claims. | 1. Create a CWT Claims Set containing the desired claims. | |||
| skipping to change at page 8, line 12 ¶ | skipping to change at page 8, line 14 ¶ | |||
| specified in [RFC8152] for creating a COSE_Mac/COSE_Mac0 | specified in [RFC8152] for creating a COSE_Mac/COSE_Mac0 | |||
| object MUST be followed. | object MUST be followed. | |||
| * Else, if the CWT is a COSE_Encrypt/COSE_Encrypt0 object, | * Else, if the CWT is a COSE_Encrypt/COSE_Encrypt0 object, | |||
| create a COSE_Encrypt/COSE_Encrypt0 using the Message as the | create a COSE_Encrypt/COSE_Encrypt0 using the Message as the | |||
| plaintext for the COSE_Encrypt/COSE_Encrypt0 object; all steps | plaintext for the COSE_Encrypt/COSE_Encrypt0 object; all steps | |||
| specified in [RFC8152] for creating a COSE_Encrypt/ | specified in [RFC8152] for creating a COSE_Encrypt/ | |||
| COSE_Encrypt0 object MUST be followed. | COSE_Encrypt0 object MUST be followed. | |||
| 5. If a nested signing, MACing, or encryption operation will be | 5. If a nested signing, MACing, or encryption operation will be | |||
| performed, let the Message be the COSE_Sign/COSE_Sign1, COSE_Mac/ | performed, let the Message be the tagged COSE_Sign/COSE_Sign1, | |||
| COSE_Mac0, or COSE_Encrypt/COSE_Encrypt0, add the matching COSE | COSE_Mac/COSE_Mac0, or COSE_Encrypt/COSE_Encrypt0, and return to | |||
| CBOR tag, and return to Step 3. | Step 3. | |||
| 6. If needed by the application, add the appropriate COSE CBOR tag | 6. If needed by the application, prepend the COSE object with the | |||
| to the COSE object to indicate the type of the COSE object. If | appropriate COSE CBOR tag to indicate the type of the COSE | |||
| needed by the application, add the CWT CBOR tag to indicate that | object. If needed by the application, prepend the COSE object | |||
| the COSE object is a CWT. | with the CWT CBOR tag to indicate that the COSE object is a CWT. | |||
| 7.2. Validating a CWT | 7.2. Validating a CWT | |||
| When validating a CWT, the following steps are performed. The order | When validating a CWT, the following steps are performed. The order | |||
| of the steps is not significant in cases where there are no | of the steps is not significant in cases where there are no | |||
| dependencies between the inputs and outputs of the steps. If any of | dependencies between the inputs and outputs of the steps. If any of | |||
| the listed steps fail, then the CWT MUST be rejected -- that is, | the listed steps fail, then the CWT MUST be rejected -- that is, | |||
| treated by the application as invalid input. | treated by the application as invalid input. | |||
| 1. Verify that the CWT is a valid CBOR object. | 1. Verify that the CWT is a valid CBOR object. | |||
| skipping to change at page 12, line 50 ¶ | skipping to change at page 12, line 51 ¶ | |||
| o Claim Key: 6 | o Claim Key: 6 | |||
| o Claim Value Type(s): integer or floating-point number | o Claim Value Type(s): integer or floating-point number | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): Section 3.1.6 of [[ this specification | o Specification Document(s): Section 3.1.6 of [[ this specification | |||
| ]] | ]] | |||
| o Claim Name: "cti" | o Claim Name: "cti" | |||
| o Claim Description: CWT ID | o Claim Description: CWT ID | |||
| o JWT Claim Name: "jti" | o JWT Claim Name: "jti" | |||
| o Claim Key: 7 | o Claim Key: 7 | |||
| o Claim Value Type(s): binary string | o Claim Value Type(s): byte string | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): Section 3.1.7 of [[ this specification | o Specification Document(s): Section 3.1.7 of [[ this specification | |||
| ]] | ]] | |||
| 9.2. Media Type Registration | 9.2. Media Type Registration | |||
| This section registers the "application/cwt" media type in the "Media | This section registers the "application/cwt" media type in the "Media | |||
| Types" registry [IANA.MediaTypes] in the manner described in RFC 6838 | Types" registry [IANA.MediaTypes] in the manner described in RFC 6838 | |||
| [RFC6838], which can be used to indicate that the content is a CWT. | [RFC6838], which can be used to indicate that the content is a CWT. | |||
| skipping to change at page 15, line 9 ¶ | skipping to change at page 15, line 13 ¶ | |||
| October 2013, <https://www.rfc-editor.org/info/rfc7049>. | October 2013, <https://www.rfc-editor.org/info/rfc7049>. | |||
| [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
| [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | |||
| RFC 8152, DOI 10.17487/RFC8152, July 2017, | RFC 8152, DOI 10.17487/RFC8152, July 2017, | |||
| <https://www.rfc-editor.org/info/rfc8152>. | <https://www.rfc-editor.org/info/rfc8152>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| 10.2. Informative References | 10.2. Informative References | |||
| [IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
| IANA, "JSON Web Token Claims", | IANA, "JSON Web Token Claims", | |||
| <http://www.iana.org/assignments/jwt>. | <http://www.iana.org/assignments/jwt>. | |||
| [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
| IANA Considerations Section in RFCs", RFC 5226, | IANA Considerations Section in RFCs", RFC 5226, | |||
| DOI 10.17487/RFC5226, May 2008, | DOI 10.17487/RFC5226, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5226>. | <https://www.rfc-editor.org/info/rfc5226>. | |||
| skipping to change at page 15, line 51 ¶ | skipping to change at page 16, line 11 ¶ | |||
| Where a byte string is to carry an embedded CBOR-encoded item, the | Where a byte string is to carry an embedded CBOR-encoded item, the | |||
| diagnostic notation for this CBOR data item can be enclosed in '<<' | diagnostic notation for this CBOR data item can be enclosed in '<<' | |||
| and '>>' to notate the byte string resulting from encoding the data | and '>>' to notate the byte string resulting from encoding the data | |||
| item, e.g., h'63666F6F' translates to <<"foo">>. | item, e.g., h'63666F6F' translates to <<"foo">>. | |||
| A.1. Example CWT Claims Set | A.1. Example CWT Claims Set | |||
| The CWT Claims Set used for the different examples displays usage of | The CWT Claims Set used for the different examples displays usage of | |||
| all the defined claims. For signed and MACed examples, the CWT | all the defined claims. For signed and MACed examples, the CWT | |||
| Claims Set is the CBOR encoding as a binary string. | Claims Set is the CBOR encoding as a byte string. | |||
| a70175636f61703a2f2f61732e6578616d706c652e636f6d02656572696b7703 | a70175636f61703a2f2f61732e6578616d706c652e636f6d02656572696b7703 | |||
| 7818636f61703a2f2f6c696768742e6578616d706c652e636f6d041a5612aeb0 | 7818636f61703a2f2f6c696768742e6578616d706c652e636f6d041a5612aeb0 | |||
| 051a5610d9f0061a5610d9f007420b71 | 051a5610d9f0061a5610d9f007420b71 | |||
| Figure 3: Example CWT Claims Set as hex string | Figure 2: Example CWT Claims Set as hex string | |||
| { | { | |||
| / iss / 1: "coap://as.example.com", | / iss / 1: "coap://as.example.com", | |||
| / sub / 2: "erikw", | / sub / 2: "erikw", | |||
| / aud / 3: "coap://light.example.com", | / aud / 3: "coap://light.example.com", | |||
| / exp / 4: 1444064944, | / exp / 4: 1444064944, | |||
| / nbf / 5: 1443944944, | / nbf / 5: 1443944944, | |||
| / iat / 6: 1443944944, | / iat / 6: 1443944944, | |||
| / cti / 7: h'0b71' | / cti / 7: h'0b71' | |||
| } | } | |||
| Figure 4: Example CWT Claims Set in CBOR diagnostic notation | Figure 3: Example CWT Claims Set in CBOR diagnostic notation | |||
| A.2. Example keys | A.2. Example keys | |||
| This section contains the keys used to sign, MAC, and encrypt the | This section contains the keys used to sign, MAC, and encrypt the | |||
| messages in this appendix. Line breaks are for display purposes | messages in this appendix. Line breaks are for display purposes | |||
| only. | only. | |||
| A.2.1. 128-bit Symmetric Key | A.2.1. 128-bit Symmetric Key | |||
| a42050231f4c4d4d3051fdc2ec0a3851d5b3830104024c53796d6d6574726963 | a42050231f4c4d4d3051fdc2ec0a3851d5b3830104024c53796d6d6574726963 | |||
| 313238030a | 313238030a | |||
| Figure 5: 128-bit symmetric COSE_Key as hex string | Figure 4: 128-bit symmetric COSE_Key as hex string | |||
| { | { | |||
| / k / -1: h'231f4c4d4d3051fdc2ec0a3851d5b383' | / k / -1: h'231f4c4d4d3051fdc2ec0a3851d5b383' | |||
| / kty / 1: 4 / Symmetric /, | / kty / 1: 4 / Symmetric /, | |||
| / kid / 2: h'53796d6d6574726963313238' / 'Symmetric128' /, | / kid / 2: h'53796d6d6574726963313238' / 'Symmetric128' /, | |||
| / alg / 3: 10 / AES-CCM-16-64-128 / | / alg / 3: 10 / AES-CCM-16-64-128 / | |||
| } | } | |||
| Figure 6: 128-bit symmetric COSE_Key in CBOR diagnostic notation | Figure 5: 128-bit symmetric COSE_Key in CBOR diagnostic notation | |||
| A.2.2. 256-bit Symmetric Key | A.2.2. 256-bit Symmetric Key | |||
| a4205820403697de87af64611c1d32a05dab0fe1fcb715a86ab435f1ec99192d | a4205820403697de87af64611c1d32a05dab0fe1fcb715a86ab435f1ec99192d | |||
| 795693880104024c53796d6d6574726963323536030a | 795693880104024c53796d6d6574726963323536030a | |||
| Figure 7: 256-bit symmetric COSE_Key as hex string | Figure 6: 256-bit symmetric COSE_Key as hex string | |||
| { | { | |||
| / k / -1: h'403697de87af64611c1d32a05dab0fe1fcb715a86ab435f1 | / k / -1: h'403697de87af64611c1d32a05dab0fe1fcb715a86ab435f1 | |||
| ec99192d79569388' | ec99192d79569388' | |||
| / kty / 1: 4 / Symmetric /, | / kty / 1: 4 / Symmetric /, | |||
| / kid / 4: h'53796d6d6574726963323536' / 'Symmetric256' /, | / kid / 4: h'53796d6d6574726963323536' / 'Symmetric256' /, | |||
| / alg / 3: 4 / HMAC 256/64 / | / alg / 3: 4 / HMAC 256/64 / | |||
| } | } | |||
| Figure 8: 256-bit symmetric COSE_Key in CBOR diagnostic notation | Figure 7: 256-bit symmetric COSE_Key in CBOR diagnostic notation | |||
| A.2.3. ECDSA P-256 256-bit COSE Key | A.2.3. ECDSA P-256 256-bit COSE Key | |||
| a72358206c1382765aec5358f117733d281c1c7bdc39884d04a45a1e6c67c858 | a72358206c1382765aec5358f117733d281c1c7bdc39884d04a45a1e6c67c858 | |||
| bc206c1922582060f7f1a780d8a783bfb7a2dd6b2796e8128dbbcef9d3d168db | bc206c1922582060f7f1a780d8a783bfb7a2dd6b2796e8128dbbcef9d3d168db | |||
| 9529971a36e7b9215820143329cce7868e416927599cf65a34f3ce2ffda55a7e | 9529971a36e7b9215820143329cce7868e416927599cf65a34f3ce2ffda55a7e | |||
| ca69ed8919a394d42f0f2001010202524173796d6d6574726963454344534132 | ca69ed8919a394d42f0f2001010202524173796d6d6574726963454344534132 | |||
| 35360326 | 35360326 | |||
| Figure 9: ECDSA 256-bit COSE Key as hex string | Figure 8: ECDSA 256-bit COSE Key as hex string | |||
| { | { | |||
| / d / -4: h'6c1382765aec5358f117733d281c1c7bdc39884d04a45a1e | / d / -4: h'6c1382765aec5358f117733d281c1c7bdc39884d04a45a1e | |||
| 6c67c858bc206c19', | 6c67c858bc206c19', | |||
| / y / -3: h'60f7f1a780d8a783bfb7a2dd6b2796e8128dbbcef9d3d168 | / y / -3: h'60f7f1a780d8a783bfb7a2dd6b2796e8128dbbcef9d3d168 | |||
| db9529971a36e7b9', | db9529971a36e7b9', | |||
| / x / -2: h'143329cce7868e416927599cf65a34f3ce2ffda55a7eca69 | / x / -2: h'143329cce7868e416927599cf65a34f3ce2ffda55a7eca69 | |||
| ed8919a394d42f0f', | ed8919a394d42f0f', | |||
| / crv / -1: 1 / P-256 /, | / crv / -1: 1 / P-256 /, | |||
| / kty / 1: 2 / EC2 /, | / kty / 1: 2 / EC2 /, | |||
| / kid / 2: h'4173796d6d657472696345434453413 | / kid / 2: h'4173796d6d657472696345434453413 | |||
| 23536' / 'AsymmetricECDSA256' /, | 23536' / 'AsymmetricECDSA256' /, | |||
| / alg / 3: -7 / ECDSA 256 / | / alg / 3: -7 / ECDSA 256 / | |||
| } | } | |||
| Figure 10: ECDSA 256-bit COSE Key in CBOR diagnostic notation | Figure 9: ECDSA 256-bit COSE Key in CBOR diagnostic notation | |||
| A.3. Example Signed CWT | A.3. Example Signed CWT | |||
| This section shows a signed CWT with a single recipient and a full | This section shows a signed CWT with a single recipient and a full | |||
| CWT Claims Set. | CWT Claims Set. | |||
| The signature is generated using the private key listed in | The signature is generated using the private key listed in | |||
| Appendix A.2.3 and it can be validated using the public key from | Appendix A.2.3 and it can be validated using the public key from | |||
| Appendix A.2.3. Line breaks are for display purposes only. | Appendix A.2.3. Line breaks are for display purposes only. | |||
| d28443a10126a104524173796d6d657472696345434453413235365850a701756 | d28443a10126a104524173796d6d657472696345434453413235365850a701756 | |||
| 36f61703a2f2f61732e6578616d706c652e636f6d02656572696b77037818636f | 36f61703a2f2f61732e6578616d706c652e636f6d02656572696b77037818636f | |||
| 61703a2f2f6c696768742e6578616d706c652e636f6d041a5612aeb0051a5610d | 61703a2f2f6c696768742e6578616d706c652e636f6d041a5612aeb0051a5610d | |||
| 9f0061a5610d9f007420b7158405427c1ff28d23fbad1f29c4c7c6a555e601d6f | 9f0061a5610d9f007420b7158405427c1ff28d23fbad1f29c4c7c6a555e601d6f | |||
| a29f9179bc3d7438bacaca5acd08c8d4d4f96131680c429a01f85951ecee743a5 | a29f9179bc3d7438bacaca5acd08c8d4d4f96131680c429a01f85951ecee743a5 | |||
| 2b9b63632c57209120e1c9e30 | 2b9b63632c57209120e1c9e30 | |||
| Figure 11: Signed CWT as hex string | Figure 10: Signed CWT as hex string | |||
| 18( | 18( | |||
| [ | [ | |||
| / protected / << { | / protected / << { | |||
| / alg / 1: -7 / ECDSA 256 / | / alg / 1: -7 / ECDSA 256 / | |||
| } >>, | } >>, | |||
| / unprotected / { | / unprotected / { | |||
| / kid / 4: h'4173796d6d657472696345434453413 | / kid / 4: h'4173796d6d657472696345434453413 | |||
| 23536' / 'AsymmetricECDSA256' / | 23536' / 'AsymmetricECDSA256' / | |||
| }, | }, | |||
| skipping to change at page 18, line 39 ¶ | skipping to change at page 18, line 43 ¶ | |||
| / iat / 6: 1443944944, | / iat / 6: 1443944944, | |||
| / cti / 7: h'0b71' | / cti / 7: h'0b71' | |||
| } >>, | } >>, | |||
| / signature / h'5427c1ff28d23fbad1f29c4c7c6a555e601d6fa29f | / signature / h'5427c1ff28d23fbad1f29c4c7c6a555e601d6fa29f | |||
| 9179bc3d7438bacaca5acd08c8d4d4f96131680c42 | 9179bc3d7438bacaca5acd08c8d4d4f96131680c42 | |||
| 9a01f85951ecee743a52b9b63632c57209120e1c9e | 9a01f85951ecee743a52b9b63632c57209120e1c9e | |||
| 30' | 30' | |||
| ] | ] | |||
| ) | ) | |||
| Figure 12: Signed CWT in CBOR diagnostic notation | Figure 11: Signed CWT in CBOR diagnostic notation | |||
| A.4. Example MACed CWT | A.4. Example MACed CWT | |||
| This section shows a MACed CWT with a single recipient, a full CWT | This section shows a MACed CWT with a single recipient, a full CWT | |||
| Claims Set, and a CWT tag. | Claims Set, and a CWT tag. | |||
| The MAC is generated using the 256-bit symmetric key from | The MAC is generated using the 256-bit symmetric key from | |||
| Appendix A.2.2 with a 64-bit truncation. Line breaks are for display | Appendix A.2.2 with a 64-bit truncation. Line breaks are for display | |||
| purposes only. | purposes only. | |||
| d83dd18443a10104a1044c53796d6d65747269633235365850a70175636f6170 | d83dd18443a10104a1044c53796d6d65747269633235365850a70175636f6170 | |||
| 3a2f2f61732e6578616d706c652e636f6d02656572696b77037818636f61703a | 3a2f2f61732e6578616d706c652e636f6d02656572696b77037818636f61703a | |||
| 2f2f6c696768742e6578616d706c652e636f6d041a5612aeb0051a5610d9f006 | 2f2f6c696768742e6578616d706c652e636f6d041a5612aeb0051a5610d9f006 | |||
| 1a5610d9f007420b7148093101ef6d789200 | 1a5610d9f007420b7148093101ef6d789200 | |||
| Figure 13: MACed CWT with CWT tag as hex string | Figure 12: MACed CWT with CWT tag as hex string | |||
| 61( | 61( | |||
| 17( | 17( | |||
| [ | [ | |||
| / protected / << { | / protected / << { | |||
| / alg / 1: 4 / HMAC-256-64 / | / alg / 1: 4 / HMAC-256-64 / | |||
| } >>, | } >>, | |||
| / unprotected / { | / unprotected / { | |||
| / kid / 4: h'53796d6d6574726963323536' / 'Symmetric256' / | / kid / 4: h'53796d6d6574726963323536' / 'Symmetric256' / | |||
| }, | }, | |||
| skipping to change at page 19, line 35 ¶ | skipping to change at page 19, line 35 ¶ | |||
| / exp / 4: 1444064944, | / exp / 4: 1444064944, | |||
| / nbf / 5: 1443944944, | / nbf / 5: 1443944944, | |||
| / iat / 6: 1443944944, | / iat / 6: 1443944944, | |||
| / cti / 7: h'0b71' | / cti / 7: h'0b71' | |||
| } >>, | } >>, | |||
| / tag / h'093101ef6d789200' | / tag / h'093101ef6d789200' | |||
| ] | ] | |||
| ) | ) | |||
| ) | ) | |||
| Figure 14: MACed CWT with CWT tag in CBOR diagnostic notation | Figure 13: MACed CWT with CWT tag in CBOR diagnostic notation | |||
| A.5. Example Encrypted CWT | A.5. Example Encrypted CWT | |||
| This section shows an encrypted CWT with a single recipient and a | This section shows an encrypted CWT with a single recipient and a | |||
| full CWT Claims Set. | full CWT Claims Set. | |||
| The encryption is done with AES-CCM mode using the 128-bit symmetric | The encryption is done with AES-CCM mode using the 128-bit symmetric | |||
| key from Appendix A.2.1 with a 64-bit tag and 13-byte nonce, i.e., | key from Appendix A.2.1 with a 64-bit tag and 13-byte nonce, i.e., | |||
| COSE AES-CCM-16-64-128. Line breaks are for display purposes only. | COSE AES-CCM-16-64-128. Line breaks are for display purposes only. | |||
| d08343a1010aa2044c53796d6d6574726963313238054d99a0d7846e762c49ff | d08343a1010aa2044c53796d6d6574726963313238054d99a0d7846e762c49ff | |||
| e8a63e0b5858b918a11fd81e438b7f973d9e2e119bcb22424ba0f38a80f27562 | e8a63e0b5858b918a11fd81e438b7f973d9e2e119bcb22424ba0f38a80f27562 | |||
| f400ee1d0d6c0fdb559c02421fd384fc2ebe22d7071378b0ea7428fff157444d | f400ee1d0d6c0fdb559c02421fd384fc2ebe22d7071378b0ea7428fff157444d | |||
| 45f7e6afcda1aae5f6495830c58627087fc5b4974f319a8707a635dd643b | 45f7e6afcda1aae5f6495830c58627087fc5b4974f319a8707a635dd643b | |||
| Figure 15: Encrypted CWT as hex string | Figure 14: Encrypted CWT as hex string | |||
| 16( | 16( | |||
| [ | [ | |||
| / protected / << { | / protected / << { | |||
| / alg / 1: 10 / AES-CCM-16-64-128 / | / alg / 1: 10 / AES-CCM-16-64-128 / | |||
| } >>, | } >>, | |||
| / unprotected / { | / unprotected / { | |||
| / kid / 4: h'53796d6d6574726963313238' / 'Symmetric128' /, | / kid / 4: h'53796d6d6574726963313238' / 'Symmetric128' /, | |||
| / iv / 5: h'99a0d7846e762c49ffe8a63e0b' | / iv / 5: h'99a0d7846e762c49ffe8a63e0b' | |||
| }, | }, | |||
| / ciphertext / h'b918a11fd81e438b7f973d9e2e119bcb22424ba0f38 | / ciphertext / h'b918a11fd81e438b7f973d9e2e119bcb22424ba0f38 | |||
| a80f27562f400ee1d0d6c0fdb559c02421fd384fc2e | a80f27562f400ee1d0d6c0fdb559c02421fd384fc2e | |||
| be22d7071378b0ea7428fff157444d45f7e6afcda1a | be22d7071378b0ea7428fff157444d45f7e6afcda1a | |||
| ae5f6495830c58627087fc5b4974f319a8707a635dd | ae5f6495830c58627087fc5b4974f319a8707a635dd | |||
| 643b' | 643b' | |||
| ] | ] | |||
| ) | ) | |||
| Figure 16: Encrypted CWT in CBOR diagnostic notation | Figure 15: Encrypted CWT in CBOR diagnostic notation | |||
| A.6. Example Nested CWT | A.6. Example Nested CWT | |||
| This section shows a Nested CWT, signed and then encrypted, with a | This section shows a Nested CWT, signed and then encrypted, with a | |||
| single recipient and a full CWT Claims Set. | single recipient and a full CWT Claims Set. | |||
| The signature is generated using the private ECDSA key from | The signature is generated using the private ECDSA key from | |||
| Appendix A.2.3 and it can be validated using the public ECDSA parts | Appendix A.2.3 and it can be validated using the public ECDSA parts | |||
| from Appendix A.2.3. The encryption is done with AES-CCM mode using | from Appendix A.2.3. The encryption is done with AES-CCM mode using | |||
| the 128-bit symmetric key from Appendix A.2.1 with a 64-bit tag and | the 128-bit symmetric key from Appendix A.2.1 with a 64-bit tag and | |||
| skipping to change at page 20, line 49 ¶ | skipping to change at page 20, line 49 ¶ | |||
| layers. Line breaks are for display purposes only. | layers. Line breaks are for display purposes only. | |||
| d08343a1010aa2044c53796d6d6574726963313238054d4a0694c0e69ee6b595 | d08343a1010aa2044c53796d6d6574726963313238054d4a0694c0e69ee6b595 | |||
| 6655c7b258b7f6b0914f993de822cc47e5e57a188d7960b528a747446fe12f0e | 6655c7b258b7f6b0914f993de822cc47e5e57a188d7960b528a747446fe12f0e | |||
| 7de05650dec74724366763f167a29c002dfd15b34d8993391cf49bc91127f545 | 7de05650dec74724366763f167a29c002dfd15b34d8993391cf49bc91127f545 | |||
| dba8703d66f5b7f1ae91237503d371e6333df9708d78c4fb8a8386c8ff09dc49 | dba8703d66f5b7f1ae91237503d371e6333df9708d78c4fb8a8386c8ff09dc49 | |||
| af768b23179deab78d96490a66d5724fb33900c60799d9872fac6da3bdb89043 | af768b23179deab78d96490a66d5724fb33900c60799d9872fac6da3bdb89043 | |||
| d67c2a05414ce331b5b8f1ed8ff7138f45905db2c4d5bc8045ab372bff142631 | d67c2a05414ce331b5b8f1ed8ff7138f45905db2c4d5bc8045ab372bff142631 | |||
| 610a7e0f677b7e9b0bc73adefdcee16d9d5d284c616abeab5d8c291ce0 | 610a7e0f677b7e9b0bc73adefdcee16d9d5d284c616abeab5d8c291ce0 | |||
| Figure 17: Signed and Encrypted CWT as hex string | Figure 16: Signed and Encrypted CWT as hex string | |||
| 16( | 16( | |||
| [ | [ | |||
| / protected / << { | / protected / << { | |||
| / alg / 1: 10 / AES-CCM-16-64-128 / | / alg / 1: 10 / AES-CCM-16-64-128 / | |||
| } >>, | } >>, | |||
| / unprotected / { | / unprotected / { | |||
| / kid / 4: h'53796d6d6574726963313238' / 'Symmetric128' /, | / kid / 4: h'53796d6d6574726963313238' / 'Symmetric128' /, | |||
| / iv / 5: h'86bbd41cc32604396324b7f380' | / iv / 5: h'86bbd41cc32604396324b7f380' | |||
| }, | }, | |||
| skipping to change at page 21, line 26 ¶ | skipping to change at page 21, line 26 ¶ | |||
| fd15b34d8993391cf49bc91127f545dba8703d66f5b | fd15b34d8993391cf49bc91127f545dba8703d66f5b | |||
| 7f1ae91237503d371e6333df9708d78c4fb8a8386c8 | 7f1ae91237503d371e6333df9708d78c4fb8a8386c8 | |||
| ff09dc49af768b23179deab78d96490a66d5724fb33 | ff09dc49af768b23179deab78d96490a66d5724fb33 | |||
| 900c60799d9872fac6da3bdb89043d67c2a05414ce3 | 900c60799d9872fac6da3bdb89043d67c2a05414ce3 | |||
| 31b5b8f1ed8ff7138f45905db2c4d5bc8045ab372bf | 31b5b8f1ed8ff7138f45905db2c4d5bc8045ab372bf | |||
| f142631610a7e0f677b7e9b0bc73adefdcee16d9d5d | f142631610a7e0f677b7e9b0bc73adefdcee16d9d5d | |||
| 284c616abeab5d8c291ce0' | 284c616abeab5d8c291ce0' | |||
| ] | ] | |||
| ) | ) | |||
| Figure 18: Signed and Encrypted CWT in CBOR diagnostic notation | Figure 17: Signed and Encrypted CWT in CBOR diagnostic notation | |||
| A.7. Example MACed CWT with a floating-point value | A.7. Example MACed CWT with a floating-point value | |||
| This section shows a MACed CWT with a single recipient and a simple | This section shows a MACed CWT with a single recipient and a simple | |||
| CWT Claims Set. The CWT Claims Set with a floating-point 'iat' value. | CWT Claims Set. The CWT Claims Set with a floating-point 'iat' value. | |||
| The MAC is generated using the 256-bit symmetric key from | The MAC is generated using the 256-bit symmetric key from | |||
| Appendix A.2.2 with a 64-bit truncation. Line breaks are for display | Appendix A.2.2 with a 64-bit truncation. Line breaks are for display | |||
| purposes only. | purposes only. | |||
| d18443a10104a1044c53796d6d65747269633235364ba106fb41d584367c2000 | d18443a10104a1044c53796d6d65747269633235364ba106fb41d584367c2000 | |||
| 0048b8816f34c0542892 | 0048b8816f34c0542892 | |||
| Figure 19: MACed CWT with a floating-point value as hex string | Figure 18: MACed CWT with a floating-point value as hex string | |||
| 17( | 17( | |||
| [ | [ | |||
| / protected / << { | / protected / << { | |||
| / alg / 1: 4 / HMAC-256-64 / | / alg / 1: 4 / HMAC-256-64 / | |||
| } >>, | } >>, | |||
| / unprotected / { | / unprotected / { | |||
| / kid / 4: h'53796d6d6574726963323536' / 'Symmetric256' /, | / kid / 4: h'53796d6d6574726963323536' / 'Symmetric256' /, | |||
| }, | }, | |||
| / payload / << { | / payload / << { | |||
| / iat / 6: 1443944944.5 | / iat / 6: 1443944944.5 | |||
| } >>, | } >>, | |||
| / tag / h'b8816f34c0542892' | / tag / h'b8816f34c0542892' | |||
| ] | ] | |||
| ) | ) | |||
| Figure 20: MACed CWT with a floating-point value in CBOR diagnostic | Figure 19: MACed CWT with a floating-point value in CBOR diagnostic | |||
| notation | notation | |||
| Appendix B. Acknowledgements | Appendix B. Acknowledgements | |||
| This specification is based on JSON Web Token (JWT) [RFC7519], the | This specification is based on JSON Web Token (JWT) [RFC7519], the | |||
| authors of which also include Nat Sakimura and John Bradley. It also | authors of which also include Nat Sakimura and John Bradley. It also | |||
| incorporates suggestions made by many people, notably Carsten | incorporates suggestions made by many people, including Carsten | |||
| Bormann, Jim Schaad, Ludwig Seitz, and Goeran Selander. | Bormann, Esko Dijk, Jim Schaad, Ludwig Seitz, and Goeran Selander. | |||
| Appendix C. Document History | Appendix C. Document History | |||
| [[ to be removed by the RFC Editor before publication as an RFC ]] | [[ to be removed by the RFC Editor before publication as an RFC ]] | |||
| -10 | ||||
| o Clarified that the audience claim value can be a single audience | ||||
| value or an array of audience values, just as is the case for the | ||||
| JWT "aud" claim. | ||||
| o Clarified the nested CWT description. | ||||
| o Changed uses of "binary string" to "byte string". | ||||
| -09 | -09 | |||
| o Added key ID values to the examples. | o Added key ID values to the examples. | |||
| o Key values for the examples are now represented in COSE_Key format | o Key values for the examples are now represented in COSE_Key format | |||
| using CBOR diagnostic notation. | using CBOR diagnostic notation. | |||
| -08 | -08 | |||
| o Updated the diagnostic notation for embedded objects in the | o Updated the diagnostic notation for embedded objects in the | |||
| examples, addressing feedback by Carsten Bormann. | examples, addressing feedback by Carsten Bormann. | |||
| -07 | -07 | |||
| o Updated examples for signing and encryption. Signatures are now | o Updated examples for signing and encryption. Signatures are now | |||
| deterministic as recommended by COSE specification. | deterministic as recommended by COSE specification. | |||
| -06 | -06 | |||
| o Addressed review comments by Carsten Bormann and Jim Schaad. All | o Addressed review comments by Carsten Bormann and Jim Schaad. All | |||
| changes were editorial in nature. | changes were editorial in nature. | |||
| -05 | -05 | |||
| o Addressed working group last call comments with the following | o Addressed working group last call comments with the following | |||
| changes: | changes: | |||
| o Say that CWT is derived from JWT, rather than CWT is a profile of | o Say that CWT is derived from JWT, rather than CWT is a profile of | |||
| JWT. | JWT. | |||
| End of changes. 46 change blocks. | ||||
| 61 lines changed or deleted | 77 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||