Internet-Draft COSE "typ" (type) Header Parameter April 2024
Jones & Steele Expires 5 October 2024 [Page]
COSE Working Group
Intended Status:
Standards Track
M.B. Jones
Self-Issued Consulting
O. Steele

COSE "typ" (type) Header Parameter


This specification adds the equivalent of the JSON Object Signing and Encryption (JOSE) typ (type) header parameter to CBOR Object Signing and Encryption (COSE). This enables the benefits of explicit typing, as defined in the JSON Web Token Best Current Practices BCP, to be brought to COSE objects. The syntax of the COSE type header parameter value is the same as the existing COSE content type header parameter.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 5 October 2024.

Table of Contents

1. Introduction

CBOR Object Signing and Encryption (COSE) [RFC9052] defines header parameters that parallel many of those defined by the JSON Object Signing and Encryption (JOSE) [RFC7515] [RFC7516] specifications. However, one way in which COSE does not provide equivalent functionality to JOSE is that 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. The security benefits of having typ (type) are described in Section 3.11 of the JSON Web Token Best Current Practices [RFC8725], which recommends its use for "explicit typing" -- using typ values to distinguish between different kinds of JSON Web Tokens (JWTs) [RFC7519].

This specification adds the equivalent of the JOSE typ (type) header parameter to COSE so that the benefits of explicit typing can be brought to COSE objects. The syntax of the COSE type header parameter value is the same as the existing COSE content type header parameter, allowing both unsigned integer CoAP Content-Formats [IANA.CoAP.ContentFormats] values and string Media Type [IANA.MediaTypes] values to be used.

The term "COSE object" is used as defined in [RFC9052]. An example of a COSE object is a COSE_Sign1 structure, as described in Section 4.2 of [RFC9052].

1.1. Requirements Notation and Conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

2. COSE "typ" (type) header parameter

The typ (type) header parameter is used by COSE applications to declare the type of this complete COSE object, as compared to the content type header parameter, which declares the type of the COSE object payload. This is intended for use by the application when more than one kind of COSE object could be present in an application data structure that can contain a COSE object; the application can use this value to disambiguate among the different kinds of COSE objects that might be present. It will typically not be used by applications when the kind of COSE object is already known. Use of this header parameter is OPTIONAL.

The syntax of this header parameter value is the same as the content type header parameter defined in Section 3.1 of [RFC9052]; it is either an unsigned integer CoAP Content-Formats [IANA.CoAP.ContentFormats] value or a string Content Type value. Content Type values have a Media Type name [IANA.MediaTypes] and MAY include Media Type parameters.

This parameter is ignored by COSE implementations (libraries implementing [RFC9052] and this specification), other than being passed through to applications using those implementations. Any processing of this parameter is performed by the COSE application using application-specific processing rules. For instance, an application might verify that the typ value is a particular application-chosen media type and reject the data structure if it is not.

The typ parameter MUST NOT be present in 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.

3. Security Considerations

The case for explicit typing of COSE objects is equivalent to the case made for explicit typing in Section 3.11 of JSON Web Token Best Current Practices [RFC8725]: Explicit typing can prevent confusion between different kinds of 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. They should also reject COSE objects without a type header parameter when one is expected.

4. IANA Considerations

4.1. COSE Header Parameter Registrations

This section registers the following value in the IANA "COSE Header Parameters" registry [IANA.COSE.HeaderParameters].

5. References

5.1. Normative References

Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <>.
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <>.
Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best Current Practices", BCP 225, RFC 8725, DOI 10.17487/RFC8725, , <>.
Schaad, J., "CBOR Object Signing and Encryption (COSE): Structures and Process", STD 96, RFC 9052, DOI 10.17487/RFC9052, , <>.

5.2. Informative References

IANA, "CoAP Content-Formats", <>.
IANA, "COSE Header Parameters", <>.
IANA, "Media Types", <>.
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, , <>.
Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", RFC 7516, DOI 10.17487/RFC7516, , <>.
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, , <>.

Appendix A. Document History

[[ to be removed by the RFC Editor before publication as an RFC ]]








We would like to thank Henk Birkholz, Carsten Bormann, Susan Hares, Dan Harkins, Murray Kucherawy, Marco Tiloca, Gunter Van de Velde, Éric Vyncke, and Dale Worley for their valuable contributions to this specification.

Authors' Addresses

Michael B. Jones
Self-Issued Consulting
Orie Steele