rfc9864v2.txt   rfc9864.txt 
Internet Engineering Task Force (IETF) M.B. Jones Internet Engineering Task Force (IETF) M.B. Jones
Request for Comments: 9864 Self-Issued Consulting Request for Comments: 9864 Self-Issued Consulting
Updates: 7518, 8037, 9053 O. Steele Updates: 7518, 8037, 9053 O. Steele
Category: Standards Track Transmute Category: Standards Track Tradeverifyd
ISSN: 2070-1721 September 2025 ISSN: 2070-1721 October 2025
Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE)
and CBOR Object Signing and Encryption (COSE) and CBOR Object Signing and Encryption (COSE)
Abstract Abstract
This specification refers to cryptographic algorithm identifiers that This specification refers to cryptographic algorithm identifiers that
fully specify the cryptographic operations to be performed, including fully specify the cryptographic operations to be performed, including
any curve, key derivation function (KDF), and hash functions, as any curve, key derivation function (KDF), and hash functions, as
being "fully specified". It refers to cryptographic algorithm being "fully specified". It refers to cryptographic algorithm
skipping to change at line 123 skipping to change at line 123
This matters because many protocols negotiate supported operations This matters because many protocols negotiate supported operations
using only algorithm identifiers. For instance, OAuth Authorization using only algorithm identifiers. For instance, OAuth Authorization
Server Metadata [RFC8414] uses negotiation parameters like these Server Metadata [RFC8414] uses negotiation parameters like these
(from an example in that specification): (from an example in that specification):
"token_endpoint_auth_signing_alg_values_supported": "token_endpoint_auth_signing_alg_values_supported":
["RS256", "ES256"] ["RS256", "ES256"]
OpenID Connect Discovery [OpenID.Discovery] likewise negotiates OpenID Connect Discovery [OpenID.Discovery] likewise negotiates
supported algorithms using alg and enc values. W3C Web supported algorithms using "alg" and "enc" values. W3C Web
Authentication [WebAuthn] and the FIDO Client to Authenticator Authentication [WebAuthn] and the FIDO Client to Authenticator
Protocol (CTAP) [FIDO2] negotiate using COSE alg numbers. Protocol (CTAP) [FIDO2] negotiate using COSE "alg" numbers.
This does not work for polymorphic algorithms. For instance, with This does not work for polymorphic algorithms. For instance, with
EdDSA, it is not known which of the curves Ed25519 and/or Ed448 are EdDSA, it is not known which of the curves Ed25519 and/or Ed448 are
supported. This causes real problems in practice. supported. This causes real problems in practice.
WebAuthn contains this de facto algorithm definition to work around WebAuthn contains this de facto algorithm definition to work around
this problem: this problem:
-8 (EdDSA), where crv is 6 (Ed25519) -8 (EdDSA), where crv is 6 (Ed25519)
skipping to change at line 216 skipping to change at line 216
2.2. Edwards-curve Digital Signature Algorithm (EdDSA) 2.2. Edwards-curve Digital Signature Algorithm (EdDSA)
[RFC8037] defines a way to use EdDSA with JOSE, and [RFC9053] defines [RFC8037] defines a way to use EdDSA with JOSE, and [RFC9053] defines
a way to use it with COSE. Both register polymorphic EdDSA algorithm a way to use it with COSE. Both register polymorphic EdDSA algorithm
identifiers. identifiers.
The following fully-specified JOSE and COSE EdDSA algorithms are The following fully-specified JOSE and COSE EdDSA algorithms are
defined by this specification: defined by this specification:
+=========+=======+=============+=====================+=============+ +=========+=======+================+================+=============+
| Name | COSE | Description | JOSE | COSE | | Name | COSE | Description | JOSE | COSE |
| | Value | | Implementation | Recommended | | | Value | | Implementation | Recommended |
| | | | Requirements | | | | | | Requirements | |
+=========+=======+=============+=====================+=============+ +=========+=======+================+================+=============+
| Ed25519 | -19 | EdDSA using | Optional | Yes | | Ed25519 | -19 | EdDSA using | Optional | Yes |
| | | Ed25519 | | | | | | the Ed25519 | | |
| | | curve | | | | | | parameter set | | |
+---------+-------+-------------+---------------------+-------------+ | | | in Section 5.1 | | |
| Ed448 | -53 | EdDSA using | Optional | Yes | | | | of [RFC8032] | | |
| | | Ed448 curve | | | +---------+-------+----------------+----------------+-------------+
+---------+-------+-------------+---------------------+-------------+ | Ed448 | -53 | EdDSA using | Optional | Yes |
| | | the Ed448 | | |
| | | parameter set | | |
| | | in Section 5.2 | | |
| | | of [RFC8032] | | |
+---------+-------+----------------+----------------+-------------+
Table 2: EdDSA Algorithm Values Table 2: EdDSA Algorithm Values
3. Fully-Specified Encryption 3. Fully-Specified Encryption
This section describes the construction of fully-specified encryption This section describes the construction of fully-specified encryption
algorithm identifiers in the context of the JOSE and COSE encryption algorithm identifiers in the context of the JOSE and COSE encryption
schemes JSON Web Encryption (JWE), as described in [RFC7516] and schemes JSON Web Encryption (JWE), as described in [RFC7516] and
[RFC7518], and COSE Encrypt, as described in [RFC9052] and [RFC9053]. [RFC7518], and COSE encryption, as described in [RFC9052] and
[RFC9053].
Using fully-specified encryption algorithms enables the sender and Using fully-specified encryption algorithms enables the sender and
receiver to agree on all mandatory security parameters. They also receiver to agree on all mandatory security parameters. They also
enable protocols to specify an allow list of algorithm combinations enable protocols to specify an allow list of algorithm combinations
that does not include polymorphic combinations, preventing problems that does not include polymorphic combinations, preventing problems
such as cross-curve key establishment, cross-protocol symmetric such as cross-curve key establishment, cross-protocol symmetric
encryption, or mismatched KDF size to symmetric key scenarios. encryption, or mismatched KDF size to symmetric key scenarios.
Both JOSE and COSE have operations that take multiple algorithms as Both JOSE and COSE have operations that take multiple algorithms as
parameters. Encrypted objects in JOSE [RFC7516] use two algorithm parameters. Encrypted objects in JOSE [RFC7516] use two algorithm
skipping to change at line 299 skipping to change at line 305
Many of the registered JOSE and COSE algorithms used for encryption Many of the registered JOSE and COSE algorithms used for encryption
are already fully specified. This section discusses them. are already fully specified. This section discusses them.
All the symmetric encryption algorithms registered by [RFC7518] and All the symmetric encryption algorithms registered by [RFC7518] and
[RFC9053] are fully specified. An example of a fully-specified [RFC9053] are fully specified. An example of a fully-specified
symmetric encryption algorithm is "A128GCM" (AES GCM using 128-bit symmetric encryption algorithm is "A128GCM" (AES GCM using 128-bit
key). key).
In both JOSE and COSE, all registered key wrapping algorithms are In both JOSE and COSE, all registered key wrapping algorithms are
fully specified, as are the key wrapping with AES GCM algorithms. An fully specified, as are the algorithms performing key wrapping using
example of a fully-specified key wrapping algorithm is "A128KW" (AES AES GCM. An example of a fully-specified key wrapping algorithm is
Key Wrap using 128-bit key). "A128KW" (AES Key Wrap using 128-bit key).
The JOSE "dir" and COSE "direct" algorithms are fully specified. The The JOSE "dir" and COSE "direct" algorithms are fully specified. The
COSE direct+HKDF algorithms are fully specified. COSE direct+HKDF algorithms are fully specified.
The JOSE Key Encryption with PBES2 algorithms are fully specified. The JOSE algorithms performing Key Encryption with PBES2 are fully
specified.
3.2. Polymorphic Encryption Algorithms 3.2. Polymorphic Encryption Algorithms
Some of the registered JOSE and COSE algorithms used for encryption Some of the registered JOSE and COSE algorithms used for encryption
are polymorphic. This section discusses them. are polymorphic. This section discusses them.
The Elliptic Curve Diffie-Hellman (ECDH) key establishment algorithms The Elliptic Curve Diffie-Hellman (ECDH) key establishment algorithms
in both JOSE and COSE are polymorphic because they do not specify the 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 elliptic curve to be used for the key. This is true of the ephemeral
key for the Ephemeral-Static (ES) algorithms registered for JOSE and key for the Ephemeral-Static (ES) algorithms registered for JOSE and
skipping to change at line 333 skipping to change at line 340
4.1. JOSE Algorithm Registrations 4.1. JOSE Algorithm Registrations
IANA has registered the values in this section in the "JSON Web IANA has registered the values in this section in the "JSON Web
Signature and Encryption Algorithms" registry [IANA.JOSE] established Signature and Encryption Algorithms" registry [IANA.JOSE] established
by [RFC7518] and has listed this document as an additional reference by [RFC7518] and has listed this document as an additional reference
for the registry. for the registry.
4.1.1. Fully-Specified JOSE Algorithm Registrations 4.1.1. Fully-Specified JOSE Algorithm Registrations
Algorithm Name: Ed25519 Algorithm Name: Ed25519
Algorithm Description: EdDSA using Ed25519 curve Algorithm Description: EdDSA using the Ed25519 parameter set in
Section 5.1 of [RFC8032]
Algorithm Usage Locations: alg Algorithm Usage Locations: alg
JOSE Implementation Requirements: Optional JOSE Implementation Requirements: Optional
Change Controller: IETF Change Controller: IETF
Reference: Section 2.2 of RFC 9864 Reference: Section 2.2 of RFC 9864
Algorithm Analysis Document(s): [RFC8032] Algorithm Analysis Document(s): [RFC8032]
Algorithm Name: Ed448 Algorithm Name: Ed448
Algorithm Description: EdDSA using Ed448 curve Algorithm Description: EdDSA using the Ed448 parameter set in
Section 5.2 of [RFC8032]
Algorithm Usage Locations: alg Algorithm Usage Locations: alg
JOSE Implementation Requirements: Optional JOSE Implementation Requirements: Optional
Change Controller: IETF Change Controller: IETF
Reference: Section 2.2 of RFC 9864 Reference: Section 2.2 of RFC 9864
Algorithm Analysis Document(s): [RFC8032] Algorithm Analysis Document(s): [RFC8032]
4.1.2. Deprecated Polymorphic JOSE Algorithm Registration 4.1.2. Deprecated Polymorphic JOSE Algorithm Registration
IANA has updated the status to "Deprecated" for the following IANA has updated the status to "Deprecated" for the following
registration. registration.
skipping to change at line 427 skipping to change at line 436
Name: ESB512 Name: ESB512
Value: -268 Value: -268
Description: ECDSA using BrainpoolP512r1 curve and SHA-512 Description: ECDSA using BrainpoolP512r1 curve and SHA-512
Capabilities: [kty] Capabilities: [kty]
Change Controller: IETF Change Controller: IETF
Reference: Section 2.1 of RFC 9864 Reference: Section 2.1 of RFC 9864
Recommended: No Recommended: No
Name: Ed25519 Name: Ed25519
Value: -19 Value: -19
Description: EdDSA using Ed25519 curve Description: EdDSA using the Ed25519 parameter set in Section 5.1 of
[RFC8032]
Capabilities: [kty] Capabilities: [kty]
Change Controller: IETF Change Controller: IETF
Reference: Section 2.2 of RFC 9864 Reference: Section 2.2 of RFC 9864
Recommended: Yes Recommended: Yes
Name: Ed448 Name: Ed448
Value: -53 Value: -53
Description: EdDSA using Ed448 curve Description: EdDSA using the Ed448 parameter set in Section 5.2 of
[RFC8032]
Capabilities: [kty] Capabilities: [kty]
Change Controller: IETF Change Controller: IETF
Reference: Section 2.2 of RFC 9864 Reference: Section 2.2 of RFC 9864
Recommended: Yes Recommended: Yes
4.2.2. Deprecated Polymorphic COSE Algorithm Registrations 4.2.2. Deprecated Polymorphic COSE Algorithm Registrations
IANA has updated the status to "Deprecated" and has added this IANA has updated the status to "Deprecated" and has added this
document as a reference for the following registrations. document as a reference for the following registrations.
skipping to change at line 505 skipping to change at line 516
* Only fully-specified algorithm identifiers may be registered. * Only fully-specified algorithm identifiers may be registered.
Polymorphic algorithm identifiers must not be registered. Polymorphic algorithm identifiers must not be registered.
4.4. Defining "Deprecated" and "Prohibited" 4.4. Defining "Deprecated" and "Prohibited"
The terms "Deprecated" and "Prohibited" as used by JOSE and COSE The terms "Deprecated" and "Prohibited" as used by JOSE and COSE
registrations are currently undefined. Furthermore, while in registrations are currently undefined. Furthermore, while in
[RFC7518] JOSE specifies that both "Deprecated" and "Prohibited" can [RFC7518] JOSE specifies that both "Deprecated" and "Prohibited" can
be used, in [RFC8152] COSE specifies the use of "Deprecated" but not be used, in [RFC8152] COSE specifies the use of "Deprecated" but not
"Prohibited". This section defines these terms for use by both JOSE "Prohibited". (Note that [RFC8152] has been obsoleted by [RFC9052].)
and COSE IANA registrations in a consistent manner, eliminating this This section defines these terms for use by both JOSE and COSE IANA
potentially confusing inconsistency. registrations in a consistent manner, eliminating this potentially
confusing inconsistency.
For purposes of use in the "JOSE Implementation Requirements" columns For purposes of use in the "JOSE Implementation Requirements" columns
in the IANA JOSE registries [IANA.JOSE] and in the "Recommended" in the IANA JOSE registries [IANA.JOSE] and in the "Recommended"
columns in the IANA COSE registries [IANA.COSE], these terms are columns in the IANA COSE registries [IANA.COSE], these terms are
defined as follows: defined as follows:
Deprecated Deprecated
There is a preferred mechanism to achieve functionality similar to There is a preferred mechanism to achieve functionality similar to
that referenced by the identifier; this replacement functionality that referenced by the identifier; this replacement functionality
SHOULD be utilized in new deployments in preference to the SHOULD be utilized in new deployments in preference to the
skipping to change at line 533 skipping to change at line 545
The identifier and the functionality that it references MUST NOT The identifier and the functionality that it references MUST NOT
be used. (Identifiers may be designated as "Prohibited" due to be used. (Identifiers may be designated as "Prohibited" due to
security flaws, for instance.) security flaws, for instance.)
For completeness, these definitions bring the set of defined terms For completeness, these definitions bring the set of defined terms
for use in the "Recommended" columns in the IANA COSE registries for use in the "Recommended" columns in the IANA COSE registries
[IANA.COSE] to "Yes" [RFC8152], "No" [RFC8152], "Filter Only" [IANA.COSE] to "Yes" [RFC8152], "No" [RFC8152], "Filter Only"
[RFC9054], "Prohibited", and "Deprecated". This updates the [RFC9054], "Prohibited", and "Deprecated". This updates the
definitions of the "Recommended" columns in these registries to be: definitions of the "Recommended" columns in these registries to be:
Recommended: Does the IETF have a consensus recommendation to use Recommended
the algorithm? The legal values are "Yes", "No", "Filter Only", Does the IETF have a consensus recommendation to use the
algorithm? The legal values are "Yes", "No", "Filter Only",
"Prohibited", and "Deprecated". "Prohibited", and "Deprecated".
The set of defined terms for use in the "JOSE Implementation The set of defined terms for use in the "JOSE Implementation
Requirements" columns in the IANA JOSE registries [IANA.JOSE] are Requirements" columns in the IANA JOSE registries [IANA.JOSE] are
unchanged. unchanged.
Note that the terms "Deprecated" and "Prohibited" have been used with Note that the terms "Deprecated" and "Prohibited" have been used with
a multiplicity of different meanings in various specifications, a multiplicity of different meanings in various specifications,
sometimes without actually being defined in those specifications. sometimes without actually being defined in those specifications.
For instance, the term "Deprecated" is used in the title of For instance, a variation of the term "Deprecated" is used in the
[RFC8996], but the actual specification text uses the terminology title of [RFC8996], but the actual specification text uses the
"MUST NOT be used". terminology "MUST NOT be used".
The definitions above were chosen because they are consistent with The definitions above were chosen because they are consistent with
all existing registrations in both JOSE and COSE; none will need to all existing registrations in both JOSE and COSE; none will need to
change. Furthermore, they are consistent with their existing usage change. Furthermore, they are consistent with their existing usage
in JOSE. The only net change is to enable a clear distinction in JOSE. The only net change is to enable a clear distinction
between "Deprecated" and "Prohibited" in future COSE registrations. between "Deprecated" and "Prohibited" in future COSE registrations.
5. Key Representations 5. Key Representations
The key representations for the new fully-specified algorithms The key representations for the new fully-specified algorithms
defined by this specification are the same as those for the defined by this specification are the same as those for the
polymorphic algorithms that they replace, other than the alg value, polymorphic algorithms that they replace, other than the "alg" value,
if included. For instance, the representation for a key used with if included. For instance, the representation for a key used with
the Ed25519 algorithm is the same as that specified in [RFC8037], the Ed25519 algorithm is the same as that specified in [RFC8037],
except that the alg value would be Ed25519 rather than EdDSA, if except that the "alg" value would be Ed25519 rather than EdDSA, if
included. included.
6. Notes on Algorithms Not Updated 6. Notes on Algorithms Not Updated
Some existing polymorphic algorithms are not updated by this Some existing polymorphic algorithms are not updated by this
specification. This section discusses why they have not been specification. This section discusses why they have not been
updated. updated.
6.1. RSA Signing Algorithms 6.1. RSA Signing Algorithms
skipping to change at line 687 skipping to change at line 700
Structures and Process", STD 96, RFC 9052, Structures and Process", STD 96, RFC 9052,
DOI 10.17487/RFC9052, August 2022, DOI 10.17487/RFC9052, August 2022,
<https://www.rfc-editor.org/info/rfc9052>. <https://www.rfc-editor.org/info/rfc9052>.
[RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): [RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE):
Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053,
August 2022, <https://www.rfc-editor.org/info/rfc9053>. August 2022, <https://www.rfc-editor.org/info/rfc9053>.
8.2. Informative References 8.2. Informative References
[FIDO2] Bradley, J., Jones, M., Kumar, A., Lindemann, R., Johan, [FIDO2] Bradley, J., Jones, M.B., Kumar, A., Lindemann, R.,
J., and D. David, "Client to Authenticator Protocol Verrept, J., and D. Waite, "Client to Authenticator
(CTAP)", FIDO Alliance Proposed Standard, 28 February Protocol (CTAP)", FIDO Alliance Proposed Standard, 14 July
2025, <https://fidoalliance.org/specs/fido-v2.2-ps- 2025, <https://fidoalliance.org/specs/fido-v2.2-ps-
20250228/fido-client-to-authenticator-protocol-v2.2-ps- 20250714/fido-client-to-authenticator-protocol-v2.2-ps-
20250228.html>. 20250714.html>.
[FIPS.140-3] [FIPS.140-3]
NIST, "Security Requirements for Cryptographic Modules", NIST, "Security Requirements for Cryptographic Modules",
NIST FIPS 140-3, DOI 10.6028/NIST.FIPS.140-3, March 2019, NIST FIPS 140-3, DOI 10.6028/NIST.FIPS.140-3, March 2019,
<https://nvlpubs.nist.gov/nistpubs/FIPS/ <https://nvlpubs.nist.gov/nistpubs/FIPS/
NIST.FIPS.140-3.pdf>. NIST.FIPS.140-3.pdf>.
[IANA.COSE] [IANA.COSE]
IANA, "CBOR Object Signing and Encryption (COSE)", IANA, "CBOR Object Signing and Encryption (COSE)",
<https://www.iana.org/assignments/cose/>. <https://www.iana.org/assignments/cose/>.
[IANA.JOSE] [IANA.JOSE]
IANA, "JSON Object Signing and Encryption (JOSE)", IANA, "JSON Object Signing and Encryption (JOSE)",
<https://www.iana.org/assignments/jose/>. <https://www.iana.org/assignments/jose/>.
[OpenID.Discovery] [OpenID.Discovery]
Sakimura, N., Bradley, J., Jones, M.B., and E. Jay, Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID
"OpenID Connect Discovery 1.0 incorporating errata set 2", Connect Discovery 1.0 incorporating errata set 2", 15
15 December 2023, <https://openid.net/specs/openid- December 2023, <https://openid.net/specs/openid-connect-
connect-discovery-1_0.html>. discovery-1_0.html>.
[Reuse25519] [Reuse25519]
Thormarker, E., "On using the same key pair for Ed25519 Thormarker, E., "On using the same key pair for Ed25519
and an X25519 based KEM", 23 April 2021, and an X25519 based KEM", 23 April 2021,
<https://eprint.iacr.org/2021/509.pdf>. <https://eprint.iacr.org/2021/509.pdf>.
[RFC7518] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518, [RFC7518] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518,
DOI 10.17487/RFC7518, May 2015, DOI 10.17487/RFC7518, May 2015,
<https://www.rfc-editor.org/info/rfc7518>. <https://www.rfc-editor.org/info/rfc7518>.
skipping to change at line 779 skipping to change at line 792
Jiankang Yao for their contributions to this specification. Jiankang Yao for their contributions to this specification.
Authors' Addresses Authors' Addresses
Michael B. Jones Michael B. Jones
Self-Issued Consulting Self-Issued Consulting
Email: michael_b_jones@hotmail.com Email: michael_b_jones@hotmail.com
URI: https://self-issued.info/ URI: https://self-issued.info/
Orie Steele Orie Steele
Transmute Tradeverifyd
Email: orie@transmute.industries Email: orie@or13.io
 End of changes. 20 change blocks. 
44 lines changed or deleted 57 lines changed or added

This html diff was produced by rfcdiff 1.48.