| rfc9596xml2.original.xml | rfc9596.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='UTF-8'?> | <?xml version='1.0' encoding='UTF-8'?> | |||
| <?xml-stylesheet type='text/xsl' href='http://xml2rfc.tools.ietf.org/authoring/r | ||||
| fc2629.xslt' ?> | ||||
| <!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN" "http://xml2rfc.tools.ietf.org/ | ||||
| authoring/rfc2629.dtd"> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | <!DOCTYPE rfc [ | |||
| category="std" ipr="trust200902" | <!ENTITY nbsp " "> | |||
| docName="draft-ietf-cose-typ-header-parameter-05"> | <!ENTITY zwsp "​"> | |||
| <!ENTITY nbhy "‑"> | ||||
| <!ENTITY wj "⁠"> | ||||
| ]> | ||||
| <?rfc toc="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" | |||
| <?rfc tocompact="yes"?> | docName="draft-ietf-cose-typ-header-parameter-05" number="9596" updates="" obso | |||
| <?rfc tocdepth="5"?> | letes="" submissionType="IETF" consensus="true" tocInclude="true" tocDepth="5" s | |||
| <?rfc tocindent="yes"?> | ymRefs="true" sortRefs="true" version="3" xml:lang="en"> | |||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <front> | <front> | |||
| <title abbrev='COSE "typ" (type) Header Parameter'>CBOR Object Signing and E | ||||
| <title>COSE "typ" (type) Header Parameter</title> | ncryption (COSE) "typ" (type) Header Parameter</title> | |||
| <seriesInfo name="RFC" value="9596"/> | ||||
| <author fullname="Michael B. Jones" initials="M.B." surname="Jones"> | <author fullname="Michael B. Jones" initials="M.B." surname="Jones"> | |||
| <organization>Self-Issued Consulting</organization> | <organization>Self-Issued Consulting</organization> | |||
| <address> | <address> | |||
| <email>michael_b_jones@hotmail.com</email> | <email>michael_b_jones@hotmail.com</email> | |||
| <uri>https://self-issued.info/</uri> | <uri>https://self-issued.info/</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Orie Steele" initials="O." surname="Steele"> | <author fullname="Orie Steele" initials="O." surname="Steele"> | |||
| <organization>Transmute</organization> | <organization>Transmute</organization> | |||
| <address> | <address> | |||
| <email>orie@transmute.industries</email> | <email>orie@transmute.industries</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="June" year="2024"/> | ||||
| <date day="3" month="April" year="2024" /> | <area>SEC</area> | |||
| <workgroup>cose</workgroup> | ||||
| <area>Security</area> | ||||
| <workgroup>COSE Working Group</workgroup> | ||||
| <keyword>Explicit Typing</keyword> | <keyword>Explicit Typing</keyword> | |||
| <keyword>Internet-Draft</keyword> | ||||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| This specification adds the equivalent of the JSON Object Signing and Enc ryption (JOSE) | This specification adds the equivalent of the JSON Object Signing and Enc ryption (JOSE) | |||
| <spanx style="verb">typ</spanx> (type) header parameter to | "typ" (type) header parameter to | |||
| CBOR Object Signing and Encryption (COSE). | CBOR Object Signing and Encryption (COSE). | |||
| This enables the benefits of explicit typing, | This enables the benefits of explicit typing (as defined in RFC 8725, "JS | |||
| as defined in the JSON Web Token Best Current Practices BCP, | ON Web Token Best Current Practices") | |||
| to be brought to COSE objects. | to be brought to COSE objects. | |||
| The syntax of the COSE type header parameter value is the same as the exi sting COSE content type header parameter. | The syntax of the COSE type header parameter value is the same as the exi sting COSE content type header parameter. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="Introduction"> | ||||
| <section anchor="Introduction" title="Introduction"> | <name>Introduction</name> | |||
| <t> | <t> | |||
| CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/> define s header parameters | CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/> define s header parameters | |||
| that parallel many of those defined by the JSON Object Signing and Encryp | that parallel many of those defined by the JSON Object Signing and Encryp | |||
| tion (JOSE) | tion (JOSE) specifications | |||
| <xref target="RFC7515"/> <xref target="RFC7516"/> specifications. | <xref target="RFC7515"/> <xref target="RFC7516"/>. | |||
| However, one way in which COSE does not provide equivalent functionality to JOSE is that | However, one way in which COSE does not provide equivalent functionality to JOSE is that | |||
| it does not define an equivalent of the <spanx style="verb">typ</spanx> ( type) header parameter, | it does not define an equivalent of the "typ" (type) header parameter, | |||
| which is used for declaring the type of the entire JOSE data structure. | which is used for declaring the type of the entire JOSE data structure. | |||
| The security benefits of having <spanx style="verb">typ</spanx> (type) ar | The security benefits of having "typ" (type) are described in | |||
| e described in | <xref target="RFC8725" sectionFormat="of" section="3.11"/>, | |||
| Section 3.11 of the JSON Web Token Best Current Practices <xref target="RFC872 | ||||
| 5"/>, | ||||
| which recommends its use for "explicit typing" -- | which recommends its use for "explicit typing" -- | |||
| using <spanx style="verb">typ</spanx> values to distinguish between | using "typ" values to distinguish between | |||
| different kinds of JSON Web Tokens (JWTs) <xref target="RFC7519"/>. | different kinds of JSON Web Tokens (JWTs) <xref target="RFC7519"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification adds the equivalent of the JOSE <spanx style="verb">ty p</spanx> (type) header parameter to COSE | This specification adds the equivalent of the JOSE "typ" (type) header pa rameter to COSE | |||
| so that the benefits of explicit typing | so that the benefits of explicit typing | |||
| can be brought to COSE objects. | can be brought to COSE objects. | |||
| The syntax of the COSE type header parameter value is the same as the exi sting COSE content type header parameter, | The syntax of the COSE type header parameter value is the same as the exi sting COSE content type header parameter, | |||
| allowing both unsigned integer CoAP Content-Formats <xref target="IANA.Co | allowing both unsigned integers as registered in the "CoAP Content-Format | |||
| AP.ContentFormats"/> values | s" registry <xref target="CoAP.ContentFormats"/> | |||
| and string Media Type <xref target="IANA.MediaTypes"/> values to be used. | and string media type values <xref target="MediaTypes"/> to be used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The term "COSE object" is used as defined in <xref target="RFC9052"/>. | The term "COSE object" is used as defined in <xref target="RFC9052"/>. | |||
| An example of a COSE object is a COSE_Sign1 structure, | An example of a COSE object is a COSE_Sign1 structure, | |||
| as described in Section 4.2 of <xref target="RFC9052"/>. | as described in <xref target="RFC9052" sectionFormat="of" section="4.2"/> . | |||
| </t> | </t> | |||
| <section anchor="rnc"> | ||||
| <section anchor="rnc" title="Requirements Notation and Conventions"> | <name>Requirements Notation and Conventions</name> | |||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
| "OPTIONAL" in this document are to be interpreted as described in | ", | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| only when, they appear in all capitals, as shown here. | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| </t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| be | ||||
| interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | ||||
| target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
| shown here. | ||||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="typ" title='COSE "typ" (type) header parameter'> | <section anchor="typ"> | |||
| <name>COSE "typ" (type) Header Parameter</name> | ||||
| <t> | <t> | |||
| The <spanx style="verb">typ</spanx> (type) header parameter | The "typ" (type) header parameter | |||
| is used by COSE applications to declare the | is used by COSE applications to declare the | |||
| type of this complete COSE object, as compared to the content type header parameter, | type of this complete COSE object, as compared to the content type header parameter, | |||
| which declares the type of the COSE object payload. | which declares the type of the COSE object payload. | |||
| This is intended for use by the application when | This is intended for use by the application when | |||
| more than one kind of COSE object could be present in | more than one kind of COSE object could be present in | |||
| an application data structure that can contain a COSE object; | an application data structure that can contain a COSE object; | |||
| the application can use this value to disambiguate among | the application can use this value to disambiguate among | |||
| the different kinds of COSE objects that might be present. | the different kinds of COSE objects that might be present. | |||
| It will typically not be used by applications when | It will typically not be used by applications when | |||
| the kind of COSE object is already known. | the kind of COSE object is already known. | |||
| Use of this header parameter is OPTIONAL. | Use of this header parameter is <bcp14>OPTIONAL</bcp14>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The syntax of this header parameter value is the same as the content type header parameter | The syntax of this header parameter value is the same as the content type header parameter | |||
| defined in Section 3.1 of <xref target="RFC9052"/>; | defined in <xref target="RFC9052" sectionFormat="of" section="3.1"/>; | |||
| it is either | it is either | |||
| an unsigned integer CoAP Content-Formats <xref target="IANA.CoAP.ContentF | an unsigned integer as registered in the "CoAP Content-Formats" registry | |||
| ormats"/> value | <xref target="CoAP.ContentFormats"/> | |||
| or a string Content Type value. | or a string content type value. | |||
| Content Type values have a Media Type name <xref target="IANA.MediaTypes" | Content type values have a media type name <xref target="MediaTypes"/> | |||
| /> | and <bcp14>MAY</bcp14> include media type parameters. | |||
| and MAY include Media Type parameters. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| This parameter is ignored by COSE implementations | The "typ" (type) header parameter is ignored by COSE implementations | |||
| (libraries implementing <xref target="RFC9052"/> and this specification), | (libraries implementing <xref target="RFC9052"/> and this specification), | |||
| other than being passed through to applications using those implementatio ns. | other than being passed through to applications using those implementatio ns. | |||
| Any processing of this parameter is performed by the COSE application | Any processing of this parameter is performed by the COSE application | |||
| using application-specific processing rules. | using application-specific processing rules. | |||
| For instance, an application might verify that the <spanx style="verb">ty p</spanx> value | For instance, an application might verify that the "typ" value | |||
| is a particular application-chosen media type and reject the data structu re if it is not. | is a particular application-chosen media type and reject the data structu re if it is not. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The <spanx style="verb">typ</spanx> parameter MUST NOT be present in unprotect ed headers. | The "typ" parameter <bcp14>MUST NOT</bcp14> be present in unprotected headers. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The <spanx style="verb">typ</spanx> parameter does not describe the content of unprotected headers. | The "typ" parameter does not describe the content of unprotected headers. | |||
| Changes to unprotected headers do not change the type of the COSE object. | Changes to unprotected headers do not change the type of the COSE object. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="Security"> | ||||
| <section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t> | <t> | |||
| The case for explicit typing of COSE objects is equivalent to the case ma de for explicit typing | The case for explicit typing of COSE objects is equivalent to the case ma de for explicit typing | |||
| in Section 3.11 of JSON Web Token Best Current Practices <xref target="RF C8725"/>: | in <xref target="RFC8725" section="3.11" sectionFormat="of"/>: | |||
| Explicit typing can prevent confusion between different kinds of COSE objects. | Explicit typing can prevent confusion between different kinds of COSE objects. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| COSE applications employing explicit typing should reject COSE objects | COSE applications employing explicit typing should reject COSE objects | |||
| with a type header parameter value different than values that they expect in that application context. | with a type header parameter value different than values that they expect in that application context. | |||
| They should also reject COSE objects without a type header parameter when one is expected. | They should also reject COSE objects without a type header parameter when one is expected. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="IANA"> | ||||
| <section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <section anchor="cose-algorithms-registrations"> | ||||
| <section anchor="cose-algorithms-registrations" title="COSE Header Paramet | <name>COSE Header Parameter Registrations</name> | |||
| er Registrations"> | ||||
| <t> | <t> | |||
| This section registers the following value in the | IANA has registered the following value in the | |||
| IANA "COSE Header Parameters" registry <xref target="IANA.COSE.HeaderPa | IANA "COSE Header Parameters" registry <xref target="COSE.HeaderParamet | |||
| rameters"/>. | ers"/>. | |||
| </t> | </t> | |||
| <t> | ||||
| <?rfc subcompact="yes"?> | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Name: typ (type) | ||||
| </t> | ||||
| <t> | ||||
| Label: TBD (requested assignment 16) | ||||
| </t> | ||||
| <t> | ||||
| Value Type: uint / tstr | ||||
| </t> | ||||
| <t> | ||||
| Value Registry: <xref target="IANA.CoAP.ContentFormats"/> or <xref | ||||
| target="IANA.MediaTypes"/> | ||||
| </t> | ||||
| <t> | ||||
| Description: Type of the complete COSE object | ||||
| </t> | ||||
| <t> | ||||
| Reference: <xref target="typ"/> of this specification | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <?rfc subcompact="no"?> | ||||
| </section> | ||||
| <table anchor="iana-tab"> | ||||
| <name></name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Name</th> | ||||
| <th>Label</th> | ||||
| <th>Value Type</th> | ||||
| <th>Value Registry</th> | ||||
| <th>Description</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>typ (type)</td> | ||||
| <td>16</td> | ||||
| <td>uint / tstr</td> | ||||
| <td><xref target="CoAP.ContentFormats"/> or <xref | ||||
| target="MediaTypes"/> registry</td> | ||||
| <td>Content type of the complete COSE object</td> | ||||
| <td><xref target="typ"/> of RFC 9596</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | ||||
| 119.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 174.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 725.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
| 052.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 515.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 516.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 519.xml"/> | ||||
| <references title="Normative References"> | <reference anchor="COSE.HeaderParameters" target="https://www.iana.org/a | |||
| ssignments/cose"> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.211 | <front> | |||
| 9.xml"/> | <title>COSE Header Parameters</title> | |||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.817 | <author> | |||
| 4.xml"/> | <organization>IANA</organization> | |||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.872 | </author> | |||
| 5.xml"/> | <date/> | |||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.905 | </front> | |||
| 2.xml"/> | </reference> | |||
| </references> | ||||
| <references title="Informative References"> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.751 | ||||
| 5.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.751 | ||||
| 6.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.751 | ||||
| 9.xml"/> | ||||
| <reference anchor="IANA.COSE.HeaderParameters" target="https://www.iana.or | ||||
| g/assignments/cose/cose.xhtml#header-parameters"> | ||||
| <front> | ||||
| <title>COSE Header Parameters</title> | ||||
| <author> | ||||
| <organization>IANA</organization> | ||||
| </author> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="IANA.CoAP.ContentFormats" target="https://www.iana.org/ | <reference anchor="CoAP.ContentFormats" target="https://www.iana.org/ass | |||
| assignments/core-parameters/core-parameters.xhtml#content-formats"> | ignments/core-parameters"> | |||
| <front> | <front> | |||
| <title>CoAP Content-Formats</title> | <title>CoAP Content-Formats</title> | |||
| <author> | <author> | |||
| <organization>IANA</organization> | <organization>IANA</organization> | |||
| </author> | </author> | |||
| <date/> | <date/> | |||
| </front> | </front> | |||
| </reference> | </reference> | |||
| <reference anchor="IANA.MediaTypes" target="https://www.iana.org/assignmen | <reference anchor="MediaTypes" target="https://www.iana.org/assignments/ | |||
| ts/media-types"> | media-types"> | |||
| <front> | <front> | |||
| <title>Media Types</title> | <title>Media Types</title> | |||
| <author> | <author> | |||
| <organization>IANA</organization> | <organization>IANA</organization> | |||
| </author> | </author> | |||
| <date></date> | <date/> | |||
| </front> | </front> | |||
| </reference> | </reference> | |||
| </references> | ||||
| </references> | </references> | |||
| <section title="Document History" anchor="History"> | <section anchor="Acknowledgements" numbered="false"> | |||
| <t> | <name>Acknowledgements</name> | |||
| [[ to be removed by the RFC Editor before publication as an RFC ]] | ||||
| </t> | ||||
| <t> | ||||
| -05 | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Addressed Area Director review comments. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| -04 | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Addressed SECDIR review comments. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| -03 | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Addressed GENART and OPSDIR review comments. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| -02 | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Addressed working group last call comments. | ||||
| </t> | ||||
| <t> | ||||
| Changed requested assignment from 14 to 16 due to conflict a with new | ||||
| assignment. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| -01 | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Added language about media type parameters. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| -00 | ||||
| <list style='symbols'> | ||||
| <t> | ||||
| Initial working group version based on draft-jones-cose-typ-header-pa | ||||
| rameter-01. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Acknowledgements" anchor="Acknowledgements" numbered="no"> | ||||
| <t> | <t> | |||
| We would like to thank | We would like to thank | |||
| Henk Birkholz, | <contact fullname="Henk Birkholz" />, | |||
| Carsten Bormann, | <contact fullname="Carsten Bormann" />, | |||
| Susan Hares, | <contact fullname="Susan Hares" />, | |||
| Dan Harkins, | <contact fullname="Dan Harkins" />, | |||
| Murray Kucherawy, | <contact fullname="Murray Kucherawy" />, | |||
| Marco Tiloca, | <contact fullname="Marco Tiloca" />, | |||
| Gunter Van de Velde, | <contact fullname="Gunter Van de Velde" />, | |||
| Éric Vyncke, | <contact fullname="Éric Vyncke" />, | |||
| and | and | |||
| Dale Worley | <contact fullname="Dale Worley" /> | |||
| for their valuable contributions to this specification. | for their valuable contributions to this specification. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 49 change blocks. | ||||
| 243 lines changed or deleted | 162 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||