- Home
- RFC 9864
RFC 9864: Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)
- M.B. Jones,
- O. Steele
Abstract
This specification refers to cryptographic algorithm identifiers
that fully specify the cryptographic operations to be performed,
including any curve, key derivation function (KDF), and hash functions,
as being "fully specified".
It refers to cryptographic algorithm identifiers
that require additional information beyond the algorithm identifier
to determine the cryptographic operations to be performed
as being "polymorphic".
This specification creates fully-
This specification updates RFCs 7518, 8037, and 9053.
It deprecates polymorphic algorithms defined by RFCs 8037 and 9053
and provides fully-
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://
1. Introduction
The IANA algorithm registries for
JSON Object Signing and Encryption (JOSE) algorithms [IANA
- Fully Specified
-
Those that fully determine the cryptographic operations to be performed,
including any curve, key derivation function (KDF), and hash functions.
Examples are
RS256andES256Kin both JOSE [IANA.JOSE ] and COSE [IANA.COSE ] andES256in JOSE.¶ - Polymorphic
-
Those requiring information beyond the algorithm identifier
to determine the cryptographic operations to be performed.
Such additional information could include the actual key value and a curve that it uses.
Examples are the Edwards-curve Digital Signature Algorithm (EdDSA)
in both JOSE [IANA
.JOSE ] and COSE [IANA.COSE ] andES256in COSE.¶
This matters because many protocols negotiate supported operations using only algorithm identifiers. For instance, OAuth Authorization Server Metadata [RFC8414] uses negotiation parameters like these (from an example in that specification):¶
"token_endpoint_auth_signing_alg_values_supported":
["RS256", "ES256"]
OpenID Connect Discovery [OpenID"alg" and "enc" values.
W3C Web Authentication [WebAuthn] and
the FIDO Client to Authenticator Protocol (CTAP) [FIDO2]
negotiate using COSE "alg" numbers.¶
This does not work for polymorphic algorithms.
For instance, with EdDSA, it is not known which of the curves
Ed25519 and/or Ed448 are supported.
This causes real problems in practice.¶
WebAuthn contains this de facto algorithm definition to work around this problem:¶
-8 (EdDSA), where crv is 6 (Ed25519)
This redefines the COSE EdDSA algorithm identifier
for the purposes of WebAuthn to restrict it to using
the Ed25519 curve -- making it non-Ed448.
Other similar workarounds for polymorphic algorithm identifiers are used in practice.¶
Note that using fully-
This specification creates fully-
1.1. Requirements Notation and Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
2. Fully-Specified Digital Signature Algorithm Identifiers
This section creates fully-
2.1. Elliptic Curve Digital Signature Algorithm (ECDSA)
[RFC9053] defines a way to use
the Elliptic Curve Digital Signature Algorithm (ECDSA) with COSE.
The COSE algorithm registrations for ECDSA are polymorphic,
since they do not specify the curve used.
For instance, ES256 is defined as
"ECDSA w/ SHA-256" in Section 2.1 of [RFC9053].
(The corresponding JOSE registrations in [RFC7518] are fully specified.)¶
The following fully-
| Name | COSE Value | Description | COSE Recommended |
|---|---|---|---|
| ESP256 | -9 | ECDSA using P-256 curve and SHA-256 | Yes |
| ESP384 | -51 | ECDSA using P-384 curve and SHA-384 | Yes |
| ESP512 | -52 | ECDSA using P-521 curve and SHA-512 | Yes |
| ESB256 | -265 | ECDSA using Brainpool |
No |
| ESB320 | -266 | ECDSA using Brainpool |
No |
| ESB384 | -267 | ECDSA using Brainpool |
No |
| ESB512 | -268 | ECDSA using Brainpool |
No |
2.2. Edwards-curve Digital Signature Algorithm (EdDSA)
[RFC8037] defines a way to use
EdDSA
with JOSE, and [RFC9053] defines a way to use it with COSE.
Both register polymorphic EdDSA algorithm identifiers.¶
The following fully-
| Name | COSE Value | Description | JOSE Implementation Requirements | COSE Recommended |
|---|---|---|---|---|
| Ed25519 | -19 | EdDSA using the Ed25519 parameter set in Section 5.1 of [RFC8032] | Optional | Yes |
| Ed448 | -53 | EdDSA using the Ed448 parameter set in Section 5.2 of [RFC8032] | Optional | Yes |
3. Fully-Specified Encryption
This section describes the construction of fully-
Using fully-
Both JOSE and COSE have operations that take multiple algorithms as parameters.
Encrypted objects in JOSE [RFC7516] use two algorithm identifiers:
the first in the "alg" (Algorithm) Header Parameter,
which specifies how to determine the content encryption key, and
the second in the "enc" (Encryption Algorithm) Header Parameter,
which specifies the content encryption algorithm.
Likewise, encrypted COSE objects can use multiple algorithms
for corresponding purposes.
This section describes how to fully specify encryption algorithms
for JOSE and COSE.¶
To perform fully-"alg" value MUST specify all parameters for key establishment
or derive some of them from the accompanying "enc" value, and
the "enc" value MUST specify all parameters for symmetric encryption.
For example, encryption via JWE using
an "alg" value of "A128KW" (AES Key Wrap using 128-bit key) and
an "enc" value of "A128GCM" (AES GCM using 128-bit key)
uses fully-
Note that in JOSE, there is the option to derive some cryptographic parameters
used in the "alg" computation from the accompanying "enc" value.
For example, the keydatalen KDF parameter value
for "ECDH-ES" is determined from the "enc" value,
as described in Section 4.6.2 of [RFC7518].
For the purposes of an "alg" value being fully specified,
deriving parameters from "enc" does not make the algorithm polymorphic,
as the computation is still fully determined by the algorithm identifiers used.
This option is not present in COSE.¶
To perform fully-"alg" value MUST specify all parameters for key establishment, and
the inner "alg" value MUST specify all parameters for symmetric encryption.
For example, encryption via COSE using
an outer "alg" value of "A128KW" and
an inner "alg" value of "A128GCM"
uses fully-"alg" is communicated in the headers of the COSE_"alg" is communicated in the headers of the COSE_
While this specification provides a definition of what
fully-
3.1. Fully-Specified Encryption Algorithms
Many of the registered JOSE and COSE algorithms used for encryption are already fully specified. This section discusses them.¶
All the symmetric encryption algorithms registered by [RFC7518]
and [RFC9053] are fully specified.
An example of a fully-
In both JOSE and COSE,
all registered key wrapping algorithms are fully specified,
as are the algorithms performing key wrapping using AES GCM.
An example of a fully-
The JOSE "dir" and COSE "direct" algorithms are fully specified. The COSE direct+HKDF algorithms are fully specified.¶
The JOSE algorithms performing Key Encryption with PBES2 are fully specified.¶
3.2. Polymorphic Encryption Algorithms
Some of the registered JOSE and COSE algorithms used for encryption are polymorphic. This section discusses them.¶
The Elliptic Curve Diffie-Hellman (ECDH) key establishment algorithms in both JOSE and COSE
are polymorphic because they do not specify the elliptic curve
to be used for the key.
This is true of the ephemeral key for the Ephemeral-
4. IANA Considerations
4.1. JOSE Algorithm Registrations
IANA has registered the values in this section in the "JSON Web
Signature and Encryption Algorithms" registry [IANA
4.1.1. Fully-Specified JOSE Algorithm Registrations
4.1.2. Deprecated Polymorphic JOSE Algorithm Registration
IANA has updated the status to "Deprecated" for the following registration.¶
4.2. COSE Algorithm Registrations
IANA has registered the following values in the
"COSE Algorithms" registry [IANA
4.2.1. Fully-Specified COSE Algorithm Registrations
- Name:
- ESP256¶
- Value:
- -9¶
- Description:
- ECDSA using P-256 curve and SHA-256¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- Yes¶
- Name:
- ESP384¶
- Value:
- -51¶
- Description:
- ECDSA using P-384 curve and SHA-384¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- Yes¶
- Name:
- ESP512¶
- Value:
- -52¶
- Description:
- ECDSA using P-521 curve and SHA-512¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- Yes¶
- Name:
- ESB256¶
- Value:
- -265¶
- Description:
- ECDSA using Brainpool
P256r1 curve and SHA-256¶ - Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- No¶
- Name:
- ESB320¶
- Value:
- -266¶
- Description:
- ECDSA using Brainpool
P320r1 curve and SHA-384¶ - Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- No¶
- Name:
- ESB384¶
- Value:
- -267¶
- Description:
- ECDSA using Brainpool
P384r1 curve and SHA-384¶ - Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- No¶
- Name:
- ESB512¶
- Value:
- -268¶
- Description:
- ECDSA using Brainpool
P512r1 curve and SHA-512¶ - Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.1 of RFC 9864¶
- Recommended:
- No¶
- Name:
- Ed25519¶
- Value:
- -19¶
- Description:
- EdDSA using the Ed25519 parameter set in Section 5.1 of [RFC8032]¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.2 of RFC 9864¶
- Recommended:
- Yes¶
- Name:
- Ed448¶
- Value:
- -53¶
- Description:
- EdDSA using the Ed448 parameter set in Section 5.2 of [RFC8032]¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- Section 2.2 of RFC 9864¶
- Recommended:
- Yes¶
4.2.2. Deprecated Polymorphic COSE Algorithm Registrations
IANA has updated the status to "Deprecated" and has added this document as a reference for the following registrations.¶
- Name:
- ES256¶
- Value:
- -7¶
- Description:
- ECDSA w/ SHA-256¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- [RFC9053] and RFC 9864¶
- Recommended:
- Deprecated¶
- Name:
- ES384¶
- Value:
- -35¶
- Description:
- ECDSA w/ SHA-384¶
- Capabilities:
- [kty]¶
- Change Controller:
- IETF¶
- Reference:
- [RFC9053] and RFC 9864¶
- Recommended:
- Deprecated¶
4.3. Updated Review Instructions for Designated Experts
4.3.1. JSON Web Signature and Encryption Algorithms
The review instructions for the designated experts [RFC8126] for the
"JSON Web Signature and Encryption Algorithms" registry [IANA
-
Only fully-
specified algorithm identifiers may be registered. Polymorphic algorithm identifiers must not be registered.¶
4.3.2. COSE Algorithms
The review instructions for the designated experts [RFC8126] for the
"COSE Algorithms" registry [IANA
-
Only fully-
specified algorithm identifiers may be registered. Polymorphic algorithm identifiers must not be registered.¶
4.4. Defining "Deprecated" and "Prohibited"
The terms "Deprecated" and "Prohibited" as used by JOSE and COSE registrations are currently undefined. Furthermore, while in [RFC7518] JOSE specifies that both "Deprecated" and "Prohibited" can be used, in [RFC8152] COSE specifies the use of "Deprecated" but not "Prohibited". (Note that [RFC8152] has been obsoleted by [RFC9052].) This section defines these terms for use by both JOSE and COSE IANA registrations in a consistent manner, eliminating this potentially confusing inconsistency.¶
For purposes of use in the "JOSE Implementation Requirements" columns
in the IANA JOSE registries [IANA
- Deprecated
- There is a preferred mechanism to achieve functionality similar to that referenced by the identifier; this replacement functionality SHOULD be utilized in new deployments in preference to the deprecated identifier, unless there exist documented operational or regulatory requirements that prevent migration away from the deprecated identifier.¶
- Prohibited
- The identifier and the functionality that it references MUST NOT be used. (Identifiers may be designated as "Prohibited" due to security flaws, for instance.)¶
For completeness, these definitions bring the set of defined terms
for use in the "Recommended" columns
in the IANA COSE registries [IANA
- Recommended
- Does the IETF have a consensus recommendation to use the algorithm? The legal values are "Yes", "No", "Filter Only", "Prohibited", and "Deprecated".¶
The set of defined terms
for use in the "JOSE Implementation Requirements" columns
in the IANA JOSE registries [IANA
Note that the terms "Deprecated" and "Prohibited" have been used with a multiplicity of different meanings in various specifications, sometimes without actually being defined in those specifications. For instance, a variation of the term "Deprecated" is used in the title of [RFC8996], but the actual specification text uses the terminology "MUST NOT be used".¶
The definitions above were chosen because they are consistent with all existing registrations in both JOSE and COSE; none will need to change. Furthermore, they are consistent with their existing usage in JOSE. The only net change is to enable a clear distinction between "Deprecated" and "Prohibited" in future COSE registrations.¶
5. Key Representations
The key representations for the new fully-"alg" value, if included.
For instance, the representation for a key used with the
Ed25519 algorithm is the same as that specified
in [RFC8037], except that the "alg"
value would be Ed25519 rather than
EdDSA, if included.¶
6. Notes on Algorithms Not Updated
Some existing polymorphic algorithms are not updated by this specification. This section discusses why they have not been updated.¶
6.1. RSA Signing Algorithms
There are different points of view on whether the
RS256,
RS384, and
RS512 algorithms
should be considered fully specified or not,
because they can operate on keys of different sizes.
For instance, they can use both 2048- and 4096-bit keys.
The same is true of the PS* algorithms.¶
This document does not describe or request registration of any
fully-
That said, should it be useful at some point to have RSA algorithm identifiers that are specific to particular key characteristics, a future specification could always register them.¶
6.2. ECDH Key Agreement Algorithms
This specification does not update the ECDH algorithms, but it describes how to potentially do so in the future, if needed. The registered JOSE and COSE ECDH algorithms are polymorphic because they do not specify the curve to be used for the ephemeral key.¶
Fully-
6.3. HSS/LMS Hash-Based Digital Signature Algorithm
The HSS-LMS algorithm registered by COSE is polymorphic. It is polymorphic because the algorithm identifier does not specify the hash function to be used. Like ECDH, this specification does not register replacement algorithms, but future specifications could do so.¶
7. Security Considerations
The security considerations for ECDSA in [RFC7518], for EdDSA in [RFC8037], and for ECDSA and EdDSA in [RFC9053] apply.¶
The security considerations for preventing cross-protocol attacks described in [RFC9459] apply.¶
An "attack signature" is a unique pattern or characteristic used to identify malicious activity, enabling systems to detect and respond to known threats.
The digital signature and key establishment algorithms used by software can contribute to an attack signature.
By varying the identifier used for an algorithm, some software systems may attempt to evade rule-based detection and classification.
Rule-based detection and classification systems may need to update their rules to account for fully-
A cryptographic key MUST be used with only a single algorithm unless the use of the same key with different algorithms is proven secure. See [Reuse25519] for an example of such a proof. As a result, it is RECOMMENDED that the algorithm parameter of JSON Web Keys and COSE Keys be present, unless there exists some other mechanism for ensuring that the key is used as intended.¶
In COSE, preventing cross-protocol attacks, such as those described in [RFC9459], can be accomplished in two ways:¶
-
Allow only authenticated content encryption (Authenticated Encryption with Associated Data (AEAD)) algorithms.¶
-
Bind the potentially unauthenticated content encryption algorithm to be used to the key protection algorithm so that different content encryption algorithms result in different content encryption keys.¶
Which choice to use in which circumstances is beyond the scope of this specification.¶
8. References
8.1. Normative References
- [RFC2119]
-
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487
/RFC2119 , , <https://www >..rfc- editor .org /info /rfc2119 - [RFC7516]
-
Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", RFC 7516, DOI 10.17487
/RFC7516 , , <https://www >..rfc- editor .org /info /rfc7516 - [RFC8037]
-
Liusvaara, I., "CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)", RFC 8037, DOI 10.17487
/RFC8037 , , <https://www >..rfc- editor .org /info /rfc8037 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487
/RFC8174 , , <https://www >..rfc- editor .org /info /rfc8174 - [RFC9052]
-
Schaad, J., "CBOR Object Signing and Encryption (COSE): Structures and Process", STD 96, RFC 9052, DOI 10.17487
/RFC9052 , , <https://www >..rfc- editor .org /info /rfc9052 - [RFC9053]
-
Schaad, J., "CBOR Object Signing and Encryption (COSE): Initial Algorithms", RFC 9053, DOI 10.17487
/RFC9053 , , <https://www >..rfc- editor .org /info /rfc9053
8.2. Informative References
- [FIDO2]
-
Bradley, J., Jones, M.B., Kumar, A., Lindemann, R., Verrept, J., and D. Waite, "Client to Authenticator Protocol (CTAP)", FIDO Alliance Proposed Standard, , <https://
fidoalliance >..org /specs /fido-v2 .2- ps- 20250714 /fido- client- to- authenticator- protocol-v2 .2- ps- 20250714 .html - [FIPS.140-3]
-
NIST, "Security Requirements for Cryptographic Modules", NIST FIPS 140-3, DOI 10.6028
/NIST , , <https://.FIPS .140-3 nvlpubs >..nist .gov /nistpubs /FIPS /NIST .FIPS .140-3 .pdf - [IANA
.COSE] -
IANA, "CBOR Object Signing and Encryption (COSE)", <https://
www >..iana .org /assignments /cose/ - [IANA
.JOSE] -
IANA, "JSON Object Signing and Encryption (JOSE)", <https://
www >..iana .org /assignments /jose/ - [OpenID
.Discovery] -
Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID Connect Discovery 1.0 incorporating errata set 2", , <https://
openid >..net /specs /openid- connect- discovery-1_0 .html - [Reuse25519]
-
Thormarker, E., "On using the same key pair for Ed25519 and an X25519 based KEM", , <https://
eprint >..iacr .org /2021 /509 .pdf - [RFC7518]
-
Jones, M., "JSON Web Algorithms (JWA)", RFC 7518, DOI 10.17487
/RFC7518 , , <https://www >..rfc- editor .org /info /rfc7518 - [RFC8032]
-
Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC 8032, DOI 10.17487
/RFC8032 , , <https://www >..rfc- editor .org /info /rfc8032 - [RFC8126]
-
Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487
/RFC8126 , , <https://www >..rfc- editor .org /info /rfc8126 - [RFC8152]
-
Schaad, J., "CBOR Object Signing and Encryption (COSE)", RFC 8152, DOI 10.17487
/RFC8152 , , <https://www >..rfc- editor .org /info /rfc8152 - [RFC8414]
-
Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 Authorization Server Metadata", RFC 8414, DOI 10.17487
/RFC8414 , , <https://www >..rfc- editor .org /info /rfc8414 - [RFC8996]
-
Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS 1.1", BCP 195, RFC 8996, DOI 10.17487
/RFC8996 , , <https://www >..rfc- editor .org /info /rfc8996 - [RFC9054]
-
Schaad, J., "CBOR Object Signing and Encryption (COSE): Hash Algorithms", RFC 9054, DOI 10.17487
/RFC9054 , , <https://www >..rfc- editor .org /info /rfc9054 - [RFC9459]
-
Housley, R. and H. Tschofenig, "CBOR Object Signing and Encryption (COSE): AES-CTR and AES-CBC", RFC 9459, DOI 10.17487
/RFC9459 , , <https://www >..rfc- editor .org /info /rfc9459 - [WebAuthn]
-
Hodges, J., Ed., Jones, J.C., Ed., Jones, M.B., Ed., Kumar, A., Ed., and E. Lundberg, Ed., "Web Authentication: An API for accessing Public Key Credentials - Level 2", W3C Recommendation, , <https://
www >..w3 .org /TR /2021 /REC- webauthn-2- 20210408/
Acknowledgements
The authors thank Mike Bishop, Carsten Bormann, Mohamed Boucadair, John Bradley, Tim Bray, Brian Campbell, Deb Cooley, Roman Danyliw, Stephen Farrell, Vijay Gurbani, Ilari Liusvaara, Tobias Looker, Neil Madden, Kathleen Moriarty, Jeremy O'Donoghue, John Preuß Mattsson, Anders Rundgren, Göran Selander, Filip Skokan, Oliver Terbu, Hannes Tschofenig, Sean Turner, Éric Vyncke, David Waite, Paul Wouters, and Jiankang Yao for their contributions to this specification.¶