rfc9052.original.xml   rfc9052.xml 
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent" [ nsus="true" docName="draft-ietf-cose-rfc8152bis-struct-15" indexInclude="true" i
<!ENTITY RFC8152 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere pr="trust200902" number="9052" obsoletes="8152" prepTime="2022-08-24T13:11:15" s
nce.RFC.8152.xml"> cripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDe
<!ENTITY HkdfSection "5.1"> pth="3" tocInclude="true" xml:lang="en">
<!ENTITY SectionDirectKdf "6.1.2"> <link href="https://datatracker.ietf.org/doc/draft-ietf-cose-rfc8152bis-struct
<!ENTITY SectionECDH "6.3"> -15" rel="prev"/>
]> <link href="https://dx.doi.org/10.17487/rfc9052" rel="alternate"/>
<link href="urn:issn:2070-1721" rel="alternate"/>
<!-- <!ENTITY cose-alg SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refer
ence.I-D.schaad-cose-rfc8152bis-algs.xml"> -->
<!-- RFC EDITOR
Issue has been raised about countersign vs counter sign.
The dictionaries seem to favor a single word, but when you did RFC 8152 you left
it as a double word.
I have switched to the single word version except for tables 3 and 4 where it ca
uses the text file to have long lines.
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft
-ietf-cose-rfc8152bis-struct-15" category="std" obsoletes="8152" updates="" subm
issionType="IETF" xml:lang="en" version="3" consensus="true">
<!-- xml2rfc v2v3 conversion 2.24.0 -->
<front> <front>
<title abbrev="COSE Structure"> <title abbrev="COSE Structure">CBOR Object Signing and Encryption (COSE): St
CBOR Object Signing&nbsp;and&nbsp;Encryption&nbsp;(COSE): Structures and Pro ructures and Process</title>
cess</title> <seriesInfo name="RFC" value="9052" stream="IETF"/>
<seriesInfo name="Internet-Draft" value="draft-ietf-cose-rfc8152bis-struct-1 <seriesInfo name="STD" value="96" stream="IETF"/>
5"/>
<author initials="J." surname="Schaad" fullname="Jim Schaad"> <author initials="J." surname="Schaad" fullname="Jim Schaad">
<organization>August Cellars</organization> <organization showOnFrontPage="true">August Cellars</organization>
<address> <address>
<email>ietf@augustcellars.com</email>
</address> </address>
</author> </author>
<date/> <date month="08" year="2022"/>
<area>Security</area> <area>Security</area>
<workgroup>COSE Working Group</workgroup> <workgroup>COSE Working Group</workgroup>
<keyword>Object Security</keyword>
<abstract> <keyword>COSE</keyword>
<t>Concise Binary Object Representation (CBOR) is a data format designed f <keyword>Constrained Devices</keyword>
or small code size and small message size. There is a need for the ability to h <abstract pn="section-abstract">
ave basic security services defined for this data format. This document defines <t indent="0" pn="section-abstract-1">Concise Binary Object Representation
the CBOR Object Signing and Encryption (COSE) protocol. This specification des (CBOR) is a data format designed for small code size and small message size. T
cribes how to create and process signatures, message authentication codes, and e here is a need to be able to define basic security services for this data format
ncryption using CBOR for serialization. This specification additionally describ . This document defines the CBOR Object Signing and Encryption (COSE) protocol.
es how to represent cryptographic keys using CBOR. </t> This specification describes how to create and process signatures, message aut
hentication codes, and encryption using CBOR for serialization. This specificat
<t> ion additionally describes how to represent cryptographic keys using CBOR. </t>
This document along with <xref target="I-D.ietf-cose-rfc8152bis-algs"/> <t indent="0" pn="section-abstract-2">
obsoletes RFC8152. This document, along with RFC 9053, obsoletes RFC 8152.
</t> </t>
</abstract> </abstract>
<boilerplate>
<note removeInRFC="true"> <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc=
<name>Contributing to this document</name> "exclude" pn="section-boilerplate.1">
<!-- RFC EDITOR - Please remove this note before publishing --> <name slugifiedName="name-status-of-this-memo">Status of This Memo</name
<t> >
The source for this draft is being maintained in GitHub. <t indent="0" pn="section-boilerplate.1-1">
Suggested changes should be submitted as pull requests at <eref target= This is an Internet Standards Track document.
"https://github.com/cose-wg/cose-rfc8152bis"/>. </t>
Instructions are on that page as well. <t indent="0" pn="section-boilerplate.1-2">
Editorial changes can be managed in GitHub, but any substantial issues n This document is a product of the Internet Engineering Task Force
eed to be discussed on the COSE mailing list. (IETF). It represents the consensus of the IETF community. It has
</t> received public review and has been approved for publication by
</note> the Internet Engineering Steering Group (IESG). Further
information on Internet Standards is available in Section 2 of
RFC 7841.
</t>
<t indent="0" pn="section-boilerplate.1-3">
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
<eref target="https://www.rfc-editor.org/info/rfc9052" brackets="non
e"/>.
</t>
</section>
<section anchor="copyright" numbered="false" removeInRFC="false" toc="excl
ude" pn="section-boilerplate.2">
<name slugifiedName="name-copyright-notice">Copyright Notice</name>
<t indent="0" pn="section-boilerplate.2-1">
Copyright (c) 2022 IETF Trust and the persons identified as the
document authors. All rights reserved.
</t>
<t indent="0" pn="section-boilerplate.2-2">
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(<eref target="https://trustee.ietf.org/license-info" brackets="none
"/>) 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 Revised BSD License text as described in
Section 4.e of the Trust Legal Provisions and are provided without
warranty as described in the Revised BSD License.
</t>
</section>
</boilerplate>
<toc>
<section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p
n="section-toc.1">
<name slugifiedName="name-table-of-contents">Table of Contents</name>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to
c.1-1">
<li pn="section-toc.1-1.1">
<t indent="0" pn="section-toc.1-1.1.1"><xref derivedContent="1" form
at="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-introduction">Introduction</xref><
/t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.1.2">
<li pn="section-toc.1-1.1.2.1">
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><
xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.
1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-re
quirements-terminology">Requirements Terminology</xref></t>
</li>
<li pn="section-toc.1-1.1.2.2">
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><
xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.
2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ch
anges-from-rfc-8152">Changes from RFC 8152</xref></t>
</li>
<li pn="section-toc.1-1.1.2.3">
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.3.1"><
xref derivedContent="1.3" format="counter" sectionFormat="of" target="section-1.
3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-de
sign-changes-from-jose">Design Changes from JOSE</xref></t>
</li>
<li pn="section-toc.1-1.1.2.4">
<t indent="0" pn="section-toc.1-1.1.2.4.1"><xref derivedContent=
"1.4" format="counter" sectionFormat="of" target="section-1.4"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-cddl-grammar-for-cbor-
data-">CDDL Grammar for CBOR Data Structures</xref></t>
</li>
<li pn="section-toc.1-1.1.2.5">
<t indent="0" pn="section-toc.1-1.1.2.5.1"><xref derivedContent=
"1.5" format="counter" sectionFormat="of" target="section-1.5"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-cbor-related-terminolo
gy">CBOR-Related Terminology</xref></t>
</li>
<li pn="section-toc.1-1.1.2.6">
<t indent="0" pn="section-toc.1-1.1.2.6.1"><xref derivedContent=
"1.6" format="counter" sectionFormat="of" target="section-1.6"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-document-terminology">
Document Terminology</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.2">
<t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" form
at="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-basic-cose-structure">Basic COSE S
tructure</xref></t>
</li>
<li pn="section-toc.1-1.3">
<t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" form
at="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-header-parameters">Header Paramete
rs</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.3.2">
<li pn="section-toc.1-1.3.2.1">
<t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent=
"3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-common-cose-header-par
amete">Common COSE Header Parameters</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.4">
<t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" form
at="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-signing-objects">Signing Objects</
xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.4.2">
<li pn="section-toc.1-1.4.2.1">
<t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent=
"4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-signing-with-one-or-mo
re-si">Signing with One or More Signers</xref></t>
</li>
<li pn="section-toc.1-1.4.2.2">
<t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent=
"4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-signing-with-one-signe
r">Signing with One Signer</xref></t>
</li>
<li pn="section-toc.1-1.4.2.3">
<t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent=
"4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-externally-supplied-da
ta">Externally Supplied Data</xref></t>
</li>
<li pn="section-toc.1-1.4.2.4">
<t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent=
"4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-signing-and-verificati
on-pr">Signing and Verification Process</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.5">
<t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" form
at="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-encryption-objects">Encryption Obj
ects</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.5.2">
<li pn="section-toc.1-1.5.2.1">
<t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent=
"5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-enveloped-cose-structu
re">Enveloped COSE Structure</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.5.2.1.2">
<li pn="section-toc.1-1.5.2.1.2.1">
<t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derived
Content="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>.  <
xref derivedContent="" format="title" sectionFormat="of" target="name-content-ke
y-distribution-me">Content Key Distribution Methods</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.5.2.2">
<t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent=
"5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-single-recipient-encry
pted">Single Recipient Encrypted</xref></t>
</li>
<li pn="section-toc.1-1.5.2.3">
<t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent=
"5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-how-to-encrypt-and-dec
rypt-">How to Encrypt and Decrypt for AEAD Algorithms</xref></t>
</li>
<li pn="section-toc.1-1.5.2.4">
<t indent="0" pn="section-toc.1-1.5.2.4.1"><xref derivedContent=
"5.4" format="counter" sectionFormat="of" target="section-5.4"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-how-to-encrypt-and-dec
rypt-f">How to Encrypt and Decrypt for AE Algorithms</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.6">
<t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" form
at="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-mac-objects">MAC Objects</xref></t
>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.6.2">
<li pn="section-toc.1-1.6.2.1">
<t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent=
"6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-maced-message-with-rec
ipien">MACed Message with Recipients</xref></t>
</li>
<li pn="section-toc.1-1.6.2.2">
<t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent=
"6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-maced-messages-with-im
plici">MACed Messages with Implicit Key</xref></t>
</li>
<li pn="section-toc.1-1.6.2.3">
<t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent=
"6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-how-to-compute-and-ver
ify-a">How to Compute and Verify a MAC</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.7">
<t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" form
at="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-key-objects">Key Objects</xref></t
>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.7.2">
<li pn="section-toc.1-1.7.2.1">
<t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent=
"7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-cose-key-common-parame
ters">COSE Key Common Parameters</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.8">
<t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" form
at="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-taxonomy-of-algorithms-used">Taxon
omy of Algorithms Used by COSE</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.8.2">
<li pn="section-toc.1-1.8.2.1">
<t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent=
"8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-signature-algorithms">
Signature Algorithms</xref></t>
</li>
<li pn="section-toc.1-1.8.2.2">
<t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent=
"8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-message-authentication
-code">Message Authentication Code (MAC) Algorithms</xref></t>
</li>
<li pn="section-toc.1-1.8.2.3">
<t indent="0" pn="section-toc.1-1.8.2.3.1"><xref derivedContent=
"8.3" format="counter" sectionFormat="of" target="section-8.3"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-content-encryption-alg
orith">Content Encryption Algorithms</xref></t>
</li>
<li pn="section-toc.1-1.8.2.4">
<t indent="0" pn="section-toc.1-1.8.2.4.1"><xref derivedContent=
"8.4" format="counter" sectionFormat="of" target="section-8.4"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-key-derivation-functio
ns-kd">Key Derivation Functions (KDFs)</xref></t>
</li>
<li pn="section-toc.1-1.8.2.5">
<t indent="0" pn="section-toc.1-1.8.2.5.1"><xref derivedContent=
"8.5" format="counter" sectionFormat="of" target="section-8.5"/>.  <xref derived
Content="" format="title" sectionFormat="of" target="name-content-key-distributi
on-met">Content Key Distribution Methods</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.8.2.5.2">
<li pn="section-toc.1-1.8.2.5.2.1">
<t indent="0" pn="section-toc.1-1.8.2.5.2.1.1"><xref derived
Content="8.5.1" format="counter" sectionFormat="of" target="section-8.5.1"/>.  <
xref derivedContent="" format="title" sectionFormat="of" target="name-direct-enc
ryption">Direct Encryption</xref></t>
</li>
<li pn="section-toc.1-1.8.2.5.2.2">
<t indent="0" pn="section-toc.1-1.8.2.5.2.2.1"><xref derived
Content="8.5.2" format="counter" sectionFormat="of" target="section-8.5.2"/>.  <
xref derivedContent="" format="title" sectionFormat="of" target="name-key-wrap">
Key Wrap</xref></t>
</li>
<li pn="section-toc.1-1.8.2.5.2.3">
<t indent="0" pn="section-toc.1-1.8.2.5.2.3.1"><xref derived
Content="8.5.3" format="counter" sectionFormat="of" target="section-8.5.3"/>.  <
xref derivedContent="" format="title" sectionFormat="of" target="name-key-transp
ort">Key Transport</xref></t>
</li>
<li pn="section-toc.1-1.8.2.5.2.4">
<t indent="0" pn="section-toc.1-1.8.2.5.2.4.1"><xref derived
Content="8.5.4" format="counter" sectionFormat="of" target="section-8.5.4"/>.  <
xref derivedContent="" format="title" sectionFormat="of" target="name-direct-key
-agreement">Direct Key Agreement</xref></t>
</li>
<li pn="section-toc.1-1.8.2.5.2.5">
<t indent="0" pn="section-toc.1-1.8.2.5.2.5.1"><xref derived
Content="8.5.5" format="counter" sectionFormat="of" target="section-8.5.5"/>.  <
xref derivedContent="" format="title" sectionFormat="of" target="name-key-agreem
ent-with-key-wrap">Key Agreement with Key Wrap</xref></t>
</li>
</ul>
</li>
</ul>
</li>
<li pn="section-toc.1-1.9">
<t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" form
at="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" f
ormat="title" sectionFormat="of" target="name-cbor-encoding-restrictions">CBOR E
ncoding Restrictions</xref></t>
</li>
<li pn="section-toc.1-1.10">
<t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" fo
rmat="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent=""
format="title" sectionFormat="of" target="name-application-profiling-consi">App
lication Profiling Considerations</xref></t>
</li>
<li pn="section-toc.1-1.11">
<t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" fo
rmat="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent=""
format="title" sectionFormat="of" target="name-iana-considerations">IANA Consid
erations</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.11.2">
<li pn="section-toc.1-1.11.2.1">
<t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent
="11.1" format="counter" sectionFormat="of" target="section-11.1"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-cose-header-paramet
ers-regi">COSE Header Parameters Registry</xref></t>
</li>
<li pn="section-toc.1-1.11.2.2">
<t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent
="11.2" format="counter" sectionFormat="of" target="section-11.2"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-cose-key-common-par
ameters-">COSE Key Common Parameters Registry</xref></t>
</li>
<li pn="section-toc.1-1.11.2.3">
<t indent="0" pn="section-toc.1-1.11.2.3.1"><xref derivedContent
="11.3" format="counter" sectionFormat="of" target="section-11.3"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-media-type-registra
tions">Media Type Registrations</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.11.2.3.2">
<li pn="section-toc.1-1.11.2.3.2.1">
<t indent="0" pn="section-toc.1-1.11.2.3.2.1.1"><xref derive
dContent="11.3.1" format="counter" sectionFormat="of" target="section-11.3.1"/>.
  <xref derivedContent="" format="title" sectionFormat="of" target="name-cose-se
curity-message">COSE Security Message</xref></t>
</li>
<li pn="section-toc.1-1.11.2.3.2.2">
<t indent="0" pn="section-toc.1-1.11.2.3.2.2.1"><xref derive
dContent="11.3.2" format="counter" sectionFormat="of" target="section-11.3.2"/>.
  <xref derivedContent="" format="title" sectionFormat="of" target="name-cose-ke
y-media-type">COSE Key Media Type</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.11.2.4">
<t indent="0" pn="section-toc.1-1.11.2.4.1"><xref derivedContent
="11.4" format="counter" sectionFormat="of" target="section-11.4"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-coap-content-format
s-regist">CoAP Content-Formats Registry</xref></t>
</li>
<li pn="section-toc.1-1.11.2.5">
<t indent="0" pn="section-toc.1-1.11.2.5.1"><xref derivedContent
="11.5" format="counter" sectionFormat="of" target="section-11.5"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-cbor-tags-registry"
>CBOR Tags Registry</xref></t>
</li>
<li pn="section-toc.1-1.11.2.6">
<t indent="0" pn="section-toc.1-1.11.2.6.1"><xref derivedContent
="11.6" format="counter" sectionFormat="of" target="section-11.6"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-expert-review-instr
uctions">Expert Review Instructions</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.12">
<t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="12" fo
rmat="counter" sectionFormat="of" target="section-12"/>. <xref derivedContent=""
format="title" sectionFormat="of" target="name-security-considerations">Securit
y Considerations</xref></t>
</li>
<li pn="section-toc.1-1.13">
<t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="13" fo
rmat="counter" sectionFormat="of" target="section-13"/>. <xref derivedContent=""
format="title" sectionFormat="of" target="name-references">References</xref></t
>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.13.2">
<li pn="section-toc.1-1.13.2.1">
<t indent="0" pn="section-toc.1-1.13.2.1.1"><xref derivedContent
="13.1" format="counter" sectionFormat="of" target="section-13.1"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-normative-reference
s">Normative References</xref></t>
</li>
<li pn="section-toc.1-1.13.2.2">
<t indent="0" pn="section-toc.1-1.13.2.2.1"><xref derivedContent
="13.2" format="counter" sectionFormat="of" target="section-13.2"/>.  <xref deri
vedContent="" format="title" sectionFormat="of" target="name-informative-referen
ces">Informative References</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.14">
<t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="Append
ix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref
derivedContent="" format="title" sectionFormat="of" target="name-guidelines-for-
external-dat">Guidelines for External Data Authentication of Algorithms</xref></
t>
</li>
<li pn="section-toc.1-1.15">
<t indent="0" pn="section-toc.1-1.15.1"><xref derivedContent="Append
ix B" format="default" sectionFormat="of" target="section-appendix.b"/>.  <xref
derivedContent="" format="title" sectionFormat="of" target="name-two-layers-of-r
ecipient-inf">Two Layers of Recipient Information</xref></t>
</li>
<li pn="section-toc.1-1.16">
<t indent="0" pn="section-toc.1-1.16.1"><xref derivedContent="Append
ix C" format="default" sectionFormat="of" target="section-appendix.c"/>.  <xref
derivedContent="" format="title" sectionFormat="of" target="name-examples">Examp
les</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio
n-toc.1-1.16.2">
<li pn="section-toc.1-1.16.2.1">
<t indent="0" pn="section-toc.1-1.16.2.1.1"><xref derivedContent
="C.1" format="counter" sectionFormat="of" target="section-appendix.c.1"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-examples-of-
signed-messages">Examples of Signed Messages</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.1.2">
<li pn="section-toc.1-1.16.2.1.2.1">
<t indent="0" pn="section-toc.1-1.16.2.1.2.1.1"><xref derive
dContent="C.1.1" format="counter" sectionFormat="of" target="section-appendix.c.
1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
single-signature">Single Signature</xref></t>
</li>
<li pn="section-toc.1-1.16.2.1.2.2">
<t indent="0" pn="section-toc.1-1.16.2.1.2.2.1"><xref derive
dContent="C.1.2" format="counter" sectionFormat="of" target="section-appendix.c.
1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
multiple-signers">Multiple Signers</xref></t>
</li>
<li pn="section-toc.1-1.16.2.1.2.3">
<t indent="0" pn="section-toc.1-1.16.2.1.2.3.1"><xref derive
dContent="C.1.3" format="counter" sectionFormat="of" target="section-appendix.c.
1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
signature-with-criticality">Signature with Criticality</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.16.2.2">
<t indent="0" pn="section-toc.1-1.16.2.2.1"><xref derivedContent
="C.2" format="counter" sectionFormat="of" target="section-appendix.c.2"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-single-signe
r-examples">Single Signer Examples</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.2.2">
<li pn="section-toc.1-1.16.2.2.2.1">
<t indent="0" pn="section-toc.1-1.16.2.2.2.1.1"><xref derive
dContent="C.2.1" format="counter" sectionFormat="of" target="section-appendix.c.
2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
single-ecdsa-signature">Single ECDSA Signature</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.16.2.3">
<t indent="0" pn="section-toc.1-1.16.2.3.1"><xref derivedContent
="C.3" format="counter" sectionFormat="of" target="section-appendix.c.3"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-examples-of-
enveloped-messa">Examples of Enveloped Messages</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.3.2">
<li pn="section-toc.1-1.16.2.3.2.1">
<t indent="0" pn="section-toc.1-1.16.2.3.2.1.1"><xref derive
dContent="C.3.1" format="counter" sectionFormat="of" target="section-appendix.c.
3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
direct-ecdh">Direct ECDH</xref></t>
</li>
<li pn="section-toc.1-1.16.2.3.2.2">
<t indent="0" pn="section-toc.1-1.16.2.3.2.2.1"><xref derive
dContent="C.3.2" format="counter" sectionFormat="of" target="section-appendix.c.
3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
direct-plus-key-derivation">Direct Plus Key Derivation</xref></t>
</li>
<li pn="section-toc.1-1.16.2.3.2.3">
<t indent="0" pn="section-toc.1-1.16.2.3.2.3.1"><xref derive
dContent="C.3.3" format="counter" sectionFormat="of" target="section-appendix.c.
3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
encrypted-content-with-exte">Encrypted Content with External Data</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.16.2.4">
<t indent="0" pn="section-toc.1-1.16.2.4.1"><xref derivedContent
="C.4" format="counter" sectionFormat="of" target="section-appendix.c.4"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-examples-of-
encrypted-messa">Examples of Encrypted Messages</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.4.2">
<li pn="section-toc.1-1.16.2.4.2.1">
<t indent="0" pn="section-toc.1-1.16.2.4.2.1.1"><xref derive
dContent="C.4.1" format="counter" sectionFormat="of" target="section-appendix.c.
4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
simple-encrypted-message">Simple Encrypted Message</xref></t>
</li>
<li pn="section-toc.1-1.16.2.4.2.2">
<t indent="0" pn="section-toc.1-1.16.2.4.2.2.1"><xref derive
dContent="C.4.2" format="counter" sectionFormat="of" target="section-appendix.c.
4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
encrypted-message-with-a-pa">Encrypted Message with a Partial IV</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.16.2.5">
<t indent="0" pn="section-toc.1-1.16.2.5.1"><xref derivedContent
="C.5" format="counter" sectionFormat="of" target="section-appendix.c.5"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-examples-of-
maced-messages">Examples of MACed Messages</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.5.2">
<li pn="section-toc.1-1.16.2.5.2.1">
<t indent="0" pn="section-toc.1-1.16.2.5.2.1.1"><xref derive
dContent="C.5.1" format="counter" sectionFormat="of" target="section-appendix.c.
5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
shared-secret-direct-mac">Shared Secret Direct MAC</xref></t>
</li>
<li pn="section-toc.1-1.16.2.5.2.2">
<t indent="0" pn="section-toc.1-1.16.2.5.2.2.1"><xref derive
dContent="C.5.2" format="counter" sectionFormat="of" target="section-appendix.c.
5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
ecdh-direct-mac">ECDH Direct MAC</xref></t>
</li>
<li pn="section-toc.1-1.16.2.5.2.3">
<t indent="0" pn="section-toc.1-1.16.2.5.2.3.1"><xref derive
dContent="C.5.3" format="counter" sectionFormat="of" target="section-appendix.c.
5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
wrapped-mac">Wrapped MAC</xref></t>
</li>
<li pn="section-toc.1-1.16.2.5.2.4">
<t indent="0" pn="section-toc.1-1.16.2.5.2.4.1"><xref derive
dContent="C.5.4" format="counter" sectionFormat="of" target="section-appendix.c.
5.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
multi-recipient-maced-messa">Multi-Recipient MACed Message</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.16.2.6">
<t indent="0" pn="section-toc.1-1.16.2.6.1"><xref derivedContent
="C.6" format="counter" sectionFormat="of" target="section-appendix.c.6"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-examples-of-
mac0-messages">Examples of MAC0 Messages</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.6.2">
<li pn="section-toc.1-1.16.2.6.2.1">
<t indent="0" pn="section-toc.1-1.16.2.6.2.1.1"><xref derive
dContent="C.6.1" format="counter" sectionFormat="of" target="section-appendix.c.
6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
shared-secret-direct-mac-2">Shared-Secret Direct MAC</xref></t>
</li>
</ul>
</li>
<li pn="section-toc.1-1.16.2.7">
<t indent="0" pn="section-toc.1-1.16.2.7.1"><xref derivedContent
="C.7" format="counter" sectionFormat="of" target="section-appendix.c.7"/>.  <xr
ef derivedContent="" format="title" sectionFormat="of" target="name-cose-keys">C
OSE Keys</xref></t>
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se
ction-toc.1-1.16.2.7.2">
<li pn="section-toc.1-1.16.2.7.2.1">
<t indent="0" pn="section-toc.1-1.16.2.7.2.1.1"><xref derive
dContent="C.7.1" format="counter" sectionFormat="of" target="section-appendix.c.
7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
public-keys">Public Keys</xref></t>
</li>
<li pn="section-toc.1-1.16.2.7.2.2">
<t indent="0" pn="section-toc.1-1.16.2.7.2.2.1"><xref derive
dContent="C.7.2" format="counter" sectionFormat="of" target="section-appendix.c.
7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-
private-keys">Private Keys</xref></t>
</li>
</ul>
</li>
</ul>
</li>
<li pn="section-toc.1-1.17">
<t indent="0" pn="section-toc.1-1.17.1"><xref derivedContent="" form
at="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="
" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgment
s</xref></t>
</li>
<li pn="section-toc.1-1.18">
<t indent="0" pn="section-toc.1-1.18.1"><xref derivedContent="" form
at="none" sectionFormat="of" target="section-appendix.e"/><xref derivedContent="
" format="title" sectionFormat="of" target="name-authors-address">Author's Addre
ss</xref></t>
</li>
</ul>
</section>
</toc>
</front> </front>
<middle> <middle>
<section anchor="introduction"> <section anchor="introduction" numbered="true" removeInRFC="false" toc="incl
<name>Introduction</name> ude" pn="section-1">
<t>There has been an increased focus on small, constrained devices that ma <name slugifiedName="name-introduction">Introduction</name>
ke up the Internet of Things (IoT). One of the standards that has come out of t <t indent="0" pn="section-1-1">There has been an increased focus on small,
his process is "Concise Binary Object Representation (CBOR)" <xref target="I-D.i constrained devices that make up the Internet of Things (IoT). One of the stan
etf-cbor-7049bis"/>. CBOR extended the data model of the JavaScript Object Nota dards that has come out of this process is "Concise Binary Object Representation
tion (JSON) <xref target="STD90"/> by allowing for binary data, among other chan (CBOR)" <xref target="STD94" format="default" sectionFormat="of" derivedContent
ges. CBOR has been adopted by several of the IETF working groups dealing with t ="STD94"/>. CBOR extended the data model of JavaScript Object Notation (JSON) <
he IoT world as their encoding of data structures. CBOR was designed specifical xref target="STD90" format="default" sectionFormat="of" derivedContent="STD90"/>
ly both to be small in terms of messages transported and implementation size and by allowing for binary data, among other changes. CBOR has been adopted by sev
to be a schema-free decoder. A need exists to provide message security service eral of the IETF working groups dealing with the IoT world as their method of en
s for IoT, and using CBOR as the message-encoding format makes sense. </t> coding data structures. CBOR was designed specifically to be small in terms of
both messages transported and implementation size and to have a schema-free deco
<t>The JOSE working group produced a set of documents <xref target="RFC751 der. A need exists to provide message security services for IoT, and using CBOR
5"/> <xref target="RFC7516"/> <xref target="RFC7517"/> <xref target="RFC7518"/> as the message-encoding format makes sense. </t>
that specified how to process encryption, signatures, and Message Authentication <t indent="0" pn="section-1-2">The JOSE Working Group produced a set of do
Code (MAC) operations and how to encode keys using JSON. This document defines cuments <xref target="RFC7515" format="default" sectionFormat="of" derivedConten
the CBOR Object Signing and Encryption (COSE) standard, which does the same thi t="RFC7515"/> <xref target="RFC7516" format="default" sectionFormat="of" derived
ng for the CBOR encoding format. This document is combined with <xref target="I Content="RFC7516"/> <xref target="RFC7517" format="default" sectionFormat="of" d
-D.ietf-cose-rfc8152bis-algs"/> which provides an initial set of algorithms. W erivedContent="RFC7517"/> <xref target="RFC7518" format="default" sectionFormat=
hile there is a strong attempt to keep the flavor of the original JSON Object Si "of" derivedContent="RFC7518"/> that specified how to process encryption, signat
gning and Encryption (JOSE) documents, two considerations are taken into account ures, and Message Authentication Code (MAC) operations and how to encode keys us
: </t> ing JSON. This document defines the CBOR Object Signing and Encryption (COSE) s
tandard, which does the same thing for the CBOR encoding format. This document i
<ul> s combined with <xref target="RFC9053" format="default" sectionFormat="of" deri
<li>CBOR has capabilities that are not present in JSON and are appropria vedContent="RFC9053"/>, which provides an initial set of algorithms. While the
te to use. One example of this is the fact that CBOR has a method of encoding b re is a strong attempt to keep the flavor of the original JSON Object Signing an
inary directly without first converting it into a base64-encoded text string. < d Encryption (JOSE) documents, two considerations are taken into account:</t>
/li> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1-3
<li>COSE is not a direct copy of the JOSE specification. In the process ">
of creating COSE, decisions that were made for JOSE were re-examined. In many <li pn="section-1-3.1">CBOR has capabilities that are not present in JSO
cases, different results were decided on as the criteria were not always the sam N and are appropriate to use. One example of this is the fact that CBOR has a m
e. </li> ethod of encoding binary data directly without first converting it into a base64
-encoded text string. </li>
<li pn="section-1-3.2">COSE is not a direct copy of the JOSE specificati
on. In the process of creating COSE, decisions that were made for JOSE were re-
examined. In many cases, different results were decided on, as the criteria wer
e not always the same. </li>
</ul> </ul>
<t indent="0" pn="section-1-4">
<t>
This document contains: This document contains:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1-5
<li> ">
The description of the structure for the CBOR objects which are tran <li pn="section-1-5.1">
smitted over the wire. The description of the structure for the CBOR objects that are trans
Two objects are defined for each of encryption, signing and message mitted over the wire.
authentication. Two objects each are defined for encryption, signing, and message au
thentication.
One object is defined for transporting keys and one for transporting groups of keys. One object is defined for transporting keys and one for transporting groups of keys.
</li> </li>
<li> <li pn="section-1-5.2">
The procedures used to build the inputs to the cryptographic functio ns required for each of the structures. The procedures used to build the inputs to the cryptographic functio ns required for each of the structures.
</li> </li>
<li> <li pn="section-1-5.3">
A set of attributes that apply to the different security objects. A set of attributes that apply to the different security objects.
</li> </li>
</ul> </ul>
<t indent="0" pn="section-1-6">
<t>
This document does not contain the rules and procedures for using specif ic cryptographic algorithms. This document does not contain the rules and procedures for using specif ic cryptographic algorithms.
Details on specific algorithms can be found in <xref target="I-D.ietf-co se-rfc8152bis-algs"/> and <xref target="RFC8230"/>. Details on specific algorithms can be found in <xref target="RFC9053" fo rmat="default" sectionFormat="of" derivedContent="RFC9053"/> and <xref target="R FC8230" format="default" sectionFormat="of" derivedContent="RFC8230"/>.
Details for additional algorithms are expected to be defined in future d ocuments. Details for additional algorithms are expected to be defined in future d ocuments.
</t> </t>
<t indent="0" pn="section-1-7">
<t> COSE was initially designed as part of a solution to provide security to
COSE was initially designed as part of a solution to provide security to Constrained RESTful Environments (CoRE), and this is done using <xref target="R
Constrained RESTful Environments (CoRE), and this is done using <xref target="R FC8613" format="default" sectionFormat="of" derivedContent="RFC8613"/> and <xref
FC8613"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>. target="I-D.ietf-core-groupcomm-bis" format="default" sectionFormat="of" derive
However, COSE is not restricted to just these cases and can be used in a dContent="CORE-GROUPCOMM"/>.
ny place where one would consider either JOSE or CMS <xref target="RFC5652"/> fo However, COSE is not restricted to just these cases and can be used in a
r the purpose of providing security services. ny place where one would consider either JOSE or Cryptographic Message Syntax (C
COSE, like JOSE and CMS, is only for use in store and forward or offline MS) <xref target="RFC5652" format="default" sectionFormat="of" derivedContent="R
protocols. FC5652"/> for the purpose of providing security services.
The use of COSE in online protocols needing encryption, require that an COSE, like JOSE and CMS, is only for use in store-and-forward or offline
online key establishment process be done before sending objects back and forth. protocols.
Any application which uses COSE for security services first needs to det The use of COSE in online protocols needing encryption requires that an
ermine what security services are required and then select the appropriate COSE online key establishment process be done before sending objects back and forth.
structures and cryptographic algorithms based on those needs. Any application that uses COSE for security services first needs to determine wh
<xref target="app-considerations"/> provides additional information on w at security services are required and then select the appropriate COSE structure
hat applications need to specify when using COSE. s and cryptographic algorithms based on those needs.
<xref target="app-considerations" format="default" sectionFormat="of" de
rivedContent="Section 10"/> provides additional information on what applications
need to specify when using COSE.
</t> </t>
<t indent="0" pn="section-1-8">
<t>
One feature that is present in CMS that is not present in this standard is a digest structure. One feature that is present in CMS that is not present in this standard is a digest structure.
This omission is deliberate. This omission is deliberate.
It is better for the structure to be defined in each protocol as differe nt protocols will want to include a different set of fields as part of the struc ture. It is better for the structure to be defined in each protocol as differe nt protocols will want to include a different set of fields as part of the struc ture.
While an algorithm identifier and the digest value are going to be commo n to all applications, the two values may not always be adjacent as the algorith m could be defined once with multiple values. While an algorithm identifier and the digest value are going to be commo n to all applications, the two values may not always be adjacent, as the algorit hm could be defined once with multiple values.
Applications may additionally want to define additional data fields as p art of the structure. Applications may additionally want to define additional data fields as p art of the structure.
One such application-specific element would be to include a URI or other pointer to where the data that is being hashed can be obtained. One such application-specific element would be to include a URI or other pointer to where the data that is being hashed can be obtained.
<xref target="I-D.ietf-cose-hash-algs"/> contains one such possible stru cture along with defining a set of digest algorithms. <xref target="RFC9054" format="default" sectionFormat="of" derivedConten t="RFC9054"/> contains one such possible structure and defines a set of digest a lgorithms.
</t> </t>
<t indent="0" pn="section-1-9">
<t> During the process of advancing COSE to Internet Standard, it was notice
During the process of advancing COSE to Internet Standard, it was notice d that the description of the security properties of countersignatures was incor
d the description of the security properties of countersignatures was incorrect rect for the COSE_Sign1 structure.
for the COSE_Sign1 structure. Since the security properties that were described -- those of a true cou
Since the security properties that were described, those of a true count ntersignature -- were those that the working group desired, the decision was mad
ersignature, were those that the working group desired, the decision was made to e to remove all of the countersignature text from this document and create a new
remove all of the countersignature text from this document and create a new doc document <xref target="I-D.ietf-cose-countersign" format="default" sectionForma
ument <xref target="I-D.ietf-cose-countersign"/> to both deprecate the old count t="of" derivedContent="COSE-COUNTERSIGN"/> to both deprecate the old countersign
ersignature algorithm and header parameters and to define a new algorithm and he ature algorithm and header parameters and define a new algorithm and header para
ader parameters with the desired security properties. meters with the desired security properties.
</t> </t>
<section anchor="requirements-terminology" numbered="true" removeInRFC="fa
<section anchor="requirements-terminology"> lse" toc="include" pn="section-1.1">
<name>Requirements Terminology</name> <name slugifiedName="name-requirements-terminology">Requirements Termino
logy</name>
<t> <t indent="0" pn="section-1.1-1">
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "S The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
HOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>
this document are to be interpreted as described in BCP 14 <xref target="RFC211 ", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bc
9"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, p14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
as shown here. "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted
as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat
="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" section
Format="of" derivedContent="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.
</t> </t>
</section> </section>
<section numbered="true" removeInRFC="false" toc="include" pn="section-1.2
<section> ">
<name>Changes from RFC8152</name> <name slugifiedName="name-changes-from-rfc-8152">Changes from RFC 8152</
<ul> name>
<li> Split the original document into this document and <xref target=" <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1
I-D.ietf-cose-rfc8152bis-algs"/>.</li> .2-1">
<li>Add some text describing why there is no digest structure defined <li pn="section-1.2-1.1">Split the original document into this documen
by COSE.</li> t and <xref target="RFC9053" format="default" sectionFormat="of" derivedContent=
<li>Text clarifications and changes in terminology.</li> "RFC9053"/>.</li>
<li> <li pn="section-1.2-1.2">Added some text describing why there is no di
All of the details relating to countersignatures have been removed a gest structure defined by COSE.</li>
nd placed in <xref target="I-D.ietf-cose-countersign"/>. <li pn="section-1.2-1.3">Made text clarifications and changes in termi
nology.</li>
<li pn="section-1.2-1.4">Removed all of the details relating to counte
rsignatures and placed them in <xref target="I-D.ietf-cose-countersign" format="
default" sectionFormat="of" derivedContent="COSE-COUNTERSIGN"/>.
</li> </li>
</ul> </ul>
</section> </section>
<section anchor="design-changes-from-jose" numbered="true" removeInRFC="fa
<section anchor="design-changes-from-jose"> lse" toc="include" pn="section-1.3">
<name>Design Changes from JOSE</name> <name slugifiedName="name-design-changes-from-jose">Design Changes from
<ul> JOSE</name>
<li>Define a single overall message structure so that encrypted, signe <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1
d, and MACed messages can easily be identified and still have a consistent view. .3-1">
</li> <li pn="section-1.3-1.1">A single overall message structure has been d
<li>Signed messages distinguish between the protected and unprotected efined so that encrypted, signed, and MACed messages can easily be identified an
header parameters that relate to the content and those that relate to the signat d still have a consistent view. </li>
ure. </li> <li pn="section-1.3-1.2">Signed messages distinguish between the prote
<li>MACed messages are separated from signed messages. </li> cted and unprotected header parameters that relate to the content and those that
<li>MACed messages have the ability to use the same set of recipient a relate to the signature. </li>
lgorithms as enveloped messages for obtaining the MAC authentication key. </li> <li pn="section-1.3-1.3">MACed messages are separated from signed mess
<li>Use binary encodings, rather than base64url encodings, to encode b ages. </li>
inary data. </li> <li pn="section-1.3-1.4">MACed messages have the ability to use the sa
<li>Combine the authentication tag for encryption algorithms with the me set of recipient algorithms as enveloped messages for obtaining the MAC authe
ciphertext. </li> ntication key. </li>
<li>The set of cryptographic algorithms has been expanded in some dire <li pn="section-1.3-1.5">Binary encodings are used, rather than base64
ctions and trimmed in others. </li> url encodings, to encode binary data. </li>
<li pn="section-1.3-1.6">The authentication tag for encryption algorit
hms has been combined with the ciphertext. </li>
<li pn="section-1.3-1.7">The set of cryptographic algorithms has been
expanded in some directions and trimmed in others. </li>
</ul> </ul>
</section> </section>
<section anchor="cbor-grammar" numbered="true" removeInRFC="false" toc="in
<section anchor="cbor-grammar"> clude" pn="section-1.4">
<name>CBOR Grammar</name> <name slugifiedName="name-cddl-grammar-for-cbor-data-">CDDL Grammar for
<t> CBOR Data Structures</name>
There was not a standard CBOR grammar available when COSE was original <t indent="0" pn="section-1.4-1">
ly written. When COSE was originally written, the Concise Data Definition
For that reason the CBOR data objects defined here are described in pr Language (CDDL) <xref target="RFC8610" format="default" sectionFormat=
ose. "of" derivedContent="RFC8610"/> had not yet been published
Since that time CBOR Data Definition Language (CDDL) <xref target="RFC in an RFC, so it could not be used as the data description
8610"/> has been published as an RFC. language to normatively describe the CBOR data structures employed
The CBOR grammar presented in this document is compatible with CDDL. by COSE.
For that reason, the CBOR data objects defined here are described
in prose.
Additional (non-normative) descriptions of the
COSE data objects are provided in a subset of CDDL, described below.
</t> </t>
<t indent="0" pn="section-1.4-2">
<t> This document was developed by first working on the grammar and then d
The document was developed by first working on the grammar and then de eveloping the prose to go with it.
veloping the prose to go with it. An artifact of this is that the prose was written using the primitive-
An artifact of this is that the prose was written using the primitive type strings defined by Concise Data Definition Language (CDDL) <xref target="RF
type strings defined by CBOR Data Definition Language (CDDL) <xref target="RFC86 C8610" format="default" sectionFormat="of" derivedContent="RFC8610"/>.
10"/>.
In this specification, the following primitive types are used: In this specification, the following primitive types are used:
</t> </t>
<dl indent="3" newline="false" spacing="normal" pn="section-1.4-3">
<ul empty="true"> <dt pn="section-1.4-3.1">any:</dt>
<li>any -- non-specific value that permits all CBOR values to be place <dd pn="section-1.4-3.2">A nonspecific value that permits all CBOR val
d here.</li> ues to be placed here.</dd>
<li>bool -- a boolean value (true: major type 7, value 21; false: majo <dt pn="section-1.4-3.3">bool:</dt>
r type 7, value 20).</li> <dd pn="section-1.4-3.4">A boolean value (true: major type 7, value 21
<li>bstr -- byte string (major type 2).</li> ; false: major type 7, value 20).</dd>
<li>int -- an unsigned integer or a negative integer.</li> <dt pn="section-1.4-3.5">bstr:</dt>
<li>nil -- a null value (major type 7, value 22).</li> <dd pn="section-1.4-3.6">Byte string (major type 2).</dd>
<li>nint -- a negative integer (major type 1).</li> <dt pn="section-1.4-3.7">int:</dt>
<li>tstr -- a UTF-8 text string (major type 3).</li> <dd pn="section-1.4-3.8">An unsigned integer or a negative integer.</d
<li>uint -- an unsigned integer (major type 0).</li> d>
</ul> <dt pn="section-1.4-3.9">nil:</dt>
<dd pn="section-1.4-3.10">A null value (major type 7, value 22).</dd>
<t>Two syntaxes from CDDL appear in this document as shorthand. These a <dt pn="section-1.4-3.11">nint:</dt>
re: <dd pn="section-1.4-3.12">A negative integer (major type 1).</dd>
<dt pn="section-1.4-3.13">tstr:</dt>
<dd pn="section-1.4-3.14">A UTF-8 text string (major type 3).</dd>
<dt pn="section-1.4-3.15">uint:</dt>
<dd pn="section-1.4-3.16">An unsigned integer (major type 0).</dd>
</dl>
<t indent="0" pn="section-1.4-4">Three syntaxes from CDDL appear in this
document as shorthand. These are:
</t> </t>
<dl indent="3" newline="false" spacing="normal" pn="section-1.4-5">
<ul empty="true"> <dt pn="section-1.4-5.1">FOO / BAR:</dt>
<li>FOO / BAR -- indicates that either FOO or BAR can appear here.</li <dd pn="section-1.4-5.2">Indicates that either FOO or BAR can appear h
> ere.</dd>
<li>[+ FOO] -- indicates that the type FOO appears one or more times i <dt pn="section-1.4-5.3">[+ FOO]:</dt>
n an array.</li> <dd pn="section-1.4-5.4">Indicates that the type FOO appears one or mo
<li>* FOO -- indicates that the type FOO appears zero or more times.</ re times in an array.</dd>
li> <dt pn="section-1.4-5.5">* FOO:</dt>
</ul> <dd pn="section-1.4-5.6">Indicates that the type FOO appears zero or m
ore times.</dd>
<t> </dl>
<t indent="0" pn="section-1.4-6">
Two of the constraints defined by CDDL are also used in this document. These are: Two of the constraints defined by CDDL are also used in this document. These are:
</t> </t>
<dl indent="3" newline="false" spacing="normal" pn="section-1.4-7">
<ul empty="true"> <dt pn="section-1.4-7.1">type1 .cbor type2:</dt>
<li>type1 .cbor type2 -- indicates that the contents of type1, usually <dd pn="section-1.4-7.2">Indicates that the contents of type1, usually
bstr, contains a value of type2.</li> bstr, contains a value of type2.</dd>
<li>type1 .size integer -- indicates that the contents of type1 is int <dt pn="section-1.4-7.3">type1 .size integer:</dt>
eger bytes long</li> <dd pn="section-1.4-7.4">Indicates that the contents of type1 is integ
</ul> er bytes long.</dd>
</dl>
<t> <t indent="0" pn="section-1.4-8">
As well as the prose description, a version of a CBOR grammar is presented in As well as the prose description, a grammar for the CBOR data structures is pr
CDDL. esented in the subset of CDDL described previously.
The CDDL grammar is informational; the prose description is normative. The CDDL grammar is informational; the prose description is normative.
</t> </t>
<t indent="0" pn="section-1.4-9">The collected CDDL can be extracted fro
<t>The collected CDDL can be extracted from the XML version of this docu m the XML version of this document via the XPath expression below. (Depending on
ment via the following XPath expression below. (Depending on the XPath evaluato the XPath evaluator one is using, it may be necessary to deal with &amp;gt; as
r one is using, it may be necessary to deal with &amp;gt; as an entity.) </t> an entity.) </t>
<sourcecode type="xpath" markers="false" pn="section-1.4-10">
<sourcecode type="XPATH"><![CDATA[ //sourcecode[@type='cddl']/text()
//sourcecode[@type='CDDL']/text() </sourcecode>
]]></sourcecode> <t indent="0" pn="section-1.4-11">CDDL expects the initial nonterminal s
<t>CDDL expects the initial non-terminal symbol to be the first symbol i ymbol to be the first symbol in the file. For this reason, the first fragment o
n the file. For this reason, the first fragment of CDDL is presented here. </t f CDDL is presented here. </t>
> <sourcecode type="cddl" markers="false" pn="section-1.4-12">
<sourcecode type="CDDL"><![CDATA[
start = COSE_Messages / COSE_Key / COSE_KeySet / Internal_Types start = COSE_Messages / COSE_Key / COSE_KeySet / Internal_Types
; This is defined to make the tool quieter: ; This is defined to make the tool quieter:
Internal_Types = Sig_structure / Enc_structure / MAC_structure Internal_Types = Sig_structure / Enc_structure / MAC_structure
]]></sourcecode> </sourcecode>
<t>The non-terminal Internal_Types is defined for dealing with the autom <t indent="0" pn="section-1.4-13">The nonterminal Internal_Types is defi
ated validation tools used during the writing of this document. It references t ned for dealing with the automated validation tools used during the writing of t
hose non-terminals that are used for security computations but are not emitted f his document. It references those nonterminals that are used for security compu
or transport. </t> tations but are not emitted for transport. </t>
</section> </section>
<section anchor="label" numbered="true" removeInRFC="false" toc="include"
<section anchor="label"> pn="section-1.5">
<name>CBOR-Related Terminology</name> <name slugifiedName="name-cbor-related-terminology">CBOR-Related Termino
<t>In JSON, maps are called objects and only have one kind of map key: a logy</name>
text string. In COSE, we use text strings, negative integers, and unsigned int <t indent="0" pn="section-1.5-1">In JSON, maps are called objects and on
egers as map keys. The integers are used for compactness of encoding and easy c ly have one kind of map key: a text string. In COSE, we use text strings, negat
omparison. The inclusion of text strings allows for an additional range of shor ive integers, and unsigned integers as map keys. The integers are used for comp
t encoded values to be used as well. Since the word "key" is mainly used in its actness of encoding and easy comparison. The inclusion of text strings allows f
other meaning, as a cryptographic key, we use the term "label" for this usage a or an additional range of short encoded values to be used as well. Since the wo
s a map key. </t> rd "key" is mainly used in its other meaning, as a cryptographic key, we use the
term "label" for this usage as a map key. </t>
<t> <t indent="0" pn="section-1.5-2">
The presence a label that is neither a text string or an integer, in a In a CBOR map defined by this specification, the presence a label that
CBOR map, is an error. is neither a text string nor an integer is an error.
Applications can either fail processing or process messages by ignorin g incorrect labels; however, they <bcp14>MUST NOT</bcp14> create messages with i ncorrect labels. Applications can either fail processing or process messages by ignorin g incorrect labels; however, they <bcp14>MUST NOT</bcp14> create messages with i ncorrect labels.
</t> </t>
<t indent="0" pn="section-1.5-3">A CDDL grammar fragment defines the non
<t>A CDDL grammar fragment defines the non-terminal 'label', as in the p terminal "label", as in the previous paragraph, and "values", which permits any
revious paragraph, and 'values', which permits any value to be used. </t> value to be used. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-1.5-4">
label = int / tstr label = int / tstr
values = any values = any
]]></sourcecode> </sourcecode>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-1.6
<name>Document Terminology</name> ">
<t>In this document, we use the following terminology: </t> <name slugifiedName="name-document-terminology">Document Terminology</na
<t>Byte is a synonym for octet.</t> me>
<t> <t indent="0" pn="section-1.6-1">In this document, we use the following
Constrained Application Protocol (CoAP) is a specialized web transfer terminology: </t>
protocol for use in constrained systems. It is defined in <xref target="RFC7252 <dl indent="3" newline="false" spacing="normal" pn="section-1.6-2">
"/>. <dt pn="section-1.6-2.1">Byte:</dt>
</t> <dd pn="section-1.6-2.2">A synonym for octet.</dd>
<dt pn="section-1.6-2.3">Constrained Application Protocol (CoAP):</dt>
<t> <dd pn="section-1.6-2.4">A specialized
Authenticated Encryption (AE) <xref target="RFC5116"/> algorithms are web transfer protocol for use in constrained systems. It is defined
encryption algorithms that provide an authentication check of the contents with in <xref target="RFC7252" format="default" sectionFormat="of" derivedCont
the encryption service. ent="RFC7252"/>.</dd>
An example of an AE algorithm used in COSE is AES Key Wrap <xref targe <dt pn="section-1.6-2.5">Authenticated Encryption (AE) algorithms <xre
t="RFC3394"/>. f target="RFC5116" format="default" sectionFormat="of" derivedContent="RFC5116"/
These algorithms are used for key encryption algorithms, but AEAD algo >:
rithms would be preferred. </dt>
</t> <dd pn="section-1.6-2.6">Encryption algorithms that provide an
authentication check of the contents along with the encryption service.
<t> An example of an AE algorithm used in COSE is AES Key Wrap <xref targe
Authenticated Encryption with Associated Data (AEAD) <xref target="RFC t="RFC3394" format="default" sectionFormat="of" derivedContent="RFC3394"/>.
5116"/> algorithms provide the same authentication service of the content as AE These algorithms are used for key encryption, but
algorithms do. Authenticated Encryption with Associated Data (AEAD)
They also allow for associated data to be included in the authenticati algorithms would be preferred.
on service, but which is not part of the encrypted body. </dd>
An example of an AEAD algorithm used in COSE is AES-GCM <xref target=" <dt pn="section-1.6-2.7">AEAD algorithms <xref target="RFC5116" format
RFC5116"/>. ="default" sectionFormat="of" derivedContent="RFC5116"/>:</dt>
These algorithms are used for content encryption and can be used for k <dd pn="section-1.6-2.8">Encryption algorithms that provide the same a
ey encryption as well. uthentication service of
</t> the content as AE algorithms do, and also allow
<t> associated data that is not part of the encrypted body to be included
Context is used throughout the document to represent information that in the authentication service. An example of an AEAD
is not part of the COSE message. algorithm used in COSE is AES-GCM <xref target="RFC5116" format="default"
Information which is part of the context can come from several differe sectionFormat="of" derivedContent="RFC5116"/>. These
nt sources including: algorithms are used for content encryption and can be used for key
Protocol interactions, associated key structures, and program configur encryption as well.
ation. </dd>
The context to use can be implicit, identified using the 'kid context' </dl>
header parameter defined in <xref target="RFC8613"/>, or identified by a protoc <t indent="0" pn="section-1.6-3">
ol-specific identifier. "Context" is used throughout the document to represent information tha
Context should generally be included in the cryptographic construction t is not part of the COSE message.
; for more details see <xref target="Extern_AAD"/>. Information that is part of the context can come from several differen
t sources, including
protocol interactions, associated key structures, and program configur
ation.
The context to use can be implicit, identified using the "kid context"
header parameter defined in <xref target="RFC8613" format="default" sectionForm
at="of" derivedContent="RFC8613"/>, or identified by a protocol-specific identif
ier.
Context should generally be included in the cryptographic construction
; for more details, see <xref target="Extern_AAD" format="default" sectionFormat
="of" derivedContent="Section 4.3"/>.
</t> </t>
<t>The term 'byte string' is used for sequences of bytes, while the term 'text string' is used for sequences of characters.</t> <t indent="0" pn="section-1.6-4">The term "byte string" is used for sequ ences of bytes, while the term "text string" is used for sequences of characters .</t>
</section> </section>
</section> </section>
<section anchor="the-cosemsg-structure" numbered="true" removeInRFC="false"
<section anchor="the-cosemsg-structure"> toc="include" pn="section-2">
<name>Basic COSE Structure</name> <name slugifiedName="name-basic-cose-structure">Basic COSE Structure</name
<t> >
<t indent="0" pn="section-2-1">
The COSE object structure is designed so that there can be a large amoun t of common code when parsing and processing the different types of security mes sages. The COSE object structure is designed so that there can be a large amoun t of common code when parsing and processing the different types of security mes sages.
All of the message structures are built on the CBOR array type. All of the message structures are built on the CBOR array type.
The first three elements of the array always contain the same informatio n: The first three elements of the array always contain the same informatio n:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-2-2"
<li>The protected header parameters, encoded and wrapped in a bstr.</li> >
<li>The unprotected header parameters as a map.</li> <li pn="section-2-2.1" derivedCounter="1.">The protected header paramete
<li> rs, encoded and wrapped in a bstr.</li>
<li pn="section-2-2.2" derivedCounter="2.">The unprotected header parame
ters as a map.</li>
<li pn="section-2-2.3" derivedCounter="3.">
The content of the message. The content of the message.
The content is either the plaintext or the ciphertext as appropriate The content is either the plaintext or the ciphertext, as appropriat
. e.
The content may be detached (i.e. transported separately from the CO The content may be detached (i.e., transported separately from the C
SE structure), but the location is still used. OSE structure), but the location is still used.
The content is wrapped in a bstr when present and is a nil value whe n detached. The content is wrapped in a bstr when present and is a nil value whe n detached.
</li> </li>
</ol> </ol>
<t> <t indent="0" pn="section-2-3">
Elements after this point are dependent on the specific message type. Elements after this point are dependent on the specific message type.
</t> </t>
<t indent="0" pn="section-2-4">COSE messages are built using the concept o
<t>COSE messages are built using the concept of layers to separate differe f layers to separate different types of cryptographic concepts. As an example o
nt types of cryptographic concepts. As an example of how this works, consider t f how this works, consider the COSE_Encrypt message (<xref target="EnvelopedData
he COSE_Encrypt message (<xref target="EnvelopedData"/>). This message type is " format="default" sectionFormat="of" derivedContent="Section 5.1"/>). This mes
broken into two layers: the content layer and the recipient layer. The content sage type is broken into two layers: the content layer and the recipient layer.
layer contains the encrypted plaintext and information about the encrypted messa The content layer contains the encrypted plaintext and information about the en
ge. The recipient layer contains the encrypted content encryption key (CEK) and crypted message. The recipient layer contains the encrypted content encryption
information about how it is encrypted for each recipient. A single layer versi key (CEK) and information about how it is encrypted, for each recipient. A sing
on of the encryption message COSE_Encrypt0 (<xref target="EnvelopedData0"/>) is le-layer version of the encryption message COSE_Encrypt0 (<xref target="Envelope
provided for cases where the CEK is pre-shared.</t> dData0" format="default" sectionFormat="of" derivedContent="Section 5.2"/>) is p
rovided for cases where the CEK is preshared.</t>
<t>Identification of which type of message has been presented is done by t <t indent="0" pn="section-2-5">Identification of which type of message has
he following methods: been presented is done by the following methods:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-2-6"
<li>The specific message type is known from the context. This may be de >
fined by a marker in the containing structure or by restrictions specified by th <li pn="section-2-6.1" derivedCounter="1.">The specific message type is
e application protocol. </li> known from the context. This may be defined by a marker in the containing struc
<li>The message type is identified by a CBOR tag. Messages with a CBOR ture or by restrictions specified by the application protocol. </li>
tag are known in this specification as tagged messages, while those without the <li pn="section-2-6.2" derivedCounter="2.">The message type is identifie
CBOR tag are known as untagged messages. This document defines a CBOR tag for e d by a CBOR tag. Messages with a CBOR tag are known in this specification as ta
ach of the message structures. These tags can be found in <xref target="CBOR-Ta gged messages, while those without the CBOR tag are known as untagged messages.
gs"/>. </li> This document defines a CBOR tag for each of the message structures. These tag
<li> s can be found in <xref target="CBOR-Tags" format="default" sectionFormat="of" d
When a COSE object is carried in a media type of 'application/cose', t erivedContent="Table 1"/>. </li>
he optional parameter 'cose-type' can be used to identify the embedded object. <li pn="section-2-6.3" derivedCounter="3.">
The parameter is OPTIONAL if the tagged version of the structure is us When a COSE object is carried in a media type of "application/cose", t
ed. he optional parameter "cose-type" can be used to identify the embedded object.
The parameter is <bcp14>OPTIONAL</bcp14> if the tagged version of the
structure is used.
The parameter is <bcp14>REQUIRED</bcp14> if the untagged version of th e structure is used. The parameter is <bcp14>REQUIRED</bcp14> if the untagged version of th e structure is used.
The value to use with the parameter for each of the structures can be found in <xref target="CBOR-Tags"/>. The value to use with the parameter for each of the structures can be found in <xref target="CBOR-Tags" format="default" sectionFormat="of" derivedCon tent="Table 1"/>.
</li> </li>
<li>When a COSE object is carried as a CoAP payload, the CoAP Content-Fo rmat Option can be used to identify the message content. The CoAP Content-Forma t values can be found in <xref target="CoAP_content_type"/>. The CBOR tag for t he message structure is not required as each security message is uniquely identi fied. </li> <li pn="section-2-6.4" derivedCounter="4.">When a COSE object is carried as a CoAP payload, the CoAP Content-Format Option can be used to identify the m essage content. The CoAP Content-Format values can be found in <xref target="Co AP_content_type" format="default" sectionFormat="of" derivedContent="Table 2"/>. The CBOR tag for the message structure is not required, as each security messa ge is uniquely identified. </li>
</ol> </ol>
<!--Table 1 --> <table anchor="CBOR-Tags" align="center" pn="table-1">
<table anchor="CBOR-Tags" align="center"> <name slugifiedName="name-cose-message-identification">COSE Message Iden
<name>COSE Message Identification</name> tification</name>
<thead> <thead>
<tr> <tr>
<th>CBOR Tag</th> <th align="left" colspan="1" rowspan="1">CBOR Tag</th>
<th>cose-type</th> <th align="left" colspan="1" rowspan="1">cose-type</th>
<th>Data Item</th> <th align="left" colspan="1" rowspan="1">Data Item</th>
<th>Semantics</th> <th align="left" colspan="1" rowspan="1">Semantics</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>98</td> <td align="left" colspan="1" rowspan="1">98</td>
<td>cose-sign</td> <td align="left" colspan="1" rowspan="1">cose-sign</td>
<td>COSE_Sign</td> <td align="left" colspan="1" rowspan="1">COSE_Sign</td>
<td>COSE Signed Data Object</td> <td align="left" colspan="1" rowspan="1">COSE Signed Data Object</td
>
</tr> </tr>
<tr> <tr>
<td>18</td> <td align="left" colspan="1" rowspan="1">18</td>
<td>cose-sign1</td> <td align="left" colspan="1" rowspan="1">cose-sign1</td>
<td>COSE_Sign1</td> <td align="left" colspan="1" rowspan="1">COSE_Sign1</td>
<td>COSE Single Signer Data Object</td> <td align="left" colspan="1" rowspan="1">COSE Single Signer Data Obj
ect</td>
</tr> </tr>
<tr> <tr>
<td>96</td> <td align="left" colspan="1" rowspan="1">96</td>
<td>cose-encrypt</td> <td align="left" colspan="1" rowspan="1">cose-encrypt</td>
<td>COSE_Encrypt</td> <td align="left" colspan="1" rowspan="1">COSE_Encrypt</td>
<td>COSE Encrypted Data Object</td> <td align="left" colspan="1" rowspan="1">COSE Encrypted Data Object<
/td>
</tr> </tr>
<tr> <tr>
<td>16</td> <td align="left" colspan="1" rowspan="1">16</td>
<td>cose-encrypt0</td> <td align="left" colspan="1" rowspan="1">cose-encrypt0</td>
<td>COSE_Encrypt0</td> <td align="left" colspan="1" rowspan="1">COSE_Encrypt0</td>
<td>COSE Single Recipient Encrypted Data Object</td> <td align="left" colspan="1" rowspan="1">COSE Single Recipient Encry
pted Data Object</td>
</tr> </tr>
<tr> <tr>
<td>97</td> <td align="left" colspan="1" rowspan="1">97</td>
<td>cose-mac</td> <td align="left" colspan="1" rowspan="1">cose-mac</td>
<td>COSE_Mac</td> <td align="left" colspan="1" rowspan="1">COSE_Mac</td>
<td>COSE MACed Data Object</td> <td align="left" colspan="1" rowspan="1">COSE MACed Data Object</td>
</tr> </tr>
<tr> <tr>
<td>17</td> <td align="left" colspan="1" rowspan="1">17</td>
<td>cose-mac0</td> <td align="left" colspan="1" rowspan="1">cose-mac0</td>
<td>COSE_Mac0</td> <td align="left" colspan="1" rowspan="1">COSE_Mac0</td>
<td>COSE Mac w/o Recipients Object</td> <td align="left" colspan="1" rowspan="1">COSE Mac w/o Recipients Obj
ect</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<table anchor="CoAP_content_type" align="center"> <table anchor="CoAP_content_type" align="center" pn="table-2">
<name>CoAP Content-Formats for COSE</name> <name slugifiedName="name-coap-content-formats-for-co">CoAP Content-Form
ats for COSE</name>
<thead> <thead>
<tr> <tr>
<th>Media Type</th> <th align="left" colspan="1" rowspan="1">Media Type</th>
<th>Encoding</th> <th align="left" colspan="1" rowspan="1">Encoding</th>
<th>ID</th> <th align="left" colspan="1" rowspan="1">ID</th>
<th>Reference</th> <th align="left" colspan="1" rowspan="1">Reference</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>application/cose; cose-type="cose-sign"</td> <td align="left" colspan="1" rowspan="1">application/cose; cose-type
<td/> ="cose-sign"</td>
<td>98</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">98</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose; cose-type="cose-sign1"</td> <td align="left" colspan="1" rowspan="1">application/cose; cose-type
<td/> ="cose-sign1"</td>
<td>18</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">18</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose; cose-type="cose-encrypt"</td> <td align="left" colspan="1" rowspan="1">application/cose; cose-type
<td/> ="cose-encrypt"</td>
<td>96</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">96</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose; cose-type="cose-encrypt0"</td> <td align="left" colspan="1" rowspan="1">application/cose; cose-type
<td/> ="cose-encrypt0"</td>
<td>16</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">16</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose; cose-type="cose-mac"</td> <td align="left" colspan="1" rowspan="1">application/cose; cose-type
<td/> ="cose-mac"</td>
<td>97</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">97</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose; cose-type="cose-mac0"</td> <td align="left" colspan="1" rowspan="1">application/cose; cose-type
<td/> ="cose-mac0"</td>
<td>17</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">17</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose-key</td> <td align="left" colspan="1" rowspan="1">application/cose-key</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>101</td> <td align="left" colspan="1" rowspan="1">101</td>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
<tr> <tr>
<td>application/cose-key-set</td> <td align="left" colspan="1" rowspan="1">application/cose-key-set</t
<td/> d>
<td>102</td> <td align="left" colspan="1" rowspan="1"/>
<td>[[THIS DOCUMENT]]</td> <td align="left" colspan="1" rowspan="1">102</td>
<td align="left" colspan="1" rowspan="1">RFC 9052</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t>The following CDDL fragment identifies all of the top messages defined <t indent="0" pn="section-2-9">The following CDDL fragment identifies all
in this document. Separate non-terminals are defined for the tagged and the unt of the top messages defined in this document. Separate nonterminals are defined
agged versions of the messages. </t> for the tagged and untagged versions of the messages. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-2-10">
COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message
COSE_Untagged_Message = COSE_Sign / COSE_Sign1 / COSE_Untagged_Message = COSE_Sign / COSE_Sign1 /
COSE_Encrypt / COSE_Encrypt0 / COSE_Encrypt / COSE_Encrypt0 /
COSE_Mac / COSE_Mac0 COSE_Mac / COSE_Mac0
COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged / COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged /
COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged / COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged /
COSE_Mac_Tagged / COSE_Mac0_Tagged COSE_Mac_Tagged / COSE_Mac0_Tagged
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="header-parameters"> <section anchor="header-parameters" numbered="true" removeInRFC="false" toc=
<name>Header Parameters</name> "include" pn="section-3">
<t>The structure of COSE has been designed to have two buckets of informat <name slugifiedName="name-header-parameters">Header Parameters</name>
ion that are not considered to be part of the payload itself, but are used for h <t indent="0" pn="section-3-1">The structure of COSE has been designed to
olding information about content, algorithms, keys, or evaluation hints for the have two buckets of information that are not considered to be part of the payloa
processing of the layer. These two buckets are available for use in all of the d itself, but are used for holding information about content, algorithms, keys,
structures except for keys. While these buckets are present, they may not alway or evaluation hints for the processing of the layer. These two buckets are avai
s be usable in all instances. For example, while the protected bucket is define lable for use in all of the structures except for keys. While these buckets are
d as part of the recipient structure, some of the algorithms used for recipient present, they may not always be usable in all instances. For example, while th
structures do not provide for authenticated data. If this is the case, the prot e protected bucket is defined as part of the recipient structure, some of the al
ected bucket is left empty. </t> gorithms used for recipient structures do not provide for authenticated data. I
<t>Both buckets are implemented as CBOR maps. The map key is a 'label' (< f this is the case, the protected bucket is left empty. </t>
xref target="label"/>). The value portion is dependent on the definition for th <t indent="0" pn="section-3-2">Both buckets are implemented as CBOR maps.
e label. Both maps use the same set of label/value pairs. The integer and text The map key is a "label" (<xref target="label" format="default" sectionFormat="
string values for labels have been divided into several sections including a st of" derivedContent="Section 1.5"/>). The value portion is dependent on the defi
andard range, a private range, and a range that is dependent on the algorithm se nition for the label. Both maps use the same set of label/value pairs. The int
lected. The defined labels can be found in the "COSE Header Parameters" IANA re eger and text-string values for labels have been divided into several sections,
gistry (<xref target="cose-header-key-table"/>). </t> including a standard range, a private use range, and a range that is dependent o
<t> n the algorithm selected. The defined labels can be found in the "COSE Header P
arameters" IANA registry (<xref target="cose-header-key-table" format="default"
sectionFormat="of" derivedContent="Section 11.1"/>). </t>
<t indent="0" pn="section-3-3">
The two buckets are: The two buckets are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-3-4">
<dt>protected:</dt> <dt pn="section-3-4.1">protected:</dt>
<dd> <dd pn="section-3-4.2">
<t> <t indent="0" pn="section-3-4.2.1">
Contains parameters about the current layer that are cryptographical ly protected. Contains parameters about the current layer that are cryptographical ly protected.
This bucket <bcp14>MUST</bcp14> be empty if it is not going to be in cluded in a cryptographic computation. This bucket <bcp14>MUST</bcp14> be empty if it is not going to be in cluded in a cryptographic computation.
This bucket is encoded in the message as a binary object. This bucket is encoded in the message as a binary object.
This value is obtained by CBOR encoding the protected map and wrappi ng it in a bstr object. This value is obtained by CBOR encoding the protected map and wrappi ng it in a bstr object.
Senders <bcp14>SHOULD</bcp14> encode a zero-length map as a zero-len gth byte string rather than as a zero-length map (encoded as h'a0'). Senders <bcp14>SHOULD</bcp14> encode a zero-length map as a zero-len gth byte string rather than as a zero-length map (encoded as h'a0').
The zero-length binary encoding is preferred because it is both shor ter and the version used in the serialization structures for cryptographic compu tation. The zero-length byte string encoding is preferred, because it is bot h shorter and the version used in the serialization structures for cryptographic computation.
Recipients <bcp14>MUST</bcp14> accept both a zero-length byte string and a zero-length map encoded in a byte string. Recipients <bcp14>MUST</bcp14> accept both a zero-length byte string and a zero-length map encoded in a byte string.
</t> </t>
<t> <t indent="0" pn="section-3-4.2.2">
Wrapping the encoding with a byte string allows for the protected ma Wrapping the encoding with a byte string allows the protected map to
p to be transported with a greater chance that it will not be altered accidental be transported with a greater chance that it will not be altered accidentally i
ly in transit. n transit.
(Badly behaved intermediates could decode and re-encode, but this wi ll result in a failure to verify unless the re-encoded byte string is identical to the decoded byte string.) (Badly behaved intermediates could decode and re-encode, but this wi ll result in a failure to verify unless the re-encoded byte string is identical to the decoded byte string.)
This avoids the problem of all parties needing to be able to do a co mmon canonical encoding of the map for input to cyprtographic operations. This avoids the problem of all parties needing to be able to do a co mmon canonical encoding of the map for input to cryptographic operations.
</t> </t>
</dd> </dd>
<dt>unprotected:</dt> <dt pn="section-3-4.3">unprotected:</dt>
<dd>Contains parameters about the current layer that are not cryptograph <dd pn="section-3-4.4">Contains parameters about the current layer that
ically protected. </dd> are not cryptographically protected. </dd>
</dl> </dl>
<t> <t indent="0" pn="section-3-5">
Only header parameters that deal with the current layer are to be placed Only header parameters that deal with the current layer are to be placed
at that layer. As an example of this, the header parameter 'content type' desc at that layer. As an example of this, the header parameter "content type" desc
ribes the content of the message being carried in the message. As such, this he ribes the content of the message being carried in the message. As such, this he
ader parameter is placed only in the content layer and is not placed in the reci ader parameter is placed only in the content layer and is not placed in the reci
pient or signature layers. In principle, one should be able to process any give pient or signature layers. In principle, one should be able to process any give
n layer without reference to any other layer. With the exception of the COSE_Si n layer without reference to any other layer. With the exception of the COSE_Si
gn structure, the only data that needs to cross layers is the cryptographic key. gn structure, the only data that needs to cross layers is the cryptographic key.
</t> </t>
<t> <t indent="0" pn="section-3-6">
The buckets are present in all of the security objects defined in this d The buckets are present in all of the security objects defined in this d
ocument. The fields in order are the 'protected' bucket (as a CBOR 'bstr' type) ocument. The fields, in order, are the "protected" bucket (as a CBOR "bstr" typ
and then the 'unprotected' bucket (as a CBOR 'map' type). The presence of both e) and then the "unprotected" bucket (as a CBOR "map" type). The presence of bo
buckets is required. The header parameters that go into the buckets come from th buckets is required. The header parameters that go into the buckets come fro
the IANA "COSE Header Parameters" registry (<xref target="cose-header-key-table" m the IANA "COSE Header Parameters" registry (<xref target="cose-header-key-tabl
/>). e" format="default" sectionFormat="of" derivedContent="Section 11.1"/>).
Some header parameters are defined in the next section. Some header parameters are defined in the next section.
</t> </t>
<t>Labels in each of the maps <bcp14>MUST</bcp14> be unique. When process <t indent="0" pn="section-3-7">Labels in each of the maps <bcp14>MUST</bcp
ing messages, if a label appears multiple times, the message <bcp14>MUST</bcp14> 14> be unique. When processing messages, if a label appears multiple times, the
be rejected as malformed. Applications <bcp14>SHOULD</bcp14> verify that the s message <bcp14>MUST</bcp14> be rejected as malformed. Applications <bcp14>SHOU
ame label does not occur in both the protected and unprotected header parameters LD</bcp14> verify that the same label does not occur in both the protected and u
. If the message is not rejected as malformed, attributes <bcp14>MUST</bcp14> b nprotected header parameters. If
e obtained from the protected bucket, and only if not found are attributes obta the message is not rejected as malformed, attributes <bcp14>MUST</bcp14> be ob
ined from the unprotected bucket. </t> tained
<t>The following CDDL fragment represents the two header parameter buckets from the protected bucket, and only if an attribute is not found in the
. A group "Headers" is defined in CDDL that represents the two buckets in which protected bucket can that attribute be obtained from the unprotected bucket.</
attributes are placed. This group is used to provide these two fields consiste t>
ntly in all locations. A type is also defined that represents the map of common <t indent="0" pn="section-3-8">The following CDDL fragment represents the
header parameters. </t> two header-parameter buckets. A group "Headers" is defined in CDDL that represe
<sourcecode type="CDDL"><![CDATA[ nts the two buckets in which attributes are placed. This group is used to provi
de these two fields consistently in all locations. A type is also defined that
represents the map of common header parameters. </t>
<sourcecode type="cddl" markers="false" pn="section-3-9">
Headers = ( Headers = (
protected : empty_or_serialized_map, protected : empty_or_serialized_map,
unprotected : header_map unprotected : header_map
) )
header_map = { header_map = {
Generic_Headers, Generic_Headers,
* label => values * label =&gt; values
} }
empty_or_serialized_map = bstr .cbor header_map / bstr .size 0 empty_or_serialized_map = bstr .cbor header_map / bstr .size 0
]]></sourcecode> </sourcecode>
<section anchor="cose-headers"> <section anchor="cose-headers" numbered="true" removeInRFC="false" toc="in
<name>Common COSE Header Parameters</name> clude" pn="section-3.1">
<t>This section defines a set of common header parameters. A summary of <name slugifiedName="name-common-cose-header-paramete">Common COSE Heade
these header parameters can be found in <xref target="Header-Table"/>. This ta r Parameters</name>
ble should be consulted to determine the value of label and the type of the valu <t indent="0" pn="section-3.1-1">This section defines a set of common he
e. </t> ader parameters. A summary of these header parameters can be found in <xref tar
<t>The set of header parameters defined in this section are: </t> get="Header-Table" format="default" sectionFormat="of" derivedContent="Table 3"/
<dl newline="false"> >. This table should be consulted to determine the value of the label and the t
<dt>alg:</dt> ype of the value. </t>
<dd> This header parameter is used to indicate the algorithm used for <t indent="0" pn="section-3.1-2">The set of header parameters defined in
the security processing. This header parameter <bcp14>MUST</bcp14> be authentic this section is as follows: </t>
ated where the ability to do so exists. This support is provided by AEAD algori <dl newline="false" indent="3" spacing="normal" pn="section-3.1-3">
thms or construction (e.g. COSE_Sign and COSE_Mac0). This authentication can be <dt pn="section-3.1-3.1">alg:</dt>
done either by placing the header parameter in the protected header parameter b <dd pn="section-3.1-3.2">This header parameter is used to indicate the
ucket or as part of the externally supplied data <xref target="Extern_AAD"/>). algorithm used for the security processing. This header parameter <bcp14>MUST<
The value is taken from the "COSE Algorithms" registry (see <xref target="COSE.A /bcp14> be authenticated where the ability to do so exists. This support is pro
lgorithms"/>). </dd> vided by AEAD algorithms or construction (e.g., COSE_Sign and COSE_Mac0). This
<dt>crit:</dt> authentication can be done either by placing the header parameter in the protect
<dd> ed-header-parameters bucket or as part of the externally supplied data (<xref ta
<t> rget="Extern_AAD" format="default" sectionFormat="of" derivedContent="Section 4.
This header parameter is used to indicate which protected header param 3"/>). The value is taken from the "COSE Algorithms" registry (see <xref target
eters an application that is processing a message is required to understand. ="COSE.Algorithms" format="default" sectionFormat="of" derivedContent="COSE.Algo
Header parameters defined in this document do not need to be included rithms"/>). </dd>
as they should be understood by all implementations. <dt pn="section-3.1-3.3">crit:</dt>
When present, this the 'crit' header parameter <bcp14>MUST</bcp14> be <dd pn="section-3.1-3.4">
placed in the protected header parameter bucket. <t indent="0" pn="section-3.1-3.4.1">This header parameter is used t
The array <bcp14>MUST</bcp14> have at least one value in it. o indicate which
protected header parameters an application that is
processing a message is required to understand. Header
parameters defined in this document do not need to be
included, as they should be understood by all
implementations. Additionally, the header parameter "counter
signature" (label 7) defined by <xref target="RFC8152" format="defau
lt" sectionFormat="of" derivedContent="RFC8152"/> must be
understood by new implementations, to remain compatible with
senders that adhere to that document and assume all
implementations will understand it. When present, the "crit" header
parameter <bcp14>MUST</bcp14> be placed in the
protected-header-parameters bucket. The array
<bcp14>MUST</bcp14> have at least one value in it.
</t> </t>
<t> <t indent="0" pn="section-3.1-3.4.2">
Not all header parameter labels need to be included in the 'crit' head Not all header-parameter labels need to be included in the "crit" head
er parameter. er parameter.
The rules for deciding which header parameters are placed in the array are: The rules for deciding which header parameters are placed in the array are:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="secti
<li>Integer labels in the range of 0 to 7 <bcp14>SHOULD</bcp14> be on-3.1-3.4.3">
omitted.</li> <li pn="section-3.1-3.4.3.1">Integer labels in the range of 0 to 7
<li> <bcp14>SHOULD</bcp14> be omitted.</li>
<li pn="section-3.1-3.4.3.2">
Integer labels in the range -1 to -128 can be omitted. Integer labels in the range -1 to -128 can be omitted.
Algorithms can assign labels in this range where the ability to Algorithms can assign labels in this range where the
process the content of the label is considered to be core to implementing the al ability to process the content of the label is
gorithm. considered to be core to implementing the algorithm.
Algorithms can assign labels outside of this range where the abi
lity to process the content of the label is not considered to be core, but needs Algorithms can assign labels outside of this range and include t
to be understood to correctly process this instance. hem in the "crit" header parameter when the ability to process the content of th
Integer labels in the range -129 to -65536 <bcp14>SHOULD</bcp14> e label
be included as these would be less common header parameters that might not be g is not considered to be core functionality of the algorithm but
enerally supported. does need to be
understood to correctly process this instance.
Integer labels in the range -129 to -65536
<bcp14>SHOULD</bcp14> be included, as these would be
less common header parameters that might not be
generally supported.
</li> </li>
<li>Labels for header parameters required for an application MAY b <li pn="section-3.1-3.4.3.3">Labels for header parameters required
e omitted. Applications should have a statement if the label can be omitted. < for an application <bcp14>MAY</bcp14> be omitted. Applications should have a st
/li> atement declaring whether or not the label can be omitted.
</li>
</ul> </ul>
<t> <t indent="0" pn="section-3.1-3.4.4">
The header parameters indicated by 'crit' can be processed by either t he security library code or an application using a security library; the only re quirement is that the header parameter is processed. If the 'crit' value list i ncludes a label for which the header parameter is not in the protected header pa rameters bucket, this is a fatal error in processing the message. The header parameters indicated by "crit" can be processed by either t he security-library code or an application using a security library; the only re quirement is that the header parameter is processed. If the "crit" value list i ncludes a label for which the header parameter is not in the protected-header-pa rameters bucket, this is a fatal error in processing the message.
</t> </t>
</dd> </dd>
<dt>content type:</dt> <dt pn="section-3.1-3.5">content type:</dt>
<dd>This header parameter is used to indicate the content type of the <dd pn="section-3.1-3.6">This header parameter is used to indicate the
data in the payload or ciphertext fields. Integers are from the "CoAP Content-F content type of the data in the "payload" or "ciphertext" field. Integers are
ormats" IANA registry table <xref target="COAP.Formats"/>. Text values followin from the "CoAP Content-Formats" IANA registry table <xref target="COAP.Formats"
g the syntax of "&lt;type-name&gt;/&lt;subtype-name&gt;" where &lt;type-name&gt; format="default" sectionFormat="of" derivedContent="COAP.Formats"/>. Text value
and &lt;subtype-name&gt; are defined in Section 4.2 of <xref target="RFC6838"/> s follow the syntax of "&lt;type-name&gt;/&lt;subtype-name&gt;", where &lt;type-
. Leading and trailing whitespace is also omitted. Textual content values alon name&gt; and &lt;subtype-name&gt; are defined in <xref target="RFC6838" sectionF
g with parameters and subparameters can be located using the IANA "Media Types" ormat="of" section="4.2" format="default" derivedLink="https://rfc-editor.org/rf
registry. Applications <bcp14>SHOULD</bcp14> provide this header parameter if t c/rfc6838#section-4.2" derivedContent="RFC6838"/>. Leading and trailing whitesp
he content structure is potentially ambiguous. </dd> ace is not permitted. Textual content type values, along with parameters and su
<dt>kid:</dt> bparameters, can be located using the IANA "Media Types" registry. Applications
<dd>This header parameter identifies one piece of data that can be use <bcp14>SHOULD</bcp14> provide this header parameter if the content structure is
d as input to find the needed cryptographic key. The value of this header param potentially ambiguous. </dd>
eter can be matched against the 'kid' member in a COSE_Key structure. Other met <dt pn="section-3.1-3.7">kid:</dt>
hods of key distribution can define an equivalent field to be matched. Applicat <dd pn="section-3.1-3.8">This header parameter identifies one piece of
ions <bcp14>MUST NOT</bcp14> assume that 'kid' values are unique. There may be data that can be used as input to find the needed cryptographic key. The value
more than one key with the same 'kid' value, so all of the keys associated with of this header parameter can be matched against the "kid" member in a COSE_Key
this 'kid' may need to be checked. The internal structure of 'kid' values is no structure. Other methods of key distribution can define an equivalent field to
t defined and cannot be relied on by applications. Key identifier values are hi be matched. Applications <bcp14>MUST NOT</bcp14> assume that "kid" values are u
nts about which key to use. This is not a security-critical field. For this re nique. There may be more than one key with the same "kid" value, so all of the
ason, it can be placed in the unprotected header parameters bucket. </dd> keys associated with this "kid" may need to be checked. The internal structure
<dt>IV:</dt> of "kid" values is not defined and cannot be relied on by applications. Key ide
<dd>This header parameter holds the Initialization Vector (IV) value. ntifier values are hints about which key to use. This is not a security-critica
For some symmetric encryption algorithms, this may be referred to as a nonce. l field. For this reason, it can be placed in the unprotected-header-parameters
The IV can be placed in the unprotected bucket as modifying the IV will cause th bucket.</dd>
e decryption to yield plaintext that is readily detectable as garbled. </dd> <dt pn="section-3.1-3.9">IV:</dt>
<dt>Partial IV:</dt> <dd pn="section-3.1-3.10">This header parameter holds the Initializati
<dd> on Vector (IV) value. For some symmetric encryption algorithms, this may be ref
<t> erred to as a nonce. The IV can be placed in the unprotected bucket, since for
AE and AEAD algorithms, modifying the IV will cause the decryption to fail.</dd>
<dt pn="section-3.1-3.11">Partial IV:</dt>
<dd pn="section-3.1-3.12">
<t indent="0" pn="section-3.1-3.12.1">
This header parameter holds a part of the IV value. This header parameter holds a part of the IV value.
When using the COSE_Encrypt0 structure, a portion of the IV can be part of the context associated with the key (Context IV) while a portion can be changed wit h each message (Partial IV). When using the COSE_Encrypt0 structure, a portion of the IV can be part of the context associated with the key (Context IV), while a portion can be changed wi th each message (Partial IV).
This field is used to carry a value that causes the IV to be changed for each message. This field is used to carry a value that causes the IV to be changed for each message.
The Partial IV can be placed in the unprotected bucket as modifying the value The Partial IV can be placed in the unprotected bucket, as modifying the value
will cause the decryption to yield plaintext that is readily detectable as garbl will cause the decryption to yield plaintext that is readily detectable as garb
ed. led.
The 'Initialization Vector' and 'Partial Initialization Vector' header paramet The "Initialization Vector" and "Partial Initialization Vector" header paramet
ers <bcp14>MUST NOT</bcp14> both be present in the same security layer. ers <bcp14>MUST NOT</bcp14> both be present in the same security layer.
</t> </t>
<t> <t indent="0" pn="section-3.1-3.12.2">
The message IV is generated by the following steps: The message IV is generated by the following steps:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="sectio
<li>Left-pad the Partial IV with zeros to the length of IV (determ n-3.1-3.12.3">
ined by the algorithm).</li> <li pn="section-3.1-3.12.3.1" derivedCounter="1.">Left-pad the Par
<li>XOR the padded Partial IV with the context IV.</li> tial IV with zeros to the length of IV (determined by the algorithm).</li>
<li pn="section-3.1-3.12.3.2" derivedCounter="2.">XOR the padded P
artial IV with the Context IV.</li>
</ol> </ol>
</dd> </dd>
</dl> </dl>
<table anchor="Header-Table" align="center"> <table anchor="Header-Table" align="center" pn="table-3">
<name>Common Header Parameters</name> <name slugifiedName="name-common-header-parameters">Common Header Para
meters</name>
<thead> <thead>
<tr> <tr>
<th>Name</th> <th align="left" colspan="1" rowspan="1">Name</th>
<th>Label</th> <th align="left" colspan="1" rowspan="1">Label</th>
<th>Value Type</th> <th align="left" colspan="1" rowspan="1">Value Type</th>
<th>Value Registry</th> <th align="left" colspan="1" rowspan="1">Value Registry</th>
<th>Description</th> <th align="left" colspan="1" rowspan="1">Description</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>alg</td> <td align="left" colspan="1" rowspan="1">alg</td>
<td>1</td> <td align="left" colspan="1" rowspan="1">1</td>
<td>int / tstr</td> <td align="left" colspan="1" rowspan="1">int / tstr</td>
<td>COSE Algorithms registry</td> <td align="left" colspan="1" rowspan="1">COSE Algorithms registry<
<td>Cryptographic algorithm to use</td> /td>
<td align="left" colspan="1" rowspan="1">Cryptographic algorithm t
o use</td>
</tr> </tr>
<tr> <tr>
<td>crit</td> <td align="left" colspan="1" rowspan="1">crit</td>
<td>2</td> <td align="left" colspan="1" rowspan="1">2</td>
<td>[+ label]</td> <td align="left" colspan="1" rowspan="1">[+ label]</td>
<td>COSE Header Parameters registry</td> <td align="left" colspan="1" rowspan="1">COSE Header Parameters re
<td>Critical header parameters to be understood</td> gistry</td>
<td align="left" colspan="1" rowspan="1">Critical header parameter
s to be understood</td>
</tr> </tr>
<tr> <tr>
<td>content type</td> <td align="left" colspan="1" rowspan="1">content type</td>
<td>3</td> <td align="left" colspan="1" rowspan="1">3</td>
<td>tstr / uint</td> <td align="left" colspan="1" rowspan="1">tstr / uint</td>
<td>CoAP Content-Formats or Media Types registries</td> <td align="left" colspan="1" rowspan="1">CoAP Content-Formats or M
<td>Content type of the payload</td> edia Types registries</td>
<td align="left" colspan="1" rowspan="1">Content type of the paylo
ad</td>
</tr> </tr>
<tr> <tr>
<td>kid</td> <td align="left" colspan="1" rowspan="1">kid</td>
<td>4</td> <td align="left" colspan="1" rowspan="1">4</td>
<td>bstr</td> <td align="left" colspan="1" rowspan="1">bstr</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>Key identifier</td> <td align="left" colspan="1" rowspan="1">Key identifier</td>
</tr> </tr>
<tr> <tr>
<td>IV</td> <td align="left" colspan="1" rowspan="1">IV</td>
<td>5</td> <td align="left" colspan="1" rowspan="1">5</td>
<td>bstr</td> <td align="left" colspan="1" rowspan="1">bstr</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>Full Initialization Vector</td> <td align="left" colspan="1" rowspan="1">Full Initialization Vecto
r</td>
</tr> </tr>
<tr> <tr>
<td>Partial IV</td> <td align="left" colspan="1" rowspan="1">Partial IV</td>
<td>6</td> <td align="left" colspan="1" rowspan="1">6</td>
<td>bstr</td> <td align="left" colspan="1" rowspan="1">bstr</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>Partial Initialization Vector</td> <td align="left" colspan="1" rowspan="1">Partial Initialization Ve
ctor</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t>The CDDL fragment that represents the set of header parameters define <t indent="0" pn="section-3.1-5">The CDDL fragment that represents the s
d in this section is given below. Each of the header parameters is tagged as op et of header parameters defined in this section is given below. Each of the hea
tional because they do not need to be in every map; header parameters required i der parameters is tagged as optional, because they do not need to be in every ma
n specific maps are discussed above. </t> p; header parameters required in specific maps are discussed above. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-3.1-6">
Generic_Headers = ( Generic_Headers = (
? 1 => int / tstr, ; algorithm identifier ? 1 =&gt; int / tstr, ; algorithm identifier
? 2 => [+label], ; criticality ? 2 =&gt; [+label], ; criticality
? 3 => tstr / int, ; content type ? 3 =&gt; tstr / int, ; content type
? 4 => bstr, ; key identifier ? 4 =&gt; bstr, ; key identifier
? 5 => bstr, ; IV ? ( 5 =&gt; bstr // ; IV
? 6 => bstr ; Partial IV 6 =&gt; bstr ) ; Partial IV
) )
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
<section anchor="signing-structure"> <section anchor="signing-structure" numbered="true" removeInRFC="false" toc=
<name>Signing Objects</name> "include" pn="section-4">
<t>COSE supports two different signature structures. COSE_Sign allows for <name slugifiedName="name-signing-objects">Signing Objects</name>
one or more signatures to be applied to the same content. COSE_Sign1 is restric <t indent="0" pn="section-4-1">COSE supports two different signature struc
ted to a single signer. The structures cannot be converted between each other; tures. COSE_Sign allows for one or more signatures to be applied to the same co
as the signature computation includes a parameter identifying which structure is ntent. COSE_Sign1 is restricted to a single signer. The structures cannot be co
being used, the converted structure will fail signature validation. </t> nverted between each other; as the signature computation includes a parameter id
<section anchor="full-signature"> entifying which structure is being used, the converted structure will fail signa
<name>Signing with One or More Signers</name> ture validation. </t>
<t>The COSE_Sign structure allows for one or more signatures to be appli <section anchor="full-signature" numbered="true" removeInRFC="false" toc="
ed to a message payload. Header parameters relating to the content and header pa include" pn="section-4.1">
rameters relating to the signature are carried along with the signature itself. <name slugifiedName="name-signing-with-one-or-more-si">Signing with One
These header parameters may be authenticated by the signature, or just present. or More Signers</name>
An example of a header parameter about the content is the content type header <t indent="0" pn="section-4.1-1">The COSE_Sign structure allows for one
parameter. An example of a header parameter about the signature would be the al or more signatures to be applied to a message payload. Header parameters relatin
gorithm and key used to create the signature.</t> g to the content and header parameters relating to the signature are carried alo
<t>RFC 5652 indicates that: ng with the signature itself. These header parameters may be authenticated by t
he signature, or just be present. An example of a header parameter about the co
</t> ntent is the content type header parameter. An example of a header parameter ab
<blockquote> out the signature would be the algorithm and key used to create the signature.</
When more than one signature is present, the successful validation of t>
one signature associated with a given signer is usually treated as a successful <t indent="0" pn="section-4.1-2"><xref target="RFC5652" format="default"
signature by that signer. However, there are some application environments wher sectionFormat="of" derivedContent="RFC5652"/> indicates that:</t>
e other rules are needed. An application that employs a rule other than one val <blockquote pn="section-4.1-3">
id signature for each signer must specify those rules. Also, where simple match When more than one signature is present, the successful validation of
ing of the signer identifier is not sufficient to determine whether the signatur one signature associated with a given signer is usually treated as a successful
es were generated by the same signer, the application specification must describ signature by that signer. However, there are some application environments wher
e how to determine which signatures were generated by the same signer. Support e other rules are needed. An application that employs a rule other than one val
for different communities of recipients is the primary reason that signers choos id signature for each signer must specify those rules. Also, where simple match
e to include more than one signature. ing of the signer identifier is not sufficient to determine whether the signatur
es were generated by the same signer, the application specification must describ
e how to determine which signatures were generated by the same signer. Support
of different communities of recipients is the primary reason that signers choose
to include more than one signature.
</blockquote> </blockquote>
<t> <t indent="0" pn="section-4.1-4">
For example, the COSE_Sign structure might include signatures generated with the For example, the COSE_Sign structure might include signatures generated with the
Edwards-curve Digital Signature Algorithm (EdDSA) <xref target="RFC8032"/> and Edwards-curve Digital Signature Algorithm (EdDSA) <xref target="RFC8032" format
with the Elliptic Curve Digital Signature Algorithm (ECDSA) <xref target="DSS"/> ="default" sectionFormat="of" derivedContent="RFC8032"/> and the Elliptic Curve
. This allows recipients to verify the signature associated with one algorithm Digital Signature Algorithm (ECDSA) <xref target="DSS" format="default" sectionF
or the other. More-detailed information on multiple signature evaluations can be ormat="of" derivedContent="DSS"/>. This allows recipients to verify the signatu
found in <xref target="RFC5752"/>. </t> re associated with one algorithm or the other. More detailed information on mult
<t>The signature structure can be encoded as either tagged or untagged d iple signature evaluations can be found in <xref target="RFC5752" format="defaul
epending on the context it will be used in. A tagged COSE_Sign structure is ide t" sectionFormat="of" derivedContent="RFC5752"/>. </t>
ntified by the CBOR tag 98. The CDDL fragment that represents this is: </t> <t indent="0" pn="section-4.1-5">The signature structure can be encoded
<sourcecode type="CDDL"><![CDATA[ as either tagged or untagged, depending on the context it will be used in. A ta
gged COSE_Sign structure is identified by the CBOR tag 98. The CDDL fragment th
at represents this is: </t>
<sourcecode type="cddl" markers="false" pn="section-4.1-6">
COSE_Sign_Tagged = #6.98(COSE_Sign) COSE_Sign_Tagged = #6.98(COSE_Sign)
]]></sourcecode> </sourcecode>
<t>A COSE Signed Message is defined in two parts. The CBOR object that <t indent="0" pn="section-4.1-7">A COSE Signed Message is defined in two
carries the body and information about the body is called the COSE_Sign structur parts. The CBOR object that carries the body and information about the message
e. The CBOR object that carries the signature and information about the signatu is called the COSE_Sign structure. The CBOR object that carries the signature
re is called the COSE_Signature structure. Examples of COSE Signed Messages can and information about the signature is called the COSE_Signature structure. Exa
be found in <xref target="SignedExamples"/>. </t> mples of COSE Signed Messages can be found in <xref target="SignedExamples" form
<!-- Ben is complaining about the above, I think it is ok. Here is our at="default" sectionFormat="of" derivedContent="Appendix C.1"/>. </t>
email exchange: <t indent="0" pn="section-4.1-8">The COSE_Sign structure is a CBOR array
> > > > A COSE Signed Message is defined in two parts. The CBOR object that . The fields of the array, in order, are:
> > > > carries the body and information about the body is called the
> > > > COSE_Sign structure. The CBOR object that carries the
> > > > signature and
> > > >
> > > > (COSE_Sign also carries the signature parts?) [JLS] No - they are
> > > > carried in COSE_Signature
> > >
> > > I thought the COSE_Sign structure contained one or more
> > > COSE_Signature structures.
> >
> > Yes it does. I think of the "signature" as the byte string as being differe
nt
> from the COSE_Signature structure. This is referring to the first.
>
> Okay ... but even in this sense the "signature" is *indirectly* contained in
> COSE_Sign, and I at least did not get the sense from this text that we intende
d
> the "directly carries" sense of the term. Maybe we should leave a note to ask
> the RFC Editor for help; I'm failing to come up with a good wording right now.
>
<t>The COSE_Sign structure is a CBOR array. The fields of the array in
order are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-4.1-9">
<dt>protected:</dt> <dt pn="section-4.1-9.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>. </dd> <dd pn="section-4.1-9.2">This is as described in <xref target="header-
<dt>unprotected:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
<dd>This is as described in <xref target="header-parameters"/>. </dd> /dd>
<dt>payload:</dt> <dt pn="section-4.1-9.3">unprotected:</dt>
<dd> <dd pn="section-4.1-9.4">This is as described in <xref target="header-
<t> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
/dd>
<dt pn="section-4.1-9.5">payload:</dt>
<dd pn="section-4.1-9.6">
<t indent="0" pn="section-4.1-9.6.1">
This field contains the serialized content to be signed. This field contains the serialized content to be signed.
If the payload is not present in the message, the application is r equired to supply the payload separately. If the payload is not present in the message, the application is r equired to supply the payload separately.
The payload is wrapped in a bstr to ensure that it is transported without changes. The payload is wrapped in a bstr to ensure that it is transported without changes.
If the payload is transported separately ("detached content"), the n a nil CBOR object is placed in this location, and it is the responsibility of the application to ensure that it will be transported without changes. If the payload is transported separately ("detached content"), the n a nil CBOR object is placed in this location, and it is the responsibility of the application to ensure that it will be transported without changes.
</t> </t>
<t> <t indent="0" pn="section-4.1-9.6.2">
Note: When a signature with a message recovery algorithm is used ( Note: When a signature with a message recovery algorithm is used (
<xref target="SigAlgs"/>), the maximum number of bytes that can be recovered is <xref target="SigAlgs" format="default" sectionFormat="of" derivedContent="Secti
the length of the original payload. on 8.1"/>), the maximum number of bytes that can be recovered is the length of t
he original payload.
The size of the encoded payload is reduced by the number of bytes that will be recovered. The size of the encoded payload is reduced by the number of bytes that will be recovered.
If all of the bytes of the original payload are consumed, then the transmitted payload is encoded as a zero-length byte string rather than as bein g absent. If all of the bytes of the original payload are consumed, then the transmitted payload is encoded as a zero-length byte string rather than as bein g absent.
</t> </t>
</dd> </dd>
<dt>signatures:</dt> <dt pn="section-4.1-9.7">signatures:</dt>
<dd>This field is an array of signatures. Each signature is represent <dd pn="section-4.1-9.8">This field is an array of signatures. Each s
ed as a COSE_Signature structure. </dd> ignature is represented as a COSE_Signature structure. </dd>
</dl> </dl>
<t>The CDDL fragment that represents the above text for COSE_Sign follow <t indent="0" pn="section-4.1-10">The CDDL fragment that represents the
s. </t> above text for COSE_Sign follows. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-4.1-11">
COSE_Sign = [ COSE_Sign = [
Headers, Headers,
payload : bstr / nil, payload : bstr / nil,
signatures : [+ COSE_Signature] signatures : [+ COSE_Signature]
] ]
]]></sourcecode> </sourcecode>
<t>The COSE_Signature structure is a CBOR array. The fields of the arra <t indent="0" pn="section-4.1-12">The COSE_Signature structure is a CBOR
y in order are: array. The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-4.1-13">
<dt>protected:</dt> <dt pn="section-4.1-13.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>. </dd> <dd pn="section-4.1-13.2">This is as described in <xref target="header
<dt>unprotected:</dt> -parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.
<dd>This is as described in <xref target="header-parameters"/>. </dd> </dd>
<dt>signature:</dt> <dt pn="section-4.1-13.3">unprotected:</dt>
<dd>This field contains the computed signature value. The type of the <dd pn="section-4.1-13.4">This is as described in <xref target="header
field is a bstr. Algorithms <bcp14>MUST</bcp14> specify padding if the signatu -parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.
re value is not a multiple of 8 bits. </dd> </dd>
<dt pn="section-4.1-13.5">signature:</dt>
<dd pn="section-4.1-13.6">This field contains the computed signature v
alue. The type of the field is a bstr. Algorithms <bcp14>MUST</bcp14> specify
padding if the signature value is not a multiple of 8 bits. </dd>
</dl> </dl>
<t>The CDDL fragment that represents the above text for COSE_Signature f <t indent="0" pn="section-4.1-14">The CDDL fragment that represents the
ollows. </t> above text for COSE_Signature follows. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-4.1-15">
COSE_Signature = [ COSE_Signature = [
Headers, Headers,
signature : bstr signature : bstr
] ]
]]></sourcecode> </sourcecode>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-4.2
<name>Signing with One Signer</name> ">
<t>The COSE_Sign1 signature structure is used when only one signature is <name slugifiedName="name-signing-with-one-signer">Signing with One Sign
going to be placed on a message. The header parameters dealing with the conten er</name>
t and the signature are placed in the same pair of buckets rather than having th <t indent="0" pn="section-4.2-1">The COSE_Sign1 signature structure is u
e separation of COSE_Sign. </t> sed when only one signature is going to be placed on a message. The header para
<t>The structure can be encoded as either tagged or untagged depending o meters dealing with the content and the signature are placed in the same pair of
n the context it will be used in. A tagged COSE_Sign1 structure is identified b buckets, rather than having the separation of COSE_Sign. </t>
y the CBOR tag 18. The CDDL fragment that represents this is: </t> <t indent="0" pn="section-4.2-2">The structure can be encoded as either
<sourcecode type="CDDL"><![CDATA[ tagged or untagged depending on the context it will be used in. A tagged COSE_S
ign1 structure is identified by the CBOR tag 18. The CDDL fragment that represe
nts this is:</t>
<sourcecode type="cddl" markers="false" pn="section-4.2-3">
COSE_Sign1_Tagged = #6.18(COSE_Sign1) COSE_Sign1_Tagged = #6.18(COSE_Sign1)
]]></sourcecode> </sourcecode>
<t>The CBOR object that carries the body, the signature, and the informa <t indent="0" pn="section-4.2-4">The CBOR object that carries the body,
tion about the body and signature is called the COSE_Sign1 structure. Examples the signature, and the information about the body and signature is called the CO
of COSE_Sign1 messages can be found in <xref target="Sign1_Examples"/>. </t> SE_Sign1 structure. Examples of COSE_Sign1 messages can be found in <xref targe
<t>The COSE_Sign1 structure is a CBOR array. The fields of the array in t="Sign1_Examples" format="default" sectionFormat="of" derivedContent="Appendix
order are: C.2"/>. </t>
<t indent="0" pn="section-4.2-5">The COSE_Sign1 structure is a CBOR arra
y. The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-4.2-6">
<dt>protected:</dt> <dt pn="section-4.2-6.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>. </dd> <dd pn="section-4.2-6.2">This is as described in <xref target="header-
<dt>unprotected:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
<dd>This is as described in <xref target="header-parameters"/>. </dd> /dd>
<dt>payload:</dt> <dt pn="section-4.2-6.3">unprotected:</dt>
<dd>This is as described in <xref target="full-signature"/>. </dd> <dd pn="section-4.2-6.4">This is as described in <xref target="header-
<dt>signature:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
<dd>This field contains the computed signature value. The type of the /dd>
field is a bstr. </dd> <dt pn="section-4.2-6.5">payload:</dt>
<dd pn="section-4.2-6.6">This is as described in <xref target="full-si
gnature" format="default" sectionFormat="of" derivedContent="Section 4.1"/>. </
dd>
<dt pn="section-4.2-6.7">signature:</dt>
<dd pn="section-4.2-6.8">This field contains the computed signature va
lue. The type of the field is a bstr. </dd>
</dl> </dl>
<t>The CDDL fragment that represents the above text for COSE_Sign1 follo <t indent="0" pn="section-4.2-7">The CDDL fragment that represents the a
ws. </t> bove text for COSE_Sign1 follows. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-4.2-8">
COSE_Sign1 = [ COSE_Sign1 = [
Headers, Headers,
payload : bstr / nil, payload : bstr / nil,
signature : bstr signature : bstr
] ]
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Extern_AAD"> <section anchor="Extern_AAD" numbered="true" removeInRFC="false" toc="incl
<name>Externally Supplied Data</name> ude" pn="section-4.3">
<t> <name slugifiedName="name-externally-supplied-data">Externally Supplied
One of the features offered in the COSE document is the ability for ap Data</name>
plications to provide additional data to be authenticated, but that is not carri <t indent="0" pn="section-4.3-1">
ed as part of the COSE object. One of the features offered in COSE is the ability for applications to
The primary reason for supporting this can be seen by looking at the C provide additional data that is to be authenticated but is not carried as part
oAP message structure <xref target="RFC7252"/>, where the facility exists for op of the COSE object.
tions to be carried before the payload. The primary reason for supporting this can be seen by looking at the C
oAP message structure <xref target="RFC7252" format="default" sectionFormat="of"
derivedContent="RFC7252"/>, where the facility exists for options to be carried
before the payload.
Examples of data that can be placed in this location would be the CoAP code or CoAP options. Examples of data that can be placed in this location would be the CoAP code or CoAP options.
If the data is in the headers of the CoAP message, then it is availabl If the data is in the headers of the CoAP message, then it is availabl
e for proxies to help in performing its operations. e for proxies to help in performing proxying operations.
For example, the Accept Option can be used by a proxy to determine if For example, the Accept option can be used by a proxy to determine if
an appropriate value is in the proxy's cache. an appropriate value is in the proxy's cache.
But the sender can cause a failure at the server if a proxy, or an att The sender can use the additional-data functionality to enable detecti
acker, changes the set of accept values by including the field in the externally on of
supplied data. any changes to the set of Accept values made by a proxy or an attacker. By
including the field in the externally supplied data, any subsequent
modification will cause the server processing of the message to result in
failure.
</t> </t>
<t> <t indent="0" pn="section-4.3-2">
This document describes the process for using a byte array of external ly supplied authenticated data; the method of constructing the byte array is a f unction of the application. This document describes the process for using a byte array of external ly supplied authenticated data; the method of constructing the byte array is a f unction of the application.
Applications that use this feature need to define how the externally s upplied authenticated data is to be constructed. Such a construction needs to t ake into account the following issues: Applications that use this feature need to define how the externally s upplied authenticated data is to be constructed. Such a construction needs to t ake into account the following issues:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4
<li> .3-3">
<li pn="section-4.3-3.1">
If multiple items are included, applications need to ensure that t he same byte string cannot be produced if there are different inputs. If multiple items are included, applications need to ensure that t he same byte string cannot be produced if there are different inputs.
This would occur by concatenating the text strings 'AB' and 'CDE' or by concatenating the text strings 'ABC' and 'DE'. An example of how the problematic scenario could arise would be b y concatenating the text strings "AB" and "CDE" or by concatenating the text str ings "ABC" and "DE".
This is usually addressed by making fields a fixed width and/or en coding the length of the field as part of the output. This is usually addressed by making fields a fixed width and/or en coding the length of the field as part of the output.
Using options from CoAP <xref target="RFC7252"/> as an example, th ese fields use a TLV structure so they can be concatenated without any problems. Using options from CoAP <xref target="RFC7252" format="default" se ctionFormat="of" derivedContent="RFC7252"/> as an example, these fields use a TL V structure so they can be concatenated without any problems.
</li> </li>
<li>If multiple items are included, an order for the items needs to be <li pn="section-4.3-3.2">If multiple items are included, an order for
defined. Using options from CoAP as an example, an application could state tha the items needs to be defined. Using options from CoAP as an example, an applic
t the fields are to be ordered by the option number. </li> ation could state that the fields are to be ordered by the option number. </li>
<li> <li pn="section-4.3-3.3">
Applications need to ensure that the byte string is going to be th e same on both sides. Applications need to ensure that the byte string is going to be th e same on both sides.
Using options from CoAP might give a problem if the same relative numbering is kept. Using options from CoAP might give a problem if the same relative numbering is kept.
An intermediate node could insert or remove an option, changing ho w the relative number is done. An intermediate node could insert or remove an option, changing ho w the relative numbering is done.
An application would need to specify that the relative number must be re-encoded to be relative only to the options that are in the external data. An application would need to specify that the relative number must be re-encoded to be relative only to the options that are in the external data.
</li> </li>
</ul> </ul>
</section> </section>
<section anchor="Sig_structure"> <section anchor="Sig_structure" numbered="true" removeInRFC="false" toc="i
<name>Signing and Verification Process</name> nclude" pn="section-4.4">
<name slugifiedName="name-signing-and-verification-pr">Signing and Verif
<t> ication Process</name>
<t indent="0" pn="section-4.4-1">
In order to create a signature, a well-defined byte string is needed. In order to create a signature, a well-defined byte string is needed.
The Sig_structure is used to create the canonical form. The Sig_structure is used to create the canonical form.
This signing and verification process takes in the body information (C OSE_Sign or COSE_Sign1), the signer information (COSE_Signature), and the applic ation data (external source). This signing and verification process takes in the body information (C OSE_Sign or COSE_Sign1), the signer information (COSE_Signature), and the applic ation data (external source).
A Sig_structure is a CBOR array. A Sig_structure is a CBOR array.
The fields of the Sig_structure in order are: The fields of the Sig_structure, in order, are:
</t> </t>
<ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-4.
<ol type="1"> 4-2">
<li> <li pn="section-4.4-2.1" derivedCounter="1.">
<t> <t indent="0" pn="section-4.4-2.1.1">
A context text string identifying the context of the signature. T he context text string is: A context text string identifying the context of the signature. T he context text string is:
</t> </t>
<ul empty="true"> <ul empty="true" bare="false" indent="3" spacing="normal" pn="sectio
<li>"Signature" for signatures using the COSE_Signature structure. n-4.4-2.1.2">
</li> <li pn="section-4.4-2.1.2.1">"Signature" for signatures using the
<li>"Signature1" for signatures using the COSE_Sign1 structure.</l COSE_Signature structure.</li>
i> <li pn="section-4.4-2.1.2.2">"Signature1" for signatures using the
COSE_Sign1 structure.</li>
</ul> </ul>
</li> </li>
<li>The protected attributes from the body structure encoded in a bstr <li pn="section-4.4-2.2" derivedCounter="2.">The protected attributes
type. If there are no protected attributes, a zero-length byte string is used. from the body structure, encoded in a bstr type. If there are no protected attr
</li> ibutes, a zero-length byte string is used. </li>
<li>The protected attributes from the signer structure encoded in a bs <li pn="section-4.4-2.3" derivedCounter="3.">The protected attributes
tr type. If there are no protected attributes, a zero-length byte string is use from the signer structure, encoded in a bstr type. If there are no protected at
d. This field is omitted for the COSE_Sign1 signature structure. </li> tributes, a zero-length byte string is used. This field is omitted for the COSE
<li>The externally supplied data from the application encoded in a bst _Sign1 signature structure. </li>
r type. If this field is not supplied, it defaults to a zero-length byte string <li pn="section-4.4-2.4" derivedCounter="4.">The externally supplied d
. (See <xref target="Extern_AAD"/> for application guidance on constructing thi ata from the application, encoded in a bstr type. If this field is not supplied
s field.) </li> , it defaults to a zero-length byte string. (See <xref target="Extern_AAD" form
<li>The payload to be signed encoded in a bstr type. The payload is p at="default" sectionFormat="of" derivedContent="Section 4.3"/> for application g
laced here independent of how it is transported. </li> uidance on constructing this field.) </li>
<li pn="section-4.4-2.5" derivedCounter="5.">The payload to be signed,
encoded in a bstr type. The full payload is used here, independent of how it i
s transported. </li>
</ol> </ol>
<t>The CDDL fragment that describes the above text is: </t> <t indent="0" pn="section-4.4-3">The CDDL fragment that describes the ab
<sourcecode type="CDDL"><![CDATA[ ove text is: </t>
<sourcecode type="cddl" markers="false" pn="section-4.4-4">
Sig_structure = [ Sig_structure = [
context : "Signature" / "Signature1", context : "Signature" / "Signature1",
body_protected : empty_or_serialized_map, body_protected : empty_or_serialized_map,
? sign_protected : empty_or_serialized_map, ? sign_protected : empty_or_serialized_map,
external_aad : bstr, external_aad : bstr,
payload : bstr payload : bstr
] ]
]]></sourcecode> </sourcecode>
<t indent="0" pn="section-4.4-5">How to compute a signature:
<t>How to compute a signature:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-4.
<li>Create a Sig_structure and populate it with the appropriate fields 4-6">
. </li> <li pn="section-4.4-6.1" derivedCounter="1.">Create a Sig_structure an
<li>Create the value ToBeSigned by encoding the Sig_structure to a byt d populate it with the appropriate fields. </li>
e string, using the encoding described in <xref target="CBOR-Canonical"/>. </li <li pn="section-4.4-6.2" derivedCounter="2.">Create the value ToBeSign
> ed by encoding the Sig_structure to a byte string, using the encoding described
<li>Call the signature creation algorithm passing in K (the key to sig in <xref target="CBOR-Canonical" format="default" sectionFormat="of" derivedCont
n with), alg (the algorithm to sign with), and ToBeSigned (the value to sign). ent="Section 9"/>. </li>
</li> <li pn="section-4.4-6.3" derivedCounter="3.">Call the signature creati
<!-- on algorithm, passing in K (the key to sign with), alg (the algorithm to sign wi
th), and ToBeSigned (the value to sign). </li>
" 4. Place the resulting signature value in the 'signature' field of <li pn="section-4.4-6.4" derivedCounter="4.">
the array."
Although it is clear from the context, one might whish to specify which
array to avoid confusion.
[JLS] It is a bit problematical to say which array it is going into because this
is one of three different arrays. However, it would go into a non-array for Co
unterSignature0. Hmmmmmm.
Need to think about how to adjust the text to deal with all of the different
ways to put the signature someplace.
<li>
Place the resulting signature value in the correct location. Place the resulting signature value in the correct location.
This is the 'signature' field of the COSE_Signature or COSE_Sign1 structure. This is the "signature" field of the COSE_Signature or COSE_Sign1 structure.
</li> </li>
</ol> </ol>
<t>The steps for verifying a signature are: <t indent="0" pn="section-4.4-7">The steps for verifying a signature are :
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-4.
<li>Create a Sig_structure and populate it with the appropriate fields 4-8">
. </li> <li pn="section-4.4-8.1" derivedCounter="1.">Create a Sig_structure an
<li>Create the value ToBeSigned by encoding the Sig_structure to a byt d populate it with the appropriate fields. </li>
e string, using the encoding described in <xref target="CBOR-Canonical"/>. </li <li pn="section-4.4-8.2" derivedCounter="2.">Create the value ToBeSign
> ed by encoding the Sig_structure to a byte string, using the encoding described
<li>Call the signature verification algorithm passing in K (the key to in <xref target="CBOR-Canonical" format="default" sectionFormat="of" derivedCont
verify with), alg (the algorithm used sign with), ToBeSigned (the value to sign ent="Section 9"/>. </li>
), and sig (the signature to be verified). </li> <li pn="section-4.4-8.3" derivedCounter="3.">Call the signature verifi
cation algorithm, passing in K (the key to verify with), alg (the algorithm used
to sign with), ToBeSigned (the value to sign), and sig (the signature to be ver
ified). </li>
</ol> </ol>
<t> <t indent="0" pn="section-4.4-9">
In addition to performing the signature verification, the application performs the appropriate checks to ensure that the key is correctly paired with the sign ing identity and that the signing identity is authorized before performing actio ns. In addition to performing the signature verification, the application performs the appropriate checks to ensure that the key is correctly paired with the sign ing identity and that the signing identity is authorized before performing actio ns.
</t> </t>
</section> </section>
</section> </section>
<section anchor="encryption-object"> <section anchor="encryption-object" numbered="true" removeInRFC="false" toc=
<name>Encryption Objects</name> "include" pn="section-5">
<t> <name slugifiedName="name-encryption-objects">Encryption Objects</name>
<t indent="0" pn="section-5-1">
COSE supports two different encryption structures. COSE supports two different encryption structures.
COSE_Encrypt0 is used when a recipient structure is not needed because t he key to be used is known implicitly. COSE_Encrypt0 is used when a recipient structure is not needed because t he key to be used is known implicitly.
COSE_Encrypt is used the rest of the time. COSE_Encrypt is used the rest of the time.
This includes cases where there are multiple recipients or a recipient a lgorithm other than direct (i.e. pre-shared secret) is used. This includes cases where there are multiple recipients or a recipient a lgorithm other than direct (i.e., preshared secret) is used.
</t> </t>
<section anchor="EnvelopedData"> <section anchor="EnvelopedData" numbered="true" removeInRFC="false" toc="i
<name>Enveloped COSE Structure</name> nclude" pn="section-5.1">
<t>The enveloped structure allows for one or more recipients of a messag <name slugifiedName="name-enveloped-cose-structure">Enveloped COSE Struc
e. There are provisions for header parameters about the content and header para ture</name>
meters about the recipient information to be carried in the message. The protec <t indent="0" pn="section-5.1-1">The enveloped structure allows for one
ted header parameters associated with the content are authenticated by the conte or more recipients of a message. There are provisions for header parameters abo
nt encryption algorithm. The protected header parameters associated with the re ut the content and header parameters about the recipient information to be carri
cipient are authenticated by the recipient algorithm (when the algorithm support ed in the message. The protected header parameters associated with the content
s it). Examples of header parameters about the content are the type of the cont are authenticated by the content encryption algorithm. The protected header par
ent and the content encryption algorithm. Examples of header parameters about t ameters associated with the recipient (when the algorithm supports it) are authe
he recipient are the recipient's key identifier and the recipient's encryption a nticated by the recipient algorithm. Examples of header parameters about the co
lgorithm. </t> ntent are the type of the content and the content encryption algorithm. Example
<t> s of header parameters about the recipient are the recipient's key identifier an
d the recipient's encryption algorithm. </t>
<t indent="0" pn="section-5.1-2">
The same techniques and nearly the same structure are used for encrypt ing both the plaintext and the keys. The same techniques and nearly the same structure are used for encrypt ing both the plaintext and the keys.
This is different from the approach used by both "Cryptographic Messag e Syntax (CMS)" <xref target="RFC5652"/> and "JSON Web Encryption (JWE)" <xref t arget="RFC7516"/> where different structures are used for the content layer and for the recipient layer. This is different from the approach used by both "Cryptographic Messag e Syntax (CMS)" <xref target="RFC5652" format="default" sectionFormat="of" deriv edContent="RFC5652"/> and "JSON Web Encryption (JWE)" <xref target="RFC7516" for mat="default" sectionFormat="of" derivedContent="RFC7516"/>, where different str uctures are used for the content layer and the recipient layer.
Two structures are defined: COSE_Encrypt to hold the encrypted content and COSE_recipient to hold the encrypted keys for recipients. Two structures are defined: COSE_Encrypt to hold the encrypted content and COSE_recipient to hold the encrypted keys for recipients.
Examples of encrypted messages can be found in <xref target="Enveloped Examples"/>. Examples of enveloped messages can be found in <xref target="Enveloped Examples" format="default" sectionFormat="of" derivedContent="Appendix C.3"/>.
</t> </t>
<t>The COSE_Encrypt structure can be encoded as either tagged or untagge <t indent="0" pn="section-5.1-3">The COSE_Encrypt structure can be encod
d depending on the context it will be used in. A tagged COSE_Encrypt structure ed as either tagged or untagged, depending on the context it will be used in. A
is identified by the CBOR tag 96. The CDDL fragment that represents this is: </ tagged COSE_Encrypt structure is identified by the CBOR tag 96. The CDDL fragm
t> ent that represents this is: </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-5.1-4">
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
]]></sourcecode> </sourcecode>
<t>The COSE_Encrypt structure is a CBOR array. The fields of the array <t indent="0" pn="section-5.1-5">The COSE_Encrypt structure is a CBOR ar
in order are: ray. The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.1-6">
<dt>protected:</dt> <dt pn="section-5.1-6.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>. </dd> <dd pn="section-5.1-6.2">This is as described in <xref target="header-
<dt>unprotected:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
<dd>This is as described in <xref target="header-parameters"/>. </dd> /dd>
<dt>ciphertext:</dt> <dt pn="section-5.1-6.3">unprotected:</dt>
<dd>This field contains the ciphertext encoded as a bstr. If the ciph <dd pn="section-5.1-6.4">This is as described in <xref target="header-
ertext is to be transported independently of the control information about the e parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. </
ncryption process (i.e., detached content), then the field is encoded as a nil v dd>
alue. </dd> <dt pn="section-5.1-6.5">ciphertext:</dt>
<dt>recipients:</dt> <dd pn="section-5.1-6.6">This field contains the ciphertext, encoded a
<dd>This field contains an array of recipient information structures. s a bstr. If the ciphertext is to be transported independently of the control i
The type for the recipient information structure is a COSE_recipient. </dd> nformation about the encryption process (i.e., detached content), then the field
is encoded as a nil value. </dd>
<dt pn="section-5.1-6.7">recipients:</dt>
<dd pn="section-5.1-6.8">This field contains an array of recipient inf
ormation structures. The type for the recipient information structure is a COSE
_recipient. </dd>
</dl> </dl>
<t>The CDDL fragment that corresponds to the above text is: </t> <t indent="0" pn="section-5.1-7">The CDDL fragment that corresponds to t
<sourcecode type="CDDL"><![CDATA[ he above text is: </t>
<sourcecode type="cddl" markers="false" pn="section-5.1-8">
COSE_Encrypt = [ COSE_Encrypt = [
Headers, Headers,
ciphertext : bstr / nil, ciphertext : bstr / nil,
recipients : [+COSE_recipient] recipients : [+COSE_recipient]
] ]
]]></sourcecode> </sourcecode>
<t>The COSE_recipient structure is a CBOR array. The fields of the arra <t indent="0" pn="section-5.1-9">The COSE_recipient structure is a CBOR
y in order are: array. The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.1-10">
<dt>protected:</dt> <dt pn="section-5.1-10.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>. </dd> <dd pn="section-5.1-10.2">This is as described in <xref target="header
<dt>unprotected:</dt> -parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.
<dd>This is as described in <xref target="header-parameters"/>. </dd> </dd>
<dt>ciphertext:</dt> <dt pn="section-5.1-10.3">unprotected:</dt>
<dd>This field contains the encrypted key encoded as a bstr. All enco <dd pn="section-5.1-10.4">This is as described in <xref target="header
ded keys are symmetric keys; the binary value of the key is the content. If the -parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.
re is not an encrypted key, then this field is encoded as a nil value. </dd> </dd>
<dt>recipients:</dt> <dt pn="section-5.1-10.5">ciphertext:</dt>
<dd>This field contains an array of recipient information structures. <dd pn="section-5.1-10.6">This field contains the encrypted key, encod
The type for the recipient information structure is a COSE_recipient (an exampl ed as a bstr. All encoded keys are symmetric keys; the binary value of the key
e of this can be found in <xref target="three-layer"/>). If there are no recipie is the content. If there is not an encrypted key, then this field is encoded as
nt information structures, this element is absent. </dd> a nil value. </dd>
<dt pn="section-5.1-10.7">recipients:</dt>
<dd pn="section-5.1-10.8">This field contains an array of recipient in
formation structures. The type for the recipient information structure is a COS
E_recipient (an example of this can be found in <xref target="three-layer" forma
t="default" sectionFormat="of" derivedContent="Appendix B"/>). If there are no r
ecipient information structures, this element is absent. </dd>
</dl> </dl>
<t>The CDDL fragment that corresponds to the above text for COSE_recipie <t indent="0" pn="section-5.1-11">The CDDL fragment that corresponds to
nt is: </t> the above text for COSE_recipient is: </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-5.1-12">
COSE_recipient = [ COSE_recipient = [
Headers, Headers,
ciphertext : bstr / nil, ciphertext : bstr / nil,
? recipients : [+COSE_recipient] ? recipients : [+COSE_recipient]
] ]
]]></sourcecode> </sourcecode>
<section anchor="key-management-methods"> <section anchor="key-management-methods" numbered="true" removeInRFC="fa
<name>Content Key Distribution Methods</name> lse" toc="include" pn="section-5.1.1">
<t> <name slugifiedName="name-content-key-distribution-me">Content Key Dis
tribution Methods</name>
<t indent="0" pn="section-5.1.1-1">
An encrypted message consists of an encrypted content and an encrypt ed CEK for one or more recipients. An encrypted message consists of an encrypted content and an encrypt ed CEK for one or more recipients.
The CEK is encrypted for each recipient, using a key specific to tha t recipient. The CEK is encrypted for each recipient, using a key specific to tha t recipient.
The details of this encryption depend on which class the recipient a lgorithm falls into. The details of this encryption depend on which class the recipient a lgorithm falls into.
Specific details on each of the classes can be found in <xref target ="key-management-algs"/>. Specific details on each of the classes can be found in <xref target ="key-management-algs" format="default" sectionFormat="of" derivedContent="Secti on 8.5"/>.
A short summary of the five content key distribution methods is: A short summary of the five content key distribution methods is:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.1.1-2">
<dt>direct:</dt> <dt pn="section-5.1.1-2.1">direct:</dt>
<dd> <dd pn="section-5.1.1-2.2">
The CEK is the same as the identified previously distributed sym metric key or is derived from a previously distributed secret. The CEK is the same as the identified previously distributed sym metric key or is derived from a previously distributed secret.
No CEK is transported in the message. No CEK is transported in the message.
</dd> </dd>
<dt>symmetric key-encryption keys (KEK):</dt> <dt pn="section-5.1.1-2.3">symmetric key-encryption keys (KEKs):</dt
<dd> >
<dd pn="section-5.1.1-2.4">
The CEK is encrypted using a previously distributed symmetric KE K. The CEK is encrypted using a previously distributed symmetric KE K.
Also known as key wrap. Also known as key wrap.
</dd> </dd>
<dt>key agreement:</dt> <dt pn="section-5.1.1-2.5">key agreement:</dt>
<dd> <dd pn="section-5.1.1-2.6">
The recipient's public key and a sender's private key are used t o generate a pairwise secret, a Key Derivation Function (KDF) is applied to deri ve a key, and then the CEK is either the derived key or encrypted by the derived key. The recipient's public key and a sender's private key are used t o generate a pairwise secret, a Key Derivation Function (KDF) is applied to deri ve a key, and then the CEK is either the derived key or encrypted by the derived key.
</dd> </dd>
<dt>key transport:</dt> <dt pn="section-5.1.1-2.7">key transport:</dt>
<dd> <dd pn="section-5.1.1-2.8">
The CEK is encrypted with the recipient's public key. The CEK is encrypted with the recipient's public key.
</dd> </dd>
<dt>passwords:</dt> <dt pn="section-5.1.1-2.9">passwords:</dt>
<dd> <dd pn="section-5.1.1-2.10">
The CEK is encrypted in a KEK that is derived from a password. The CEK is encrypted in a KEK that is derived from a password.
As of when this document was published, no password algorithms h ave been defined. As of when this document was published, no password algorithms h ave been defined.
</dd> </dd>
</dl> </dl>
</section> </section>
</section> </section>
<section anchor="EnvelopedData0"> <section anchor="EnvelopedData0" numbered="true" removeInRFC="false" toc="
<name>Single Recipient Encrypted</name> include" pn="section-5.2">
<t>The COSE_Encrypt0 encrypted structure does not have the ability to sp <name slugifiedName="name-single-recipient-encrypted">Single Recipient E
ecify recipients of the message. The structure assumes that the recipient of th ncrypted</name>
e object will already know the identity of the key to be used in order to decryp <t indent="0" pn="section-5.2-1">The COSE_Encrypt0 encrypted structure d
t the message. If a key needs to be identified to the recipient, the enveloped oes not have the ability to specify recipients of the message. The structure as
structure ought to be used. </t> sumes that the recipient of the object will already know the identity of the key
<t>Examples of encrypted messages can be found in <xref target="Envelope to be used in order to decrypt the message. If a key needs to be identified to
dExamples"/>. </t> the recipient, the enveloped structure ought to be used. </t>
<t>The COSE_Encrypt0 structure can be encoded as either tagged or untagg <t indent="0" pn="section-5.2-2">Examples of encrypted messages can be f
ed depending on the context it will be used in. A tagged COSE_Encrypt0 structur ound in <xref target="EncryptExamples" format="default" sectionFormat="of" deriv
e is identified by the CBOR tag 16. The CDDL fragment that represents this is: edContent="Appendix C.4"/>. </t>
</t> <t indent="0" pn="section-5.2-3">The COSE_Encrypt0 structure can be enco
<sourcecode type="CDDL"><![CDATA[ ded as either tagged or untagged, depending on the context it will be used in.
A tagged COSE_Encrypt0 structure is identified by the CBOR tag 16. The CDDL fra
gment that represents this is: </t>
<sourcecode type="cddl" markers="false" pn="section-5.2-4">
COSE_Encrypt0_Tagged = #6.16(COSE_Encrypt0) COSE_Encrypt0_Tagged = #6.16(COSE_Encrypt0)
]]></sourcecode> </sourcecode>
<t>The COSE_Encrypt0 structure is a CBOR array. The fields of the array <t indent="0" pn="section-5.2-5">The COSE_Encrypt0 structure is a CBOR a
in order are: rray. The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.2-6">
<dt>protected:</dt> <dt pn="section-5.2-6.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>.</dd> <dd pn="section-5.2-6.2">This is as described in <xref target="header-
<dt>unprotected:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.</d
<dd>This is as described in <xref target="header-parameters"/>.</dd> d>
<dt>ciphertext:</dt> <dt pn="section-5.2-6.3">unprotected:</dt>
<dd>This is as described in <xref target="EnvelopedData"/>.</dd> <dd pn="section-5.2-6.4">This is as described in <xref target="header-
parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.</d
d>
<dt pn="section-5.2-6.5">ciphertext:</dt>
<dd pn="section-5.2-6.6">This is as described in <xref target="Envelop
edData" format="default" sectionFormat="of" derivedContent="Section 5.1"/>.</dd>
</dl> </dl>
<t>The CDDL fragment for COSE_Encrypt0 that corresponds to the above tex <t indent="0" pn="section-5.2-7">The CDDL fragment for COSE_Encrypt0 tha
t is: </t> t corresponds to the above text is: </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-5.2-8">
COSE_Encrypt0 = [ COSE_Encrypt0 = [
Headers, Headers,
ciphertext : bstr / nil, ciphertext : bstr / nil,
] ]
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="encryption-algorithm-for-aead-algorithms"> <section anchor="encryption-algorithm-for-aead-algorithms" numbered="true"
<name>How to Encrypt and Decrypt for AEAD Algorithms</name> removeInRFC="false" toc="include" pn="section-5.3">
<t>The encryption algorithm for AEAD algorithms is fairly simple. The f <name slugifiedName="name-how-to-encrypt-and-decrypt-">How to Encrypt an
irst step is to create a consistent byte string for the authenticated data struc d Decrypt for AEAD Algorithms</name>
ture. For this purpose, we use an Enc_structure. The Enc_structure is a CBOR a <t indent="0" pn="section-5.3-1">The encryption algorithm for AEAD algor
rray. The fields of the Enc_structure in order are: ithms is fairly simple. The first step is to create a consistent byte string fo
r the authenticated data structure. For this purpose, we use an Enc_structure.
The Enc_structure is a CBOR array. The fields of the Enc_structure, in order,
are:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-5.
<li> 3-2">
<t>A context text string identifying the context of the authenticate <li pn="section-5.3-2.1" derivedCounter="1.">
d data structure. The context text string is: <t indent="0" pn="section-5.3-2.1.1">A context text string identifyi
ng the context of the authenticated data structure. The context text string is:
</t> </t>
<ul empty="true"> <ul empty="true" bare="false" indent="3" spacing="normal" pn="sectio
<li>"Encrypt0" for the content encryption of a COSE_Encrypt0 data n-5.3-2.1.2">
structure.</li> <li pn="section-5.3-2.1.2.1">"Encrypt0" for the content encryption
<li>"Encrypt" for the first layer of a COSE_Encrypt data structure of a COSE_Encrypt0 data structure.</li>
(i.e., for content encryption).</li> <li pn="section-5.3-2.1.2.2">"Encrypt" for the first layer of a CO
<li>"Enc_Recipient" for a recipient encoding to be placed in an CO SE_Encrypt data structure (i.e., for content encryption).</li>
SE_Encrypt data structure.</li> <li pn="section-5.3-2.1.2.3">"Enc_Recipient" for a recipient encod
<li>"Mac_Recipient" for a recipient encoding to be placed in a MAC ing to be placed in a COSE_Encrypt data structure.</li>
ed message structure.</li> <li pn="section-5.3-2.1.2.4">"Mac_Recipient" for a recipient encod
<li>"Rec_Recipient" for a recipient encoding to be placed in a rec ing to be placed in a MACed message structure.</li>
ipient structure.</li> <li pn="section-5.3-2.1.2.5">"Rec_Recipient" for a recipient encod
ing to be placed in a recipient structure.</li>
</ul> </ul>
</li> </li>
<li>The protected attributes from the body structure encoded in a bstr <li pn="section-5.3-2.2" derivedCounter="2.">The protected attributes
type. If there are no protected attributes, a zero-length byte string is used. from the body structure, encoded in a bstr type. If there are no protected attr
</li> ibutes, a zero-length byte string is used. </li>
<li>The externally supplied data from the application encoded in a bst <li pn="section-5.3-2.3" derivedCounter="3.">The externally supplied d
r type. If this field is not supplied, it defaults to a zero-length byte string ata from the application encoded in a bstr type. If this field is not supplied,
. (See <xref target="Extern_AAD"/> for application guidance on constructing thi it defaults to a zero-length byte string. (See <xref target="Extern_AAD" forma
s field.) </li> t="default" sectionFormat="of" derivedContent="Section 4.3"/> for application gu
idance on constructing this field.) </li>
</ol> </ol>
<t>The CDDL fragment that describes the above text is: </t> <t indent="0" pn="section-5.3-3">The CDDL fragment that describes the ab
<sourcecode type="CDDL"><![CDATA[ ove text is: </t>
<sourcecode type="cddl" markers="false" pn="section-5.3-4">
Enc_structure = [ Enc_structure = [
context : "Encrypt" / "Encrypt0" / "Enc_Recipient" / context : "Encrypt" / "Encrypt0" / "Enc_Recipient" /
"Mac_Recipient" / "Rec_Recipient", "Mac_Recipient" / "Rec_Recipient",
protected : empty_or_serialized_map, protected : empty_or_serialized_map,
external_aad : bstr external_aad : bstr
] ]
]]></sourcecode> </sourcecode>
<t>How to encrypt a message: <t indent="0" pn="section-5.3-5">How to encrypt a message:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-5.
<li>Create an Enc_structure and populate it with the appropriate field 3-6">
s. </li> <li pn="section-5.3-6.1" derivedCounter="1.">Create an Enc_structure a
<li>Encode the Enc_structure to a byte string (Additional Authenticate nd populate it with the appropriate fields. </li>
d Data (AAD)), using the encoding described in <xref target="CBOR-Canonical"/>. <li pn="section-5.3-6.2" derivedCounter="2.">Encode the Enc_structure
</li> to a byte string (Additional Authenticated Data (AAD)), using the encoding descr
<li> ibed in <xref target="CBOR-Canonical" format="default" sectionFormat="of" derive
<t>Determine the encryption key (K). This step is dependent on the dContent="Section 9"/>. </li>
class of recipient algorithm being used. For: <li pn="section-5.3-6.3" derivedCounter="3.">
<t indent="0" pn="section-5.3-6.3.1">Determine the encryption key (K
). This step is dependent on the class of recipient algorithm being used. For:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.3-6.3.
<dt>No Recipients:</dt> 2">
<dd>The key to be used is determined by the algorithm and key at t <dt pn="section-5.3-6.3.2.1">No Recipients:</dt>
he current layer. Examples are key transport keys (<xref target="KeyTransport"/ <dd pn="section-5.3-6.3.2.2">The key to be used is determined by t
>), key wrap keys (<xref target="key_wrap_algs"/>), or pre-shared secrets. </dd he algorithm and key at the current layer. Examples are key wrap keys (<xref ta
> rget="key_wrap_algs" format="default" sectionFormat="of" derivedContent="Section
<dt>Direct Encryption and Direct Key Agreement:</dt> 8.5.2"/>) and preshared secrets. </dd>
<dd> <dt pn="section-5.3-6.3.2.3">Direct Encryption and Direct Key Agre
ement:</dt>
<dd pn="section-5.3-6.3.2.4">
The key is determined by the key and algorithm in the recipient structure. The key is determined by the key and algorithm in the recipient structure.
The encryption algorithm and size of the key to be used are inputs into the KD F used for the recipient. The encryption algorithm and size of the key to be used are inputs into the KD F used for the recipient.
(For direct, the KDF can be thought of as the identity operation.) (For direct, the KDF can be thought of as the identity operation.)
Examples of these algorithms are found in Sections 6.1.2 and 6.3 of <xref targ et="I-D.ietf-cose-rfc8152bis-algs"/>. Examples of these algorithms are found in Sections <xref target="RFC9053" sect ion="6.1" sectionFormat="bare" format="default" derivedLink="https://rfc-editor. org/rfc/rfc9053#section-6.1" derivedContent="RFC9053"/> and <xref target="RFC905 3" section="6.3" sectionFormat="bare" format="default" derivedLink="https://rfc- editor.org/rfc/rfc9053#section-6.3" derivedContent="RFC9053"/> of <xref target=" RFC9053" format="default" sectionFormat="of" derivedContent="RFC9053"/>.
</dd> </dd>
<dt>Other:</dt> <dt pn="section-5.3-6.3.2.5">Other:</dt>
<dd>The key is randomly or pseudo-randomly generated. </dd> <dd pn="section-5.3-6.3.2.6">The key is randomly generated. </dd>
</dl> </dl>
</li> </li>
<li>Call the encryption algorithm with K (the encryption key), P (the <li pn="section-5.3-6.4" derivedCounter="4.">Call the encryption algor
plaintext), and AAD. Place the returned ciphertext into the 'ciphertext' field ithm with K (the encryption key), P (the plaintext), and AAD. Place the returne
of the structure. </li> d ciphertext into the "ciphertext" field of the structure. </li>
<li>For recipients of the message, recursively perform the encryption <li pn="section-5.3-6.5" derivedCounter="5.">For recipients of the mes
algorithm for that recipient, using K (the encryption key) as the plaintext. </ sage using non-direct algorithms, recursively perform the encryption algorithm f
li> or that recipient, using K (the encryption key) as the plaintext. </li>
</ol> </ol>
<t>How to decrypt a message: <t indent="0" pn="section-5.3-7">How to decrypt a message:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-5.
<li>Create an Enc_structure and populate it with the appropriate field 3-8">
s. </li> <li pn="section-5.3-8.1" derivedCounter="1.">Create an Enc_structure a
<li>Encode the Enc_structure to a byte string (AAD), using the encodin nd populate it with the appropriate fields. </li>
g described in <xref target="CBOR-Canonical"/>. </li> <li pn="section-5.3-8.2" derivedCounter="2.">Encode the Enc_structure
<li> to a byte string (AAD), using the encoding described in <xref target="CBOR-Canon
<t>Determine the decryption key. This step is dependent on the clas ical" format="default" sectionFormat="of" derivedContent="Section 9"/>. </li>
s of recipient algorithm being used. For: <li pn="section-5.3-8.3" derivedCounter="3.">
<t indent="0" pn="section-5.3-8.3.1">Determine the decryption key.
This step is dependent on the class of recipient algorithm being used. For:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.3-8.3.
<dt>No Recipients:</dt> 2">
<dd>The key to be used is determined by the algorithm and key at t <dt pn="section-5.3-8.3.2.1">No Recipients:</dt>
he current layer. Examples are key transport keys (<xref target="KeyTransport"/ <dd pn="section-5.3-8.3.2.2">The key to be used is determined by t
>), key wrap keys (<xref target="key_wrap_algs"/>), or pre-shared secrets. </dd he algorithm and key at the current layer. Examples are key wrap keys (<xref ta
> rget="key_wrap_algs" format="default" sectionFormat="of" derivedContent="Section
<dt>Direct Encryption and Direct Key Agreement:</dt> 8.5.2"/>) and preshared secrets. </dd>
<dd> <dt pn="section-5.3-8.3.2.3">Direct Encryption and Direct Key Agre
ement:</dt>
<dd pn="section-5.3-8.3.2.4">
The key is determined by the key and algorithm in the recipient structure. The key is determined by the key and algorithm in the recipient structure.
The encryption algorithm and size of the key to be used are inputs into the KD F used for the recipient. The encryption algorithm and size of the key to be used are inputs into the KD F used for the recipient.
(For direct, the KDF can be thought of as the identity operation.) (For direct, the KDF can be thought of as the identity operation.)
</dd> </dd>
<dt>Other:</dt> <dt pn="section-5.3-8.3.2.5">Other:</dt>
<dd>The key is determined by decoding and decrypting one of the re <dd pn="section-5.3-8.3.2.6">The key is determined by decoding and
cipient structures. </dd> decrypting one of the recipient structures. </dd>
</dl> </dl>
</li> </li>
<li>Call the decryption algorithm with K (the decryption key to use), C (the ciphertext), and AAD. </li> <li pn="section-5.3-8.4" derivedCounter="4.">Call the decryption algor ithm with K (the decryption key to use), C (the ciphertext), and AAD. </li>
</ol> </ol>
</section> </section>
<section anchor="encryption-algorithm-for-ae-algorithms"> <section anchor="encryption-algorithm-for-ae-algorithms" numbered="true" r
<name>How to Encrypt and Decrypt for AE Algorithms</name> emoveInRFC="false" toc="include" pn="section-5.4">
<t>How to encrypt a message: <name slugifiedName="name-how-to-encrypt-and-decrypt-f">How to Encrypt a
nd Decrypt for AE Algorithms</name>
<t indent="0" pn="section-5.4-1">How to encrypt a message:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-5.
<li>Verify that the 'protected' field is empty. </li> 4-2">
<li>Verify that there was no external additional authenticated data su <li pn="section-5.4-2.1" derivedCounter="1.">Verify that the "protecte
pplied for this operation. </li> d" field is a zero-length byte string. </li>
<li> <li pn="section-5.4-2.2" derivedCounter="2.">Verify that there was no
<t>Determine the encryption key. This step is dependent on the clas external additional authenticated data supplied for this operation. </li>
s of recipient algorithm being used. For: <li pn="section-5.4-2.3" derivedCounter="3.">
<t indent="0" pn="section-5.4-2.3.1">Determine the encryption key.
This step is dependent on the class of recipient algorithm being used. For:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.4-2.3.
<dt>No Recipients:</dt> 2">
<dd>The key to be used is determined by the algorithm and key at t <dt pn="section-5.4-2.3.2.1">No Recipients:</dt>
he current layer. Examples are key transport keys (<xref target="KeyTransport"/ <dd pn="section-5.4-2.3.2.2">The key to be used is determined by t
>), key wrap keys (<xref target="key_wrap_algs"/>), or pre-shared secrets. </dd he algorithm and key at the current layer. Examples are key wrap keys (<xref ta
> rget="key_wrap_algs" format="default" sectionFormat="of" derivedContent="Section
<dt>Direct Encryption and Direct Key Agreement:</dt> 8.5.2"/>) and preshared secrets. </dd>
<dd>The key is determined by the key and algorithm in the recipien <dt pn="section-5.4-2.3.2.3">Direct Encryption and Direct Key Agre
t structure. The encryption algorithm and size of the key to be used are inputs ement:</dt>
into the KDF used for the recipient. (For direct, the KDF can be thought of as <dd pn="section-5.4-2.3.2.4">The key is determined by the key and
the identity operation.) algorithm in the recipient structure. The encryption algorithm and size of the
Examples of these algorithms are found in Sections 6.1.2 and 6.3 of <xref target key to be used are inputs into the KDF used for the recipient. (For direct, the
="I-D.ietf-cose-rfc8152bis-algs"/>. KDF can be thought of as the identity operation.)
Examples of these algorithms are found in Sections <xref target="RFC9053" sectio
n="6.1" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.or
g/rfc/rfc9053#section-6.1" derivedContent="RFC9053"/> and <xref target="RFC9053"
section="6.3" sectionFormat="bare" format="default" derivedLink="https://rfc-ed
itor.org/rfc/rfc9053#section-6.3" derivedContent="RFC9053"/> of <xref target="RF
C9053" format="default" sectionFormat="of" derivedContent="RFC9053"/>.
</dd> </dd>
<dt>Other:</dt> <dt pn="section-5.4-2.3.2.5">Other:</dt>
<dd>The key is randomly generated. </dd> <dd pn="section-5.4-2.3.2.6">The key is randomly generated. </dd>
</dl> </dl>
</li> </li>
<li>Call the encryption algorithm with K (the encryption key to use) a <li pn="section-5.4-2.4" derivedCounter="4.">Call the encryption algor
nd P (the plaintext). Place the returned ciphertext into the 'ciphertext' field ithm with K (the encryption key to use) and P (the plaintext). Place the return
of the structure. </li> ed ciphertext into the "ciphertext" field of the structure. </li>
<li>For recipients of the message, recursively perform the encryption <li pn="section-5.4-2.5" derivedCounter="5.">For recipients of the mes
algorithm for that recipient, using K (the encryption key) as the plaintext. </ sage using non-direct algorithms, recursively perform the encryption algorithm f
li> or that recipient, using K (the encryption key) as the plaintext. </li>
</ol> </ol>
<t>How to decrypt a message: <t indent="0" pn="section-5.4-3">How to decrypt a message:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-5.
<li>Verify that the 'protected' field is empty. </li> 4-4">
<li>Verify that there was no external additional authenticated data su <li pn="section-5.4-4.1" derivedCounter="1.">Verify that the "protecte
pplied for this operation. </li> d" field is a zero-length byte string. </li>
<li> <li pn="section-5.4-4.2" derivedCounter="2.">Verify that there was no
<t>Determine the decryption key. This step is dependent on the clas external additional authenticated data supplied for this operation. </li>
s of recipient algorithm being used. For: <li pn="section-5.4-4.3" derivedCounter="3.">
<t indent="0" pn="section-5.4-4.3.1">Determine the decryption key.
This step is dependent on the class of recipient algorithm being used. For:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-5.4-4.3.
<dt>No Recipients:</dt> 2">
<dd>The key to be used is determined by the algorithm and key at t <dt pn="section-5.4-4.3.2.1">No Recipients:</dt>
he current layer. Examples are key transport keys (<xref target="KeyTransport"/ <dd pn="section-5.4-4.3.2.2">The key to be used is determined by t
>), key wrap keys (<xref target="key_wrap_algs"/>), or pre-shared secrets. </dd he algorithm and key at the current layer. Examples are key wrap keys (<xref ta
> rget="key_wrap_algs" format="default" sectionFormat="of" derivedContent="Section
<dt>Direct Encryption and Direct Key Agreement:</dt> 8.5.2"/>) and preshared secrets. </dd>
<dd>The key is determined by the key and algorithm in the recipien <dt pn="section-5.4-4.3.2.3">Direct Encryption and Direct Key Agre
t structure. The encryption algorithm and size of the key to be used are inputs ement:</dt>
into the KDF used for the recipient. (For direct, the KDF can be thought of as <dd pn="section-5.4-4.3.2.4">The key is determined by the key and
the identity operation.) algorithm in the recipient structure. The encryption algorithm and size of the
Examples of these algorithms are found in Sections 6.1.2 and 6.3 of <xref target key to be used are inputs into the KDF used for the recipient. (For direct, the
="I-D.ietf-cose-rfc8152bis-algs"/>. KDF can be thought of as the identity operation.)
Examples of these algorithms are found in Sections <xref target="RFC9053" sectio
n="6.1" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.or
g/rfc/rfc9053#section-6.1" derivedContent="RFC9053"/> and <xref target="RFC9053"
section="6.3" sectionFormat="bare" format="default" derivedLink="https://rfc-ed
itor.org/rfc/rfc9053#section-6.3" derivedContent="RFC9053"/> of <xref target="RF
C9053" format="default" sectionFormat="of" derivedContent="RFC9053"/>.
</dd> </dd>
<dt>Other:</dt> <dt pn="section-5.4-4.3.2.5">Other:</dt>
<dd>The key is determined by decoding and decrypting one of the re <dd pn="section-5.4-4.3.2.6">The key is determined by decoding and
cipient structures. </dd> decrypting one of the recipient structures. </dd>
</dl> </dl>
</li> </li>
<li>Call the decryption algorithm with K (the decryption key to use) a nd C (the ciphertext). </li> <li pn="section-5.4-4.4" derivedCounter="4.">Call the decryption algor ithm with K (the decryption key to use) and C (the ciphertext). </li>
</ol> </ol>
</section> </section>
</section> </section>
<section anchor="mac-objects"> <section anchor="mac-objects" numbered="true" removeInRFC="false" toc="inclu
<name>MAC Objects</name> de" pn="section-6">
<t> <name slugifiedName="name-mac-objects">MAC Objects</name>
<t indent="0" pn="section-6-1">
COSE supports two different MAC structures. COSE supports two different MAC structures.
COSE_MAC0 is used when a recipient structure is not needed because the k COSE_Mac0 is used when a recipient structure is not needed because the k
ey to be used is implicitly known. ey to be used is implicitly known.
<!-- Gregory Guthe "COSE_MAC is used for all other cases. These include COSE_Mac is used for all other cases.
a requirement for multiple recipients, the key being unknown, and a recipient al These include a requirement for multiple recipients, the key being unkno
gorithm of other than direct." rephrase? sounds like one case requiring three pr wn, or a recipient algorithm other than direct.
operties instead any case requiring one of the three properties
-->
<!-- Response - change "and a recipient" to "or a recipient" and ask if
OK -->
COSE_MAC is used for all other cases.
These include a requirement for multiple recipients, the key being unkno
wn, or a recipient algorithm of other than direct.
</t> </t>
<t>In this section, we describe the structure and methods to be used when <t indent="0" pn="section-6-2">In this section, we describe the structure
doing MAC authentication in COSE. This document allows for the use of all of th and methods to be used when doing MAC authentication in COSE. This document all
e same classes of recipient algorithms as are allowed for encryption. </t> ows for the use of all of the same classes of recipient algorithms as are allowe
<t>When using MAC operations, there are two modes in which they can be use d for encryption. </t>
d. The first is just a check that the content has not been changed since the MA <t indent="0" pn="section-6-3">There are two modes in which MAC operations
C was computed. Any class of recipient algorithm can be used for this purpose. can be used. The first is just a check that the content has not been changed s
The second mode is to both check that the content has not been changed since th ince the MAC was computed. Any class of recipient algorithm can be used for thi
e MAC was computed and to use the recipient algorithm to verify who sent it. Th s purpose. The second mode is to both check that the content has not been chang
e classes of recipient algorithms that support this are those that use a pre-sha ed since the MAC was computed and use the recipient algorithm to verify who sent
red secret or do static-static (SS) key agreement (without the key wrap step). it. The classes of recipient algorithms that support this are those that use a
In both of these cases, the entity that created and sent the message MAC can be preshared secret or do Static-Static (SS) key agreement (without the key wrap s
validated. (This knowledge of the sender assumes that there are only two partie tep). In both of these cases, the entity that created and sent the message MAC
s involved and that you did not send the message to yourself.) The origination p can be validated. (This knowledge of the sender assumes that there are only two
roperty can be obtained with both of the MAC message structures. </t> parties involved and that you did not send the message to yourself.) The origin
<section anchor="Mac_n"> ation property can be obtained with both of the MAC message structures. </t>
<name>MACed Message with Recipients</name> <section anchor="Mac_n" numbered="true" removeInRFC="false" toc="include"
<t>The multiple recipient MACed message uses two structures: the COSE_Ma pn="section-6.1">
c structure defined in this section for carrying the body and the COSE_recipient <name slugifiedName="name-maced-message-with-recipien">MACed Message wit
structure (<xref target="EnvelopedData"/>) to hold the key used for the MAC com h Recipients</name>
putation. Examples of MACed messages can be found in <xref target="MacExamples" <t indent="0" pn="section-6.1-1">A multiple-recipient MACed message uses
/>. </t> two structures: the COSE_Mac structure defined in this section for carrying the
<t>The MAC structure can be encoded as either tagged or untagged dependi body and the COSE_recipient structure (<xref target="EnvelopedData" format="def
ng on the context it will be used in. A tagged COSE_Mac structure is identified ault" sectionFormat="of" derivedContent="Section 5.1"/>) to hold the key used fo
by the CBOR tag 97. The CDDL fragment that represents this is: </t> r the MAC computation. Examples of MACed messages can be found in <xref target=
<sourcecode type="CDDL"><![CDATA[ "MacExamples" format="default" sectionFormat="of" derivedContent="Appendix C.5"/
>. </t>
<t indent="0" pn="section-6.1-2">The MAC structure can be encoded as eit
her tagged or untagged depending on the context it will be used in. A tagged CO
SE_Mac structure is identified by the CBOR tag 97. The CDDL fragment that repre
sents this is: </t>
<sourcecode type="cddl" markers="false" pn="section-6.1-3">
COSE_Mac_Tagged = #6.97(COSE_Mac) COSE_Mac_Tagged = #6.97(COSE_Mac)
]]></sourcecode> </sourcecode>
<t>The COSE_Mac structure is a CBOR array. The fields of the array in o <t indent="0" pn="section-6.1-4">The COSE_Mac structure is a CBOR array.
rder are: The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-6.1-5">
<dt>protected:</dt> <dt pn="section-6.1-5.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>. </dd> <dd pn="section-6.1-5.2">This is as described in <xref target="header-
<dt>unprotected:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
<dd>This is as described in <xref target="header-parameters"/>. </dd> /dd>
<dt>payload:</dt> <dt pn="section-6.1-5.3">unprotected:</dt>
<dd>This field contains the serialized content to be MACed. If the pa <dd pn="section-6.1-5.4">This is as described in <xref target="header-
yload is not present in the message, the application is required to supply the p parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>. <
ayload separately. The payload is wrapped in a bstr to ensure that it is transp /dd>
orted without changes. If the payload is transported separately (i.e., detached <dt pn="section-6.1-5.5">payload:</dt>
content), then a nil CBOR value is placed in this location, and it is the respo <dd pn="section-6.1-5.6">This field contains the serialized content to
nsibility of the application to ensure that it will be transported without chang be MACed. If the payload is not present in the message, the application is req
es. </dd> uired to supply the payload separately. The payload is wrapped in a bstr to ens
<dt>tag:</dt> ure that it is transported without changes. If the payload is transported separ
<dd>This field contains the MAC value. </dd> ately (i.e., detached content), then a nil CBOR value is placed in this location
<dt>recipients:</dt> , and it is the responsibility of the application to ensure that it will be tran
<dd>This is as described in <xref target="EnvelopedData"/>. </dd> sported without changes. </dd>
<dt pn="section-6.1-5.7">tag:</dt>
<dd pn="section-6.1-5.8">This field contains the MAC value. </dd>
<dt pn="section-6.1-5.9">recipients:</dt>
<dd pn="section-6.1-5.10">This is as described in <xref target="Envelo
pedData" format="default" sectionFormat="of" derivedContent="Section 5.1"/>. </
dd>
</dl> </dl>
<t>The CDDL fragment that represents the above text for COSE_Mac follows <t indent="0" pn="section-6.1-6">The CDDL fragment that represents the a
. </t> bove text for COSE_Mac follows. </t>
<sourcecode type="CDDL"><![CDATA[ <sourcecode type="cddl" markers="false" pn="section-6.1-7">
COSE_Mac = [ COSE_Mac = [
Headers, Headers,
payload : bstr / nil, payload : bstr / nil,
tag : bstr, tag : bstr,
recipients :[+COSE_recipient] recipients : [+COSE_recipient]
] ]
]]></sourcecode> </sourcecode>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-6.2
<name>MACed Messages with Implicit Key</name> ">
<t>In this section, we describe the structure and methods to be used whe <name slugifiedName="name-maced-messages-with-implici">MACed Messages wi
n doing MAC authentication for those cases where the recipient is implicitly kno th Implicit Key</name>
wn. </t> <t indent="0" pn="section-6.2-1">In this section, we describe the struct
<t>The MACed message uses the COSE_Mac0 structure defined in this sectio ure and methods to be used when doing MAC authentication for those cases where t
n for carrying the body. Examples of MACed messages with an implicit key can be he recipient is implicitly known. </t>
found in <xref target="Mac0Examples"/>. </t> <t indent="0" pn="section-6.2-2">The MACed message uses the COSE_Mac0 st
<t>The MAC structure can be encoded as either tagged or untagged dependi ructure defined in this section for carrying the body. Examples of MACed messag
ng on the context it will be used in. A tagged COSE_Mac0 structure is identifie es with an implicit key can be found in <xref target="Mac0Examples" format="defa
d by the CBOR tag 17. The CDDL fragment that represents this is: </t> ult" sectionFormat="of" derivedContent="Appendix C.6"/>. </t>
<sourcecode type="CDDL"><![CDATA[ <t indent="0" pn="section-6.2-3">The MAC structure can be encoded as eit
her tagged or untagged, depending on the context it will be used in. A tagged C
OSE_Mac0 structure is identified by the CBOR tag 17. The CDDL fragment that rep
resents this is: </t>
<sourcecode type="cddl" markers="false" pn="section-6.2-4">
COSE_Mac0_Tagged = #6.17(COSE_Mac0) COSE_Mac0_Tagged = #6.17(COSE_Mac0)
]]></sourcecode> </sourcecode>
<t>The COSE_Mac0 structure is a CBOR array. The fields of the array in <t indent="0" pn="section-6.2-5">The COSE_Mac0 structure is a CBOR array
order are: . The fields of the array, in order, are:
</t> </t>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-6.2-6">
<dt>protected:</dt> <dt pn="section-6.2-6.1">protected:</dt>
<dd>This is as described in <xref target="header-parameters"/>.</dd> <dd pn="section-6.2-6.2">This is as described in <xref target="header-
<dt>unprotected:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.</d
<dd>This is as described in <xref target="header-parameters"/>.</dd> d>
<dt>payload:</dt> <dt pn="section-6.2-6.3">unprotected:</dt>
<dd>This is as described in <xref target="Mac_n"/>.</dd> <dd pn="section-6.2-6.4">This is as described in <xref target="header-
<dt>tag:</dt> parameters" format="default" sectionFormat="of" derivedContent="Section 3"/>.</d
<dd>This field contains the MAC value.</dd> d>
<dt pn="section-6.2-6.5">payload:</dt>
<dd pn="section-6.2-6.6">This is as described in <xref target="Mac_n"
format="default" sectionFormat="of" derivedContent="Section 6.1"/>.</dd>
<dt pn="section-6.2-6.7">tag:</dt>
<dd pn="section-6.2-6.8">This field contains the MAC value.</dd>
</dl> </dl>
<t>The CDDL fragment that corresponds to the above text is: </t> <t indent="0" pn="section-6.2-7">The CDDL fragment that corresponds to t
<sourcecode type="CDDL"><![CDATA[ he above text is: </t>
<sourcecode type="cddl" markers="false" pn="section-6.2-8">
COSE_Mac0 = [ COSE_Mac0 = [
Headers, Headers,
payload : bstr / nil, payload : bstr / nil,
tag : bstr, tag : bstr,
] ]
]]></sourcecode> </sourcecode>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-6.3
<name>How to Compute and Verify a MAC</name> ">
<t>In order to get a consistent encoding of the data to be authenticated <name slugifiedName="name-how-to-compute-and-verify-a">How to Compute an
, the MAC_structure is used to have a canonical form. The MAC_structure is a CB d Verify a MAC</name>
OR array. The fields of the MAC_structure in order are: <t indent="0" pn="section-6.3-1">In order to get a consistent encoding o
f the data to be authenticated, the MAC_structure is used to create the canonica
l form. The MAC_structure is a CBOR array. The fields of the MAC_structure, in
order, are:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-6.
<li>A context text string that identifies the structure that is being 3-2">
encoded. This context text string is "MAC" for the COSE_Mac structure. This co <li pn="section-6.3-2.1" derivedCounter="1.">A context text string tha
ntext text string is "MAC0" for the COSE_Mac0 structure. </li> t identifies the structure that is being encoded. This context text string is "
<li>The protected attributes from the COSE_MAC structure. If there ar MAC" for the COSE_Mac structure. This context text string is "MAC0" for the COS
e no protected attributes, a zero-length bstr is used. </li> E_Mac0 structure. </li>
<li>The externally supplied data from the application encoded as a bst <li pn="section-6.3-2.2" derivedCounter="2.">The protected attributes
r type. If this field is not supplied, it defaults to a zero-length byte string from the body structure. If there are no protected attributes, a zero-length bs
. (See <xref target="Extern_AAD"/> for application guidance on constructing thi tr is used. </li>
s field.) </li> <li pn="section-6.3-2.3" derivedCounter="3.">The externally supplied d
<li>The payload to be MACed encoded in a bstr type. The payload is pl ata from the application, encoded as a bstr type. If this field is not supplied
aced here independent of how it is transported. </li> , it defaults to a zero-length byte string. (See <xref target="Extern_AAD" form
at="default" sectionFormat="of" derivedContent="Section 4.3"/> for application g
uidance on constructing this field.) </li>
<li pn="section-6.3-2.4" derivedCounter="4.">The payload to be MACed,
encoded in a bstr type. The full payload is used here, independent of how it is
transported. </li>
</ol> </ol>
<t>The CDDL fragment that corresponds to the above text is: </t> <t indent="0" pn="section-6.3-3">The CDDL fragment that corresponds to t
<sourcecode type="CDDL"><![CDATA[ he above text is: </t>
<sourcecode type="cddl" markers="false" pn="section-6.3-4">
MAC_structure = [ MAC_structure = [
context : "MAC" / "MAC0", context : "MAC" / "MAC0",
protected : empty_or_serialized_map, protected : empty_or_serialized_map,
external_aad : bstr, external_aad : bstr,
payload : bstr payload : bstr
] ]
]]></sourcecode> </sourcecode>
<t> <t indent="0" pn="section-6.3-5">
The steps to compute a MAC are: The steps to compute a MAC are:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-6.
<li>Create a MAC_structure and populate it with the appropriate fields 3-6">
. </li> <li pn="section-6.3-6.1" derivedCounter="1.">Create a MAC_structure an
<li>Create the value ToBeMaced by encoding the MAC_structure to a byte d populate it with the appropriate fields. </li>
string, using the encoding described in <xref target="CBOR-Canonical"/>. </li> <li pn="section-6.3-6.2" derivedCounter="2.">Create the value ToBeMace
<li>Call the MAC creation algorithm passing in K (the key to use), alg d by encoding the MAC_structure to a byte string, using the encoding described i
(the algorithm to MAC with), and ToBeMaced (the value to compute the MAC on). n <xref target="CBOR-Canonical" format="default" sectionFormat="of" derivedConte
</li> nt="Section 9"/>. </li>
<li>Place the resulting MAC in the 'tag' field of the COSE_Mac or COSE <li pn="section-6.3-6.3" derivedCounter="3.">Call the MAC creation alg
_Mac0 structure. </li> orithm, passing in K (the key to use), alg (the algorithm to MAC with), and ToBe
<li> Maced (the value to compute the MAC on). </li>
<li pn="section-6.3-6.4" derivedCounter="4.">Place the resulting MAC i
n the "tag" field of the COSE_Mac or COSE_Mac0 structure. </li>
<li pn="section-6.3-6.5" derivedCounter="5.">
For COSE_Mac structures, encrypt and encode the MAC key for each r ecipient of the message. For COSE_Mac structures, encrypt and encode the MAC key for each r ecipient of the message.
</li> </li>
</ol> </ol>
<t> <t indent="0" pn="section-6.3-7">
The steps to verify a MAC are: The steps to verify a MAC are:
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-6.
<li>Create a MAC_structure and populate it with the appropriate fields 3-8">
. </li> <li pn="section-6.3-8.1" derivedCounter="1.">Create a MAC_structure an
<li>Create the value ToBeMaced by encoding the MAC_structure to a byte d populate it with the appropriate fields. </li>
string, using the encoding described in <xref target="CBOR-Canonical"/>. </li> <li pn="section-6.3-8.2" derivedCounter="2.">Create the value ToBeMace
<li> d by encoding the MAC_structure to a byte string, using the encoding described i
For COSE_Mac structures, obtain the cryptographic key from one of n <xref target="CBOR-Canonical" format="default" sectionFormat="of" derivedConte
the recipients of the message. nt="Section 9"/>. </li>
<li pn="section-6.3-8.3" derivedCounter="3.">
For COSE_Mac structures, obtain the cryptographic key by decoding
and decrypting one of the recipient structures.
</li> </li>
<li>Call the MAC creation algorithm passing in K (the key to use), alg <li pn="section-6.3-8.4" derivedCounter="4.">Call the MAC creation alg
(the algorithm to MAC with), and ToBeMaced (the value to compute the MAC on). orithm, passing in K (the key to use), alg (the algorithm to MAC with), and ToBe
</li> Maced (the value to compute the MAC on). </li>
<li>Compare the MAC value to the 'tag' field of the COSE_Mac or COSE_M <li pn="section-6.3-8.5" derivedCounter="5.">Compare the MAC value to
ac0 structure. </li> the "tag" field of the COSE_Mac or COSE_Mac0 structure. </li>
</ol> </ol>
</section> </section>
</section> </section>
<section anchor="key-structure"> <section anchor="key-structure" numbered="true" removeInRFC="false" toc="inc
<name>Key Objects</name> lude" pn="section-7">
<t>A COSE Key structure is built on a CBOR map. The set of common paramet <name slugifiedName="name-key-objects">Key Objects</name>
ers that can appear in a COSE Key can be found in the IANA "COSE Key Common Para <t indent="0" pn="section-7-1">A COSE Key structure is built on a CBOR map
meters" registry (<xref target="cose-key-map-registry"/>). Additional parameter . The set of common parameters that can appear in a COSE Key can be found in th
s defined for specific key types can be found in the IANA "COSE Key Type Paramet e IANA "COSE Key Common Parameters" registry <xref target="COSE.KeyParameters" f
ers" registry (<xref target="COSE.KeyParameters"/>). </t> ormat="default" sectionFormat="of" derivedContent="COSE.KeyParameters"/> (see <x
<t>A COSE Key Set uses a CBOR array object as its underlying type. The va ref target="cose-key-map-registry" format="default" sectionFormat="of" derivedCo
lues of the array elements are COSE Keys. A COSE Key Set <bcp14>MUST</bcp14> ha ntent="Section 11.2"/>). Additional parameters defined for specific key types c
ve at least one element in the array. Examples of COSE Key Sets can be found in an be found in the IANA "COSE Key Type Parameters" registry <xref target="COSE.K
<xref target="COSE_KEYS"/>. </t> eyTypes" format="default" sectionFormat="of" derivedContent="COSE.KeyTypes"/>.
<t>Each element in a COSE Key Set <bcp14>MUST</bcp14> be processed indepen </t>
dently. If one element in a COSE Key Set is either malformed or uses a key that <t indent="0" pn="section-7-2">A COSE Key Set uses a CBOR array object as
is not understood by an application, that key is ignored and the other keys are its underlying type. The values of the array elements are COSE Keys. A COSE Ke
processed normally. </t> y Set <bcp14>MUST</bcp14> have at least one element in the array. Examples of C
<t>The element "kty" is a required element in a COSE_Key map. </t> OSE Key Sets can be found in <xref target="COSE_KEYS" format="default" sectionFo
<t>The CDDL grammar describing COSE_Key and COSE_KeySet is: </t> rmat="of" derivedContent="Appendix C.7"/>. </t>
<sourcecode type="CDDL"><![CDATA[ <t indent="0" pn="section-7-3">Each element in a COSE Key Set <bcp14>MUST<
/bcp14> be processed independently. If one element in a COSE Key Set is either
malformed or uses a key that is not understood by an application, that key is ig
nored, and the other keys are processed normally. </t>
<t indent="0" pn="section-7-4">The element "kty" is a required element in
a COSE_Key map. </t>
<t indent="0" pn="section-7-5">The CDDL grammar describing COSE_Key and CO
SE_KeySet is: </t>
<sourcecode type="cddl" markers="false" pn="section-7-6">
COSE_Key = { COSE_Key = {
1 => tstr / int, ; kty 1 =&gt; tstr / int, ; kty
? 2 => bstr, ; kid ? 2 =&gt; bstr, ; kid
? 3 => tstr / int, ; alg ? 3 =&gt; tstr / int, ; alg
? 4 => [+ (tstr / int) ], ; key_ops ? 4 =&gt; [+ (tstr / int) ], ; key_ops
? 5 => bstr, ; Base IV ? 5 =&gt; bstr, ; Base IV
* label => values * label =&gt; values
} }
COSE_KeySet = [+COSE_Key] COSE_KeySet = [+COSE_Key]
]]></sourcecode> </sourcecode>
<section anchor="COSE_KEY_KEYS"> <section anchor="COSE_KEY_KEYS" numbered="true" removeInRFC="false" toc="i
<name>COSE Key Common Parameters</name> nclude" pn="section-7.1">
<t>This document defines a set of common parameters for a COSE Key objec <name slugifiedName="name-cose-key-common-parameters">COSE Key Common Pa
t. <xref target="x-table-key-labels"/> provides a summary of the parameters def rameters</name>
ined in this section. There are also parameters that are defined for specific k <t indent="0" pn="section-7.1-1">This document defines a set of common p
ey types. Key-type-specific parameters can be found in <xref target="I-D.ietf-c arameters for a COSE Key object. <xref target="x-table-key-labels" format="defa
ose-rfc8152bis-algs"/>. </t> ult" sectionFormat="of" derivedContent="Table 4"/> provides a summary of the par
<table anchor="x-table-key-labels" align="center"> ameters defined in this section. There are also parameters that are defined for
<name>Key Map Labels</name> specific key types. Key-type-specific parameters can be found in <xref target=
"RFC9053" format="default" sectionFormat="of" derivedContent="RFC9053"/>. </t>
<table anchor="x-table-key-labels" align="center" pn="table-4">
<name slugifiedName="name-key-map-labels">Key Map Labels</name>
<thead> <thead>
<tr> <tr>
<th>Name</th> <th align="left" colspan="1" rowspan="1">Name</th>
<th>Label</th> <th align="left" colspan="1" rowspan="1">Label</th>
<th>CBOR Type</th> <th align="left" colspan="1" rowspan="1">CBOR Type</th>
<th>Value Registry</th> <th align="left" colspan="1" rowspan="1">Value Registry</th>
<th>Description</th> <th align="left" colspan="1" rowspan="1">Description</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>kty</td> <td align="left" colspan="1" rowspan="1">kty</td>
<td>1</td> <td align="left" colspan="1" rowspan="1">1</td>
<td>tstr / int</td> <td align="left" colspan="1" rowspan="1">tstr / int</td>
<td>COSE Key Types</td> <td align="left" colspan="1" rowspan="1">COSE Key Types</td>
<td>Identification of the key type</td> <td align="left" colspan="1" rowspan="1">Identification of the key
type</td>
</tr> </tr>
<tr> <tr>
<td>kid</td> <td align="left" colspan="1" rowspan="1">kid</td>
<td>2</td> <td align="left" colspan="1" rowspan="1">2</td>
<td>bstr</td> <td align="left" colspan="1" rowspan="1">bstr</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>Key identification value -- match to kid in message</td> <td align="left" colspan="1" rowspan="1">Key identification value
-- match to "kid" in message</td>
</tr> </tr>
- match to <span class="insert">"kid"</span> in message&lt;/td&gt;
<tr> <tr>
<td>alg</td> <td align="left" colspan="1" rowspan="1">alg</td>
<td>3</td> <td align="left" colspan="1" rowspan="1">3</td>
<td>tstr / int</td> <td align="left" colspan="1" rowspan="1">tstr / int</td>
<td>COSE Algorithms</td> <td align="left" colspan="1" rowspan="1">COSE Algorithms</td>
<td>Key usage restriction to this algorithm</td> <td align="left" colspan="1" rowspan="1">Key usage restriction to
this algorithm</td>
</tr> </tr>
<tr> <tr>
<td>key_ops</td> <td align="left" colspan="1" rowspan="1">key_ops</td>
<td>4</td> <td align="left" colspan="1" rowspan="1">4</td>
<td>[+ (tstr/int)]</td> <td align="left" colspan="1" rowspan="1">[+ (tstr/int)]</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>Restrict set of permissible operations</td> <td align="left" colspan="1" rowspan="1">Restrict set of permissib
le operations</td>
</tr> </tr>
<tr> <tr>
<td>Base IV</td> <td align="left" colspan="1" rowspan="1">Base IV</td>
<td>5</td> <td align="left" colspan="1" rowspan="1">5</td>
<td>bstr</td> <td align="left" colspan="1" rowspan="1">bstr</td>
<td/> <td align="left" colspan="1" rowspan="1"/>
<td>Base IV to be xor-ed with Partial IVs</td> <td align="left" colspan="1" rowspan="1">Base IV to be xor-ed with
Partial IVs</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<dl newline="false"> <dl newline="false" indent="3" spacing="normal" pn="section-7.1-3">
<dt>kty:</dt> <dt pn="section-7.1-3.1">kty:</dt>
<dd>This parameter is used to identify the family of keys for this str <dd pn="section-7.1-3.2">This parameter is used to identify the family
ucture and, thus, the set of key-type-specific parameters to be found. The set of keys for this structure and, thus, the set of key-type-specific parameters t
of values defined in this document can be found in <xref target="COSE.KeyTypes"/ o be found. The set of values defined in this document can be found in <xref ta
>. This parameter <bcp14>MUST</bcp14> be present in a key object. Implementati rget="COSE.KeyTypes" format="default" sectionFormat="of" derivedContent="COSE.Ke
ons <bcp14>MUST</bcp14> verify that the key type is appropriate for the algorith yTypes"/>. This parameter <bcp14>MUST</bcp14> be present in a key object. Impl
m being processed. The key type <bcp14>MUST</bcp14> be included as part of the ementations <bcp14>MUST</bcp14> verify that the key type is appropriate for the
trust decision process. </dd> algorithm being processed. The key type <bcp14>MUST</bcp14> be included as part
<dt>alg:</dt> of the trust-decision process. </dd>
<dd>This parameter is used to restrict the algorithm that is used with <dt pn="section-7.1-3.3">alg:</dt>
the key. If this parameter is present in the key structure, the application <b <dd pn="section-7.1-3.4">This parameter is used to restrict the algori
cp14>MUST</bcp14> verify that this algorithm matches the algorithm for which the thm that is used with the key. If this parameter is present in the key structur
key is being used. If the algorithms do not match, then this key object <bcp14 e, the application <bcp14>MUST</bcp14> verify that this algorithm matches the al
>MUST NOT</bcp14> be used to perform the cryptographic operation. Note that the gorithm for which the key is being used. If the algorithms do not match, then t
same key can be in a different key structure with a different or no algorithm s his key object <bcp14>MUST NOT</bcp14> be used to perform the cryptographic oper
pecified; however, this is considered to be a poor security practice. </dd> ation. Note that the same key can be in a different key structure with a differ
<dt>kid:</dt> ent or no algorithm specified; however, this is considered to be a poor security
<dd>This parameter is used to give an identifier for a key. The ident practice. </dd>
ifier is not structured and can be anything from a user-provided byte string to <dt pn="section-7.1-3.5">kid:</dt>
a value computed on the public portion of the key. This field is intended for m <dd pn="section-7.1-3.6">This parameter is used to give an identifier
atching against a 'kid' parameter in a message in order to filter down the set o for a key. The identifier is not structured and can be anything from a user-pro
f keys that need to be checked. vided byte string to a value computed on the public portion of the key. This fi
eld is intended for matching against a "kid" parameter in a message in order to
filter down the set of keys that need to be checked.
The value of the identifier is not a unique value and can occur in oth er key objects, even for different keys. The value of the identifier is not a unique value and can occur in oth er key objects, even for different keys.
</dd> </dd>
<dt>key_ops:</dt> <dt pn="section-7.1-3.7">key_ops:</dt>
<dd>This parameter is defined to restrict the set of operations that a <dd pn="section-7.1-3.8">This parameter is defined to restrict the set
key is to be used for. The value of the field is an array of values from <xref of operations that a key is to be used for. The value of the field is an array
target="x-table-key-ops"/>. Algorithms define the values of key ops that are p of values from <xref target="x-table-key-ops" format="default" sectionFormat="o
ermitted to appear and are required for specific operations. The set of values f" derivedContent="Table 5"/>. Algorithms define the values of key ops that are
matches that in <xref target="RFC7517"/> and <xref target="W3C.WebCrypto"/>. </ permitted to appear and are required for specific operations. The set of value
dd> s matches that in <xref target="RFC7517" format="default" sectionFormat="of" der
<dt>Base IV:</dt> ivedContent="RFC7517"/> and <xref target="W3C.WebCrypto" format="default" sectio
<dd> nFormat="of" derivedContent="W3C.WebCrypto"/>. </dd>
<t>This parameter is defined to carry the base portion of an IV. It <dt pn="section-7.1-3.9">Base IV:</dt>
is designed to be used with the Partial IV header parameter defined in <xref ta <dd pn="section-7.1-3.10">
rget="cose-headers"/>. This field provides the ability to associate a Base IV w <t indent="0" pn="section-7.1-3.10.1">This parameter is defined to c
ith a key that is then modified on a per message basis with the Partial IV. arry the base portion of an IV. It is designed to be used with the Partial IV h
eader parameter defined in <xref target="cose-headers" format="default" sectionF
ormat="of" derivedContent="Section 3.1"/>. This field provides the ability to a
ssociate a Base IV with a key that is then modified on a per-message basis with
the Partial IV.
</t> </t>
<t> Extreme care needs to be taken when using a Base IV in an applic ation. Many encryption algorithms lose security if the same IV is used twice. <t indent="0" pn="section-7.1-3.10.2"> Extreme care needs to be take n when using a Base IV in an application. Many encryption algorithms lose secur ity if the same IV is used twice.
</t> </t>
<t> <t indent="0" pn="section-7.1-3.10.3">
If different keys are derived for each sender, starting at the sam e Base IV is likely to satisfy this condition. If different keys are derived for each sender, starting at the sam e Base IV is likely to satisfy this condition.
If the same key is used for multiple senders, then the application needs to provide for a method of dividing the IV space up between the senders. If the same key is used for multiple senders, then the application needs to provide for a method of dividing the IV space up between the senders.
This could be done by providing a different base point to start fr om or a different Partial IV to start with and restricting the number of message s to be sent before rekeying. This could be done by providing a different base point to start fr om or a different Partial IV to start with and restricting the number of message s to be sent before rekeying.
</t> </t>
</dd> </dd>
</dl> </dl>
<table anchor="x-table-key-ops" align="center"> <table anchor="x-table-key-ops" align="center" pn="table-5">
<name>Key Operation Values</name> <name slugifiedName="name-key-operation-values">Key Operation Values</
name>
<thead> <thead>
<tr> <tr>
<th>Name</th> <th align="left" colspan="1" rowspan="1">Name</th>
<th>Value</th> <th align="left" colspan="1" rowspan="1">Value</th>
<th>Description</th> <th align="left" colspan="1" rowspan="1">Description</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>sign</td> <td align="left" colspan="1" rowspan="1">sign</td>
<td>1</td> <td align="left" colspan="1" rowspan="1">1</td>
<td>The key is used to create signatures. Requires private key fi <td align="left" colspan="1" rowspan="1">The key is used to create
elds.</td> signatures. Requires private key fields.</td>
</tr> </tr>
<tr> <tr>
<td>verify</td> <td align="left" colspan="1" rowspan="1">verify</td>
<td>2</td> <td align="left" colspan="1" rowspan="1">2</td>
<td>The key is used for verification of signatures.</td> <td align="left" colspan="1" rowspan="1">The key is used for verif
ication of signatures.</td>
</tr> </tr>
<tr> <tr>
<td>encrypt</td> <td align="left" colspan="1" rowspan="1">encrypt</td>
<td>3</td> <td align="left" colspan="1" rowspan="1">3</td>
<td>The key is used for key transport encryption.</td> <td align="left" colspan="1" rowspan="1">The key is used for key t
ransport encryption.</td>
</tr> </tr>
<tr> <tr>
<td>decrypt</td> <td align="left" colspan="1" rowspan="1">decrypt</td>
<td>4</td> <td align="left" colspan="1" rowspan="1">4</td>
<td>The key is used for key transport decryption. Requires privat <td align="left" colspan="1" rowspan="1">The key is used for key t
e key fields.</td> ransport decryption. Requires private key fields.</td>
</tr> </tr>
<tr> <tr>
<td>wrap key</td> <td align="left" colspan="1" rowspan="1">wrap key</td>
<td>5</td> <td align="left" colspan="1" rowspan="1">5</td>
<td>The key is used for key wrap encryption.</td> <td align="left" colspan="1" rowspan="1">The key is used for key w
rap encryption.</td>
</tr> </tr>
<tr> <tr>
<td>unwrap key</td> <td align="left" colspan="1" rowspan="1">unwrap key</td>
<td>6</td> <td align="left" colspan="1" rowspan="1">6</td>
<td>The key is used for key wrap decryption. Requires private key <td align="left" colspan="1" rowspan="1">The key is used for key w
fields.</td> rap decryption. Requires private key fields.</td>
</tr> </tr>
<tr> <tr>
<td>derive key</td> <td align="left" colspan="1" rowspan="1">derive key</td>
<td>7</td> <td align="left" colspan="1" rowspan="1">7</td>
<td>The key is used for deriving keys. Requires private key field <td align="left" colspan="1" rowspan="1">The key is used for deriv
s.</td> ing keys. Requires private key fields.</td>
</tr> </tr>
<tr> <tr>
<td>derive bits</td> <td align="left" colspan="1" rowspan="1">derive bits</td>
<td>8</td> <td align="left" colspan="1" rowspan="1">8</td>
<td>The key is used for deriving bits not to be used as a key. Re <td align="left" colspan="1" rowspan="1">The key is used for deriv
quires private key fields.</td> ing bits not to be used as a key. Requires private key fields.</td>
</tr> </tr>
<tr> <tr>
<td>MAC create</td> <td align="left" colspan="1" rowspan="1">MAC create</td>
<td>9</td> <td align="left" colspan="1" rowspan="1">9</td>
<td>The key is used for creating MACs.</td> <td align="left" colspan="1" rowspan="1">The key is used for creat
ing MACs.</td>
</tr> </tr>
<tr> <tr>
<td>MAC verify</td> <td align="left" colspan="1" rowspan="1">MAC verify</td>
<td>10</td> <td align="left" colspan="1" rowspan="1">10</td>
<td>The key is used for validating MACs.</td> <td align="left" colspan="1" rowspan="1">The key is used for valid
ating MACs.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-8">
<name>Taxonomy of Algorithms used by COSE</name> <name slugifiedName="name-taxonomy-of-algorithms-used">Taxonomy of Algorit
<t> hms Used by COSE</name>
<t indent="0" pn="section-8-1">
In this section, a taxonomy of the different algorithm types that can be used in COSE is laid out. In this section, a taxonomy of the different algorithm types that can be used in COSE is laid out.
This taxonomy should not be considered to be exhaustive. This taxonomy should not be considered to be exhaustive.
New algorithms will be created which will not fit into this taxonomy. New algorithms will be created that will not fit into this taxonomy.
</t> </t>
<section anchor="SigAlgs"> <section anchor="SigAlgs" numbered="true" removeInRFC="false" toc="include
<name>Signature Algorithms</name> " pn="section-8.1">
<t> <name slugifiedName="name-signature-algorithms">Signature Algorithms</na
Signature algorithms provide data origination and data integrity servi me>
ces. <t indent="0" pn="section-8.1-1">
Signature algorithms provide data-origination and data-integrity servi
ces.
Data origination provides the ability to infer who originated the data based on who signed the data. Data origination provides the ability to infer who originated the data based on who signed the data.
Data integrity provides the ability to verify that the data has not be en modified since it was signed. Data integrity provides the ability to verify that the data has not be en modified since it was signed.
</t> </t>
<t indent="0" pn="section-8.1-2">
<t>
There are two general signature algorithm schemes. There are two general signature algorithm schemes.
The first is signature with appendix. The first is signature with appendix.
In this scheme, the message content is processed and a signature is pr oduced; the signature is called the appendix. In this scheme, the message content is processed and a signature is pr oduced; the signature is called the appendix.
This is the scheme used by algorithms such as ECDSA and the RSA Probab ilistic Signature Scheme (RSASSA-PSS). This is the scheme used by algorithms such as ECDSA and the RSA Probab ilistic Signature Scheme (RSASSA-PSS).
(In fact, the SSA in RSASSA-PSS stands for Signature Scheme with Appen dix.) (In fact, the SSA in RSASSA-PSS stands for Signature Scheme with Appen dix.)
</t> </t>
<t> <t indent="0" pn="section-8.1-3">
The signature functions for this scheme are: The signature functions for this scheme are:
</t> </t>
<artwork type=""><![CDATA[ <sourcecode type="pseudocode" markers="false" pn="section-8.1-4">
signature = Sign(message content, key) signature = Sign(message content, key)
valid = Verification(message content, key, signature) valid = Verification(message content, key, signature)
]]></artwork> </sourcecode>
<t indent="0" pn="section-8.1-5">
<t> The second scheme is signature with message recovery; an example of su
The second scheme is signature with message recovery (an example of su ch an algorithm is <xref target="PVSig" format="default" sectionFormat="of" deri
ch an algorithm is <xref target="PVSig"/>). vedContent="PVSig"/>.
In this scheme, the message content is processed, but part of it is in cluded in the signature. In this scheme, the message content is processed, but part of it is in cluded in the signature.
Moving bytes of the message content into the signature allows for smal Moving bytes of the message content into the signature allows for smal
ler signatures; the signature size is still potentially large, but the message c ler signed messages; the signature size is still potentially large, but the mess
ontent has shrunk. age content has shrunk.
This has implications for systems implementing these algorithms and fo This has implications for systems implementing these algorithms and ap
r applications that use them. plications that use them.
The first is that the message content is not fully available until aft er a signature has been validated. The first is that the message content is not fully available until aft er a signature has been validated.
Until that point, the part of the message contained inside of the sign ature is unrecoverable. Until that point, the part of the message contained inside of the sign ature is unrecoverable.
The second is that the security analysis of the strength of the signat ure can be very much dependent on the structure of the message content. The second implication is that the security analysis of the strength o f the signature can be very much dependent on the structure of the message conte nt.
Finally, in the event that multiple signatures are applied to a messag e, all of the signature algorithms are going to be required to consume the same bytes of message content. Finally, in the event that multiple signatures are applied to a messag e, all of the signature algorithms are going to be required to consume the same bytes of message content.
This means that the mixing of the signature with message recovery and signature with appendix schemes in a single message is not supported. This means that the mixing of the signature-with-message-recovery and signature-with-appendix schemes in a single message is not supported.
</t> </t>
<t indent="0" pn="section-8.1-6">The signature functions for this scheme
<t>The signature functions for this scheme are: </t> are: </t>
<sourcecode type="pseudocode" markers="false" pn="section-8.1-7">
<artwork type=""><![CDATA[
signature, message sent = Sign(message content, key) signature, message sent = Sign(message content, key)
valid, message content = Verification(message sent, key, signature) valid, message content = Verification(message sent, key, signature)
]]></artwork> </sourcecode>
<t indent="0" pn="section-8.1-8">
<t> No message recovery signature algorithms have been formally defined fo
No message recovery signature algorithms have been formally defined fo r COSE yet. Given the new constraints arising from this scheme, while some issue
r COSE yet, and given the new constraints arising from this schemes, while some s have already been identified, there is a high probability that additional issu
of these issues have already been identified there is a high probability that ad es will arise when integrating message recovery signature algorithms.
ditional issues will arise when integrating message recovery signature algorithm The first algorithm defined is going to need to make decisions about
s. these issues, and those decisions are likely to be binding on any further algor
The first algorithm defined is going to need to make decisions about ithms defined.
these issues and those decisions are likely to be binding on any further algori
thms defined.
</t> </t>
<t indent="0" pn="section-8.1-9">
<t>
We use the following terms below: We use the following terms below:
</t> </t>
<dl> <dl indent="3" newline="false" spacing="normal" pn="section-8.1-10">
<dt>message content bytes:</dt> <dt pn="section-8.1-10.1">message content bytes:</dt>
<dd>The byte provided by the application to be signed.</dd> <dd pn="section-8.1-10.2">The byte string provided by the application
<dt>to-be-signed bytes:</dt> to be signed.</dd>
<dd>The byte string passed into the signature algorithm.</dd> <dt pn="section-8.1-10.3">to-be-signed bytes:</dt>
<dt>recovered bytes:</dt> <dd pn="section-8.1-10.4">The byte string passed into the signature al
<dd>The bytes recovered during the signature verification process.</dd gorithm.</dd>
> <dt pn="section-8.1-10.5">recovered bytes:</dt>
<dd pn="section-8.1-10.6">The bytes recovered during the signature ver
ification process.</dd>
</dl> </dl>
<t indent="0" pn="section-8.1-11">
<t>
Some of the issues that have already been identified are: Some of the issues that have already been identified are:
</t> </t>
<ul bare="false" empty="false" indent="3" spacing="normal" pn="section-8
<ul> .1-12">
<li> <li pn="section-8.1-12.1">
The to-be-signed bytes are not the same as the message content bytes . The to-be-signed bytes are not the same as the message content bytes .
This is because we build a larger to-be-signed message during the si gnature processing. This is because we build a larger to-be-signed message during the si gnature processing.
The recovered bytes length may exceed the message content length, b ut not the length of the to-be-signed bytes. The length of the recovered bytes may exceed the length of the messa ge content, but not the length of the to-be-signed bytes.
This may lead to privacy considerations if, for example, the externa lly supplied data contains confidential information. This may lead to privacy considerations if, for example, the externa lly supplied data contains confidential information.
</li> </li>
<li pn="section-8.1-12.2">
<li> There may be difficulties in determining where the recovered bytes m
There may be difficulties in determining where the recovered bytes m atch up with the to-be-signed bytes, because the recovered bytes contain data no
atch up with the to-be-signed bytes, because the recovered bytes contains data t in the message content bytes.
not in the message content bytes.
One possible option would be to create a padding scheme to prevent t hat. One possible option would be to create a padding scheme to prevent t hat.
</li> </li>
<li pn="section-8.1-12.3">
<li> Not all message recovery signature algorithms take the recovered byt
Not all message recovery signature algorithms take the recovered by es from the end of the to-be-signed bytes.
tes from the end of the to-be-signed bytes. This is a problem, because the message content bytes are at the end
This is a problem because the message content bytes are at the end o of the to-be-signed bytes.
f the to-be-signed bytes. If the bytes to be recovered are taken from the start of the to-be-s
If the bytes to be recovered are taken from the start of the to-be-s igned bytes, then, by default, none of the message content bytes may be included
igned bytes then, by default, none of the message content bytes may be included in the recovered bytes.
in the recovered bytes. One possible option to deal with this is to reverse the to-be-signed
One possible option to deal with this is to reverse the to-be-signed data in the event that recovered bytes are taken from the start rather than the
data in the event that recovered bytes are taken from the start rather than end end of the to-be-signed bytes.
of the to-be-signed bytes.
</li> </li>
</ul> </ul>
<t indent="0" pn="section-8.1-13">
<t>
Signature algorithms are used with the COSE_Signature and COSE_Sign1 s tructures. Signature algorithms are used with the COSE_Signature and COSE_Sign1 s tructures.
At the time of this writing, only signatures with appendixes are defin ed for use with COSE; however, considerable interest has been expressed in using a signature with message recovery algorithm due to the effective size reduction that is possible. At the time of this writing, only signatures with appendices are defin ed for use with COSE; however, considerable interest has been expressed in using a signature-with-message-recovery algorithm, due to the effective size reductio n that is possible.
</t> </t>
</section> </section>
<section numbered="true" removeInRFC="false" toc="include" pn="section-8.2
<section> ">
<name>Message Authentication Code (MAC) Algorithms</name> <name slugifiedName="name-message-authentication-code">Message Authentic
<t>Message Authentication Codes (MACs) provide data authentication and i ation Code (MAC) Algorithms</name>
ntegrity protection. They provide either no or very limited data origination. <t indent="0" pn="section-8.2-1">Message Authentication Codes (MACs) pro
A MAC, for example, cannot be used to prove the identity of the sender to a thir vide data authentication and integrity protection. They provide either no or ve
d party. </t> ry limited data origination. A MAC, for example, cannot be used to prove the id
<t>MACs use the same scheme as signature with appendix algorithms. The entity of the sender to a third party. </t>
message content is processed and an authentication code is produced. The authen <t indent="0" pn="section-8.2-2">MACs use the same scheme as signature-w
tication code is frequently called a tag. </t> ith-appendix algorithms. The message content is processed, and an authenticatio
<t>The MAC functions are: </t> n code is produced. The authentication code is frequently called a tag. </t>
<artwork type=""><![CDATA[ <t indent="0" pn="section-8.2-3">The MAC functions are: </t>
<sourcecode type="pseudocode" markers="false" pn="section-8.2-4">
tag = MAC_Create(message content, key) tag = MAC_Create(message content, key)
valid = MAC_Verify(message content, key, tag) valid = MAC_Verify(message content, key, tag)
]]></artwork> </sourcecode>
<t> <t indent="0" pn="section-8.2-5">
MAC algorithms can be based on either a block cipher algorithm (i.e., AE S-MAC) or a hash algorithm (i.e., a Hash-based Message Authentication Code (HMAC )). MAC algorithms can be based on either a block cipher algorithm (i.e., AE S-MAC) or a hash algorithm (i.e., a Hash-based Message Authentication Code (HMAC )).
<xref target="I-D.ietf-cose-rfc8152bis-algs"/> defines a MAC algorithm u sing each of these constructions. <xref target="RFC9053" format="default" sectionFormat="of" derivedConten t="RFC9053"/> defines a MAC algorithm using each of these constructions.
</t> </t>
<t>MAC algorithms are used in the COSE_Mac and COSE_Mac0 structures. </ t> <t indent="0" pn="section-8.2-6">MAC algorithms are used in the COSE_Mac and COSE_Mac0 structures. </t>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-8.3
<name>Content Encryption Algorithms</name> ">
<t>Content encryption algorithms provide data confidentiality for potent <name slugifiedName="name-content-encryption-algorith">Content Encryptio
ially large blocks of data using a symmetric key. They provide integrity on the n Algorithms</name>
data that was encrypted; however, they provide either no or very limited data o <t indent="0" pn="section-8.3-1">Content encryption algorithms provide d
rigination. (One cannot, for example, be used to prove the identity of the send ata confidentiality for potentially large blocks of data using a symmetric key.
er to a third party.) The ability to provide data origination is linked to how t They provide integrity on the data that was encrypted; however, they provide ei
he CEK is obtained. </t> ther no or very limited data origination. (One cannot, for example, be used to
<t>COSE restricts the set of legal content encryption algorithms to thos prove the identity of the sender to a third party.) The ability to provide data
e that support authentication both of the content and additional data. The encr origination is linked to how the CEK is obtained. </t>
yption process will generate some type of authentication value, but that value m <t indent="0" pn="section-8.3-2">COSE restricts the set of legal content
ay be either explicit or implicit in terms of the algorithm definition. For sim encryption algorithms to those that support authentication both of the content
plicity's sake, the authentication code will normally be defined as being append and additional data. The encryption process will generate some type of authenti
ed to the ciphertext stream. The encryption functions are: </t> cation value, but that value may be either explicit or implicit in terms of the
<artwork type=""><![CDATA[ algorithm definition. For simplicity's sake, the authentication code will norma
lly be defined as being appended to the ciphertext stream. The encryption funct
ions are: </t>
<sourcecode type="pseudocode" markers="false" pn="section-8.3-3">
ciphertext = Encrypt(message content, key, additional data) ciphertext = Encrypt(message content, key, additional data)
valid, message content = Decrypt(ciphertext, key, additional data) valid, message content = Decrypt(ciphertext, key, additional data)
]]></artwork> </sourcecode>
<t>Most AEAD algorithms are logically defined as returning the message c <t indent="0" pn="section-8.3-4">Most AEAD algorithms are logically defi
ontent only if the decryption is valid. Many but not all implementations will f ned as returning the message content only if the decryption is valid. Many, but
ollow this convention. The message content <bcp14>MUST NOT</bcp14> be used if t not all, implementations will follow this convention. The message content <bcp
he decryption does not validate. </t> 14>MUST NOT</bcp14> be used if the decryption does not validate. </t>
<t>These algorithms are used in COSE_Encrypt and COSE_Encrypt0. </t> <t indent="0" pn="section-8.3-5">These algorithms are used in COSE_Encry
pt and COSE_Encrypt0. </t>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-8.4
<name>Key Derivation Functions (KDFs)</name> ">
<t>KDFs are used to take some secret value and generate a different one. <name slugifiedName="name-key-derivation-functions-kd">Key Derivation Fu
The secret value comes in three flavors: nctions (KDFs)</name>
<t indent="0" pn="section-8.4-1">KDFs are used to take some secret value
and generate a different one. The secret value comes in three flavors:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-8
<li>Secrets that are uniformly random: This is the type of secret tha .4-2">
t is created by a good random number generator.</li> <li pn="section-8.4-2.1">Secrets that are uniformly random. This is t
<li>Secrets that are not uniformly random: This is type of secret that he type of secret that is created by a good random number generator.</li>
is created by operations like key agreement.</li> <li pn="section-8.4-2.2">Secrets that are not uniformly random. This i
<li>Secrets that are not random: This is the type of secret that peopl s the type of secret that is created by operations like key agreement.</li>
e generate for things like passwords.</li> <li pn="section-8.4-2.3">Secrets that are not random. This is the type
of secret that people generate for things like passwords.</li>
</ul> </ul>
<t> <t indent="0" pn="section-8.4-3">
General KDFs work well with the first type of secret, can do reasonably well w General KDFs work well with the first type of secret, can do reasonably well w
ith the second type of secret, and generally do poorly with the last type of sec ith the second type of secret, and generally do poorly with the last type of sec
ret. ret. Functions like Argon2 <xref target="RFC9106" format="default" sectionFormat
<!-- None of the KDFs in this section are designed to deal with the type of se ="of" derivedContent="RFC9106"/> need to be used for nonrandom secrets.
crets that are used for passwords. -->
Functions like Argon2 <xref target="I-D.irtf-cfrg-argon2"/> need to be used fo
r non-random secrets.
</t> </t>
<t> <t indent="0" pn="section-8.4-4">
The same KDF can be set up to deal with the first two types of secrets in a di The same KDF can be set up to deal with the first two types of secrets in diff
fferent way. erent ways.
The KDF defined in section 5.1 of <xref target="I-D.ietf-cose-rfc8152bis-algs" The KDF defined in <xref target="RFC9053" sectionFormat="of" section="5.1" for
/> is such a function. mat="default" derivedLink="https://rfc-editor.org/rfc/rfc9053#section-5.1" deriv
edContent="RFC9053"/> is such a function.
This is reflected in the set of algorithms defined around the HMAC-based Extra ct-and-Expand Key Derivation Function (HKDF). This is reflected in the set of algorithms defined around the HMAC-based Extra ct-and-Expand Key Derivation Function (HKDF).
</t> </t>
<t>When using KDFs, one component that is included is context informatio n. Context information is used to allow for different keying information to be derived from the same secret. The use of context-based keying material is consi dered to be a good security practice. </t> <t indent="0" pn="section-8.4-5">When using KDFs, one component that is included is context information. Context information is used to allow for diffe rent keying information to be derived from the same secret. The use of context- based keying material is considered to be a good security practice. </t>
</section> </section>
<section anchor="key-management-algs"> <section anchor="key-management-algs" numbered="true" removeInRFC="false"
<name>Content Key Distribution Methods</name> toc="include" pn="section-8.5">
<t> <name slugifiedName="name-content-key-distribution-met">Content Key Dist
ribution Methods</name>
<t indent="0" pn="section-8.5-1">
Content key distribution methods (recipient algorithms) can be defined i nto a number of different classes. Content key distribution methods (recipient algorithms) can be defined i nto a number of different classes.
COSE has the ability to support many classes of recipient algorithms. COSE has the ability to support many classes of recipient algorithms.
In this section, a number of classes are listed. In this section, a number of classes are listed. For the recipient algor
The names of the recipient algorithm classes used here are the same as t ithm classes defined in <xref target="RFC7516" format="default" sectionFormat="o
hose defined in <xref target="RFC7516"/>. f" derivedContent="RFC7516"/>, the same names are used.
Other specifications use different terms for the recipient algorithm cla sses or do not support some of the recipient algorithm classes. Other specifications use different terms for the recipient algorithm cla sses or do not support some of the recipient algorithm classes.
</t> </t>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-8
<name>Direct Encryption</name> .5.1">
<t>The direct encryption class algorithms share a secret between the s <name slugifiedName="name-direct-encryption">Direct Encryption</name>
ender and the recipient that is used either directly or after manipulation as th <t indent="0" pn="section-8.5.1-1">The Direct Encryption class of algo
e CEK. When direct encryption mode is used, it <bcp14>MUST</bcp14> be the only rithms share a secret between the sender and the recipient that is used either d
mode used on the message. </t> irectly or after manipulation as the CEK. When direct-encryption mode is used,
<t>The COSE_Recipient structure for the recipient is organized as foll it <bcp14>MUST</bcp14> be the only mode used on the message. </t>
ows: </t> <t indent="0" pn="section-8.5.1-2">The COSE_Recipient structure for th
<ul> e recipient is organized as follows: </t>
<li>The 'protected' field <bcp14>MUST</bcp14> be a zero-length byt <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
e string unless it is used in the computation of the content key. </li> -8.5.1-3">
<li>The 'alg' header parameter <bcp14>MUST</bcp14> be present. </ <li pn="section-8.5.1-3.1">The "protected" field <bcp14>MUST</bcp14>
li> be a zero-length byte string unless it is used in the computation of the conten
<li>A header parameter identifying the shared secret <bcp14>SHOULD t key. </li>
</bcp14> be present. </li> <li pn="section-8.5.1-3.2">The "alg" header parameter <bcp14>MUST</b
<li>The 'ciphertext' field <bcp14>MUST</bcp14> be a zero-length by cp14> be present. </li>
te string. </li> <li pn="section-8.5.1-3.3">A header parameter identifying the shared
<li>The 'recipients' field <bcp14>MUST</bcp14> be absent. </li> secret <bcp14>SHOULD</bcp14> be present. </li>
<li pn="section-8.5.1-3.4">The "ciphertext" field <bcp14>MUST</bcp14
> be a zero-length byte string. </li>
<li pn="section-8.5.1-3.5">The "recipients" field <bcp14>MUST</bcp14
> be absent. </li>
</ul> </ul>
</section> </section>
<section anchor="key_wrap_algs"> <section anchor="key_wrap_algs" numbered="true" removeInRFC="false" toc=
<name>Key Wrap</name> "include" pn="section-8.5.2">
<t>In key wrap mode, the CEK is randomly generated and that key is the <name slugifiedName="name-key-wrap">Key Wrap</name>
n encrypted by a shared secret between the sender and the recipient. All of the <t indent="0" pn="section-8.5.2-1">In key wrap mode, the CEK is random
currently defined key wrap algorithms for COSE are AE algorithms. Key wrap mod ly generated, and that key is then encrypted by a shared secret between the send
e is considered to be superior to direct encryption if the system has any capabi er and the recipient. All of the currently defined key wrap algorithms for COSE
lity for doing random key generation. This is because the shared key is used to are AE algorithms. Key wrap mode is considered to be superior to Direct Encryp
wrap random data rather than data that has some degree of organization and may tion if the system has any capability for doing random-key generation. This is
in fact be repeating the same content. The use of key wrap loses the weak data because the shared key is used to wrap random data rather than data that has som
origination that is provided by the direct encryption algorithms. </t> e degree of organization and may in fact be repeating the same content. The use
<t>The COSE_Recipient structure for the recipient is organized as foll of key wrap loses the weak data origination that is provided by the direct-encr
ows: </t> yption algorithms. </t>
<ul> <t indent="0" pn="section-8.5.2-2">The COSE_Recipient structure for th
<li>The 'protected' field <bcp14>MUST</bcp14> be absent if the key e recipient is organized as follows: </t>
wrap algorithm is an AE algorithm. </li> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li> -8.5.2-3">
The 'recipients' field is normally absent, but can be used. <li pn="section-8.5.2-3.1">The "protected" field <bcp14>MUST</bcp14>
be a zero-length byte string if the key wrap algorithm is an AE algorithm. </l
i>
<li pn="section-8.5.2-3.2">
The "recipients" field is normally absent but can be used.
Applications <bcp14>MUST</bcp14> deal with a recipient field being present that has an unsupported algorithm. Applications <bcp14>MUST</bcp14> deal with a recipient field being present that has an unsupported algorithm.
Failing to decrypt that specific recipient is an acceptable way of dealing with it. Failing to decrypt that specific recipient is an acceptable way of dealing with it.
Failing to process the message is not an acceptable way of dealing with it. Failing to process the message is not an acceptable way of dealing with it.
</li> </li>
<li>The plaintext to be encrypted is the key from next layer down (usually the content layer). <li pn="section-8.5.2-3.3">The plaintext to be encrypted is the key from the next layer down (usually the content layer).
</li> </li>
<li>At a minimum, the 'unprotected' field <bcp14>MUST</bcp14> cont ain the 'alg' header parameter and <bcp14>SHOULD</bcp14> contain a header parame ter identifying the shared secret. </li> <li pn="section-8.5.2-3.4">At a minimum, the "unprotected" field <bc p14>MUST</bcp14> contain the "alg" header parameter and <bcp14>SHOULD</bcp14> co ntain a header parameter identifying the shared secret. </li>
</ul> </ul>
</section> </section>
<section anchor="KeyTransport"> <section anchor="KeyTransport" numbered="true" removeInRFC="false" toc="
<name>Key Transport</name> include" pn="section-8.5.3">
<t>Key transport mode is also called key encryption mode in some stand <name slugifiedName="name-key-transport">Key Transport</name>
ards. Key transport mode differs from key wrap mode in that it uses an asymmetr <t indent="0" pn="section-8.5.3-1">Key transport mode is also called k
ic encryption algorithm rather than a symmetric encryption algorithm to protect ey encryption mode in some standards. Key transport mode differs from key wrap
the key. mode in that it uses an asymmetric encryption algorithm rather than a symmetric
A set of key transport algorithms are defined in <xref target="RFC8230"/ encryption algorithm to protect the key.
>. A set of key transport algorithms is defined in <xref target="RFC8230" f
ormat="default" sectionFormat="of" derivedContent="RFC8230"/>.
</t> </t>
<t>When using a key transport algorithm, the COSE_Recipient structure for the recipient is organized as follows: <t indent="0" pn="section-8.5.3-2">When using a key transport algorith m, the COSE_Recipient structure for the recipient is organized as follows:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>The 'protected' field <bcp14>MUST</bcp14> be absent. </li> -8.5.3-3">
<li>The plaintext to be encrypted is the key from the next layer d <li pn="section-8.5.3-3.1">The "protected" field <bcp14>MUST</bcp14>
own (usually the content layer). </li> be a zero-length byte string. </li>
<li>At a minimum, the 'unprotected' field <bcp14>MUST</bcp14> cont <li pn="section-8.5.3-3.2">The plaintext to be encrypted is the key
ain the 'alg' header parameter and <bcp14>SHOULD</bcp14> contain a parameter ide from the next layer down (usually the content layer). </li>
ntifying the asymmetric key. </li> <li pn="section-8.5.3-3.3">At a minimum, the "unprotected" field <bc
p14>MUST</bcp14> contain the "alg" header parameter and <bcp14>SHOULD</bcp14> co
ntain a parameter identifying the asymmetric key. </li>
</ul> </ul>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-8
<name>Direct Key Agreement</name> .5.4">
<t>The 'direct key agreement' class of recipient algorithms uses a key <name slugifiedName="name-direct-key-agreement">Direct Key Agreement</
agreement method to create a shared secret. A KDF is then applied to the share name>
d secret to derive a key to be used in protecting the data. This key is normall <t indent="0" pn="section-8.5.4-1">The Direct Key Agreement class of r
y used as a CEK or MAC key, but could be used for other purposes if more than tw ecipient algorithms uses a key agreement method to create a shared secret. A KD
o layers are in use (see <xref target="three-layer"/>). </t> F is then applied to the shared secret to derive a key to be used in protecting
<t>The most commonly used key agreement algorithm is Diffie-Hellman, b the data. This key is normally used as a CEK or MAC key but could be used for o
ut other variants exist. Since COSE is designed for a store and forward environ ther purposes if more than two layers are in use (see <xref target="three-layer"
ment rather than an online environment, many of the DH variants cannot be used a format="default" sectionFormat="of" derivedContent="Appendix B"/>). </t>
s the receiver of the message cannot provide any dynamic key material. One side <t indent="0" pn="section-8.5.4-2">The most commonly used key agreemen
effect of this is that forward secrecy (see <xref target="RFC4949"/>) is not ac t algorithm is Diffie-Hellman, but other variants exist. Since COSE is designed
hievable. A static key will always be used for the receiver of the COSE object. for a store-and-forward environment rather than an online environment, many of
</t> the DH variants cannot be used, as the receiver of the message cannot provide an
<t> y dynamic key material. One side effect of this is that forward secrecy (see <x
ref target="RFC4949" format="default" sectionFormat="of" derivedContent="RFC4949
"/>) is not achievable. A static key will always be used for the receiver of th
e COSE object. </t>
<t indent="0" pn="section-8.5.4-3">
Two variants of DH that are supported are: Two variants of DH that are supported are:
</t> </t>
<ul empty="true"> <dl indent="3" newline="false" spacing="normal" pn="section-8.5.4-4">
<li>Ephemeral-Static (ES) DH: where the sender of the message crea <dt pn="section-8.5.4-4.1">Ephemeral-Static (ES) DH:</dt>
tes a one-time DH key and uses a static key for the recipient. The use of the e <dd pn="section-8.5.4-4.2">The sender of the message creates a one-t
phemeral sender key means that no additional random input is needed as this is r ime DH key and uses a static key for the recipient. The use of the ephemeral se
andomly generated for each message. </li> nder key means that no additional random input is needed, as this is randomly ge
<li> nerated for each message.</dd>
Static-Static (SS) DH: where a static key is used for both the sen <dt pn="section-8.5.4-4.3">Static-Static (SS) DH:</dt>
der and the recipient. The use of static keys allows for the recipient to get a <dd pn="section-8.5.4-4.4">A static key is used for both the sender
weak version of data origination for the message. When static-static key agree and the recipient. The use of static keys allows for the recipient to get a wea
ment is used, then some piece of unique data for the KDF is required to ensure t k version of data origination for the message. When Static-Static key agreement
hat a different key is created for each message. is used, then some piece of unique data for the KDF is required to ensure that
</li> a different key is created for each message.</dd>
</ul> </dl>
<t>When direct key agreement mode is used, there <bcp14>MUST</bcp14> b <t indent="0" pn="section-8.5.4-5">When direct key agreement mode is u
e only one recipient in the message. This method creates the key directly, and sed, there <bcp14>MUST</bcp14> be only one recipient in the message. This metho
that makes it difficult to mix with additional recipients. If multiple recipien d creates the key directly, and that makes it difficult to mix with additional r
ts are needed, then the version with key wrap needs to be used. </t> ecipients. If multiple recipients are needed, then the version with key wrap ne
<t>The COSE_Recipient structure for the recipient is organized as foll eds to be used. </t>
ows: </t> <t indent="0" pn="section-8.5.4-6">The COSE_Recipient structure for th
<ul> e recipient is organized as follows: </t>
<li>At a minimum, headers <bcp14>MUST</bcp14> contain the 'alg' h <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
eader parameter and <bcp14>SHOULD</bcp14> contain a header parameter identifying -8.5.4-7">
the recipient's asymmetric key. </li> <li pn="section-8.5.4-7.1">At a minimum, headers <bcp14>MUST</bcp14
<li>The headers <bcp14>SHOULD</bcp14> identify the sender's key fo > contain the "alg" header parameter and <bcp14>SHOULD</bcp14> contain a header
r the static-static versions and <bcp14>MUST</bcp14> contain the sender's epheme parameter identifying the recipient's asymmetric key. </li>
ral key for the ephemeral-static versions. </li> <li pn="section-8.5.4-7.2">The headers <bcp14>SHOULD</bcp14> identif
y the sender's key for the Static-Static versions and <bcp14>MUST</bcp14> contai
n the sender's ephemeral key for the ephemeral-static versions. </li>
</ul> </ul>
</section> </section>
<section anchor="ECDH-Direct"> <section anchor="ECDH-Direct" numbered="true" removeInRFC="false" toc="i
<name>Key Agreement with Key Wrap</name> nclude" pn="section-8.5.5">
<t>Key Agreement with Key Wrap uses a randomly generated CEK. The CEK <name slugifiedName="name-key-agreement-with-key-wrap">Key Agreement w
is then encrypted using a key wrap algorithm and a key derived from the shared ith Key Wrap</name>
secret computed by the key agreement algorithm. The function for this would be: <t indent="0" pn="section-8.5.5-1">Key Agreement with Key Wrap uses a
</t> randomly generated CEK. The CEK is then encrypted using a key wrap algorithm an
<artwork type=""><![CDATA[ d a key derived from the shared secret computed by the key agreement algorithm.
The function for this would be: </t>
<sourcecode type="pseudocode" markers="false" pn="section-8.5.5-2">
encryptedKey = KeyWrap(KDF(DH-Shared, context), CEK) encryptedKey = KeyWrap(KDF(DH-Shared, context), CEK)
]]></artwork> </sourcecode>
<t>The COSE_Recipient structure for the recipient is organized as foll <t indent="0" pn="section-8.5.5-3">The COSE_Recipient structure for th
ows: </t> e recipient is organized as follows: </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>The 'protected' field is fed into the KDF context structure. -8.5.5-4">
</li> <li pn="section-8.5.5-4.1">The "protected" field is fed into the KDF
<li>The plaintext to be encrypted is the key from the next layer d context structure. </li>
own (usually the content layer). </li> <li pn="section-8.5.5-4.2">The plaintext to be encrypted is the key
<li>The 'alg' header parameter <bcp14>MUST</bcp14> be present in t from the next layer down (usually the content layer). </li>
he layer. </li> <li pn="section-8.5.5-4.3">The "alg" header parameter <bcp14>MUST</b
<li>A header parameter identifying the recipient's key <bcp14>SHOU cp14> be present in the layer. </li>
LD</bcp14> be present. A header parameter identifying the sender's key <bcp14>S <li pn="section-8.5.5-4.4">A header parameter identifying the recipi
HOULD</bcp14> be present. </li> ent's key <bcp14>SHOULD</bcp14> be present. A header parameter identifying the
sender's key <bcp14>SHOULD</bcp14> be present. </li>
</ul> </ul>
</section> </section>
</section> </section>
</section> </section>
<section anchor="CBOR-Canonical"> <section anchor="CBOR-Canonical" numbered="true" removeInRFC="false" toc="in
<name>CBOR Encoding Restrictions</name> clude" pn="section-9">
<t> <name slugifiedName="name-cbor-encoding-restrictions">CBOR Encoding Restri
This document limits the restrictions it imposes on how the CBOR Encoder ctions</name>
needs to work. <t indent="0" pn="section-9-1">
It has been narrowed down to the following restrictions: This document limits the restrictions it imposes on how the CBOR
<!-- RFC EDITOR: Encoder needs to work. The new encoding restrictions are aligned with
If the CBOR bis document manages to get there at about the same tim the Core Deterministic Encoding Requirements specified in <xref sectionFormat=
e I want to add a sentence here. "of" section="4.2.1" target="STD94" format="default" derivedLink="https://rfc-ed
itor.org/rfc/rfc8949#section-4.2.1" derivedContent="STD94">RFC 8949</xref>.
Sentence to the effect that this matches the deterministic encoding It has been narrowed down to the following restrictions:
in STD XXX>
-->
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-9-2
<li> ">
<li pn="section-9-2.1">
The restriction applies to the encoding of the Sig_structure, the Enc_ structure, and the MAC_structure. The restriction applies to the encoding of the Sig_structure, the Enc_ structure, and the MAC_structure.
</li> </li>
<li> <li pn="section-9-2.2">
Encoding <bcp14>MUST</bcp14> be done using definite lengths and the va Encoding <bcp14>MUST</bcp14> be done using definite lengths, and the l
lue's length <bcp14>MUST</bcp14> be the minimum possible length. ength of
This means that the integer 1 is encoded as "0x01" and not "0x1801". the (encoded) argument <bcp14>MUST</bcp14> be the minimum possible length.
This
means that the integer 1 is encoded as "0x01" and not "0x1801".
</li> </li>
<li> <li pn="section-9-2.3">
Applications <bcp14>MUST NOT</bcp14> generate messages with the same l abel used twice as a key in a single map. Applications <bcp14>MUST NOT</bcp14> generate messages with the same l abel used twice as a key in a single map.
Applications <bcp14>MUST NOT</bcp14> parse and process messages with t he same label used twice as a key in a single map. Applications <bcp14>MUST NOT</bcp14> parse and process messages with t he same label used twice as a key in a single map.
Applications can enforce the parse and process requirement by using pa rsers that will fail the parse step or by using parsers that will pass all keys to the application, and the application can perform the check for duplicate keys . Applications can enforce the parse-and-process requirement by using pa rsers that will fail the parse step or by using parsers that will pass all keys to the application, and the application can perform the check for duplicate keys .
</li> </li>
</ul> </ul>
</section> </section>
<section anchor="app-considerations"> <section anchor="app-considerations" numbered="true" removeInRFC="false" toc
<name>Application Profiling Considerations</name> ="include" pn="section-10">
<t>This document is designed to provide a set of security services, but no <name slugifiedName="name-application-profiling-consi">Application Profili
t impose algorithm implementation requirements for specific usage. The interope ng Considerations</name>
rability requirements are provided for how each of the individual services are u <t indent="0" pn="section-10-1">This document is designed to provide a set
sed and how the algorithms are to be used for interoperability. The requirement of security services but not impose algorithm implementation requirements for s
s about which algorithms and which services are needed are deferred to each appl pecific usage. The interoperability requirements are provided for how each of t
ication. </t> he individual services are used and how the algorithms are to be used for intero
<t> perability. The requirements about which algorithms and which services are need
An example of a profile can be found in <xref target="RFC8613"/> where o ed are deferred to each application. </t>
ne was developed for carrying content in combination with CoAP headers. <t indent="0" pn="section-10-2">
An example of a profile can be found in <xref target="RFC8613" format="d
efault" sectionFormat="of" derivedContent="RFC8613"/>, where one was developed f
or carrying content in combination with CoAP headers.
</t> </t>
<t>It is intended that a profile of this document be created that defines the interoperability requirements for that specific application. This section p rovides a set of guidelines and topics that need to be considered when profiling this document. <t indent="0" pn="section-10-3">It is intended that a profile of this docu ment be created that defines the interoperability requirements for that specific application. This section provides a set of guidelines and topics that need to be considered when profiling this document.
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-10-
<li>Applications need to determine the set of messages defined in this d 4">
ocument that they will be using. The set of messages corresponds fairly directl <li pn="section-10-4.1">Applications need to determine the set of messag
y to the set of security services that are needed and to the security levels nee es defined in this document that they will be using. The set of messages corres
ded. </li> ponds fairly directly to the needed set of security services and security levels
<li> .</li>
<li pn="section-10-4.2">
Applications may define new header parameters for a specific purpose. Applications may define new header parameters for a specific purpose.
Applications will often times select specific header parameters to use o r not to use. Applications will oftentimes select specific header parameters to use or not to use.
For example, an application would normally state a preference for using either the IV or the Partial IV header parameter. For example, an application would normally state a preference for using either the IV or the Partial IV header parameter.
If the Partial IV header parameter is specified, then the application al so needs to define how the fixed portion of the IV is determined. If the Partial IV header parameter is specified, then the application al so needs to define how the fixed portion of the IV is determined.
</li> </li>
<li>When applications use externally defined authenticated data, they ne <li pn="section-10-4.3">When applications use externally defined authent
ed to define how that data is encoded. This document assumes that the data will icated data, they need to define how that data is encoded. This document assume
be provided as a byte string. More information can be found in <xref target="E s that the data will be provided as a byte string. More information can be foun
xtern_AAD"/>. </li> d in <xref target="Extern_AAD" format="default" sectionFormat="of" derivedConten
<li>Applications need to determine the set of security algorithms that a t="Section 4.3"/>. </li>
re to be used. When selecting the algorithms to be used as the mandatory-to-imp <li pn="section-10-4.4">Applications need to determine the set of securi
lement set, consideration should be given to choosing different types of algorit ty algorithms that is to be used. When selecting the algorithms to be used as t
hms when two are chosen for a specific purpose. he mandatory-to-implement set, consideration should be given to choosing differe
An example of this would be choosing HMAC-SHA512 and AES-CMAC as differe nt types of algorithms when two are chosen for a specific purpose.
nt MAC algorithms; the construction is vastly different between these two algori An example of this would be choosing HMAC-SHA512 and AES-CMAC (Cipher-Ba
thms. This means that a weakening of one algorithm would be unlikely to lead to sed Message Authentication Code) as different MAC algorithms; the construction i
a weakening of the other algorithms. Of course, these algorithms do not provid s vastly different between these two algorithms. This means that a weakening of
e the same level of security and thus may not be comparable for the desired secu one algorithm would be unlikely to lead to a weakening of the other algorithms.
rity functionality. Of course, these algorithms do not provide the same level of security and thus
Additional guidance can be found in <xref target="BCP201"/>. may not be comparable for the desired security functionality.
Additional guidance can be found in <xref target="BCP201" format
="default" sectionFormat="of" derivedContent="BCP201"/>.
</li> </li>
<li> <li pn="section-10-4.5">
<t>Applications may need to provide some type of negotiation or discov <t indent="0" pn="section-10-4.5.1">Applications may need to provide s
ery method if multiple algorithms or message structures are permitted. The meth ome type of negotiation or discovery method if multiple algorithms or message st
od can be as simple as requiring pre-configuration of the set of algorithms to p ructures are permitted. The method can range from something as simple as requir
roviding a discovery method built into the protocol. S/MIME provided a number o ing preconfiguration of the set of
f different ways to approach the problem that applications could follow: algorithms to providing a discovery method built into the protocol. S/MIME prov
ided a number of different ways to approach the problem that applications could
follow:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>Advertising in the message (S/MIME capabilities) <xref target= -10-4.5.2">
"RFC5751"/>.</li> <li pn="section-10-4.5.2.1">Advertising in the message (S/MIME capab
<li>Advertising in the certificate (capabilities extension) <xref ilities) <xref target="RFC8551" format="default" sectionFormat="of" derivedConte
target="RFC4262"/>.</li> nt="RFC8551"/>.</li>
<li>Minimum requirements for the S/MIME, which have been updated o <li pn="section-10-4.5.2.2">Advertising in the certificate (capabili
ver time <xref target="RFC2633"/> <xref target="RFC5751"/> (note that <xref targ ties extension) <xref target="RFC4262" format="default" sectionFormat="of" deriv
et="RFC2633"/> has been obsoleted by <xref target="RFC5751"/>).</li> edContent="RFC4262"/>.</li>
<li pn="section-10-4.5.2.3">Minimum requirements for the S/MIME, whi
ch have been updated over time <xref target="RFC2633" format="default" sectionFo
rmat="of" derivedContent="RFC2633"/> <xref target="RFC3851" format="default" sec
tionFormat="of" derivedContent="RFC3851"/> <xref target="RFC5751" format="defaul
t" sectionFormat="of" derivedContent="RFC5751"/> <xref target="RFC8551" format="
default" sectionFormat="of" derivedContent="RFC8551"/>. (Note that <xref target=
"RFC2633" format="default" sectionFormat="of" derivedContent="RFC2633"/> was obs
oleted by <xref target="RFC3851" format="default" sectionFormat="of" derivedCont
ent="RFC3851"/>, which was obsoleted by <xref target="RFC5751" format="default"
sectionFormat="of" derivedContent="RFC5751"/>, which was obsoleted by <xref targ
et="RFC8551" format="default" sectionFormat="of" derivedContent="RFC8551"/>.)</l
i>
</ul> </ul>
</li> </li>
</ul> </ul>
</section> </section>
<section anchor="iana-considerations"> <section anchor="iana-considerations" numbered="true" removeInRFC="false" to
<name>IANA Considerations</name> c="include" pn="section-11">
<t> <name slugifiedName="name-iana-considerations">IANA Considerations</name>
The registries and registrations listed below were created during proces <t indent="0" pn="section-11-1">
sing of RFC 8152 <xref target="RFC8152"/>. The registries and registrations listed below were defined by RFC 8152 <
xref target="RFC8152" format="default" sectionFormat="of" derivedContent="RFC815
2"/>.
The majority of the following actions are to update the references to po int to this document. The majority of the following actions are to update the references to po int to this document.
</t> </t>
<t> <t indent="0" pn="section-11-2">
Note that while <xref target="I-D.ietf-cose-rfc8152bis-algs"/> also upda
tes the registries and registrations originally established by <xref target="RFC Note that while <xref target="RFC9053" format="default" sectionFormat="o
8152"/>, the requested updates are mutually exclusive. The updates requested in f" derivedContent="RFC9053"/> also updates the registries and registrations orig
this document do not conflict or overlap with the updates requested in <xref ta inally established by <xref target="RFC8152" format="default" sectionFormat="of"
rget="I-D.ietf-cose-rfc8152bis-algs"/>, and vice versa. derivedContent="RFC8152"/>, the requested updates are mutually exclusive. The
updates requested in this document do not conflict or overlap with the updates r
equested in <xref target="RFC9053" format="default" sectionFormat="of" derivedCo
ntent="RFC9053"/>, and vice versa.
</t> </t>
<section anchor="cose-header-key-table"> <section anchor="cose-header-key-table" numbered="true" removeInRFC="false
<name>COSE Header Parameters Registry</name> " toc="include" pn="section-11.1">
<t> <name slugifiedName="name-cose-header-parameters-regi">COSE Header Param
IANA created a registry titled "COSE Header Parameters" as part of pro eters Registry</name>
cessing <xref target="RFC8152"/>. <t indent="0" pn="section-11.1-1">
IANA is requested to update the reference for this registry from <xref The "COSE Header Parameters" registry was defined by <xref target="RFC
target="RFC8152"/> to this document. IANA is also requested to update the refe 8152" format="default" sectionFormat="of" derivedContent="RFC8152"/>.
rence for all entries, except "counter signature" and "CounterSignature0", in th IANA has updated the reference for this registry to point to this docu
e table from <xref target="RFC8152"/> to this document. The reference for "coun ment instead of <xref target="RFC8152" format="default" sectionFormat="of" deriv
ter signature" and "CounterSignature0" are to be left as-is. edContent="RFC8152"/>. IANA has also updated all entries that referenced <xref t
arget="RFC8152" format="default" sectionFormat="of" derivedContent="RFC8152"/>,
except "counter signature" and "CounterSignature0", to refer to this document.
The references for "counter signature" and "CounterSignature0" continue to refer
ence <xref target="RFC8152" format="default" sectionFormat="of" derivedContent="
RFC8152"/>.
</t> </t>
</section> </section>
<section anchor="cose-key-map-registry" numbered="true" removeInRFC="false
<section anchor="cose-key-map-registry"> " toc="include" pn="section-11.2">
<name>COSE Key Common Parameters Registry</name> <name slugifiedName="name-cose-key-common-parameters-">COSE Key Common P
<t> arameters Registry</name>
IANA created a registry titled "COSE Key Common Parameters" as part of <t indent="0" pn="section-11.2-1">
the processing of <xref target="RFC8152"/>. The "COSE Key Common Parameters" registry <xref target="COSE.KeyParame
IANA is requested to update the reference for this registry from <xref ters" format="default" sectionFormat="of" derivedContent="COSE.KeyParameters"/>
target="RFC8152"/> to this document. IANA is also requested to update the refe was defined in <xref target="RFC8152" format="default" sectionFormat="of" derive
rence for entries in the table from <xref target="RFC8152"/> to this document. dContent="RFC8152"/>.
IANA has updated the reference for this registry to point to this docu
ment instead of <xref target="RFC8152" format="default" sectionFormat="of" deriv
edContent="RFC8152"/>. IANA has also updated the entries that referenced <xref
target="RFC8152" format="default" sectionFormat="of" derivedContent="RFC8152"/>
to refer to this document.
</t> </t>
</section> </section>
<section numbered="true" removeInRFC="false" toc="include" pn="section-11.
<section> 3">
<name>Media Type Registrations</name> <name slugifiedName="name-media-type-registrations">Media Type Registrat
<section> ions</name>
<name>COSE Security Message</name> <section numbered="true" removeInRFC="false" toc="include" pn="section-1
<t>This section registers the 'application/cose' media type in the "Me 1.3.1">
dia Types" registry. These media types are used to indicate that the content is <name slugifiedName="name-cose-security-message">COSE Security Message
a COSE message. </t> </name>
<ul empty="true"> <t indent="0" pn="section-11.3.1-1">IANA has registered the "applicati
<li>Type name: application</li> on/cose" media type in the "Media Types" registry. This media type is used to i
<li>Subtype name: cose</li> ndicate that the content is a COSE message. </t>
<li>Required parameters: N/A</li> <dl indent="3" newline="false" spacing="normal" pn="section-11.3.1-2">
<li>Optional parameters: cose-type</li> <dt pn="section-11.3.1-2.1">Type name:</dt>
<li>Encoding considerations: binary</li> <dd pn="section-11.3.1-2.2">application</dd>
<li>Security considerations: See the Security Considerations secti <dt pn="section-11.3.1-2.3">Subtype name:</dt>
on of [[This Document]].</li> <dd pn="section-11.3.1-2.4">cose</dd>
<li>Interoperability considerations: N/A</li> <dt pn="section-11.3.1-2.5">Required parameters:</dt>
<li>Published specification: [[this document]]</li> <dd pn="section-11.3.1-2.6">N/A</dd>
<li>Applications that use this media type: IoT applications sendin <dt pn="section-11.3.1-2.7">Optional parameters:</dt>
g security content over HTTP(S) transports.</li> <dd pn="section-11.3.1-2.8">cose-type</dd>
<li>Fragment identifier considerations: N/A</li> <dt pn="section-11.3.1-2.9">Encoding considerations:</dt>
<li> <dd pn="section-11.3.1-2.10">binary</dd>
<t>Additional information: <dt pn="section-11.3.1-2.11">Security considerations:</dt>
</t> <dd pn="section-11.3.1-2.12">See the Security Considerations section
<ul> of RFC 9052.</dd>
<li>Deprecated alias names for this type: N/A</li> <dt pn="section-11.3.1-2.13">Interoperability considerations:</dt>
<li>Magic number(s): N/A</li> <dd pn="section-11.3.1-2.14">N/A</dd>
<li>File extension(s): cbor</li> <dt pn="section-11.3.1-2.15">Published specification:</dt>
<li>Macintosh file type code(s): N/A</li> <dd pn="section-11.3.1-2.16">RFC 9052</dd>
<dt pn="section-11.3.1-2.17">Applications that use this media type:<
/dt>
<dd pn="section-11.3.1-2.18">IoT applications sending security conte
nt over HTTP(S) transports.</dd>
<dt pn="section-11.3.1-2.19">Fragment identifier considerations:</dt
>
<dd pn="section-11.3.1-2.20">N/A</dd>
<dt pn="section-11.3.1-2.21">Additional information:</dt>
<dd pn="section-11.3.1-2.22">
<ul bare="false" empty="false" indent="3" spacing="normal" pn="sec
tion-11.3.1-2.22.1">
<li pn="section-11.3.1-2.22.1.1">Deprecated alias names for this
type: N/A</li>
<li pn="section-11.3.1-2.22.1.2">Magic number(s): N/A</li>
<li pn="section-11.3.1-2.22.1.3">File extension(s): cbor</li>
<li pn="section-11.3.1-2.22.1.4">Macintosh file type code(s): N/
A</li>
</ul> </ul>
</li> </dd>
<li>Person &amp; email address to contact for further information: <dt pn="section-11.3.1-2.23">Person &amp; email address to contact f
iesg@ietf.org</li> or further information:</dt>
<li>Intended usage: COMMON</li> <dd pn="section-11.3.1-2.24">
<li>Restrictions on usage: N/A</li> <br/>iesg@ietf.org</dd>
<li>Author: Jim Schaad, ietf@augustcellars.com</li> <dt pn="section-11.3.1-2.25">Intended usage:</dt>
<li>Change Controller: IESG</li> <dd pn="section-11.3.1-2.26">COMMON</dd>
<li>Provisional registration? No</li> <dt pn="section-11.3.1-2.27">Restrictions on usage:</dt>
</ul> <dd pn="section-11.3.1-2.28">N/A</dd>
<dt pn="section-11.3.1-2.29">Author:</dt>
<dd pn="section-11.3.1-2.30">Jim Schaad</dd>
<dt pn="section-11.3.1-2.31">Change Controller:</dt>
<dd pn="section-11.3.1-2.32">IESG</dd>
<dt pn="section-11.3.1-2.33">Provisional registration?</dt>
<dd pn="section-11.3.1-2.34">No</dd>
</dl>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-1
<name>COSE Key Media Type</name> 1.3.2">
<t>This section registers the 'application/cose-key' and 'application/ <name slugifiedName="name-cose-key-media-type">COSE Key Media Type</na
cose-key-set' media types in the "Media Types" registry. These media types are me>
used to indicate, respectively, that content is a COSE_Key or COSE_KeySet object <t indent="0" pn="section-11.3.2-1">IANA has registered the "applicati
. </t> on/cose-key" and "application/cose-key-set" media types in the "Media Types" reg
<t>The template for registering 'application/cose-key' is: istry. These media types are used to indicate, respectively, that the content i
s a COSE_Key or COSE_KeySet object. </t>
<t indent="0" pn="section-11.3.2-2">The template for "application/cose
-key" is as follows:
</t> </t>
<ul empty="true"> <dl indent="3" newline="false" spacing="normal" pn="section-11.3.2-3">
<li>Type name: application</li> <dt pn="section-11.3.2-3.1">Type name:</dt>
<li>Subtype name: cose-key</li> <dd pn="section-11.3.2-3.2">application</dd>
<li>Required parameters: N/A</li> <dt pn="section-11.3.2-3.3">Subtype name:</dt>
<li>Optional parameters: N/A</li> <dd pn="section-11.3.2-3.4">cose-key</dd>
<li>Encoding considerations: binary</li> <dt pn="section-11.3.2-3.5">Required parameters:</dt>
<li>Security considerations: See the Security Considerations secti <dd pn="section-11.3.2-3.6">N/A</dd>
on of [[This Document]].</li> <dt pn="section-11.3.2-3.7">Optional parameters:</dt>
<li>Interoperability considerations: N/A</li> <dd pn="section-11.3.2-3.8">N/A</dd>
<li>Published specification: [[this document]]</li> <dt pn="section-11.3.2-3.9">Encoding considerations:</dt>
<li>Applications that use this media type: Distribution of COSE ba <dd pn="section-11.3.2-3.10">binary</dd>
sed keys for IoT applications.</li> <dt pn="section-11.3.2-3.11">Security considerations:</dt>
<li>Fragment identifier considerations: N/A</li> <dd pn="section-11.3.2-3.12">See the Security Considerations section
<li> of RFC 9052.</dd>
<t>Additional information: <dt pn="section-11.3.2-3.13">Interoperability considerations:</dt>
</t> <dd pn="section-11.3.2-3.14">N/A</dd>
<ul> <dt pn="section-11.3.2-3.15">Published specification:</dt>
<li>Deprecated alias names for this type: N/A</li> <dd pn="section-11.3.2-3.16">RFC 9052</dd>
<li>Magic number(s): N/A</li> <dt pn="section-11.3.2-3.17">Applications that use this media type:<
<li>File extension(s): cbor</li> /dt>
<li>Macintosh file type code(s): N/A</li> <dd pn="section-11.3.2-3.18">Distribution of COSE-based keys for IoT
applications.</dd>
<dt pn="section-11.3.2-3.19">Fragment identifier considerations:</dt
>
<dd pn="section-11.3.2-3.20">N/A</dd>
<dt pn="section-11.3.2-3.21">Additional information:</dt>
<dd pn="section-11.3.2-3.22">
<ul bare="false" empty="false" indent="3" spacing="normal" pn="sec
tion-11.3.2-3.22.1">
<li pn="section-11.3.2-3.22.1.1">Deprecated alias names for this
type: N/A</li>
<li pn="section-11.3.2-3.22.1.2">Magic number(s): N/A</li>
<li pn="section-11.3.2-3.22.1.3">File extension(s): cbor</li>
<li pn="section-11.3.2-3.22.1.4">Macintosh file type code(s): N/
A</li>
</ul> </ul>
</li> </dd>
<li>Person &amp; email address to contact for further information: <dt pn="section-11.3.2-3.23">Person &amp; email address to contact f
iesg@ietf.org</li> or further information:</dt>
<li>Intended usage: COMMON</li> <dd pn="section-11.3.2-3.24">
<li>Restrictions on usage: N/A</li> <br/>iesg@ietf.org</dd>
<li>Author: Jim Schaad, ietf@augustcellars.com</li> <dt pn="section-11.3.2-3.25">Intended usage:</dt>
<li>Change Controller: IESG</li> <dd pn="section-11.3.2-3.26">COMMON</dd>
<li>Provisional registration? No</li> <dt pn="section-11.3.2-3.27">Restrictions on usage:</dt>
</ul> <dd pn="section-11.3.2-3.28">N/A</dd>
<t>The template for registering 'application/cose-key-set' is: <dt pn="section-11.3.2-3.29">Author:</dt>
<dd pn="section-11.3.2-3.30">Jim Schaad</dd>
<dt pn="section-11.3.2-3.31">Change Controller:</dt>
<dd pn="section-11.3.2-3.32">IESG</dd>
<dt pn="section-11.3.2-3.33">Provisional registration?</dt>
<dd pn="section-11.3.2-3.34">No</dd>
</dl>
<t indent="0" pn="section-11.3.2-4">The template for registering "appl
ication/cose-key-set" is:
</t> </t>
<ul empty="true"> <dl indent="3" newline="false" spacing="normal" pn="section-11.3.2-5">
<li>Type name: application</li> <dt pn="section-11.3.2-5.1">Type name:</dt>
<li>Subtype name: cose-key-set</li> <dd pn="section-11.3.2-5.2">application</dd>
<li>Required parameters: N/A</li> <dt pn="section-11.3.2-5.3">Subtype name:</dt>
<li>Optional parameters: N/A</li> <dd pn="section-11.3.2-5.4">cose-key-set</dd>
<li>Encoding considerations: binary</li> <dt pn="section-11.3.2-5.5">Required parameters:</dt>
<li>Security considerations: See the Security Considerations secti <dd pn="section-11.3.2-5.6">N/A</dd>
on of [[This Document]].</li> <dt pn="section-11.3.2-5.7">Optional parameters:</dt>
<li>Interoperability considerations: N/A</li> <dd pn="section-11.3.2-5.8">N/A</dd>
<li>Published specification: [[this document]]</li> <dt pn="section-11.3.2-5.9">Encoding considerations:</dt>
<li>Applications that use this media type: Distribution of COSE ba <dd pn="section-11.3.2-5.10">binary</dd>
sed keys for IoT applications.</li> <dt pn="section-11.3.2-5.11">Security considerations:</dt>
<li>Fragment identifier considerations: N/A</li> <dd pn="section-11.3.2-5.12">See the Security Considerations section
<li> of RFC 9052.</dd>
<t>Additional information: <dt pn="section-11.3.2-5.13">Interoperability considerations:</dt>
</t> <dd pn="section-11.3.2-5.14">N/A</dd>
<ul> <dt pn="section-11.3.2-5.15">Published specification:</dt>
<li>Deprecated alias names for this type: N/A</li> <dd pn="section-11.3.2-5.16">RFC 9052</dd>
<li>Magic number(s): N/A</li> <dt pn="section-11.3.2-5.17">Applications that use this media type:<
<li>File extension(s): cbor</li> /dt>
<li>Macintosh file type code(s): N/A</li> <dd pn="section-11.3.2-5.18">Distribution of COSE-based keys for IoT
applications.</dd>
<dt pn="section-11.3.2-5.19">Fragment identifier considerations:</dt
>
<dd pn="section-11.3.2-5.20">N/A</dd>
<dt pn="section-11.3.2-5.21">Additional information:</dt>
<dd pn="section-11.3.2-5.22">
<ul bare="false" empty="false" indent="3" spacing="normal" pn="sec
tion-11.3.2-5.22.1">
<li pn="section-11.3.2-5.22.1.1">Deprecated alias names for this
type: N/A</li>
<li pn="section-11.3.2-5.22.1.2">Magic number(s): N/A</li>
<li pn="section-11.3.2-5.22.1.3">File extension(s): cbor</li>
<li pn="section-11.3.2-5.22.1.4">Macintosh file type code(s): N/
A</li>
</ul> </ul>
</li> </dd>
<li>Person &amp; email address to contact for further information: <dt pn="section-11.3.2-5.23">Person &amp; email address to contact f
iesg@ietf.org</li> or further information:</dt>
<li>Intended usage: COMMON</li> <dd pn="section-11.3.2-5.24">iesg@ietf.org</dd>
<li>Restrictions on usage: N/A</li> <dt pn="section-11.3.2-5.25">Intended usage:</dt>
<li>Author: Jim Schaad, ietf@augustcellars.com</li> <dd pn="section-11.3.2-5.26">COMMON</dd>
<li>Change Controller: IESG</li> <dt pn="section-11.3.2-5.27">Restrictions on usage:</dt>
<li>Provisional registration? No</li> <dd pn="section-11.3.2-5.28">N/A</dd>
</ul> <dt pn="section-11.3.2-5.29">Author:</dt>
<dd pn="section-11.3.2-5.30">Jim Schaad</dd>
<dt pn="section-11.3.2-5.31">Change Controller:</dt>
<dd pn="section-11.3.2-5.32">IESG</dd>
<dt pn="section-11.3.2-5.33">Provisional registration?</dt>
<dd pn="section-11.3.2-5.34">No</dd>
</dl>
</section> </section>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-11.
<name>CoAP Content-Formats Registry</name> 4">
<t> <name slugifiedName="name-coap-content-formats-regist">CoAP Content-Form
IANA added entries to the "CoAP Content-Formats" registry while proce ats Registry</name>
ssing <xref target="RFC8152"/>. <t indent="0" pn="section-11.4-1">
IANA is requested to update the reference value from <xref target="RFC IANA added entries to the "CoAP Content-Formats" registry as indicated
8152"/> to [[This Document]]. in <xref target="RFC8152" format="default" sectionFormat="of" derivedContent="R
FC8152"/>. IANA has updated the reference to point to this document instead of
<xref target="RFC8152" format="default" sectionFormat="of" derivedContent="RFC81
52"/>.
</t> </t>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-11.
<name>CBOR Tags Registry</name> 5">
<t> <name slugifiedName="name-cbor-tags-registry">CBOR Tags Registry</name>
IANA is requested to update the references from <xref target="RFC8152" <t indent="0" pn="section-11.5-1">
/> to [[This Document]]. IANA added entries to the "CBOR Tags" registry as indicated in <xref t
arget="RFC8152" format="default" sectionFormat="of" derivedContent="RFC8152"/>.
IANA has updated the references to point to this document instead of <xref tar
get="RFC8152" format="default" sectionFormat="of" derivedContent="RFC8152"/>.
</t> </t>
</section> </section>
<section anchor="review" numbered="true" removeInRFC="false" toc="include"
<section title="Expert Review Instructions" anchor="review" > pn="section-11.6">
<t> <name slugifiedName="name-expert-review-instructions">Expert Review Inst
All of the IANA registries established by <xref target="RFC8152"/> are ructions</name>
, at least in part, defined as expert review. This section gives some general g <t indent="0" pn="section-11.6-1">
uidelines for what the experts should be looking for, but they are being designa All of the IANA registries established by <xref target="RFC8152" forma
ted as experts for a reason, so they should be given substantial latitude. t="default" sectionFormat="of" derivedContent="RFC8152"/> are, at least in part,
defined as Expert Review <xref target="RFC8126" format="default" sectionFormat=
"of" derivedContent="RFC8126"/>. This section gives some general guidelines for
what the experts should be looking for, but they are being designated as expert
s for a reason, so they should be given substantial latitude.
</t> </t>
<t>Expert reviewers should take into consideration the following points: <t indent="0" pn="section-11.6-2">Expert reviewers should take the follo
</t> wing into consideration:</t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1
1.6-3">
<li>Point squatting should be discouraged. Reviewers are encouraged to get suff <li pn="section-11.6-3.1">Point squatting should be discouraged. Revi
icient information for registration requests to ensure that the usage is not goi ewers are encouraged to get sufficient information for registration requests to
ng to duplicate one that is already registered, and that the point is likely to ensure that the usage is not going to duplicate an existing registration and tha
be used in deployments. The zones tagged as private use are intended for testin t the code point is likely to be used in deployments. The ranges tagged as priv
g purposes and closed environments; code points in other ranges should not be as ate use are intended for testing purposes and closed environments; code points i
signed for testing. </li> n other ranges should not be assigned for testing. </li>
<li pn="section-11.6-3.2">Standards Track or BCP RFCs are required to
<li>Specifications are required for the standards track range of point assignmen register a code point in the Standards Action range. Specifications should exist
t. Specifications should exist for specification required ranges, but early ass for Specification Required ranges, but early assignment before an RFC is availa
ignment before a specification is available is considered to be permissible. Sp ble is considered to be permissible. Specifications are needed for the first-co
ecifications are needed for the first-come, first-serve range if they are expect me, first-served range if the points are expected to be used outside of closed e
ed to be used outside of closed environments in an interoperable way. When spec nvironments in an interoperable way. When specifications are not provided, the
ifications are not provided, the description provided needs to have sufficient i description provided needs to have sufficient information to identify what the p
nformation to identify what the point is being used for. </li> oint is being used for. </li>
<li pn="section-11.6-3.3">Experts should take into account the expecte
<li>Experts should take into account the expected usage of fields when approving d usage of fields when approving code point assignment.
point assignment. The fact that there is a range for standards track documents The fact that the Standards Action range is only available to
does not mean that a standards track document cannot have points assigned outsi Standards Track documents does not mean that a Standards Track document
de of that range. The length of the encoded value should be weighed against how cannot have points assigned outside of that range. The length of the encoded val
many code points of that length are left, the size of device it will be used on ue should be weighed against how many code points of that length are left and th
, and the number of code points left that encode to that size. </li> e size of device it will be used on. </li>
<li pn="section-11.6-3.4">When algorithms are registered, vanity regis
<li>When algorithms are registered, vanity registrations should be discouraged. trations should be discouraged. One way to do this is to require registrations
One way to do this is to require registrations to provide additional documentat to provide additional documentation on security analysis of the algorithm. Anot
ion on security analysis of the algorithm. Another thing that should be conside her thing that should be considered is requesting an opinion on the algorithm fr
red is requesting an opinion on the algorithm from the Crypto Forum Research Gro om the Crypto Forum Research Group (CFRG). Algorithms are expected to meet the s
up (CFRG). Algorithms that do not meet the security requirements of the communi ecurity requirements of the community and the requirements of the message struct
ty and the messages structures should not be registered. </li> ures in order to be suitable for registration.
</ul> </li>
</ul>
</section> </section>
</section> </section>
<section anchor="security-considerations"> <section anchor="security-considerations" numbered="true" removeInRFC="false
<name>Security Considerations</name> " toc="include" pn="section-12">
<t> <name slugifiedName="name-security-considerations">Security Considerations
</name>
<t indent="0" pn="section-12-1">
There are a number of security considerations that need to be taken into account by implementers of this specification. There are a number of security considerations that need to be taken into account by implementers of this specification.
While some considerations have been highlighted here, additional conside rations may be found in the documents listed in the references. While some considerations have been highlighted here, additional conside rations may be found in the documents listed in the references.
</t> </t>
<t>Implementations need to protect the private key material for any indivi duals. There are some cases that need to be highlighted on this issue. <t indent="0" pn="section-12-2">Implementations need to protect the privat e key material for all individuals. Some cases in this document need to be high lighted with regard to this issue.
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-12-
<li>Using the same key for two different algorithms can leak information 3">
about the key. It is therefore recommended that keys be restricted to a single <li pn="section-12-3.1">Use of the same key for two different algorithms
algorithm. </li> can leak information about the key. It is therefore recommended that keys be r
<li>Use of 'direct' as a recipient algorithm combined with a second reci estricted to a single algorithm. </li>
pient algorithm exposes the direct key to the second recipient. </li> <li pn="section-12-3.2">Use of "direct" as a recipient algorithm combine
<li>Several of the algorithms in <xref target="I-D.ietf-cose-rfc8152bis- d with a second recipient algorithm exposes the direct key to the second recipie
algs"/> have limits on the number of times that a key can be used without leakin nt; <xref target="key-management-algs" format="default" sectionFormat="of" deriv
g information about the key.</li> edContent="Section 8.5"/> forbids combining "direct" recipient algorithms with o
ther modes. </li>
<li pn="section-12-3.3">Several of the algorithms in <xref target="RFC90
53" format="default" sectionFormat="of" derivedContent="RFC9053"/> have limits o
n the number of times that a key can be used without leaking information about t
he key.</li>
</ul> </ul>
<t>The use of ECDH and direct plus KDF (with no key wrap) will not directl <t indent="0" pn="section-12-4">The use of Elliptic Curve Diffie-Hellman (
y lead to the private key being leaked; the one way function of the KDF will pre ECDH) and direct plus KDF (with no key wrap) will not directly lead to the priva
vent that. There is, however, a different issue that needs to be addressed. Ha te key being leaked; the one-way function of the KDF will prevent that. There i
ving two recipients requires that the CEK be shared between two recipients. The s, however, a different issue that needs to be addressed. Having two recipients
second recipient therefore has a CEK that was derived from material that can be requires that the CEK be shared between two recipients. The second recipient t
used for the weak proof of origin. The second recipient could create a message herefore has a CEK that was derived from material that can be used for the weak
using the same CEK and send it to the first recipient; the first recipient woul proof of origin. The second recipient could create a message using the same CEK
d, for either static-static ECDH or direct plus KDF, make an assumption that the and send it to the first recipient; the first recipient would, for either Stati
CEK could be used for proof of origin even though it is from the wrong entity. c-Static ECDH or direct plus KDF, make an assumption that the CEK could be used
If the key wrap step is added, then no proof of origin is implied and this is n for proof of origin, even though it is from the wrong entity. If the key wrap s
ot an issue. </t> tep is added, then no proof of origin is implied and this is not an issue. </t>
<t> <t indent="0" pn="section-12-5">
<!-- Although it has been mentioned before, it bears repeating that the use o
p. 55 "the use of a single key for multiple algorithms has been demo f a single key for multiple algorithms has been demonstrated in some cases to le
nstrated in some cases to leak information about a key ..." Maybe "a key" to "th ak information about a key, providing the opportunity for attackers to forge int
e key" if we're talking about that specific key. It'd be good to have links to egrity tags or gain information about encrypted content.
references going over the cases too. – changed ‘a’ to ‘that’.
[JLS] Are you looking for links to each of those three instances or
something else? It may be that this should be removed from the document as the
“mentioned before” is no longer relevant in the structure document only in the a
lgorithm document –
ALL: Should this just be killed?
-->
Although it has been mentioned before, the use of a single key for multi
ple algorithms has been demonstrated in some cases to leak information about tha
t key, provide the opportunity for attackers to forge integrity tags, or gain in
formation about encrypted content.
Binding a key to a single algorithm prevents these problems. Binding a key to a single algorithm prevents these problems.
Key creators and key consumers are strongly encouraged not only to creat e new keys for each different algorithm, but to include that selection of algori thm in any distribution of key material and strictly enforce the matching of alg orithms in the key structure to algorithms in the message structure. Key creators and key consumers are strongly encouraged to not only creat e new keys for each different algorithm, but to include that selection of algori thm in any distribution of key material and strictly enforce the matching of alg orithms in the key structure to algorithms in the message structure.
In addition to checking that algorithms are correct, the key form needs to be checked as well. In addition to checking that algorithms are correct, the key form needs to be checked as well.
Do not use an 'EC2' key where an 'OKP' key is expected. Do not use an "EC2" key where an "OKP" key is expected.
</t> </t>
<t>Before using a key for transmission, or before acting on information re ceived, a trust decision on a key needs to be made. Is the data or action somet hing that the entity associated with the key has a right to see or a right to re quest? A number of factors are associated with this trust decision. Some of the ones that are highlighted here are: <t indent="0" pn="section-12-6">Before using a key for transmission, or be fore acting on information received, a trust decision on a key needs to be made. Is the data or action something that the entity associated with the key has a right to see or a right to request? A number of factors are associated with this trust decision. Some highlighted here are:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-12-
<li>What are the permissions associated with the key owner?</li> 7">
<li>Is the cryptographic algorithm acceptable in the current context?</l <li pn="section-12-7.1">What are the permissions associated with the key
i> owner?</li>
<li>Have the restrictions associated with the key, such as algorithm or <li pn="section-12-7.2">Is the cryptographic algorithm acceptable in the
freshness, been checked and are they correct?</li> current context?</li>
<li>Is the request something that is reasonable, given the current state <li pn="section-12-7.3">Have the restrictions associated with the key, s
of the application?</li> uch as algorithm or freshness, been checked, and are they correct?</li>
<li>Have any security considerations that are part of the message been e <li pn="section-12-7.4">Is the request something that is reasonable, giv
nforced (as specified by the application or 'crit' header parameter)?</li> en the current state of the application?</li>
<li pn="section-12-7.5">Have any security considerations that are part o
f the message been enforced (as specified by the application or "crit" header pa
rameter)?</li>
</ul> </ul>
<t>One area that has been getting exposure is traffic analysis of encrypte <t indent="0" pn="section-12-8">One area that has been getting exposure is
d messages based on the length of the message. This specification does not prov traffic analysis of encrypted messages based on the length of the message. Thi
ide for a uniform method of providing padding as part of the message structure. s specification does not provide a uniform method for providing padding as part
An observer can distinguish between two different messages (for example, 'YES' of the message structure. An observer can distinguish between two different mes
and 'NO') based on the length for all of the content encryption algorithms that sages (for example, "YES" and "NO") based on the length for all of the content e
are defined in <xref target="I-D.ietf-cose-rfc8152bis-algs"/> document. This me ncryption algorithms that are defined in <xref target="RFC9053" format="default"
ans that it is up to the applications to document how content padding is to be d sectionFormat="of" derivedContent="RFC9053"/>. This means that it is up to the
one in order to prevent or discourage such analysis. (For example, the text str applications to document how content padding is to be done in order to prevent
ings could be defined as 'YES' and 'NO '.) </t> or discourage such analysis. (For example, the text strings could be defined as
</section> "YES" and "NO ".) </t>
<section removeInRFC="true">
<name>Implementation Status</name>
<!-- RFC Editor - Please remove this section and reference RFC7942 prior
to publication -->
<t>
This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in <xref targe
t="RFC7942"/>. The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs. Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF. Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features. Readers
are advised to note that other implementations may exist.
</t>
<t>
According to <xref target="RFC7942"/>, "this will allow reviewers and wo
rking
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature. It is up to the individual working groups
to use this information as they see fit".
</t>
<section>
<name>Author's Versions</name>
<t>
There are three different implementations that have been created by th
e author of the document both to create the examples that are included in the do
cument and to validate the structures and methodology used in the design of COSE
.
</t>
<ul>
<li>Implementation Location: https://github.com/cose-wg</li>
<li>Primary Maintainer: Jim Schaad</li>
<li>
Languages:
There are three different languages that are currently supported:
Java, C# and C.
</li>
<li>
Cryptography: The Java and C# libraries use Bouncy Castle to provi
de the required cryptography.
The C version uses OPENSSL Version 1.1 for the cryptography.
</li>
<li>
Coverage:
All versions have support to allow for implicit algorithm support
as they allow for the application to set attributes that are not to be sent in t
he message.
</li>
<li>
Testing:
All of the examples in the example library are generated by the C#
library and then validated using the Java and C libraries.
All three libraries have tests to allow for the creating of the sa
me messages that are in the example library followed by validating them.
These are not compared against the example library.
The Java and C# libraries have unit testing included.
Not all of the <bcp14>MUST</bcp14> statements in the document have
been implemented as part of the libraries.
One such statement is the requirement that unique labels be presen
t.
</li>
<li>Licensing: Revised BSD License </li>
</ul>
</section>
<section>
<name>JavaScript Version</name>
<ul>
<li>Implementation Location: https://github.com/erdtman/cose-js</li>
<li>Primary Maintainer: Samuel Erdtman</li>
<li>Languages: JavaScript</li>
<li>Cryptography: TBD</li>
<li>Coverage: Full Encrypt, Signature and MAC objects are supported.</
li>
<li>Testing: Basic testing against the common example library.</li>
<li>Licensing: Apache License 2.0</li>
</ul>
</section>
<section>
<name>Python Version</name>
<ul>
<li>Implementation Location: https://github.com/TimothyClaeys/COSE-PYT
HON</li>
<li>Primary Maintainer: Timothy Claeys</li>
<li>Languages: Python</li>
<li>Cryptography: pyecdsak, crypto python libraries</li>
<li>Coverage: TBD</li>
<li>Testing: Basic testing plus running against the common example lib
rary.</li>
<li>Licensing: BSD 3-Clause License</li>
</ul>
</section>
<section>
<name>COSE Testing Library</name>
<ul>
<li>Implementation Location: https://github.com/cose-wg/Examples</li>
<li>Primary Maintainer: Jim Schaad</li>
<li>
Description: A set of tests for the COSE library is provided as pa
rt of the implementation effort.
Both success and fail tests have been provided.
All of the examples in this document are part of this example set.
</li>
<li>
Coverage: An attempt has been made to have test cases for every m
essage type and algorithm in the document.
Currently examples dealing with ECDH with Goldilocks are missing.
</li>
<li>Licensing: Public Domain</li>
</ul>
</section>
</section> </section>
</middle> </middle>
<back> <back>
<references xml:base="https://xml2rfc.ietf.org/public/rfc/"> <displayreference target="I-D.ietf-core-groupcomm-bis" to="CORE-GROUPCOMM"/>
<name>References</name> <displayreference target="I-D.ietf-cose-countersign" to="COSE-COUNTERSIGN"/>
<references> <references pn="section-13">
<name>Normative References</name> <name slugifiedName="name-references">References</name>
<xi:include href="bibxml/reference.RFC.2119.xml"/> <references pn="section-13.1">
<xi:include href="bibxml3/reference.I-D.ietf-cbor-7049bis.xml"/> <name slugifiedName="name-normative-references">Normative References</na
<xi:include href="bibxml/reference.RFC.8174.xml"/> me>
<xi:include href="bibxml3/reference.I-D.ietf-cose-rfc8152bis-algs.xml"/> <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2
</references> 119" quoteTitle="true" derivedAnchor="RFC2119">
<references>
<name>Informative References</name>
<xi:include href="bibxml/reference.RFC.8152.xml"/>
<xi:include href="bibxml/reference.RFC.8610.xml"/>
<xi:include href="bibxml/reference.RFC.2633.xml"/>
<xi:include href="bibxml/reference.RFC.4262.xml"/>
<xi:include href="bibxml/reference.RFC.4949.xml"/>
<xi:include href="bibxml/reference.RFC.5116.xml"/>
<xi:include href="bibxml/reference.RFC.5652.xml"/>
<xi:include href="bibxml/reference.RFC.5751.xml"/>
<xi:include href="bibxml/reference.RFC.5752.xml"/>
<xi:include href="bibxml/reference.RFC.5990.xml"/>
<xi:include href="bibxml/reference.RFC.6838.xml"/>
<!-- <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml9/
reference.STD.0090.xml"/> -->
<referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
<!-- reference.RFC.8259.xml -->
<reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
<front>
<title>
The JavaScript Object Notation (JSON) Data Interchange Format
</title>
<author initials="T." surname="Bray" fullname="T. Bray" role="editor">
<organization/>
</author>
<date year="2017" month="December"/>
<abstract>
<t>
JavaScript Object Notation (JSON) is a lightweight, text-based, language-indepen
dent data interchange format. It was derived from the ECMAScript Programming Lan
guage Standard. JSON defines a small set of formatting rules for the portable re
presentation of structured data.
</t>
<t>
This document removes inconsistencies with other specifications of JSON, repairs
specification errors, and offers experience-based interoperability guidance.
</t>
</abstract>
</front>
<seriesInfo name="STD" value="90"/>
<seriesInfo name="RFC" value="8259"/>
<seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
</referencegroup>
<!-- <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml9/referen
ce.BCP.0201.xml"/> -->
<referencegroup anchor="BCP201" target="https://www.rfc-editor.org/info/bcp201">
<!-- reference.RFC.7696.xml -->
<reference anchor="RFC7696" target="https://www.rfc-editor.org/info/rfc7696">
<front>
<title>
Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implem
ent Algorithms
</title>
<author initials="R." surname="Housley" fullname="R. Housley">
<organization/>
</author>
<date year="2015" month="November"/>
<abstract>
<t>
Many IETF protocols use cryptographic algorithms to provide confidentiality, int
egrity, authentication, or digital signature. Communicating peers must support a
common set of cryptographic algorithms for these mechanisms to work properly. T
his memo provides guidelines to ensure that protocols have the ability to migrat
e from one mandatory-to-implement algorithm suite to another over time.
</t>
</abstract>
</front>
<seriesInfo name="BCP" value="201"/>
<seriesInfo name="RFC" value="7696"/>
<seriesInfo name="DOI" value="10.17487/RFC7696"/>
</reference>
</referencegroup>
<xi:include href="bibxml/reference.RFC.7252.xml"/>
<xi:include href="bibxml/reference.RFC.7515.xml"/>
<xi:include href="bibxml/reference.RFC.7516.xml"/>
<xi:include href="bibxml/reference.RFC.7517.xml"/>
<xi:include href="bibxml/reference.RFC.7518.xml"/>
<xi:include href="bibxml/reference.RFC.8032.xml"/>
<reference anchor="DSS" target="http://nvlpubs.nist.gov/nistpubs/FIPS/NI
ST.FIPS.186-4.pdf">
<front> <front>
<title>Digital Signature Standard (DSS)</title> <title>Key words for use in RFCs to Indicate Requirement Levels</tit
<seriesInfo name="DOI" value="10.6028/NIST.FIPS.186-4"/> le>
<seriesInfo name="FIPS PUB" value="186-4"/> <author fullname="S. Bradner" initials="S" surname="Bradner"/>
<author> <date month="March" year="1997"/>
<organization>National Institute of Standards and Technology</orga <abstract>
nization> <t indent="0">In many standards track documents several words are
used to signify the requirements in the specification. These words are often ca
pitalized. This document defines these words as they should be interpreted in I
ETF documents. This document specifies an Internet Best Current Practices for t
he Internet Community, and requests discussion and suggestions for improvements.
</t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="2119"/>
<seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8
174" quoteTitle="true" derivedAnchor="RFC8174">
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti
tle>
<author fullname="B. Leiba" initials="B" surname="Leiba"/>
<date month="May" year="2017"/>
<abstract>
<t indent="0">RFC 2119 specifies common key words that may be used
in protocol specifications. This document aims to reduce the ambiguity by clar
ifying that only UPPERCASE usage of the key words have the defined special meani
ngs.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="8174"/>
<seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC9053" target="https://www.rfc-editor.org/info/rfc9
053" quoteTitle="true" derivedAnchor="RFC9053">
<front>
<title>CBOR Object Signing and Encryption (COSE): Initial Algorithms
</title>
<author initials="J" surname="Schaad" fullname="Jim Schaad">
<organization showOnFrontPage="true"/>
</author> </author>
<date year="2013" month="July"/> <date month="August" year="2022"/>
</front> </front>
<seriesInfo name="RFC" value="9053"/>
<seriesInfo name="DOI" value="10.17487/RFC9053"/>
</reference> </reference>
<reference anchor="PVSig"> <reference anchor="STD94" target="https://www.rfc-editor.org/info/std94"
<!-- RFC Editor: alternative non-paywall https://www.certicom.com/con quoteTitle="true" derivedAnchor="STD94">
tent/dam/certicom/images/pdfs/CerticomWP-PVSigSec_login.pdf -->
<front> <front>
<title>Formal Security Proofs for a Signature Scheme with Partial Me <title>Concise Binary Object Representation (CBOR)</title>
ssage Recovery</title> <author initials="C." surname="Bormann" fullname="C. Bormann">
<seriesInfo name="LNCS" value="Volume 2020"/> <organization showOnFrontPage="true"/>
<seriesInfo name="DOI" value="10.1007/3-540-45353-9_11"/> </author>
<author initials="D." surname="Brown"/> <author initials="P." surname="Hoffman" fullname="P. Hoffman">
<author initials="D." surname="Johnson"/> <organization showOnFrontPage="true"/>
<date year="2000" month="June"/> </author>
<date year="2020" month="December"/>
</front> </front>
<seriesInfo name="STD" value="94"/>
<seriesInfo name="RFC" value="8949"/>
</reference> </reference>
<reference anchor="W3C.WebCrypto" target="https://www.w3.org/TR/WebCrypt </references>
oAPI/"> <references pn="section-13.2">
<name slugifiedName="name-informative-references">Informative References
</name>
<reference anchor="BCP201" target="https://www.rfc-editor.org/info/bcp20
1" quoteTitle="true" derivedAnchor="BCP201">
<front> <front>
<title>Web Cryptography API</title> <title>Guidelines for Cryptographic Algorithm Agility and Selecting
<seriesInfo name="W3C" value="Recommendation"/> Mandatory-to-Implement Algorithms</title>
<author initials="M." surname="Watson"/> <author initials="R." surname="Housley" fullname="Russ Housley">
<date year="2017" month="January"/> <organization showOnFrontPage="true"/>
</author>
<date month="November" year="2015"/>
</front> </front>
<seriesInfo name="BCP" value="201"/>
<seriesInfo name="RFC" value="7696"/>
</reference> </reference>
<xi:include href="bibxml/reference.RFC.8230.xml"/> <reference anchor="COAP.Formats" target="https://www.iana.org/assignment
<xi:include href="bibxml/reference.RFC.7942.xml"/> s/core-parameters/" quoteTitle="true" derivedAnchor="COAP.Formats">
<xi:include href="bibxml/reference.RFC.3394.xml"/>
<xi:include href="bibxml3/reference.I-D.ietf-cose-hash-algs.xml"/>
<xi:include href="bibxml3/reference.I-D.ietf-core-groupcomm-bis.xml"/>
<xi:include href="bibxml/reference.RFC.8613.xml"/>
<xi:include href="bibxml3/reference.I-D.irtf-cfrg-argon2.xml"/>
<reference anchor="COAP.Formats" target="https://www.iana.org/assignment
s/core-parameters/core-parameters.xhtml#content-formats">
<front> <front>
<title>CoAP Content-Formats</title> <title>CoAP Content-Formats</title>
<author> <author>
<organization>IANA</organization> <organization showOnFrontPage="true">IANA</organization>
</author> </author>
<date/> <date/>
</front> </front>
</reference> </reference>
<reference anchor="COSE.Algorithms" target="https://www.iana.org/assignm <reference anchor="I-D.ietf-core-groupcomm-bis" quoteTitle="true" target
ents/cose/cose.xhtml#algorithms"> ="https://datatracker.ietf.org/doc/html/draft-ietf-core-groupcomm-bis-07" derive
dAnchor="CORE-GROUPCOMM">
<front>
<title>Group Communication for the Constrained Application Protocol
(CoAP)</title>
<author fullname="Esko Dijk">
<organization showOnFrontPage="true">IoTconsultancy.nl</organizati
on>
</author>
<author fullname="Chonggang Wang">
<organization showOnFrontPage="true">InterDigital</organization>
</author>
<author fullname="Marco Tiloca">
<organization showOnFrontPage="true">RISE AB</organization>
</author>
<date month="July" day="11" year="2022"/>
<abstract>
<t indent="0"> This document specifies the use of the Constraine
d Application
Protocol (CoAP) for group communication, including the use of UDP/IP
multicast as the default underlying data transport. Both unsecured
and secured CoAP group communication are specified. Security is
achieved by use of the Group Object Security for Constrained RESTful
Environments (Group OSCORE) protocol. The target application area of
this specification is any group communication use cases that involve
resource-constrained devices or networks that support CoAP. This
document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis
-07"/>
<format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-
core-groupcomm-bis-07.txt"/>
<refcontent>Work in Progress</refcontent>
</reference>
<reference anchor="I-D.ietf-cose-countersign" quoteTitle="true" target="
https://datatracker.ietf.org/doc/html/draft-ietf-cose-countersign-08" derivedAnc
hor="COSE-COUNTERSIGN">
<front>
<title>CBOR Object Signing and Encryption (COSE): Countersignatures<
/title>
<author fullname="Jim Schaad">
<organization showOnFrontPage="true">August Cellars</organization>
</author>
<author fullname="Russ Housley">
<organization showOnFrontPage="true">Vigil Security, LLC</organiza
tion>
</author>
<date month="August" day="22" year="2022"/>
<abstract>
<t indent="0"> Concise Binary Object Representation (CBOR) is a
data format designed
for small code size and small message size. CBOR Object Signing and
Encryption (COSE) defines a set of security services for CBOR. This
document defines a countersignature algorithm along with the needed
header parameters and CBOR tags for COSE. This document updates RFC
INSERT the number assigned to [I-D.ietf-cose-rfc8152bis-struct].
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-cose-countersign-0
8"/>
<format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-
cose-countersign-08.txt"/>
<refcontent>Work in Progress</refcontent>
</reference>
<reference anchor="COSE.Algorithms" target="https://www.iana.org/assignm
ents/cose/" quoteTitle="true" derivedAnchor="COSE.Algorithms">
<front> <front>
<title>COSE Algorithms</title> <title>COSE Algorithms</title>
<author> <author>
<organization>IANA</organization> <organization showOnFrontPage="true">IANA</organization>
</author> </author>
<date/> <date/>
</front> </front>
</reference> </reference>
<reference anchor="COSE.KeyParameters" target="https://www.iana.org/assi gnments/cose/cose.xhtml#key-common-parameters"> <reference anchor="COSE.KeyParameters" target="https://www.iana.org/assi gnments/cose/" quoteTitle="true" derivedAnchor="COSE.KeyParameters">
<front> <front>
<title>COSE Key Parameters</title> <title>COSE Key Common Parameters</title>
<author> <author>
<organization>IANA</organization> <organization showOnFrontPage="true">IANA</organization>
</author> </author>
<date/> <date/>
</front> </front>
</reference> </reference>
<reference anchor="COSE.KeyTypes" target="https://www.iana.org/assignmen ts/cose/cose.xhtml#key-type"> <reference anchor="COSE.KeyTypes" target="https://www.iana.org/assignmen ts/cose/" quoteTitle="true" derivedAnchor="COSE.KeyTypes">
<front> <front>
<title>COSE Key Types</title> <title>COSE Key Types</title>
<author> <author>
<organization>IANA</organization> <organization showOnFrontPage="true">IANA</organization>
</author> </author>
<date/> <date/>
</front> </front>
</reference> </reference>
<!-- <xi:include href="bibxml3/reference.I-D.ietf-cose-countersig <reference anchor="DSS" target="https://nvlpubs.nist.gov/nistpubs/FIPS/N
n.xml"/> --> IST.FIPS.186-4.pdf" quoteTitle="true" derivedAnchor="DSS">
<reference anchor="I-D.ietf-cose-countersign">
<front> <front>
<title>CBOR Object Signing&nbsp;and&nbsp;Encryption&nbsp;(COSE): Cou <title>Digital Signature Standard (DSS)</title>
ntersignatures</title> <author>
<author initials="J." surname="Schaad" fullname="Jim Schaad"/> <organization showOnFrontPage="true">National Institute of Standar
<date/> ds and Technology</organization>
</author>
<date year="2013" month="July"/>
</front>
<seriesInfo name="FIPS" value="186-4"/>
<seriesInfo name="DOI" value="10.6028/NIST.FIPS.186-4"/>
</reference>
<reference anchor="GitHub-Examples" target="https://github.com/cose-wg/E
xamples" quoteTitle="true" derivedAnchor="GitHub-Examples">
<front>
<title>GitHub Examples of COSE</title>
<author/>
<date month="June" day="3" year="2020"/>
</front>
<refcontent>commit 3221310</refcontent>
</reference>
<reference anchor="PVSig" target="https://www.certicom.com/content/dam/c
erticom/images/pdfs/CerticomWP-PVSigSec_login.pdf" quoteTitle="true" derivedAnch
or="PVSig">
<front>
<title>Formal Security Proofs for a Signature Scheme with Partial Me
ssage Recovery</title>
<author initials="D.R.L." surname="Brown"/>
<author initials="D.B." surname="Johnson"/>
<date year="2000" month="June"/>
</front>
<seriesInfo name="DOI" value="10.1007/3-540-45353-9_11"/>
<refcontent>LNCS Volume 2020</refcontent>
</reference>
<reference anchor="RFC2633" target="https://www.rfc-editor.org/info/rfc2
633" quoteTitle="true" derivedAnchor="RFC2633">
<front>
<title>S/MIME Version 3 Message Specification</title>
<author fullname="B. Ramsdell" initials="B" role="editor" surname="R
amsdell"/>
<date month="June" year="1999"/>
<abstract>
<t indent="0">This document describes a protocol for adding crypto
graphic signature and encryption services to MIME data. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="2633"/>
<seriesInfo name="DOI" value="10.17487/RFC2633"/>
</reference>
<reference anchor="RFC3394" target="https://www.rfc-editor.org/info/rfc3
394" quoteTitle="true" derivedAnchor="RFC3394">
<front>
<title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
<author fullname="J. Schaad" initials="J" surname="Schaad"/>
<author fullname="R. Housley" initials="R" surname="Housley"/>
<date month="September" year="2002"/>
</front>
<seriesInfo name="RFC" value="3394"/>
<seriesInfo name="DOI" value="10.17487/RFC3394"/>
</reference>
<reference anchor="RFC3851" target="https://www.rfc-editor.org/info/rfc3
851" quoteTitle="true" derivedAnchor="RFC3851">
<front>
<title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version
3.1 Message Specification</title>
<author fullname="B. Ramsdell" initials="B" role="editor" surname="R
amsdell"/>
<date month="July" year="2004"/>
<abstract>
<t indent="0">This document defines Secure/Multipurpose Internet M
ail Extensions (S/MIME) version 3.1. S/MIME provides a consistent way to send a
nd receive secure MIME data. Digital signatures provide authentication, message
integrity, and non-repudiation with proof of origin. Encryption provides data
confidentiality. Compression can be used to reduce data size. This document ob
soletes RFC 2633. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="3851"/>
<seriesInfo name="DOI" value="10.17487/RFC3851"/>
</reference>
<reference anchor="RFC4262" target="https://www.rfc-editor.org/info/rfc4
262" quoteTitle="true" derivedAnchor="RFC4262">
<front>
<title>X.509 Certificate Extension for Secure/Multipurpose Internet
Mail Extensions (S/MIME) Capabilities</title>
<author fullname="S. Santesson" initials="S" surname="Santesson"/>
<date month="December" year="2005"/>
<abstract>
<t indent="0">This document defines a certificate extension for in
clusion of Secure/Multipurpose Internet Mail Extensions (S/MIME) Capabilities in
X.509 public key certificates, as defined by RFC 3280. This certificate extens
ion provides an optional method to indicate the cryptographic capabilities of an
entity as a complement to the S/MIME Capabilities signed attribute in S/MIME me
ssages according to RFC 3851. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="4262"/>
<seriesInfo name="DOI" value="10.17487/RFC4262"/>
</reference>
<reference anchor="RFC4949" target="https://www.rfc-editor.org/info/rfc4
949" quoteTitle="true" derivedAnchor="RFC4949">
<front>
<title>Internet Security Glossary, Version 2</title>
<author fullname="R. Shirey" initials="R" surname="Shirey"/>
<date month="August" year="2007"/>
<abstract>
<t indent="0">This Glossary provides definitions, abbreviations, a
nd explanations of terminology for information system security. The 334 pages o
f entries offer recommendations to improve the comprehensibility of written mate
rial that is generated in the Internet Standards Process (RFC 2026). The recomm
endations follow the principles that such writing should (a) use the same term o
r definition whenever the same concept is mentioned; (b) use terms in their plai
nest, dictionary sense; (c) use terms that are already well-established in open
publications; and (d) avoid terms that either favor a particular vendor or favor
a particular technology or mechanism over other, competing techniques that alre
ady exist or could be developed. This memo provides information for the Interne
t community.</t>
</abstract>
</front>
<seriesInfo name="FYI" value="36"/>
<seriesInfo name="RFC" value="4949"/>
<seriesInfo name="DOI" value="10.17487/RFC4949"/>
</reference>
<reference anchor="RFC5116" target="https://www.rfc-editor.org/info/rfc5
116" quoteTitle="true" derivedAnchor="RFC5116">
<front>
<title>An Interface and Algorithms for Authenticated Encryption</tit
le>
<author fullname="D. McGrew" initials="D" surname="McGrew"/>
<date month="January" year="2008"/>
<abstract>
<t indent="0">This document defines algorithms for Authenticated E
ncryption with Associated Data (AEAD), and defines a uniform interface and a reg
istry for such algorithms. The interface and registry can be used as an applica
tion-independent set of cryptoalgorithm suites. This approach provides advantag
es in efficiency and security, and promotes the reuse of crypto implementations.
[STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5116"/>
<seriesInfo name="DOI" value="10.17487/RFC5116"/>
</reference>
<reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5
652" quoteTitle="true" derivedAnchor="RFC5652">
<front>
<title>Cryptographic Message Syntax (CMS)</title>
<author fullname="R. Housley" initials="R" surname="Housley"/>
<date month="September" year="2009"/>
<abstract>
<t indent="0">This document describes the Cryptographic Message Sy
ntax (CMS). This syntax is used to digitally sign, digest, authenticate, or enc
rypt arbitrary message content. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="STD" value="70"/>
<seriesInfo name="RFC" value="5652"/>
<seriesInfo name="DOI" value="10.17487/RFC5652"/>
</reference>
<reference anchor="RFC5751" target="https://www.rfc-editor.org/info/rfc5
751" quoteTitle="true" derivedAnchor="RFC5751">
<front>
<title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version
3.2 Message Specification</title>
<author fullname="B. Ramsdell" initials="B" surname="Ramsdell"/>
<author fullname="S. Turner" initials="S" surname="Turner"/>
<date month="January" year="2010"/>
<abstract>
<t indent="0">This document defines Secure/Multipurpose Internet M
ail Extensions (S/MIME) version 3.2. S/MIME provides a consistent way to send a
nd receive secure MIME data. Digital signatures provide authentication, message
integrity, and non-repudiation with proof of origin. Encryption provides data
confidentiality. Compression can be used to reduce data size. This document ob
soletes RFC 3851. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5751"/>
<seriesInfo name="DOI" value="10.17487/RFC5751"/>
</reference>
<reference anchor="RFC5752" target="https://www.rfc-editor.org/info/rfc5
752" quoteTitle="true" derivedAnchor="RFC5752">
<front>
<title>Multiple Signatures in Cryptographic Message Syntax (CMS)</ti
tle>
<author fullname="S. Turner" initials="S" surname="Turner"/>
<author fullname="J. Schaad" initials="J" surname="Schaad"/>
<date month="January" year="2010"/>
<abstract>
<t indent="0">Cryptographic Message Syntax (CMS) SignedData includ
es the SignerInfo structure to convey per-signer information. SignedData suppor
ts multiple signers and multiple signature algorithms per signer with multiple S
ignerInfo structures. If a signer attaches more than one SignerInfo, there are
concerns that an attacker could perform a downgrade attack by removing the Signe
rInfo(s) with the \'strong' algorithm(s). This document defines the multiple-si
gnatures attribute, its generation rules, and its processing rules to allow sign
ers to convey multiple SignerInfo objects while protecting against downgrade att
acks. Additionally, this attribute may assist during periods of algorithm migra
tion. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5752"/>
<seriesInfo name="DOI" value="10.17487/RFC5752"/>
</reference>
<reference anchor="RFC5990" target="https://www.rfc-editor.org/info/rfc5
990" quoteTitle="true" derivedAnchor="RFC5990">
<front>
<title>Use of the RSA-KEM Key Transport Algorithm in the Cryptograph
ic Message Syntax (CMS)</title>
<author fullname="J. Randall" initials="J" surname="Randall"/>
<author fullname="B. Kaliski" initials="B" surname="Kaliski"/>
<author fullname="J. Brainard" initials="J" surname="Brainard"/>
<author fullname="S. Turner" initials="S" surname="Turner"/>
<date month="September" year="2010"/>
<abstract>
<t indent="0">The RSA-KEM Key Transport Algorithm is a one-pass (s
tore-and-forward) mechanism for transporting keying data to a recipient using th
e recipient's RSA public key. ("KEM" stands for "key encapsulation mechanism".)
This document specifies the conventions for using the RSA-KEM Key Transport Algo
rithm with the Cryptographic Message Syntax (CMS). The ASN.1 syntax is aligned
with an expected forthcoming change to American National Standard (ANS) X9.44.</
t>
</abstract>
</front>
<seriesInfo name="RFC" value="5990"/>
<seriesInfo name="DOI" value="10.17487/RFC5990"/>
</reference>
<reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6
838" quoteTitle="true" derivedAnchor="RFC6838">
<front>
<title>Media Type Specifications and Registration Procedures</title>
<author fullname="N. Freed" initials="N" surname="Freed"/>
<author fullname="J. Klensin" initials="J" surname="Klensin"/>
<author fullname="T. Hansen" initials="T" surname="Hansen"/>
<date month="January" year="2013"/>
<abstract>
<t indent="0">This document defines procedures for the specificati
on and registration of media types for use in HTTP, MIME, and other Internet pro
tocols. This memo documents an Internet Best Current Practice.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="13"/>
<seriesInfo name="RFC" value="6838"/>
<seriesInfo name="DOI" value="10.17487/RFC6838"/>
</reference>
<reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7
252" quoteTitle="true" derivedAnchor="RFC7252">
<front>
<title>The Constrained Application Protocol (CoAP)</title>
<author fullname="Z. Shelby" initials="Z" surname="Shelby"/>
<author fullname="K. Hartke" initials="K" surname="Hartke"/>
<author fullname="C. Bormann" initials="C" surname="Bormann"/>
<date month="June" year="2014"/>
<abstract>
<t indent="0">The Constrained Application Protocol (CoAP) is a spe
cialized web transfer protocol for use with constrained nodes and constrained (e
.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers wit
h small amounts of ROM and RAM, while constrained networks such as IPv6 over Low
-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error r
ates and a typical throughput of 10s of kbit/s. The protocol is designed for mac
hine- to-machine (M2M) applications such as smart energy and building automation
.</t>
<t indent="0">CoAP provides a request/response interaction model b
etween application endpoints, supports built-in discovery of services and resour
ces, and includes key concepts of the Web such as URIs and Internet media types.
CoAP is designed to easily interface with HTTP for integration with the Web whi
le meeting specialized requirements such as multicast support, very low overhead
, and simplicity for constrained environments.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7252"/>
<seriesInfo name="DOI" value="10.17487/RFC7252"/>
</reference>
<reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7
515" quoteTitle="true" derivedAnchor="RFC7515">
<front>
<title>JSON Web Signature (JWS)</title>
<author fullname="M. Jones" initials="M" surname="Jones"/>
<author fullname="J. Bradley" initials="J" surname="Bradley"/>
<author fullname="N. Sakimura" initials="N" surname="Sakimura"/>
<date month="May" year="2015"/>
<abstract>
<t indent="0">JSON Web Signature (JWS) represents content secured
with digital signatures or Message Authentication Codes (MACs) using JSON-based
data structures. Cryptographic algorithms and identifiers for use with this spe
cification are described in the separate JSON Web Algorithms (JWA) specification
and an IANA registry defined by that specification. Related encryption capabil
ities are described in the separate JSON Web Encryption (JWE) specification.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7515"/>
<seriesInfo name="DOI" value="10.17487/RFC7515"/>
</reference>
<reference anchor="RFC7516" target="https://www.rfc-editor.org/info/rfc7
516" quoteTitle="true" derivedAnchor="RFC7516">
<front>
<title>JSON Web Encryption (JWE)</title>
<author fullname="M. Jones" initials="M" surname="Jones"/>
<author fullname="J. Hildebrand" initials="J" surname="Hildebrand"/>
<date month="May" year="2015"/>
<abstract>
<t indent="0">JSON Web Encryption (JWE) represents encrypted conte
nt using JSON-based data structures. Cryptographic algorithms and identifiers f
or use with this specification are described in the separate JSON Web Algorithms
(JWA) specification and IANA registries defined by that specification. Related
digital signature and Message Authentication Code (MAC) capabilities are descri
bed in the separate JSON Web Signature (JWS) specification.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7516"/>
<seriesInfo name="DOI" value="10.17487/RFC7516"/>
</reference>
<reference anchor="RFC7517" target="https://www.rfc-editor.org/info/rfc7
517" quoteTitle="true" derivedAnchor="RFC7517">
<front>
<title>JSON Web Key (JWK)</title>
<author fullname="M. Jones" initials="M" surname="Jones"/>
<date month="May" year="2015"/>
<abstract>
<t indent="0">A JSON Web Key (JWK) is a JavaScript Object Notation
(JSON) data structure that represents a cryptographic key. This specification
also defines a JWK Set JSON data structure that represents a set of JWKs. Crypt
ographic algorithms and identifiers for use with this specification are describe
d in the separate JSON Web Algorithms (JWA) specification and IANA registries es
tablished by that specification.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7517"/>
<seriesInfo name="DOI" value="10.17487/RFC7517"/>
</reference>
<reference anchor="RFC7518" target="https://www.rfc-editor.org/info/rfc7
518" quoteTitle="true" derivedAnchor="RFC7518">
<front>
<title>JSON Web Algorithms (JWA)</title>
<author fullname="M. Jones" initials="M" surname="Jones"/>
<date month="May" year="2015"/>
<abstract>
<t indent="0">This specification registers cryptographic algorithm
s and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encrypt
ion (JWE), and JSON Web Key (JWK) specifications. It defines several IANA regis
tries for these identifiers.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7518"/>
<seriesInfo name="DOI" value="10.17487/RFC7518"/>
</reference>
<reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8
032" quoteTitle="true" derivedAnchor="RFC8032">
<front>
<title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
<author fullname="S. Josefsson" initials="S" surname="Josefsson"/>
<author fullname="I. Liusvaara" initials="I" surname="Liusvaara"/>
<date month="January" year="2017"/>
<abstract>
<t indent="0">This document describes elliptic curve signature sch
eme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instant
iated with recommended parameters for the edwards25519 and edwards448 curves. A
n example implementation and test vectors are provided.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8032"/>
<seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8
126" quoteTitle="true" derivedAnchor="RFC8126">
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs
</title>
<author fullname="M. Cotton" initials="M" surname="Cotton"/>
<author fullname="B. Leiba" initials="B" surname="Leiba"/>
<author fullname="T. Narten" initials="T" surname="Narten"/>
<date month="June" year="2017"/>
<abstract>
<t indent="0">Many protocols make use of points of extensibility t
hat use constants to identify various protocol parameters. To ensure that the va
lues in these fields do not have conflicting uses and to promote interoperabilit
y, their allocations are often coordinated by a central record keeper. For IETF
protocols, that role is filled by the Internet Assigned Numbers Authority (IANA)
.</t>
<t indent="0">To make assignments in a given registry prudently, g
uidance describing the conditions under which new values should be assigned, as
well as when and how modifications to existing values can be made, is needed. Th
is document defines a framework for the documentation of these guidelines by spe
cification authors, in order to assure that the provided guidance for the IANA C
onsiderations is clear and addresses the various issues that are likely in the o
peration of a registry.</t>
<t indent="0">This is the third edition of this document; it obsol
etes RFC 5226.</t>
</abstract>
</front> </front>
<seriesInfo name="BCP" value="26"/>
<seriesInfo name="RFC" value="8126"/>
<seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="RFC8152" target="https://www.rfc-editor.org/info/rfc8
152" quoteTitle="true" derivedAnchor="RFC8152">
<front>
<title>CBOR Object Signing and Encryption (COSE)</title>
<author fullname="J. Schaad" initials="J" surname="Schaad"/>
<date month="July" year="2017"/>
<abstract>
<t indent="0">Concise Binary Object Representation (CBOR) is a dat
a format designed for small code size and small message size. There is a need f
or the ability to have basic security services defined for this data format. Th
is document defines the CBOR Object Signing and Encryption (COSE) protocol. Thi
s specification describes how to create and process signatures, message authenti
cation codes, and encryption using CBOR for serialization. This specification a
dditionally describes how to represent cryptographic keys using CBOR.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8152"/>
<seriesInfo name="DOI" value="10.17487/RFC8152"/>
</reference>
<reference anchor="RFC8230" target="https://www.rfc-editor.org/info/rfc8
230" quoteTitle="true" derivedAnchor="RFC8230">
<front>
<title>Using RSA Algorithms with CBOR Object Signing and Encryption
(COSE) Messages</title>
<author fullname="M. Jones" initials="M" surname="Jones"/>
<date month="September" year="2017"/>
<abstract>
<t indent="0">The CBOR Object Signing and Encryption (COSE) specif
ication defines cryptographic message encodings using Concise Binary Object Repr
esentation (CBOR). This specification defines algorithm encodings and represent
ations enabling RSA algorithms to be used for COSE messages. Encodings are spec
ified for the use of RSA Probabilistic Signature Scheme (RSASSA-PSS) signatures,
RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) encr
yption, and RSA keys.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8230"/>
<seriesInfo name="DOI" value="10.17487/RFC8230"/>
</reference>
<reference anchor="RFC8551" target="https://www.rfc-editor.org/info/rfc8
551" quoteTitle="true" derivedAnchor="RFC8551">
<front>
<title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version
4.0 Message Specification</title>
<author fullname="J. Schaad" initials="J" surname="Schaad"/>
<author fullname="B. Ramsdell" initials="B" surname="Ramsdell"/>
<author fullname="S. Turner" initials="S" surname="Turner"/>
<date month="April" year="2019"/>
<abstract>
<t indent="0">This document defines Secure/Multipurpose Internet M
ail Extensions (S/MIME) version 4.0. S/MIME provides a consistent way to send a
nd receive secure MIME data. Digital signatures provide authentication, message
integrity, and non-repudiation with proof of origin. Encryption provides data
confidentiality. Compression can be used to reduce data size. This document ob
soletes RFC 5751.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8551"/>
<seriesInfo name="DOI" value="10.17487/RFC8551"/>
</reference>
<reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8
610" quoteTitle="true" derivedAnchor="RFC8610">
<front>
<title>Concise Data Definition Language (CDDL): A Notational Convent
ion to Express Concise Binary Object Representation (CBOR) and JSON Data Structu
res</title>
<author fullname="H. Birkholz" initials="H" surname="Birkholz"/>
<author fullname="C. Vigano" initials="C" surname="Vigano"/>
<author fullname="C. Bormann" initials="C" surname="Bormann"/>
<date month="June" year="2019"/>
<abstract>
<t indent="0">This document proposes a notational convention to ex
press Concise Binary Object Representation (CBOR) data structures (RFC 7049). I
ts main goal is to provide an easy and unambiguous way to express structures for
protocol messages and data formats that use CBOR or JSON.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8610"/>
<seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>
<reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8
613" quoteTitle="true" derivedAnchor="RFC8613">
<front>
<title>Object Security for Constrained RESTful Environments (OSCORE)
</title>
<author fullname="G. Selander" initials="G" surname="Selander"/>
<author fullname="J. Mattsson" initials="J" surname="Mattsson"/>
<author fullname="F. Palombini" initials="F" surname="Palombini"/>
<author fullname="L. Seitz" initials="L" surname="Seitz"/>
<date month="July" year="2019"/>
<abstract>
<t indent="0">This document defines Object Security for Constraine
d RESTful Environments (OSCORE), a method for application-layer protection of th
e Constrained Application Protocol (CoAP), using CBOR Object Signing and Encrypt
ion (COSE). OSCORE provides end-to-end protection between endpoints communicatin
g using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and
networks supporting a range of proxy operations, including translation between
different transport protocols.</t>
<t indent="0">Although an optional functionality of CoAP, OSCORE a
lters CoAP options processing and IANA registration. Therefore, this document up
dates RFC 7252.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8613"/>
<seriesInfo name="DOI" value="10.17487/RFC8613"/>
</reference>
<reference anchor="RFC9054" target="https://www.rfc-editor.org/info/rfc9
054" quoteTitle="true" derivedAnchor="RFC9054">
<front>
<title>CBOR Object Signing and Encryption (COSE): Hash Algorithms</t
itle>
<author initials="J" surname="Schaad" fullname="Jim Schaad">
<organization showOnFrontPage="true"/>
</author>
<date month="August" year="2022"/>
</front>
<seriesInfo name="RFC" value="9054"/>
<seriesInfo name="DOI" value="10.17487/RFC9054"/>
</reference>
<reference anchor="RFC9106" target="https://www.rfc-editor.org/info/rfc9
106" quoteTitle="true" derivedAnchor="RFC9106">
<front>
<title>Argon2 Memory-Hard Function for Password Hashing and Proof-of
-Work Applications</title>
<author fullname="A. Biryukov" initials="A" surname="Biryukov"/>
<author fullname="D. Dinu" initials="D" surname="Dinu"/>
<author fullname="D. Khovratovich" initials="D" surname="Khovratovic
h"/>
<author fullname="S. Josefsson" initials="S" surname="Josefsson"/>
<date month="September" year="2021"/>
<abstract>
<t indent="0">This document describes the Argon2 memory-hard funct
ion for password hashing and proof-of-work applications. We provide an implemen
ter-oriented description with test vectors. The purpose is to simplify adoption
of Argon2 for Internet protocols. This document is a product of the Crypto For
um Research Group (CFRG) in the IRTF.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="9106"/>
<seriesInfo name="DOI" value="10.17487/RFC9106"/>
</reference>
<reference anchor="STD90" target="https://www.rfc-editor.org/info/std90"
quoteTitle="true" derivedAnchor="STD90">
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format
</title>
<author initials="T." surname="Bray" fullname="T. Bray" role="editor
">
<organization showOnFrontPage="true"/>
</author>
<date month="December" year="2017"/>
</front>
<seriesInfo name="STD" value="90"/>
<seriesInfo name="RFC" value="8259"/>
</reference>
<reference anchor="W3C.WebCrypto" target="https://www.w3.org/TR/WebCrypt
oAPI/" quoteTitle="true" derivedAnchor="W3C.WebCrypto">
<front>
<title>Web Cryptography API</title>
<author initials="M." surname="Watson" role="editor"/>
<date year="2017" month="January" day="26"/>
</front>
<refcontent>W3C Recommendation</refcontent>
</reference> </reference>
</references> </references>
</references> </references>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-appen
<name>Guidelines for External Data Authentication of Algorithms</name> dix.a">
<t> <name slugifiedName="name-guidelines-for-external-dat">Guidelines for Exte
rnal Data Authentication of Algorithms</name>
<t indent="0" pn="section-appendix.a-1">
During development of COSE, the requirement that the algorithm identifier be located in the protected attributes was relaxed from a must to a should. During development of COSE, the requirement that the algorithm identifier be located in the protected attributes was relaxed from a must to a should.
There were two basic reasons that have been advanced to support this positio n. Two basic reasons have been advanced to support this position.
First, the resulting message will be smaller if the algorithm identifier is omitted from the most common messages in a CoAP environment. First, the resulting message will be smaller if the algorithm identifier is omitted from the most common messages in a CoAP environment.
Second, there is a potential bug that will arise if full checking is not don e correctly between the different places that an algorithm identifier could be p laced (the message itself, an application statement, the key structure that the sender possesses, and the key structure the recipient possesses). Second, there is a potential bug that will arise if full checking is not don e correctly between the different places that an algorithm identifier could be p laced (the message itself, an application statement, the key structure that the sender possesses, and the key structure the recipient possesses).
</t> </t>
<t> <t indent="0" pn="section-appendix.a-2">
This appendix lays out how such a change can be made and the details that an application needs to specify in order to use this option. This appendix lays out how such a change can be made and the details that an application needs to specify in order to use this option.
Two different sets of details are specified: those needed to omit an algorit hm identifier and those needed to use the variant on the countersignature attrib ute that contains no attributes about itself. Two different sets of details are specified: those needed to omit an algorit hm identifier and those needed to use the variant on the countersignature attrib ute that contains no attributes about itself.
</t> </t>
<t>Three sets of recommendations are laid out. The first set of recommend <t indent="0" pn="section-appendix.a-3">Three sets of recommendations are
ations applies to having an implicit algorithm identified for a single layer of laid out. The first set of recommendations applies to having an implicit algori
a COSE object. The second set of recommendations applies to having multiple imp thm identified for a single layer of a COSE object. The second set of recommend
licit algorithms identified for multiple layers of a COSE object. The third set ations applies to having multiple implicit algorithms identified for multiple la
of recommendations applies to having implicit algorithms for multiple COSE obje yers of a COSE object. The third set of recommendations applies to having impli
ct constructs. </t> cit algorithms for multiple COSE object constructs. </t>
<t>The key words from <xref target="RFC2119"/> are deliberately not used h <t indent="0" pn="section-appendix.a-4">The key words from BCP 14 (<xref t
ere. This specification can provide recommendations, but it cannot enforce them arget="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> a
. </t> nd <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RF
<t>This set of recommendations applies to the case where an application is C8174"/>) are deliberately not used here. This specification can provide recomm
distributing a fixed algorithm along with the key information for use in a sing endations, but it cannot enforce them. </t>
le COSE object. This normally applies to the smallest of the COSE objects, spec <t indent="0" pn="section-appendix.a-5">This set of recommendations applie
ifically COSE_Sign1, COSE_Mac0, and COSE_Encrypt0, but could apply to the other s to the case where an application is distributing a fixed algorithm along with
structures as well. </t> the key information for use in a single COSE object. This normally applies to t
<t>The following items should be taken into account: he smallest of the COSE objects -- specifically, COSE_Sign1, COSE_Mac0, and COSE
_Encrypt0 -- but could apply to the other structures as well. </t>
<t indent="0" pn="section-appendix.a-6">The following items should be take
n into account:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-app
<li>Applications need to list the set of COSE structures that implicit a endix.a-7">
lgorithms are to be used in. Applications need to require that the receipt of a <li pn="section-appendix.a-7.1">Applications need to list the set of COS
n explicit algorithm identifier in one of these structures will lead to the mess E structures that implicit algorithms are to be used in. Applications need to r
age being rejected. This requirement is stated so that there will never be a ca equire that the receipt of an explicit algorithm identifier in one of these stru
se where there is any ambiguity about the question of which algorithm should be ctures will lead to the message being rejected. This requirement is stated so t
used, the implicit or the explicit one. This applies even if the transported al hat there will never be a case where there is any ambiguity about the question o
gorithm identifier is a protected attribute. This applies even if the transport f which algorithm should be used, the implicit or the explicit one. This applie
ed algorithm is the same as the implicit algorithm. </li> s even if the transported algorithm identifier is a protected attribute. This a
<li>Applications need to define the set of information that is to be con pplies even if the transported algorithm is the same as the implicit algorithm.
sidered to be part of a context when omitting algorithm identifiers. At a minim </li>
um, this would be the key identifier (if needed), the key, the algorithm, and th <li pn="section-appendix.a-7.2">Applications need to define the set of i
e COSE structure it is used with. Applications should restrict the use of a sin nformation that is to be considered to be part of a context when omitting algori
gle key to a single algorithm. As noted for some of the algorithms in <xref tar thm identifiers. At a minimum, this would be the key identifier (if needed), th
get="I-D.ietf-cose-rfc8152bis-algs"/>, the use of the same key in different rela e key, the algorithm, and the COSE structure it is used with. Applications shou
ted algorithms can lead to leakage of information about the key, leakage about t ld restrict the use of a single key to a single algorithm. As noted for some of
he data or the ability to perform forgeries. </li> the algorithms in <xref target="RFC9053" format="default" sectionFormat="of" de
<li>In many cases, applications that make the algorithm identifier impli rivedContent="RFC9053"/>, the use of the same key in different, related algorith
cit will also want to make the context identifier implicit for the same reason. ms can lead to leakage of information about the key, leakage about the data, or
That is, omitting the context identifier will decrease the message size (potent the ability to perform forgeries. </li>
ially significantly depending on the length of the identifier). Applications th <li pn="section-appendix.a-7.3">In many cases, applications that make th
at do this will need to describe the circumstances where the context identifier e algorithm identifier implicit will also want to make the context identifier im
is to be omitted and how the context identifier is to be inferred in these cases plicit for the same reason. That is, omitting the context identifier will decre
. (An exhaustive search over all of the keys would normally not be considered t ase the message size (potentially significantly, depending on the length of the
o be acceptable.) An example of how this can be done is to tie the context to a identifier). Applications that do this will need to describe the circumstances
transaction identifier. Both would be sent on the original message, but only th where the context identifier is to be omitted and how the context identifier is
e transaction identifier would need to be sent after that point as the context i to be inferred in these cases. (An exhaustive search over all of the keys would
s tied into the transaction identifier. Another way would be to associate a con normally not be considered to be acceptable.) An example of how this can be don
text with a network address. All messages coming from a single network address e is to tie the context to a transaction identifier. Both would be sent on the
can be assumed to be associated with a specific context. (In this case, the add original message, but only the transaction identifier would need to be sent afte
ress would normally be distributed as part of the context.) </li> r that point, as the context is tied into the transaction identifier. Another w
<li>Applications cannot rely on key identifiers being unique unless they ay would be to associate a context with a network address. All messages coming
take significant efforts to ensure that they are computed in such a way as to c from a single network address can be assumed to be associated with a specific co
reate this guarantee. Even when an application does this, the uniqueness might ntext. (In this case, the address would normally be distributed as part of the
be violated if the application is run in different contexts (i.e., with a differ context.) </li>
ent context provider) or if the system combines the security contexts from diffe <li pn="section-appendix.a-7.4">Applications cannot rely on key identifi
rent applications together into a single store. </li> ers being unique unless they take significant efforts to ensure that they are co
<li>Applications should continue the practice of protecting the algorith mputed in such a way as to create this guarantee. Even when an application does
m identifier. Since this is not done by placing it in the protected attributes this, the uniqueness might be violated if the application is run in different c
field, applications should define an application-specific external data structur ontexts (i.e., with a different context provider) or if the system combines the
e that includes this value. This external data field can be used as such for co security contexts from different applications together into a single store. </l
ntent encryption, MAC, and signature algorithms. It can be used in the SuppPriv i>
Info field for those algorithms that use a KDF to derive a key value. Applicati <li pn="section-appendix.a-7.5">Applications should continue the practic
ons may also want to protect other information that is part of the context struc e of protecting the algorithm identifier. Since this is not done by placing it
ture as well. It should be noted that those fields, such as the key or a Base I in the protected attributes field, applications should define an application-spe
V, are protected by virtue of being used in the cryptographic computation and do cific external data structure that includes this value. This external data fiel
not need to be included in the external data field. </li> d can be used as such for content encryption, MAC, and signature algorithms. It
can be used in the SuppPrivInfo field for those algorithms that use a KDF to de
rive a key value. Applications may also want to protect other information that
is part of the context structure as well. It should be noted that those fields,
such as the key or a Base IV, that are protected by virtue of being used in the
cryptographic computation do not need to be included in the external data field
. </li>
</ul> </ul>
<t>The second case is having multiple implicit algorithm identifiers speci <t indent="0" pn="section-appendix.a-8">The second case is having multiple
fied for a multiple layer COSE object. An example of how this would work is the implicit algorithm identifiers specified for a multiple-layer COSE object. An
encryption context that an application specifies, which contains a content encr example of how this would work is the encryption context that an application spe
yption algorithm, a key wrap algorithm, a key identifier, and a shared secret. cifies, which contains a content encryption algorithm, a key wrap algorithm, a k
The sender omits sending the algorithm identifier for both the content layer and ey identifier, and a shared secret. The sender omits sending the algorithm iden
the recipient layer leaving only the key identifier. The receiver then uses th tifier for both the content layer and the recipient layer, leaving only the key
e key identifier to get the implicit algorithm identifiers. </t> identifier. The receiver then uses the key identifier to get the implicit algor
<t>The following additional items need to be taken into consideration: ithm identifiers. </t>
<t indent="0" pn="section-appendix.a-9">The following additional items nee
d to be taken into consideration:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-app
<li>Applications that want to support this will need to define a structu endix.a-10">
re that allows for, and clearly identifies, both the COSE structure to be used w <li pn="section-appendix.a-10.1">Applications that want to support this
ith a given key and the structure and algorithm to be used for the secondary lay will need to define a structure that allows for, and clearly identifies, both th
er. The key for the secondary layer is computed as normal from the recipient lay e COSE structure to be used with a given key and the structure and algorithm to
er. </li> be used for the secondary layer. The key for the secondary layer is computed as
normal from the recipient layer. </li>
</ul> </ul>
<t>The third case is having multiple implicit algorithm identifiers, but t argeted at potentially unrelated layers or different COSE objects. There are a number of different scenarios where this might be applicable. Some of these sce narios are: <t indent="0" pn="section-appendix.a-11">The third case is having multiple implicit algorithm identifiers, but targeted at potentially unrelated layers or different COSE objects. There are a number of different scenarios where this m ight be applicable. Some of these scenarios are:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-app
<li>Two contexts are distributed as a pair. Each of the contexts is for endix.a-12">
use with a COSE_Encrypt message. Each context will consist of distinct secret <li pn="section-appendix.a-12.1">Two contexts are distributed as a pair.
keys and IVs and potentially even different algorithms. One context is for send Each of the contexts is for use with a COSE_Encrypt message. Each context wil
ing messages from party A to party B, and the second context is for sending mess l consist of distinct secret keys and IVs and potentially even different algorit
ages from party B to party A. This means that there is no chance for a reflecti hms. One context is for sending messages from party A to party B, and the secon
on attack to occur as each party uses different secret keys to send its messages d context is for sending messages from party B to party A. This means that ther
; a message that is reflected back to it would fail to decrypt. </li> e is no chance for a reflection attack to occur, as each party uses different se
<li>Two contexts are distributed as a pair. The first context is used f cret keys to send its messages; a message that is reflected back to it would fai
or encryption of the message, and the second context is used to place a counters l to decrypt. </li>
ignature on the message. The intention is that the second context can be distri <li pn="section-appendix.a-12.2">Two contexts are distributed as a pair.
buted to other entities independently of the first context. This allows these e The first context is used for encryption of the message, and the second contex
ntities to validate that the message came from an individual without being able t is used to place a countersignature on the message. The intention is that the
to decrypt the message and see the content. </li> second context can be distributed to other entities independently of the first
<li> context. This allows these entities to validate that the message came from an i
ndividual without being able to decrypt the message and see the content. </li>
<li pn="section-appendix.a-12.3">
Two contexts are distributed as a pair. Two contexts are distributed as a pair.
The first context contains a key for dealing with MACed messages, and the second context contains a different key for dealing with encrypted messages. The first context contains a key for dealing with MACed messages, and the second context contains a different key for dealing with encrypted messages.
This allows for a unified distribution of keys to participants for dif ferent types of messages that have different keys, but where the keys may be use d in a coordinated manner. This allows for a unified distribution of keys to participants for dif ferent types of messages that have different keys, but where the keys may be use d in a coordinated manner.
</li> </li>
</ul> </ul>
<t>For these cases, the following additional items need to be considered: <t indent="0" pn="section-appendix.a-13">For these cases, the following ad ditional items need to be considered:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-app
<li>Applications need to ensure that the multiple contexts stay associat endix.a-14">
ed. If one of the contexts is invalidated for any reason, all of the contexts a <li pn="section-appendix.a-14.1">Applications need to ensure that the mu
ssociated with it should also be invalidated. </li> ltiple contexts stay associated. If one of the contexts is invalidated for any
reason, all of the contexts associated with it should also be invalidated. </li
>
</ul> </ul>
</section> </section>
<section anchor="three-layer"> <section anchor="three-layer" numbered="true" removeInRFC="false" toc="inclu
<name>Two Layers of Recipient Information</name> de" pn="section-appendix.b">
<t> <name slugifiedName="name-two-layers-of-recipient-inf">Two Layers of Recip
ient Information</name>
<t indent="0" pn="section-appendix.b-1">
All of the currently defined recipient algorithm classes only use two laye rs of the COSE structure. All of the currently defined recipient algorithm classes only use two laye rs of the COSE structure.
The first layer (COSE_Encrypt) is the message content, and the second laye The first layer (COSE_Encrypt) is the message content, and the second laye
r (COSE_Recipint) is the content key encryption. r (COSE_Recipient) is the content key encryption.
However, if one uses a recipient algorithm such as the RSA Key Encapsulati However, if one uses a recipient algorithm such as the RSA Key Encapsulati
on Mechanism (RSA-KEM) (see Appendix A of RSA-KEM <xref target="RFC5990"/>), the on Mechanism (RSA-KEM) (see Appendix A of RSA-KEM <xref target="RFC5990" format=
n it makes sense to have two layers of the COSE_Recipient structure. "default" sectionFormat="of" derivedContent="RFC5990"/>), then it makes sense to
</t> have two layers of the COSE_Recipient structure.
<t>These layers would be:
</t> </t>
<ul> <t indent="0" pn="section-appendix.b-2">These layers would be:
<li>Layer 0: The content encryption layer. This layer contains the payl </t>
oad of the message. </li> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-app
<li>Layer 1: The encryption of the CEK by a KEK. </li> endix.b-3">
<li>Layer 2: The encryption of a long random secret using an RSA key and <li pn="section-appendix.b-3.1">Layer 0: The content encryption layer.
a key derivation function to convert that secret into the KEK. </li> This layer contains the payload of the message. </li>
<li pn="section-appendix.b-3.2">Layer 1: The encryption of the CEK by a
KEK. </li>
<li pn="section-appendix.b-3.3">Layer 2: The encryption of a long random
secret using an RSA key and a key derivation function to convert that secret in
to the KEK. </li>
</ul> </ul>
<t>This is an example of what a triple layer message would look like. The message has the following layers: <t indent="0" pn="section-appendix.b-4">This is an example of what a tripl e-layer message would look like. To make it easier to read, it is presented usi ng the extended CBOR diagnostic notation (defined in <xref target="RFC8610" form at="default" sectionFormat="of" derivedContent="RFC8610"/>) rather than as a bin ary dump. The message has the following layers:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-app
<li>Layer 0: Has a content encrypted with AES-GCM using a 128-bit key. endix.b-5">
</li> <li pn="section-appendix.b-5.1">Layer 0: Has content encrypted with AES-
<li>Layer 1: Uses the AES Key Wrap algorithm with a 128-bit key. </li> GCM using a 128-bit key. </li>
<li>Layer 2: Uses ECDH Ephemeral-Static direct to generate the layer 1 k <li pn="section-appendix.b-5.2">Layer 1: Uses the AES Key Wrap algorithm
ey. </li> with a 128-bit key. </li>
<li pn="section-appendix.b-5.3">Layer 2: Uses ECDH Ephemeral-Static dire
ct to generate the Layer 1 key. </li>
</ul> </ul>
<t> In effect, this example is a decomposed version of using the ECDH‑ES+A <t indent="0" pn="section-appendix.b-6"> In effect, this example is a deco
128KW algorithm. </t> mposed version of using the ECDH-ES+A128KW algorithm. </t>
<t>Size of binary file is 183 bytes</t> <t indent="0" pn="section-appendix.b-7">Size of binary file is 183 bytes</
<sourcecode type="CBORdiag"><![CDATA[ t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.b-8">
96( 96(
[ / COSE_Encrypt / [ / COSE_Encrypt /
/ protected h'a10101' / <&lt; { / protected h'a10101' / &lt;&lt; {
/ alg / 1:1 / AES-GCM 128 / / alg / 1:1 / AES-GCM 128 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ iv / 5:h'02d1f7e6f26c43d4868d87ce' / iv / 5:h'02d1f7e6f26c43d4868d87ce'
}, },
/ ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e2852948658f0 / ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e2852948658f0
811139868826e89218a75715b', 811139868826e89218a75715b',
/ recipients / [ / recipients / [
[ / COSE_Recipient / [ / COSE_Recipient /
/ protected / h'', / protected / h'',
/ unprotected / { / unprotected / {
/ alg / 1:-3 / A128KW / / alg / 1:-3 / A128KW /
}, },
/ ciphertext / h'dbd43c4e9d719c27c6275c67d628d493f090593db82 / ciphertext / h'dbd43c4e9d719c27c6275c67d628d493f090593db82
18f11', 18f11',
/ recipients / [ / recipients / [
[ / COSE_Recipient / [ / COSE_Recipient /
/ protected h'a1013818' / <&lt; { / protected h'a1013818' / &lt;&lt; {
/ alg / 1:-25 / ECDH-ES + HKDF-256 / / alg / 1:-25 / ECDH-ES + HKDF-256 /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ ephemeral / -1:{ / ephemeral / -1:{
/ kty / 1:2, / kty / 1:2,
/ crv / -1:1, / crv / -1:1,
/ x / -2:h'b2add44368ea6d641f9ca9af308b4079aeb519f11 / x / -2:h'b2add44368ea6d641f9ca9af308b4079aeb519f11
e9b8a55a600b21233e86e68', e9b8a55a600b21233e86e68',
/ y / -3:false / y / -3:false
}, },
/ kid / 4:'meriadoc.brandybuck@buckland.example' / kid / 4:'meriadoc.brandybuck@buckland.example'
}, },
/ ciphertext / h'' / ciphertext / h''
] ]
] ]
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="examples"> <section anchor="examples" numbered="true" removeInRFC="false" toc="include"
<name>Examples</name> pn="section-appendix.c">
<t>This appendix includes a set of examples that show the different featur <name slugifiedName="name-examples">Examples</name>
es and message types that have been defined in this document. To make the examp <t indent="0" pn="section-appendix.c-1">This appendix includes a set of ex
les easier to read, they are presented using the extended CBOR diagnostic notati amples that show the different features and message types that have been defined
on (defined in <xref target="RFC8610"/>) rather than as a binary dump. </t> in this document. To make the examples easier to read, they are presented usin
<t> g the extended CBOR diagnostic notation (defined in <xref target="RFC8610" forma
A GitHub project has been created at &lt;https://github.com/cose-wg/Exam t="default" sectionFormat="of" derivedContent="RFC8610"/>) rather than as a bina
ples&gt; that contains not only the examples presented in this document, but a m ry dump. </t>
ore complete set of testing examples as well. <t indent="0" pn="section-appendix.c-2">
Each example is found in a JSON file that contains the inputs used to cr A GitHub project has been created at <xref target="GitHub-Examples" form
eate the example, some of the intermediate values that can be used in debugging at="default" sectionFormat="of" derivedContent="GitHub-Examples"/> that contains
the example and the output of the example presented both as a hex dump and in CB not only the examples presented in this document, but a more complete set of te
OR diagnostic notation format. sting examples as well.
Some of the examples at the site are designed failure testing cases; the Each example is found in a JSON file that contains the inputs used to cr
se are clearly marked as such in the JSON file. eate the example, some of the intermediate values that can be used in debugging
the example, and the output of the example presented both as a hex dump and in C
BOR diagnostic notation format.
Some of the examples at the site are designed to be failure-testing case
s; these are clearly marked as such in the JSON file.
If errors in the examples in this document are found, the examples on Gi tHub will be updated, and a note to that effect will be placed in the JSON file. If errors in the examples in this document are found, the examples on Gi tHub will be updated, and a note to that effect will be placed in the JSON file.
</t> </t>
<t>As noted, the examples are presented using the CBOR's diagnostic notati <t indent="0" pn="section-appendix.c-3">As noted, the examples are present
on. A Ruby-based tool exists that can convert between the diagnostic notation a ed using CBOR's diagnostic notation. A Ruby-based tool exists that can convert
nd binary. This tool can be installed with the command line: </t> between the diagnostic notation and binary. This tool can be installed with the
<sourcecode type=""><![CDATA[gem install cbor-diag]]></sourcecode> command line: </t>
<t>The diagnostic notation can be converted into binary files using the fo <sourcecode type="shell" markers="false" pn="section-appendix.c-4">gem ins
llowing command line: </t> tall cbor-diag</sourcecode>
<sourcecode type=""><![CDATA[diag2cbor.rb < inputfile > outputfile <t indent="0" pn="section-appendix.c-5">The diagnostic notation can be con
]]></sourcecode> verted into binary files using the following command line: </t>
<t>The examples can be extracted from the XML version of this document via <sourcecode type="shell" markers="false" pn="section-appendix.c-6">diag2cb
an XPath expression as all of the sourcecode is tagged with the attribute type= or.rb &lt; inputfile &gt; outputfile
'CBORdiag'. (Depending on the XPath evaluator one is using, it may be necessary </sourcecode>
to deal with &amp;gt; as an entity.) </t> <t indent="0" pn="section-appendix.c-7">The examples can be extracted from
<sourcecode type="XPATH"><![CDATA[//sourcecode[@type='CDDL']/text()]]></so the XML version of this document via an XPath expression, as all of the source
urcecode> code is tagged with the attribute type='cbor-diag'. (Depending on the XPath eva
<section anchor="SignedExamples"> luator one is using, it may be necessary to deal with &amp;gt; as an entity.) </
<name>Examples of Signed Messages</name> t>
<section anchor="Appendix_B_1_1"> <sourcecode type="xpath" markers="false" pn="section-appendix.c-8">//sourc
<name>Single Signature</name> ecode[@type='cbor-diag']/text()</sourcecode>
<t>This example uses the following: <section anchor="SignedExamples" numbered="true" removeInRFC="false" toc="
include" pn="section-appendix.c.1">
<name slugifiedName="name-examples-of-signed-messages">Examples of Signe
d Messages</name>
<section anchor="Appendix_B_1_1" numbered="true" removeInRFC="false" toc
="include" pn="section-appendix.c.1.1">
<name slugifiedName="name-single-signature">Single Signature</name>
<t indent="0" pn="section-appendix.c.1.1-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>Signature Algorithm: ECDSA w/ SHA-256, Curve P-256</li> -appendix.c.1.1-2">
<li pn="section-appendix.c.1.1-2.1">Signature Algorithm: ECDSA w/ SH
A-256, Curve P-256</li>
</ul> </ul>
<t>Size of binary file is 103 bytes</t> <t indent="0" pn="section-appendix.c.1.1-3">Size of binary file is 103
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.1.
1-4">
98( 98(
[ [
/ protected / h'', / protected / h'',
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ signatures / [ / signatures / [
[ [
/ protected h'a10126' / <&lt; { / protected h'a10126' / <&lt; {
/ alg / 1:-7 / ECDSA 256 / / alg / 1:-7 / ECDSA 256 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ kid / 4:'11' / kid / 4:'11'
}, },
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a' 98f53afd2fa0f30a'
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_1_2"> <section anchor="Appendix_B_1_2" numbered="true" removeInRFC="false" toc
<name>Multiple Signers</name> ="include" pn="section-appendix.c.1.2">
<t>This example uses the following: <name slugifiedName="name-multiple-signers">Multiple Signers</name>
<t indent="0" pn="section-appendix.c.1.2-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>Signature Algorithm: ECDSA w/ SHA-256, Curve P-256</li> -appendix.c.1.2-2">
<li>Signature Algorithm: ECDSA w/ SHA-512, Curve P-521</li> <li pn="section-appendix.c.1.2-2.1">Signature Algorithm: ECDSA w/ SH
A-256, Curve P-256</li>
<li pn="section-appendix.c.1.2-2.2">Signature Algorithm: ECDSA w/ SH
A-512, Curve P-521</li>
</ul> </ul>
<t>Size of binary file is 277 bytes</t> <t indent="0" pn="section-appendix.c.1.2-3">Size of binary file is 277
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.1.
2-4">
98( 98(
[ [
/ protected / h'', / protected / h'',
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ signatures / [ / signatures / [
[ [
/ protected h'a10126' / <&lt; { / protected h'a10126' / <&lt; {
/ alg / 1:-7 / ECDSA 256 / / alg / 1:-7 / ECDSA 256 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ kid / 4:'11' / kid / 4:'11'
}, },
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a' 98f53afd2fa0f30a'
], ],
[ [
/ protected h'a1013823' / <&lt; { / protected h'a1013823' / <&lt; {
/ alg / 1:-36 / ECDSA 521 / / alg / 1:-36 / ECDSA 521 /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ kid / 4:'bilbo.baggins@hobbiton.example' / kid / 4:'bilbo.baggins@hobbiton.example'
}, },
/ signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1 / signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1
de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024 de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024
7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030 7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030
c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f
83ab87bb4f7a0297' 83ab87bb4f7a0297'
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_1_4"> <section anchor="Appendix_B_1_4" numbered="true" removeInRFC="false" toc
<name>Signature with Criticality</name> ="include" pn="section-appendix.c.1.3">
<t>This example uses the following: <name slugifiedName="name-signature-with-criticality">Signature with C
riticality</name>
<t indent="0" pn="section-appendix.c.1.3-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>Signature Algorithm: ECDSA w/ SHA-256, Curve P-256</li> -appendix.c.1.3-2">
<li>There is a criticality marker on the "reserved" header paramet <li pn="section-appendix.c.1.3-2.1">Signature Algorithm: ECDSA w/ SH
er</li> A-256, Curve P-256</li>
<li pn="section-appendix.c.1.3-2.2">There is a criticality marker on
the "reserved" header parameter.</li>
</ul> </ul>
<t>Size of binary file is 125 bytes</t> <t indent="0" pn="section-appendix.c.1.3-3">Size of binary file is 125
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.1.
3-4">
98( 98(
[ [
/ protected h'a2687265736572766564f40281687265736572766564' / / protected h'a2687265736572766564f40281687265736572766564' /
<&lt; { <&lt; {
"reserved":false, "reserved":false,
/ crit / 2:[ / crit / 2:[
"reserved" "reserved"
] ]
} >&gt;, } >&gt;,
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ signatures / [ / signatures / [
[ [
/ protected h'a10126' / <&lt; { / protected h'a10126' / <&lt; {
/ alg / 1:-7 / ECDSA 256 / / alg / 1:-7 / ECDSA 256 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ kid / 4:'11' / kid / 4:'11'
}, },
/ signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d / signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d
69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b 69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b
18aba9d1fad1bd9c' 18aba9d1fad1bd9c'
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
<section anchor="Sign1_Examples"> <section anchor="Sign1_Examples" numbered="true" removeInRFC="false" toc="
<name>Single Signer Examples</name> include" pn="section-appendix.c.2">
<section> <name slugifiedName="name-single-signer-examples">Single Signer Examples
<name>Single ECDSA Signature</name> </name>
<t>This example uses the following: <section numbered="true" removeInRFC="false" toc="include" pn="section-a
ppendix.c.2.1">
<name slugifiedName="name-single-ecdsa-signature">Single ECDSA Signatu
re</name>
<t indent="0" pn="section-appendix.c.2.1-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>Signature Algorithm: ECDSA w/ SHA-256, Curve P-256</li> -appendix.c.2.1-2">
<li pn="section-appendix.c.2.1-2.1">Signature Algorithm: ECDSA w/ SH
A-256, Curve P-256</li>
</ul> </ul>
<t>Size of binary file is 98 bytes</t> <t indent="0" pn="section-appendix.c.2.1-3">Size of binary file is 98
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.2.
1-4">
18( 18(
[ [
/ protected h'a10126' / <&lt; { / protected h'a10126' / <&lt; {
/ alg / 1:-7 / ECDSA 256 / / alg / 1:-7 / ECDSA 256 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ kid / 4:'11' / kid / 4:'11'
}, },
/ payload / 'This is the content.', / payload / 'This is the content.',
/ signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4 / signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4
d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5 d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5
a4c345cacb36' a4c345cacb36'
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
<section anchor="EnvelopedExamples"> <section anchor="EnvelopedExamples" numbered="true" removeInRFC="false" to
<name>Examples of Enveloped Messages</name> c="include" pn="section-appendix.c.3">
<section anchor="Appendix_B_3_1"> <name slugifiedName="name-examples-of-enveloped-messa">Examples of Envel
<name>Direct ECDH</name> oped Messages</name>
<t>This example uses the following: <section anchor="Appendix_B_3_1" numbered="true" removeInRFC="false" toc
="include" pn="section-appendix.c.3.1">
<name slugifiedName="name-direct-ecdh">Direct ECDH</name>
<t indent="0" pn="section-appendix.c.3.1-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>CEK: AES-GCM w/ 128-bit key</li> -appendix.c.3.1-2">
<li>Recipient class: ECDH Ephemeral-Static, Curve P-256</li> <li pn="section-appendix.c.3.1-2.1">CEK: AES-GCM w/ 128-bit key</li>
<li pn="section-appendix.c.3.1-2.2">Recipient class: ECDH Ephemeral-
Static, Curve P-256</li>
</ul> </ul>
<t>Size of binary file is 151 bytes</t> <t indent="0" pn="section-appendix.c.3.1-3">Size of binary file is 151
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.3.
1-4">
96( 96(
[ [
/ protected h'a10101' / <&lt; { / protected h'a10101' / <&lt; {
/ alg / 1:1 / AES-GCM 128 / / alg / 1:1 / AES-GCM 128 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ iv / 5:h'c9cf4df2fe6c632bf7886413' / iv / 5:h'c9cf4df2fe6c632bf7886413'
}, },
/ ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0
c52a357da7a644b8070a151b0', c52a357da7a644b8070a151b0',
/ recipients / [ / recipients / [
[ [
/ protected h'a1013818' / <&lt; { / protected h'a1013818' / <&lt; {
/ alg / 1:-25 / ECDH-ES + HKDF-256 / / alg / 1:-25 / ECDH-ES + HKDF-256 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ ephemeral / -1:{ / ephemeral / -1:{
/ kty / 1:2, / kty / 1:2,
/ crv / -1:1, / crv / -1:1,
/ x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf
bf054e1c7b4d91d6280', bf054e1c7b4d91d6280',
/ y / -3:true / y / -3:true
}, },
/ kid / 4:'meriadoc.brandybuck@buckland.example' / kid / 4:'meriadoc.brandybuck@buckland.example'
}, },
/ ciphertext / h'' / ciphertext / h''
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_3_2"> <section anchor="Appendix_B_3_2" numbered="true" removeInRFC="false" toc
<name>Direct Plus Key Derivation</name> ="include" pn="section-appendix.c.3.2">
<t>This example uses the following: <name slugifiedName="name-direct-plus-key-derivation">Direct Plus Key
Derivation</name>
<t indent="0" pn="section-appendix.c.3.2-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>CEK: AES-CCM w/ 128-bit key, truncate the tag to 64 bits</li> -appendix.c.3.2-2">
<li> <li pn="section-appendix.c.3.2-2.1">CEK: AES-CCM w/ 128-bit key, tru
<t>Recipient class: Use HKDF on a shared secret with the following ncate the tag to 64 bits</li>
implicit fields as part of the context. <li pn="section-appendix.c.3.2-2.2">
<t indent="0" pn="section-appendix.c.3.2-2.2.1">Recipient class: U
se HKDF on a shared secret with the following implicit fields as part of the con
text.
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="sec
<li>salt: "aabbccddeeffgghh"</li> tion-appendix.c.3.2-2.2.2">
<li>PartyU identity: "lighting-client"</li> <li pn="section-appendix.c.3.2-2.2.2.1">salt: "aabbccddeeffgghh"
<li>PartyV identity: "lighting-server"</li> </li>
<li>Supplementary Public Other: "Encryption Example 02"</l <li pn="section-appendix.c.3.2-2.2.2.2">PartyU identity: "lighti
i> ng-client"</li>
<li pn="section-appendix.c.3.2-2.2.2.3">PartyV identity: "lighti
ng-server"</li>
<li pn="section-appendix.c.3.2-2.2.2.4">Supplementary Public Oth
er: "Encryption Example 02"</li>
</ul> </ul>
</li> </li>
</ul> </ul>
<t>Size of binary file is 91 bytes</t> <t indent="0" pn="section-appendix.c.3.2-3">Size of binary file is 91
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.3.
2-4">
96( 96(
[ [
/ protected h'a1010a' / <&lt; { / protected h'a1010a' / <&lt; {
/ alg / 1:10 / AES-CCM-16-64-128 / / alg / 1:10 / AES-CCM-16-64-128 /
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a76c' / iv / 5:h'89f52f65a1c580933b5261a76c'
}, },
/ ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93 / ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93
1b687b847', 1b687b847',
/ recipients / [ / recipients / [
[ [
/ protected h'a10129' / <&lt; { / protected h'a10129' / &lt;&lt; {
/ alg / 1:-10 / alg / 1:-10
} >&gt;, } >&gt;,
/ unprotected / { / unprotected / {
/ salt / -20:'aabbccddeeffgghh', / salt / -20:'aabbccddeeffgghh',
/ kid / 4:'our-secret' / kid / 4:'our-secret'
}, },
/ ciphertext / h'' / ciphertext / h''
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_3_4"> <section anchor="Appendix_B_3_4" numbered="true" removeInRFC="false" toc
<name>Encrypted Content with External Data</name> ="include" pn="section-appendix.c.3.3">
<t>This example uses the following: <name slugifiedName="name-encrypted-content-with-exte">Encrypted Conte
nt with External Data</name>
<t indent="0" pn="section-appendix.c.3.3-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>CEK: AES-GCM w/ 128-bit key</li> -appendix.c.3.3-2">
<li>Recipient class: ECDH static-Static, Curve P-256 with AES Key <li pn="section-appendix.c.3.3-2.1">CEK: AES-GCM w/ 128-bit key</li>
Wrap</li> <li pn="section-appendix.c.3.3-2.2">Recipient class: ECDH Static-Sta
<li>Externally Supplied AAD: h'0011bbcc22dd44ee55ff660077'</li> tic, Curve P-256 with AES Key Wrap</li>
<li pn="section-appendix.c.3.3-2.3">Externally Supplied AAD: h'0011b
bcc22dd44ee55ff660077'</li>
</ul> </ul>
<t>Size of binary file is 173 bytes</t> <t indent="0" pn="section-appendix.c.3.3-3">Size of binary file is 173
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.3.
3-4">
96( 96(
[ [
/ protected h'a10101' / <&lt; { / protected h'a10101' / <&lt; {
/ alg / 1:1 / AES-GCM 128 / / alg / 1:1 / AES-GCM 128 /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ iv / 5:h'02d1f7e6f26c43d4868d87ce' / iv / 5:h'02d1f7e6f26c43d4868d87ce'
}, },
/ ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e28529d8f5335 / ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e28529d8f5335
e5f0165eee976b4a5f6c6f09d', e5f0165eee976b4a5f6c6f09d',
/ recipients / [ / recipients / [
[ [
/ protected / h'a101381f' / { / protected / h'a101381f' / {
\ alg \ 1:-32 \ ECHD-SS+A128KW \ \ alg \ 1:-32 \ ECHD-SS+A128KW \
} / , } / ,
skipping to change at line 2510 skipping to change at line 3094
/ static kid / -3:'peregrin.took@tuckborough.example', / static kid / -3:'peregrin.took@tuckborough.example',
/ kid / 4:'meriadoc.brandybuck@buckland.example', / kid / 4:'meriadoc.brandybuck@buckland.example',
/ U nonce / -22:h'0101' / U nonce / -22:h'0101'
}, },
/ ciphertext / h'41e0d76f579dbd0d936a662d54d8582037de2e366fd / ciphertext / h'41e0d76f579dbd0d936a662d54d8582037de2e366fd
e1c62' e1c62'
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
<section anchor="EncryptExamples"> <section anchor="EncryptExamples" numbered="true" removeInRFC="false" toc=
<name>Examples of Encrypted Messages</name> "include" pn="section-appendix.c.4">
<section anchor="Appendix_B_4_1"> <name slugifiedName="name-examples-of-encrypted-messa">Examples of Encry
<name>Simple Encrypted Message</name> pted Messages</name>
<t>This example uses the following: <section anchor="Appendix_B_4_1" numbered="true" removeInRFC="false" toc
="include" pn="section-appendix.c.4.1">
<name slugifiedName="name-simple-encrypted-message">Simple Encrypted M
essage</name>
<t indent="0" pn="section-appendix.c.4.1-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>CEK: AES-CCM w/ 128-bit key and a 64-bit tag</li> -appendix.c.4.1-2">
<li pn="section-appendix.c.4.1-2.1">CEK: AES-CCM w/ 128-bit key and
a 64-bit tag</li>
</ul> </ul>
<t>Size of binary file is 52 bytes</t> <t indent="0" pn="section-appendix.c.4.1-3">Size of binary file is 52
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.4.
1-4">
16( 16(
[ [
/ protected h'a1010a' / <&lt; { / protected h'a1010a' / <&lt; {
/ alg / 1:10 / AES-CCM-16-64-128 / / alg / 1:10 / AES-CCM-16-64-128 /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a78c' / iv / 5:h'89f52f65a1c580933b5261a78c'
}, },
/ ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce / ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce
460ffb569' 460ffb569'
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_4_2"> <section anchor="Appendix_B_4_2" numbered="true" removeInRFC="false" toc
<name>Encrypted Message with a Partial IV</name> ="include" pn="section-appendix.c.4.2">
<t>This example uses the following: <name slugifiedName="name-encrypted-message-with-a-pa">Encrypted Messa
ge with a Partial IV</name>
<t indent="0" pn="section-appendix.c.4.2-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>CEK: AES-CCM w/ 128-bit key and a 64-bit tag</li> -appendix.c.4.2-2">
<li>Prefix for IV is 89F52F65A1C580933B52</li> <li pn="section-appendix.c.4.2-2.1">CEK: AES-CCM w/ 128-bit key and
a 64-bit tag</li>
<li pn="section-appendix.c.4.2-2.2">Prefix for IV is 89F52F65A1C5809
33B52</li>
</ul> </ul>
<t>Size of binary file is 41 bytes</t> <t indent="0" pn="section-appendix.c.4.2-3">Size of binary file is 41
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.4.
2-4">
16( 16(
[ [
/ protected h'a1010a' / <&lt; { / protected h'a1010a' / &lt;&lt; {
/ alg / 1:10 / AES-CCM-16-64-128 / / alg / 1:10 / AES-CCM-16-64-128 /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ partial iv / 6:h'61a7' / partial iv / 6:h'61a7'
}, },
/ ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05 / ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05
3bd09abca' 3bd09abca'
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
<section anchor="MacExamples"> <section anchor="MacExamples" numbered="true" removeInRFC="false" toc="inc
<name>Examples of MACed Messages</name> lude" pn="section-appendix.c.5">
<section anchor="Appendix_B_5_1"> <name slugifiedName="name-examples-of-maced-messages">Examples of MACed
<name>Shared Secret Direct MAC</name> Messages</name>
<t>This example uses the following: <section anchor="Appendix_B_5_1" numbered="true" removeInRFC="false" toc
="include" pn="section-appendix.c.5.1">
<name slugifiedName="name-shared-secret-direct-mac">Shared Secret Dire
ct MAC</name>
<t indent="0" pn="section-appendix.c.5.1-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>MAC: AES-CMAC, 256-bit key, truncated to 64 bits</li> -appendix.c.5.1-2">
<li>Recipient class: direct shared secret</li> <li pn="section-appendix.c.5.1-2.1">MAC: AES-CMAC, 256-bit key, trun
cated to 64 bits</li>
<li pn="section-appendix.c.5.1-2.2">Recipient class: direct shared s
ecret</li>
</ul> </ul>
<t>Size of binary file is 57 bytes</t> <t indent="0" pn="section-appendix.c.5.1-3">Size of binary file is 57
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.5.
1-4">
97( 97(
[ [
/ protected h'a1010f' / <&lt; { / protected h'a1010f' / &lt;&lt; {
/ alg / 1:15 / AES-CBC-MAC-256//64 / / alg / 1:15 / AES-CBC-MAC-256//64 /
} >&gt; , } >&gt; ,
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ tag / h'9e1226ba1f81b848', / tag / h'9e1226ba1f81b848',
/ recipients / [ / recipients / [
[ [
/ protected / h'', / protected / h'',
/ unprotected / { / unprotected / {
/ alg / 1:-6 / direct /, / alg / 1:-6 / direct /,
/ kid / 4:'our-secret' / kid / 4:'our-secret'
}, },
/ ciphertext / h'' / ciphertext / h''
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_5_2"> <section anchor="Appendix_B_5_2" numbered="true" removeInRFC="false" toc
<name>ECDH Direct MAC</name> ="include" pn="section-appendix.c.5.2">
<t>This example uses the following: <name slugifiedName="name-ecdh-direct-mac">ECDH Direct MAC</name>
<t indent="0" pn="section-appendix.c.5.2-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>MAC: HMAC w/SHA-256, 256-bit key</li> -appendix.c.5.2-2">
<li>Recipient class: ECDH key agreement, two static keys, HKDF w/ <li pn="section-appendix.c.5.2-2.1">MAC: HMAC w/SHA-256, 256-bit key
context structure</li> </li>
<li pn="section-appendix.c.5.2-2.2">Recipient class: ECDH key agreem
ent, two static keys, HKDF w/context structure</li>
</ul> </ul>
<t>Size of binary file is 214 bytes</t> <t indent="0" pn="section-appendix.c.5.2-3">Size of binary file is 214
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.5.
2-4">
97( 97(
[ [
/ protected h'a10105' / <&lt; { / protected h'a10105' / &lt;&lt; {
/ alg / 1:5 / HMAC 256//256 / / alg / 1:5 / HMAC 256//256 /
} >&gt; , } >&gt; ,
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99 / tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99
4bc3f16a41', 4bc3f16a41',
/ recipients / [ / recipients / [
[ [
/ protected h'a101381a' / <&lt; { / protected h'a101381a' / &lt;&lt; {
/ alg / 1:-27 / ECDH-SS + HKDF-256 / / alg / 1:-27 / ECDH-SS + HKDF-256 /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ static kid / -3:'peregrin.took@tuckborough.example', / static kid / -3:'peregrin.took@tuckborough.example',
/ kid / 4:'meriadoc.brandybuck@buckland.example', / kid / 4:'meriadoc.brandybuck@buckland.example',
/ U nonce / -22:h'4d8553e7e74f3c6a3a9dd3ef286a8195cbf8a23d / U nonce / -22:h'4d8553e7e74f3c6a3a9dd3ef286a8195cbf8a23d
19558ccfec7d34b824f42d92bd06bd2c7f0271f0214e141fb779ae2856abf585a583 19558ccfec7d34b824f42d92bd06bd2c7f0271f0214e141fb779ae2856abf585a583
68b017e7f2a9e5ce4db5' 68b017e7f2a9e5ce4db5'
}, },
/ ciphertext / h'' / ciphertext / h''
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_5_3"> <section anchor="Appendix_B_5_3" numbered="true" removeInRFC="false" toc
<name>Wrapped MAC</name> ="include" pn="section-appendix.c.5.3">
<t>This example uses the following: <name slugifiedName="name-wrapped-mac">Wrapped MAC</name>
<t indent="0" pn="section-appendix.c.5.3-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>MAC: AES-MAC, 128-bit key, truncated to 64 bits</li> -appendix.c.5.3-2">
<li>Recipient class: AES Key Wrap w/ a pre-shared 256-bit key</li> <li pn="section-appendix.c.5.3-2.1">MAC: AES-MAC, 128-bit key, trunc
ated to 64 bits</li>
<li pn="section-appendix.c.5.3-2.2">Recipient class: AES Key Wrap w/
a preshared 256-bit key</li>
</ul> </ul>
<t>Size of binary file is 109 bytes</t> <t indent="0" pn="section-appendix.c.5.3-3">Size of binary file is 109
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.5.
3-4">
97( 97(
[ [
/ protected h'a1010e' / <&lt; { / protected h'a1010e' / &lt;&lt; {
/ alg / 1:14 / AES-CBC-MAC-128//64 / / alg / 1:14 / AES-CBC-MAC-128//64 /
} >&gt; , } >&gt; ,
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ tag / h'36f5afaf0bab5d43', / tag / h'36f5afaf0bab5d43',
/ recipients / [ / recipients / [
[ [
/ protected / h'', / protected / h'',
/ unprotected / { / unprotected / {
/ alg / 1:-5 / A256KW /, / alg / 1:-5 / A256KW /,
/ kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037' / kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037'
}, },
/ ciphertext / h'711ab0dc2fc4585dce27effa6781c8093eba906f227 / ciphertext / h'711ab0dc2fc4585dce27effa6781c8093eba906f227
b6eb0' b6eb0'
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
<section anchor="Appendix_B_5_4"> <section anchor="Appendix_B_5_4" numbered="true" removeInRFC="false" toc
<name>Multi-Recipient MACed Message</name> ="include" pn="section-appendix.c.5.4">
<t>This example uses the following: <name slugifiedName="name-multi-recipient-maced-messa">Multi-Recipient
MACed Message</name>
<t indent="0" pn="section-appendix.c.5.4-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>MAC: HMAC w/ SHA-256, 128-bit key</li> -appendix.c.5.4-2">
<li> <li pn="section-appendix.c.5.4-2.1">MAC: HMAC w/ SHA-256, 128-bit ke
<t>Recipient class: Uses three different methods y</li>
<li pn="section-appendix.c.5.4-2.2">
<t indent="0" pn="section-appendix.c.5.4-2.2.1">Recipient class: U
ses two different methods.
</t> </t>
<ol type="1"> <ol type="1" indent="adaptive" spacing="normal" start="1" pn="sect
<li>ECDH Ephemeral-Static, Curve P-521, AES Key Wrap w/ 12 ion-appendix.c.5.4-2.2.2">
8-bit key</li> <li pn="section-appendix.c.5.4-2.2.2.1" derivedCounter="1.
<li>AES Key Wrap w/ 256-bit key</li> ">ECDH Ephemeral-Static, Curve P-521, AES Key Wrap w/ 128-bit key</li>
<li pn="section-appendix.c.5.4-2.2.2.2" derivedCounter="2.">AES
Key Wrap w/ 256-bit key</li>
</ol> </ol>
</li> </li>
</ul> </ul>
<t>Size of binary file is 309 bytes</t> <t indent="0" pn="section-appendix.c.5.4-3">Size of binary file is 309
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.5.
4-4">
97( 97(
[ [
/ protected h'a10105' / <&lt; { / protected h'a10105' / <&lt; {
/ alg / 1:5 / HMAC 256//256 / / alg / 1:5 / HMAC 256//256 /
} >&gt; , } >&gt; ,
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16 / tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16
1e49e9323e', 1e49e9323e',
/ recipients / [ / recipients / [
[ [
/ protected h'a101381c' / <&lt; { / protected h'a101381c' / <&lt; {
/ alg / 1:-29 / ECHD-ES+A128KW / / alg / 1:-29 / ECHD-ES+A128KW /
} >&gt; , } >&gt; ,
/ unprotected / { / unprotected / {
/ ephemeral / -1:{ / ephemeral / -1:{
/ kty / 1:2, / kty / 1:2,
/ crv / -1:3, / crv / -1:3,
/ x / -2:h'0043b12669acac3fd27898ffba0bcd2e6c366d53bc4db / x / -2:h'0043b12669acac3fd27898ffba0bcd2e6c366d53bc4db
71f909a759304acfb5e18cdc7ba0b13ff8c7636271a6924b1ac63c02688075b55ef2 71f909a759304acfb5e18cdc7ba0b13ff8c7636271a6924b1ac63c02688075b55ef2
d613574e7dc242f79c3', d613574e7dc242f79c3',
/ y / -3:true / y / -3:true
}, },
/ kid / 4:'bilbo.baggins@hobbiton.example' / kid / 4:'bilbo.baggins@hobbiton.example'
skipping to change at line 2725 skipping to change at line 3309
/ unprotected / { / unprotected / {
/ alg / 1:-5 / A256KW /, / alg / 1:-5 / A256KW /,
/ kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037' / kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037'
}, },
/ ciphertext / h'0b2c7cfce04e98276342d6476a7723c090dfdd15f9a / ciphertext / h'0b2c7cfce04e98276342d6476a7723c090dfdd15f9a
518e7736549e998370695e6d6a83b4ae507bb' 518e7736549e998370695e6d6a83b4ae507bb'
] ]
] ]
] ]
) )
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
<section anchor="Mac0Examples"> <section anchor="Mac0Examples" numbered="true" removeInRFC="false" toc="in
<name>Examples of MAC0 Messages</name> clude" pn="section-appendix.c.6">
<section anchor="Appendix_B_6_1"> <name slugifiedName="name-examples-of-mac0-messages">Examples of MAC0 Me
<name>Shared Secret Direct MAC</name> ssages</name>
<t>This example uses the following: <section anchor="Appendix_B_6_1" numbered="true" removeInRFC="false" toc
="include" pn="section-appendix.c.6.1">
<name slugifiedName="name-shared-secret-direct-mac-2">Shared-Secret Di
rect MAC</name>
<t indent="0" pn="section-appendix.c.6.1-1">This example uses the foll
owing:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>MAC: AES-CMAC, 256-bit key, truncated to 64 bits</li> -appendix.c.6.1-2">
<li>Recipient class: direct shared secret</li> <li pn="section-appendix.c.6.1-2.1">MAC: AES-CMAC, 256-bit key, trun
cated to 64 bits</li>
<li pn="section-appendix.c.6.1-2.2">Recipient class: direct shared s
ecret</li>
</ul> </ul>
<t>Size of binary file is 37 bytes</t> <t indent="0" pn="section-appendix.c.6.1-3">Size of binary file is 37
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.6.
1-4">
17( 17(
[ [
/ protected h'a1010f' / <&lt; { / protected h'a1010f' / <&lt; {
/ alg / 1:15 / AES-CBC-MAC-256//64 / / alg / 1:15 / AES-CBC-MAC-256//64 /
} >&gt; , } >&gt; ,
/ unprotected / {}, / unprotected / {},
/ payload / 'This is the content.', / payload / 'This is the content.',
/ tag / h'726043745027214f' / tag / h'726043745027214f'
] ]
) )
]]></sourcecode> </sourcecode>
<t>Note that this example uses the same inputs as <xref target="Append <t indent="0" pn="section-appendix.c.6.1-5">Note that this example use
ix_B_5_1"/>. </t> s the same inputs as <xref target="Appendix_B_5_1" format="default" sectionForma
t="of" derivedContent="Appendix C.5.1"/>. </t>
</section> </section>
</section> </section>
<section anchor="COSE_KEYS"> <section anchor="COSE_KEYS" numbered="true" removeInRFC="false" toc="inclu
<name>COSE Keys</name> de" pn="section-appendix.c.7">
<section> <name slugifiedName="name-cose-keys">COSE Keys</name>
<name>Public Keys</name> <section numbered="true" removeInRFC="false" toc="include" pn="section-a
<t>This is an example of a COSE Key Set. This example includes the pu ppendix.c.7.1">
blic keys for all of the previous examples. </t> <name slugifiedName="name-public-keys">Public Keys</name>
<t>In order the keys are: <t indent="0" pn="section-appendix.c.7.1-1">This is an example of a CO
SE Key Set. This example includes the public keys for all of the previous examp
les. </t>
<t indent="0" pn="section-appendix.c.7.1-2">In order, the keys are:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>An EC key with a kid of "meriadoc.brandybuck@buckland.example" -appendix.c.7.1-3">
</li> <li pn="section-appendix.c.7.1-3.1">An EC key with a kid of "meriado
<li>An EC key with a kid of "peregrin.took@tuckborough.example"</l c.brandybuck@buckland.example"</li>
i> <li pn="section-appendix.c.7.1-3.2">An EC key with a kid of "11"</li
<li>An EC key with a kid of "bilbo.baggins@hobbiton.example"</li> >
<li>An EC key with a kid of "11"</li> <li pn="section-appendix.c.7.1-3.3">An EC key with a kid of "bilbo.b
aggins@hobbiton.example"</li>
<li pn="section-appendix.c.7.1-3.4">An EC key with a kid of "peregri
n.took@tuckborough.example"</li>
</ul> </ul>
<t>Size of binary file is 481 bytes</t> <t indent="0" pn="section-appendix.c.7.1-4">Size of binary file is 481
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.7.
1-5">
[ [
{ {
-1:1, -1:1,
-2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0 -2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0
8551d', 8551d',
-3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008 -3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008
4d19c', 4d19c',
1:2, 1:2,
2:'meriadoc.brandybuck@buckland.example' 2:'meriadoc.brandybuck@buckland.example'
}, },
skipping to change at line 2809 skipping to change at line 3393
{ {
-1:1, -1:1,
-2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91 -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91
d6280', d6280',
-3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf -3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf
822bb', 822bb',
1:2, 1:2,
2:'peregrin.took@tuckborough.example' 2:'peregrin.took@tuckborough.example'
} }
] ]
]]></sourcecode> </sourcecode>
</section> </section>
<section> <section numbered="true" removeInRFC="false" toc="include" pn="section-a
<name>Private Keys</name> ppendix.c.7.2">
<t>This is an example of a COSE Key Set. This example includes the pr <name slugifiedName="name-private-keys">Private Keys</name>
ivate keys for all of the previous examples. </t> <t indent="0" pn="section-appendix.c.7.2-1">This is an example of a CO
<t>In order the keys are: SE Key Set. This example includes the private keys for all of the previous exam
ples. </t>
<t indent="0" pn="section-appendix.c.7.2-2">In order the keys are:
</t> </t>
<ul> <ul bare="false" empty="false" indent="3" spacing="normal" pn="section
<li>An EC key with a kid of "meriadoc.brandybuck@buckland.example" -appendix.c.7.2-3">
</li> <li pn="section-appendix.c.7.2-3.1">An EC key with a kid of "meriado
<li>A shared-secret key with a kid of "our-secret"</li> c.brandybuck@buckland.example"</li>
<li>An EC key with a kid of "peregrin.took@tuckborough.example"</l <li pn="section-appendix.c.7.2-3.2">An EC key with a kid of "11"</li
i> >
<li>A shared-secret key with a kid of "018c0ae5-4d9b-471b-bfd6-eef <li pn="section-appendix.c.7.2-3.3">An EC key with a kid of "bilbo.b
314bc7037"</li> aggins@hobbiton.example"</li>
<li>An EC key with a kid of "bilbo.baggins@hobbiton.example"</li> <li pn="section-appendix.c.7.2-3.4">A shared-secret key with a kid o
<li>An EC key with a kid of "11"</li> f "our-secret"</li>
<li pn="section-appendix.c.7.2-3.5">An EC key with a kid of "peregri
n.took@tuckborough.example"</li>
<li pn="section-appendix.c.7.2-3.6">A shared-secret key with kid "ou
r-secret2"</li>
<li pn="section-appendix.c.7.2-3.7">A shared-secret key with a kid o
f "018c0ae5-4d9b-471b-bfd6-eef314bc7037"</li>
</ul> </ul>
<t>Size of binary file is 816 bytes</t> <t indent="0" pn="section-appendix.c.7.2-4">Size of binary file is 816
<sourcecode type="CBORdiag"><![CDATA[ bytes</t>
<sourcecode type="cbor-diag" markers="false" pn="section-appendix.c.7.
2-5">
[ [
{ {
1:2, 1:2,
2:'meriadoc.brandybuck@buckland.example', 2:'meriadoc.brandybuck@buckland.example',
-1:1, -1:1,
-2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0 -2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0
8551d', 8551d',
-3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008 -3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008
4d19c', 4d19c',
-4:h'aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa -4:h'aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa
skipping to change at line 2892 skipping to change at line 3477
2:'our-secret2', 2:'our-secret2',
-1:h'849b5786457c1491be3a76dcea6c4271' -1:h'849b5786457c1491be3a76dcea6c4271'
}, },
{ {
1:4, 1:4,
2:'018c0ae5-4d9b-471b-bfd6-eef314bc7037', 2:'018c0ae5-4d9b-471b-bfd6-eef314bc7037',
-1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4 -1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4
27188' 27188'
} }
] ]
]]></sourcecode> </sourcecode>
</section> </section>
</section> </section>
</section> </section>
<section numbered="false"> <section numbered="false" removeInRFC="false" toc="include" pn="section-appe
<name>Acknowledgments</name> ndix.d">
<t>This document is a product of the COSE working group of the IETF. </t> <name slugifiedName="name-acknowledgments">Acknowledgments</name>
<t>The following individuals are to blame for getting me started on this p <t indent="0" pn="section-appendix.d-1">This document is a product of the
roject in the first place: Richard Barnes, Matt Miller, and Martin Thomson. </t COSE Working Group of the IETF. </t>
> <t indent="0" pn="section-appendix.d-2">The following individuals are to b
<t>The initial version of the specification was based to some degree on th lame for getting me started on this project in the first place: <contact fullnam
e outputs of the JOSE and S/MIME working groups. </t> e="Richard Barnes"/>, <contact fullname="Matt Miller"/>, and <contact fullname="
<t> Martin Thomson"/>.</t>
The following individuals provided input into the final form of the docu <t indent="0" pn="section-appendix.d-3">The initial draft version of the s
ment: Carsten Bormann, John Bradley, Brain Campbell, Michael B. Jones, Ilari Liu pecification was based to some degree on the outputs of the JOSE and S/MIME Work
svaara, Francesca Palombini, Ludwig Seitz, and Göran Selander. ing Groups. </t>
<t indent="0" pn="section-appendix.d-4">
The following individuals provided input into the final form of the docu
ment: <contact fullname="Carsten Bormann"/>, <contact fullname="John Bradley"/>,
<contact fullname="Brian Campbell"/>, <contact fullname="Michael B. Jones"/>, <
contact fullname="Ilari Liusvaara"/>, <contact fullname="Francesca Palombini"/>,
<contact fullname="Ludwig Seitz"/>, and <contact fullname="Göran Selander"/>.
</t> </t>
</section> </section>
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc
="include" pn="section-appendix.e">
<name slugifiedName="name-authors-address">Author's Address</name>
<author initials="J." surname="Schaad" fullname="Jim Schaad">
<organization showOnFrontPage="true">August Cellars</organization>
<address>
</address>
</author>
</section>
</back> </back>
</rfc> </rfc>
 End of changes. 466 change blocks. 
2632 lines changed or deleted 4201 lines changed or added

This html diff was produced by rfcdiff 1.48.