rfc9054.original | rfc9054.txt | |||
---|---|---|---|---|
Network Working Group J. Schaad | Internet Engineering Task Force (IETF) J. Schaad | |||
Internet-Draft August Cellars | Request for Comments: 9054 August Cellars | |||
Intended status: Informational September 14, 2020 | Category: Informational August 2022 | |||
Expires: March 18, 2021 | ISSN: 2070-1721 | |||
CBOR Object Signing and Encryption (COSE): Hash Algorithms | CBOR Object Signing and Encryption (COSE): Hash Algorithms | |||
draft-ietf-cose-hash-algs-09 | ||||
Abstract | Abstract | |||
The CBOR Object Signing and Encryption (COSE) syntax | The CBOR Object Signing and Encryption (COSE) syntax (see RFC 9052) | |||
[I-D.ietf-cose-rfc8152bis-struct] does not define any direct methods | does not define any direct methods for using hash algorithms. There | |||
for using hash algorithms. There are, however, circumstances where | are, however, circumstances where hash algorithms are used, such as | |||
hash algorithms are used, such as indirect signatures where the hash | indirect signatures, where the hash of one or more contents are | |||
of one or more contents are signed, and X.509 certificate or other | signed, and identification of an X.509 certificate or other object by | |||
object identification by the use of a fingerprint. This document | the use of a fingerprint. This document defines hash algorithms that | |||
defines a set of hash algorithms that are identified by COSE | are identified by COSE algorithm identifiers. | |||
Algorithm Identifiers. | ||||
Contributing to this document | ||||
This note is to be removed before publishing as an RFC. | ||||
The source for this draft is being maintained in GitHub. Suggested | ||||
changes should be submitted as pull requests at https://github.com/ | ||||
cose-wg/X509 Editorial changes can be managed in GitHub, but any | ||||
substantial issues need to be discussed on the COSE mailing list. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on March 18, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9054. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Requirements Terminology . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Terminology | |||
2. Hash Algorithm Usage . . . . . . . . . . . . . . . . . . . . 3 | 2. Hash Algorithm Usage | |||
2.1. Example CBOR hash structure . . . . . . . . . . . . . . . 4 | 2.1. Example CBOR Hash Structure | |||
3. Hash Algorithm Identifiers . . . . . . . . . . . . . . . . . 5 | 3. Hash Algorithm Identifiers | |||
3.1. SHA-1 Hash Algorithm . . . . . . . . . . . . . . . . . . 6 | 3.1. SHA-1 Hash Algorithm | |||
3.2. SHA-2 Hash Algorithms . . . . . . . . . . . . . . . . . . 6 | 3.2. SHA-2 Hash Algorithms | |||
3.3. SHAKE Algorithms . . . . . . . . . . . . . . . . . . . . 8 | 3.3. SHAKE Algorithms | |||
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 4. IANA Considerations | |||
4.1. COSE Algorithm Registry . . . . . . . . . . . . . . . . . 9 | 4.1. COSE Algorithm Registry | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 5. Security Considerations | |||
6. Normative References . . . . . . . . . . . . . . . . . . . . 10 | 6. References | |||
7. Informative References . . . . . . . . . . . . . . . . . . . 11 | 6.1. Normative References | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 12 | 6.2. Informative References | |||
Author's Address | ||||
1. Introduction | 1. Introduction | |||
The CBOR Object Signing and Encryption (COSE) syntax does not define | The CBOR Object Signing and Encryption (COSE) syntax [RFC9052] does | |||
any direct methods for the use of hash algorithms. It also does not | not define any direct methods for the use of hash algorithms. It | |||
define a structure syntax that is used to encode a digested object | also does not define a structure syntax that is used to encode a | |||
structure along the lines of the DigestedData ASN.1 structure in | digested object structure along the lines of the DigestedData ASN.1 | |||
[CMS]. This omission was intentional, as a structure consisting of | structure in [CMS]. This omission was intentional, as a structure | |||
just a digest identifier, the content, and a digest value does not, | consisting of just a digest identifier, the content, and a digest | |||
by itself, provide any strong security service. Additionally, an | value does not, by itself, provide any strong security service. | |||
application is going to be better off defining this type of structure | Additionally, an application is going to be better off defining this | |||
so that it can include any additional data that needs to be hashed, | type of structure so that it can include any additional data that | |||
as well as methods of obtaining the data. | needs to be hashed, as well as methods of obtaining the data. | |||
While the above is true, there are some cases where having some | While the above is true, there are some cases where having some | |||
standard hash algorithms defined for COSE with a common identifier | standard hash algorithms defined for COSE with a common identifier | |||
makes a great deal of sense. Two of the cases where these are going | makes a great deal of sense. Two of the cases where these are going | |||
to be used are: | to be used are: | |||
* Indirect signing of content, and | * Indirect signing of content, and | |||
* Object identification. | * Object identification. | |||
Indirect signing of content is a paradigm where the content is not | Indirect signing of content is a paradigm where the content is not | |||
directly signed, but instead a hash of the content is computed and | directly signed, but instead a hash of the content is computed, and | |||
that hash value, along with an identifier for the hash algorithm, is | that hash value -- along with an identifier for the hash algorithm -- | |||
included in the content that will be signed. Doing indirect signing | is included in the content that will be signed. Indirect signing | |||
allows for a signature to be validated without first downloading all | allows for a signature to be validated without first downloading all | |||
of the content associated with the signature. Rather the signature | of the content associated with the signature. Rather, the signature | |||
can be validated on all of the hash values and pointers to the | can be validated on all of the hash values and pointers to the | |||
associated contents, then those associated parts can be downloaded, | associated contents; those associated parts can then be downloaded, | |||
the hash value of that part computed, and then compared to the hash | then the hash value of that part can be computed and compared to the | |||
value in the signed content. This capability can be of even greater | hash value in the signed content. This capability can be of even | |||
importance in a constrained environment as not all of the content | greater importance in a constrained environment, as not all of the | |||
signed may be needed by the device. An example of how this is used | content signed may be needed by the device. An example of how this | |||
can be found in [I-D.ietf-suit-manifest]. | is used can be found in Section 5.4 of [SUIT-MANIFEST]. | |||
The use of hashes to identify objects is something that has been very | The use of hashes to identify objects is something that has been very | |||
common. One of the primary things that has been identified by a hash | common. One of the primary things that has been identified by a hash | |||
function in a secure message is a certificate. Two examples of this | function in a secure message is a certificate. Two examples of this | |||
can be found in [ESS] and the COSE equivalents in | can be found in [ESS] and the COSE equivalents in [COSE-x509]. | |||
[I-D.ietf-cose-x509]. | ||||
1.1. Requirements Terminology | 1.1. Requirements Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Hash Algorithm Usage | 2. Hash Algorithm Usage | |||
As noted in the previous section, hash functions can be used for a | As noted in the previous section, hash functions can be used for a | |||
variety of purposes. Some of these purposes require that a hash | variety of purposes. Some of these purposes require that a hash | |||
function be cryptographically strong. These include direct and | function be cryptographically strong. These include direct and | |||
indirect signatures. That is, using the hash as part of the | indirect signatures -- that is, using the hash as part of the | |||
signature or using the hash as part of the body to be signed. Other | signature or using the hash as part of the body to be signed. Other | |||
uses of hash functions may not require the same level of strength. | uses of hash functions may not require the same level of strength. | |||
This document contains some hash functions that are not designed to | This document contains some hash functions that are not designed to | |||
be used for cryptographic operations. An application that is using a | be used for cryptographic operations. An application that is using a | |||
hash function needs to carefully evaluate exactly what hash | hash function needs to carefully evaluate exactly what hash | |||
properties are needed and which hash functions are going to provide | properties are needed and which hash functions are going to provide | |||
them. Applications should also make sure that the ability to change | them. Applications should also make sure that the ability to change | |||
hash functions is part of the base design, as cryptographic advances | hash functions is part of the base design, as cryptographic advances | |||
are sure to reduce the strength of a hash function [BCP201]. | are sure to reduce the strength of any given hash function [BCP201]. | |||
A hash function is a map from one, normally large, bit string to a | A hash function is a map from one, normally large, bit string to a | |||
second, usually smaller, bit string. As the number of possible input | second, usually smaller, bit string. As the number of possible input | |||
values is far greater than the number of possible output values, it | values is far greater than the number of possible output values, it | |||
is inevitable that there are going to be collisions. The trick is to | is inevitable that there are going to be collisions. The trick is to | |||
make sure that it is difficult to find two values that are going to | make sure that it is difficult to find two values that are going to | |||
map to the same output value. A "Collision Attack" is one where an | map to the same output value. A "Collision Attack" is one where an | |||
attacker can find two different messages that have the same hash | attacker can find two different messages that have the same hash | |||
value. A hash function that is susceptible to practical collision | value. A hash function that is susceptible to practical collision | |||
attacks, SHOULD NOT be used for a cryptographic purpose. The | attacks SHOULD NOT be used for a cryptographic purpose. The | |||
discovery of theoretical collision attacks against a given hash | discovery of theoretical collision attacks against a given hash | |||
function SHOULD trigger protocol maintainers and users to do a review | function SHOULD trigger protocol maintainers and users to review the | |||
of the continued suitability of the algorithm if alternatives are | continued suitability of the algorithm if alternatives are available | |||
available and migration is viable. The only reason why such a hash | and migration is viable. The only reason such a hash function is | |||
function is used is when there is absolutely no other choice (e.g. a | used is when there is absolutely no other choice (e.g., a Hardware | |||
Hardware Security Module (HSM) that cannot be replaced), and only | Security Module (HSM) that cannot be replaced), and only after | |||
after looking at the possible security issues. Cryptographic | looking at the possible security issues. Cryptographic purposes | |||
purposes would include the creation of signatures or the use of | would include the creation of signatures or the use of hashes for | |||
hashes for indirect signatures. These functions may still be usable | indirect signatures. These functions may still be usable for | |||
for non-cryptographic purposes. | noncryptographic purposes. | |||
An example of a non-cryptographic use of a hash is for filtering from | An example of a noncryptographic use of a hash is filtering from a | |||
a collection of values to find a set of possible candidates; the | collection of values to find a set of possible candidates; the | |||
candidates can then be checked to see if they can successfully be | candidates can then be checked to see if they can successfully be | |||
used. A simple example of this is the classic fingerprint of a | used. A simple example of this is the classic fingerprint of a | |||
certificate. If the fingerprint is used to verify that it is the | certificate. If the fingerprint is used to verify that it is the | |||
correct certificate, then that usage is a cryptographic one and is | correct certificate, then that usage is a cryptographic one and is | |||
subject to the warning above about collision attack. If, however, | subject to the warning above about collision attack. If, however, | |||
the fingerprint is used to sort through a collection of certificates | the fingerprint is used to sort through a collection of certificates | |||
to find those that might be used for the purpose of verifying a | to find those that might be used for the purpose of verifying a | |||
signature, a simple filter capability is sufficient. In this case, | signature, a simple filter capability is sufficient. In this case, | |||
one still needs to confirm that the public key validates the | one still needs to confirm that the public key validates the | |||
signature (and the certificate is trusted), and all certificates that | signature (and that the certificate is trusted), and all certificates | |||
don't contain a key that validates the signature can be discarded as | that don't contain a key that validates the signature can be | |||
false positives. | discarded as false positives. | |||
To distinguish between these two cases, a new value in the | To distinguish between these two cases, a new value in the | |||
recommended column of the COSE Algorithms registry is to be added. | Recommended column of the "COSE Algorithms" registry has been added. | |||
"Filter Only" indicates that the only purpose of a hash function | "Filter Only" indicates that the only purpose of a hash function | |||
should be to filter results and it is not intended for applications | should be to filter results; it is not intended for applications that | |||
which require a cryptographically strong algorithm. | require a cryptographically strong algorithm. | |||
2.1. Example CBOR hash structure | 2.1. Example CBOR Hash Structure | |||
[COSE] did not provide a default structure for holding a hash value | [COSE] did not provide a default structure for holding a hash value | |||
not only because no separate hash algorithms were defined, but | both because no separate hash algorithms were defined and because the | |||
because how the structure is setup is frequently application | way the structure is set up is frequently application specific. | |||
specific. There are four fields that are often included as part of a | There are four fields that are often included as part of a hash | |||
hash structure: | structure: | |||
* The hash algorithm identifier. | * The hash algorithm identifier. | |||
* The hash value. | * The hash value. | |||
* A pointer to the value that was hashed. This could be a pointer | * A pointer to the value that was hashed. This could be a pointer | |||
to a file, an object that can be obtained from the network, or a | to a file, an object that can be obtained from the network, a | |||
pointer to someplace in the message, or something very application | pointer to someplace in the message, or something very application | |||
specific. | specific. | |||
* Additional data; this can be something as simple as a random value | * Additional data. This can be something as simple as a random | |||
(i.e. salt) to make finding hash collisions slightly harder (as | value (i.e., salt) to make finding hash collisions slightly harder | |||
the payload handed to the application could have been selected to | (because the payload handed to the application could have been | |||
have a collision), or as complicated as a set of processing | selected to have a collision), or as complicated as a set of | |||
instructions that are used with the object that is pointed to. | processing instructions that is used with the object that is | |||
The additional data can be dealt with in a number of ways, | pointed to. The additional data can be dealt with in a number of | |||
prepending or appending to the content, but it is strongly | ways, prepending or appending to the content, but it is strongly | |||
suggested that it either be a fixed known size, or the lengths of | suggested that either it be a fixed known size, or the lengths of | |||
the pieces being hashed be included. (Encoding as a CBOR array | the pieces being hashed be included so that the resulting byte | |||
accomplishes this requirement.) | string has a unique interpretation as the additional data. | |||
(Encoding as a CBOR array accomplishes this requirement.) | ||||
An example of a structure which permits all of the above fields to | An example of a structure that permits all of the above fields to | |||
exist would look like the following. | exist would look like the following: | |||
COSE_Hash_V = ( | COSE_Hash_V = ( | |||
1 : int / tstr, # Algorithm identifier | 1 : int / tstr, # Algorithm identifier | |||
2 : bstr, # Hash value | 2 : bstr, # Hash value | |||
? 3 : tstr, # Location of object that was hashed | ? 3 : tstr, # Location of object that was hashed | |||
? 4 : any # object containing other details and things | ? 4 : any # object containing other details and things | |||
) | ) | |||
Below is an alternative structure that could be used in situations | Below is an alternative structure that could be used in situations | |||
where one is searching a group of objects for a matching hash value. | where one is searching a group of objects for a matching hash value. | |||
In this case, the location would not be needed and adding extra data | In this case, the location would not be needed, and adding extra data | |||
to the hash would be counterproductive. This results in a structure | to the hash would be counterproductive. This results in a structure | |||
that looks like this: | that looks like this: | |||
COSE_Hash_Find = [ | COSE_Hash_Find = [ | |||
hashAlg : int / tstr, | hashAlg : int / tstr, | |||
hashValue : bstr | hashValue : bstr | |||
] | ] | |||
3. Hash Algorithm Identifiers | 3. Hash Algorithm Identifiers | |||
3.1. SHA-1 Hash Algorithm | 3.1. SHA-1 Hash Algorithm | |||
The SHA-1 hash algorithm [RFC3174] was designed by the United States | The SHA-1 hash algorithm [RFC3174] was designed by the United States | |||
National Security Agency and published in 1995. Since that time a | National Security Agency and published in 1995. Since that time, a | |||
large amount of cryptographic analysis has been applied to this | large amount of cryptographic analysis has been applied to this | |||
algorithm and a successful collision attack has been created | algorithm, and a successful collision attack has been created | |||
([SHA-1-collision]). The IETF formally started discouraging the use | [SHA-1-collision]. The IETF formally started discouraging the use of | |||
of SHA-1 with the publishing of [RFC6194]. | SHA-1 in [RFC6194]. | |||
Despite the above, there are still times where SHA-1 needs to be used | Despite these facts, there are still times where SHA-1 needs to be | |||
and therefore it makes sense to assign a codepoint for the use of | used; therefore, it makes sense to assign a code point for the use of | |||
this hash algorithm. Some of these situations are with historic HSMs | this hash algorithm. Some of these situations involve historic HSMs | |||
where only SHA-1 is implemented; other situations are where the SHA-1 | where only SHA-1 is implemented; in other situations, the SHA-1 value | |||
value is used for the purpose of filtering and thus the collision | is used for the purpose of filtering; thus, the collision-resistance | |||
resistance property is not needed. | property is not needed. | |||
Because of the known issues for SHA-1 and the fact that it should no | Because of the known issues for SHA-1 and the fact that it should no | |||
longer be used, the algorithm will be registered with the | longer be used, the algorithm will be registered with the | |||
recommendation of "Filter Only". This provides guidance about when | recommendation of "Filter Only". This provides guidance about when | |||
the algorithm is safe for use, while discouraging usage where it is | the algorithm is safe for use, while discouraging usage where it is | |||
not safe. | not safe. | |||
The COSE capabilities for this algorithm is an empty array. | The COSE capabilities for this algorithm is an empty array. | |||
+=====+======+=============+==============+===========+=============+ | +=====+======+=============+==============+===========+=============+ | |||
|Name |Value | Description | Capabilities | Reference | Recommended | | |Name |Value | Description | Capabilities | Reference | Recommended | | |||
+=====+======+=============+==============+===========+=============+ | +=====+======+=============+==============+===========+=============+ | |||
|SHA-1| -14 | SHA-1 Hash | [] | [This | Filter Only | | |SHA-1|-14 | SHA-1 Hash | [] | RFC 9054 | Filter Only | | |||
| | | | | Document] | | | ||||
+-----+------+-------------+--------------+-----------+-------------+ | +-----+------+-------------+--------------+-----------+-------------+ | |||
Table 1: SHA-1 Hash Algorithm | Table 1: SHA-1 Hash Algorithm | |||
3.2. SHA-2 Hash Algorithms | 3.2. SHA-2 Hash Algorithms | |||
The family of SHA-2 hash algorithms [FIPS-180-4] was designed by the | The family of SHA-2 hash algorithms [FIPS-180-4] was designed by the | |||
United States National Security Agency and published in 2001. Since | United States National Security Agency and published in 2001. Since | |||
that time some additional algorithms have been added to the original | that time, some additional algorithms have been added to the original | |||
set to deal with length extension attacks and some performance | set to deal with length-extension attacks and some performance | |||
issues. While the SHA-3 hash algorithms have been published since | issues. While the SHA-3 hash algorithms have been published since | |||
that time, the SHA-2 algorithms are still broadly used. | that time, the SHA-2 algorithms are still broadly used. | |||
There are a number of different parameters for the SHA-2 hash | There are a number of different parameters for the SHA-2 hash | |||
functions. The set of hash functions which have been chosen for | functions. The set of hash functions that has been chosen for | |||
inclusion in this document are based on those different parameters | inclusion in this document is based on those different parameters and | |||
and some of the trade-offs involved. | some of the trade-offs involved. | |||
* *SHA-256/64* provides a truncated hash. The length of the | * *SHA-256/64* provides a truncated hash. The length of the | |||
truncation is designed to allow for smaller transmission size. | truncation is designed to allow for smaller transmission size. | |||
The trade-off is that the odds that a collision will occur | The trade-off is that the odds that a collision will occur | |||
increase proportionally. Use of this hash function needs analysis | increase proportionally. Use of this hash function requires | |||
of the potential problems with having a collision occur, or must | analysis of the potential problems that could result from a | |||
be limited to where the function of the hash is non-cryptographic. | collision, or it must be limited to where the purpose of the hash | |||
is noncryptographic. | ||||
The latter is the case for [I-D.ietf-cose-x509]. The hash value | The latter is the case for some of the scenarios identified in | |||
is used to select possible certificates and, if there are multiple | [COSE-x509], specifically, for the cases when the hash value is | |||
choices remaining then, each choice can be tested by using the | used to select among possible certificates: if there are multiple | |||
choices remaining, then each choice can be tested by using the | ||||
public key. | public key. | |||
* *SHA-256* is probably the most common hash function used | * *SHA-256* is probably the most common hash function used | |||
currently. SHA-256 is an efficient hash algorithm for 32-bit | currently. SHA-256 is an efficient hash algorithm for 32-bit | |||
hardware. | hardware. | |||
* *SHA-384* and *SHA-512* hash functions are efficient for 64-bit | * *SHA-384* and *SHA-512* hash functions are efficient for 64-bit | |||
hardware. | hardware. | |||
* *SHA-512/256* provides a hash function that runs more efficiently | * *SHA-512/256* provides a hash function that runs more efficiently | |||
on 64-bit hardware, but offers the same security levels as SHA- | on 64-bit hardware but offers the same security level as SHA-256. | |||
256. | ||||
| NOTE: SHA-256/64 is a simple truncation of SHA-256 to 64 bits | ||||
| defined in this specification. SHA-512/256 is a modified | ||||
| variant of SHA-512 truncated to 256 bits, as defined in | ||||
| [FIPS-180-4]. | ||||
The COSE capabilities array for these algorithms is empty. | The COSE capabilities array for these algorithms is empty. | |||
+===========+=====+===========+==============+=========+============+ | +===========+=====+===========+==============+=========+============+ | |||
| Name |Value|Description| Capabilities |Reference|Recommended | | |Name |Value|Description| Capabilities |Reference|Recommended | | |||
+===========+=====+===========+==============+=========+============+ | +===========+=====+===========+==============+=========+============+ | |||
|SHA-256/64 | -15 | SHA-2 | [] | [This |Filter Only | | |SHA-256/64 |-15 |SHA-2 | [] |RFC 9054 |Filter Only | | |||
| | | 256-bit | |Document]| | | | | |256-bit | | | | | |||
| | | Hash | | | | | | | |Hash | | | | | |||
| | | truncated | | | | | | | |truncated | | | | | |||
| | |to 64-bits | | | | | | | |to 64-bits | | | | | |||
+-----------+-----+-----------+--------------+---------+------------+ | +-----------+-----+-----------+--------------+---------+------------+ | |||
| SHA-256 | -16 | SHA-2 | [] | [This | Yes | | |SHA-256 |-16 |SHA-2 | [] |RFC 9054 |Yes | | |||
| | | 256-bit | |Document]| | | | | |256-bit | | | | | |||
| | | Hash | | | | | | | |Hash | | | | | |||
+-----------+-----+-----------+--------------+---------+------------+ | +-----------+-----+-----------+--------------+---------+------------+ | |||
| SHA-384 | -43 | SHA-2 | [] | [This | Yes | | |SHA-384 |-43 |SHA-2 | [] |RFC 9054 |Yes | | |||
| | | 384-bit | |Document]| | | | | |384-bit | | | | | |||
| | | Hash | | | | | | | |Hash | | | | | |||
+-----------+-----+-----------+--------------+---------+------------+ | +-----------+-----+-----------+--------------+---------+------------+ | |||
| SHA-512 | -44 | SHA-2 | [] | [This | Yes | | |SHA-512 |-44 |SHA-2 | [] |RFC 9054 |Yes | | |||
| | | 512-bit | |Document]| | | | | |512-bit | | | | | |||
| | | Hash | | | | | | | |Hash | | | | | |||
+-----------+-----+-----------+--------------+---------+------------+ | +-----------+-----+-----------+--------------+---------+------------+ | |||
|SHA-512/256| -17 | SHA-2 | [] | [This | Yes | | |SHA-512/256|-17 |SHA-2 | [] |RFC 9054 |Yes | | |||
| | | 512-bit | |Document]| | | | | |512-bit | | | | | |||
| | | Hash | | | | | | | |Hash | | | | | |||
| | | truncated | | | | | | | |truncated | | | | | |||
| | |to 256-bits| | | | | | | |to 256-bits| | | | | |||
+-----------+-----+-----------+--------------+---------+------------+ | +-----------+-----+-----------+--------------+---------+------------+ | |||
Table 2: SHA-2 Hash Algorithms | Table 2: SHA-2 Hash Algorithms | |||
3.3. SHAKE Algorithms | 3.3. SHAKE Algorithms | |||
The family of SHA-3 hash algorithms [FIPS-202] was the result of a | The family of SHA-3 hash algorithms [FIPS-202] was the result of a | |||
competition run by NIST. The pair of algorithms known as SHAKE-128 | competition run by NIST. The pair of algorithms known as SHAKE-128 | |||
and SHAKE-256 are the instances of SHA-3 that are currently being | and SHAKE-256 are the instances of SHA-3 that are currently being | |||
standardized in the IETF. This is the reason for including these | standardized in the IETF. This is the reason for including these | |||
algorithms in this document. | algorithms in this document. | |||
The SHA-3 hash algorithms have a significantly different structure | The SHA-3 hash algorithms have a significantly different structure | |||
than the SHA-2 hash algorithms. | than the SHA-2 hash algorithms. | |||
Unlike the SHA-2 hash functions, no algorithm identifier is created | Unlike the SHA-2 hash functions, no algorithm identifier is created | |||
for shorter lengths. The length of the hash value stored is 256-bits | for shorter lengths. The length of the hash value stored is 256 bits | |||
for SHAKE-128 and 512-bits for SHAKE-256. | for SHAKE-128 and 512 bits for SHAKE-256. | |||
The COSE capabilities array for these algorithms is empty. | The COSE capabilities array for these algorithms is empty. | |||
+========+=====+=============+==============+=========+=============+ | +========+=====+=============+==============+=========+=============+ | |||
| Name |Value| Description | Capabilities |Reference| Recommended | | |Name |Value|Description | Capabilities |Reference| Recommended | | |||
+========+=====+=============+==============+=========+=============+ | +========+=====+=============+==============+=========+=============+ | |||
|SHAKE128| -18 | SHAKE-128 | [] | [This | Yes | | |SHAKE128|-18 |SHAKE-128 | [] |RFC 9054 | Yes | | |||
| | |256-bit Hash | |Document]| | | | | |256-bit Hash | | | | | |||
| | | Value | | | | | | | |Value | | | | | |||
+--------+-----+-------------+--------------+---------+-------------+ | +--------+-----+-------------+--------------+---------+-------------+ | |||
|SHAKE256| -45 | SHAKE-256 | [] | [This | Yes | | |SHAKE256|-45 |SHAKE-256 | [] |RFC 9054 | Yes | | |||
| | |512-bit Hash | |Document]| | | | | |512-bit Hash | | | | | |||
| | | Value | | | | | | | |Value | | | | | |||
+--------+-----+-------------+--------------+---------+-------------+ | +--------+-----+-------------+--------------+---------+-------------+ | |||
Table 3: SHAKE Hash Functions | Table 3: SHAKE Hash Functions | |||
4. IANA Considerations | 4. IANA Considerations | |||
The IANA actions in [I-D.ietf-cose-rfc8152bis-struct] and | ||||
[I-D.ietf-cose-rfc8152bis-algs] need to be executed before the | ||||
actions in this document. Where early allocation of codepoints has | ||||
been made, these should be preserved. | ||||
4.1. COSE Algorithm Registry | 4.1. COSE Algorithm Registry | |||
IANA is requested to register the following algorithms in the "COSE | IANA has registered the following algorithms in the "COSE Algorithms" | |||
Algorithms" registry. | registry (https://www.iana.org/assignments/cose/). | |||
* The SHA-1 hash function found in Table 1. | * The SHA-1 hash function found in Table 1. | |||
* The set of SHA-2 hash functions found in Table 2. | * The set of SHA-2 hash functions found in Table 2. | |||
* The set of SHAKE hash functions found in Table 3. | * The set of SHAKE hash functions found in Table 3. | |||
Many of the hash values produced are relatively long and as such the | Many of the hash values produced are relatively long; as such, use of | |||
use of a two byte algorithm identifier seems reasonable. SHA-1 is | a two-byte algorithm identifier seems reasonable. SHA-1 is tagged as | |||
tagged as 'Filter Only' and thus a longer algorithm identifier is | "Filter Only", so a longer algorithm identifier is appropriate even | |||
appropriate even though it is a shorter hash value. | though it is a shorter hash value. | |||
IANA is requested to add the value of 'Filter Only' to the set of | IANA has added the value of "Filter Only" to the set of legal values | |||
legal values for the 'Recommended' column. This value is only to be | for the Recommended column. This value is only to be used for hash | |||
used for hash functions and indicates that it is not to be used for | functions and indicates that it is not to be used for purposes that | |||
purposes which require collision resistance. IANA is requested to | require collision resistance. As a result of this addition, IANA has | |||
add this document to the reference section for this table due to this | added this document as a reference for the "COSE Algorithms" | |||
addition. | registry. | |||
5. Security Considerations | 5. Security Considerations | |||
Protocols need to perform a careful analysis of the properties of a | Protocols need to perform a careful analysis of the properties of a | |||
hash function that are needed and how they map onto the possible | hash function that are needed and how they map onto the possible | |||
attacks. In particular, one needs to distinguish between those uses | attacks. In particular, one needs to distinguish between those uses | |||
that need the cryptographic properties, such as collision resistance, | that need the cryptographic properties, such as collision resistance, | |||
and properties that correspond to possible object identification. | and uses that only need properties that correspond to possible object | |||
The different attacks correspond to who or what is being protected: | identification. The different attacks correspond to who or what is | |||
is it the originator that is the attacker or a third party? This is | being protected: is it the originator that is the attacker or a third | |||
the difference between collision resistance and second pre-image | party? This is the difference between collision resistance and | |||
resistance. As a general rule, longer hash values are "better" than | second pre-image resistance. As a general rule, longer hash values | |||
short ones, but trade-offs of transmission size, timeliness, and | are "better" than short ones, but trade-offs of transmission size, | |||
security all need to be included as part of this analysis. In many | timeliness, and security all need to be included as part of this | |||
cases the value being hashed is a public value and, as such, pre- | analysis. In many cases, the value being hashed is a public value | |||
image resistance is not part of this analysis. | and, as such, (first) pre-image resistance is not part of this | |||
analysis. | ||||
Algorithm agility needs to be considered a requirement for any use of | Algorithm agility needs to be considered a requirement for any use of | |||
hash functions [BCP201]. As with any cryptographic function, hash | hash functions [BCP201]. As with any cryptographic function, hash | |||
functions are under constant attack and the cryptographic strength of | functions are under constant attack, and the cryptographic strength | |||
hash algorithms will be reduced over time. | of hash algorithms will be reduced over time. | |||
6. Normative References | 6. References | |||
6.1. Normative References | ||||
[FIPS-180-4] | ||||
NIST, "Secure Hash Standard", FIPS PUB 180-4, | ||||
DOI 10.6028/NIST.FIPS.180-4, August 2015, | ||||
<https://doi.org/10.6028/NIST.FIPS.180-4>. | ||||
[FIPS-202] Dworkin, M.J., "SHA-3 Standard: Permutation-Based Hash and | ||||
Extendable-Output Functions", FIPS PUB 202, | ||||
DOI 10.6028/NIST.FIPS.202, August 2015, | ||||
<https://doi.org/10.6028/NIST.FIPS.202>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3174] Eastlake 3rd, D. and P. Jones, "US Secure Hash Algorithm 1 | ||||
(SHA1)", RFC 3174, DOI 10.17487/RFC3174, September 2001, | ||||
<https://www.rfc-editor.org/info/rfc3174>. | ||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[I-D.ietf-cose-rfc8152bis-struct] | [RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | Structures and Process", STD 96, RFC 9052, | |||
Structures and Process", Work in Progress, Internet-Draft, | DOI 10.17487/RFC9052, August 2022, | |||
draft-ietf-cose-rfc8152bis-struct-12, August 24, 2020, | <https://www.rfc-editor.org/info/rfc9052>. | |||
<https://tools.ietf.org/html/draft-ietf-cose-rfc8152bis- | ||||
struct-12>. | ||||
[FIPS-180-4] | ||||
National Institute of Standards and Technology, "Secure | ||||
Hash Standard", FIPS PUB 180-4, August 2015. | ||||
[FIPS-202] National Institute of Standards and Technology, "SHA-3 | ||||
Standard: Permutation-Based Hash and Extendable-Output | ||||
Functions", FIPS PUB 202, August 2015. | ||||
[RFC3174] Eastlake 3rd, D. and P. Jones, "US Secure Hash Algorithm 1 | 6.2. Informative References | |||
(SHA1)", RFC 3174, DOI 10.17487/RFC3174, September 2001, | ||||
<https://www.rfc-editor.org/info/rfc3174>. | ||||
7. Informative References | [BCP201] Housley, R., "Guidelines for Cryptographic Algorithm | |||
Agility and Selecting Mandatory-to-Implement Algorithms", | ||||
BCP 201, RFC 7696, November 2015, | ||||
<https://www.rfc-editor.org/info/bcp201>. | ||||
[CMS] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, | [CMS] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, | |||
RFC 5652, DOI 10.17487/RFC5652, September 2009, | RFC 5652, DOI 10.17487/RFC5652, September 2009, | |||
<https://www.rfc-editor.org/info/rfc5652>. | <https://www.rfc-editor.org/info/rfc5652>. | |||
[ESS] Hoffman, P., Ed., "Enhanced Security Services for S/MIME", | [COSE] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | |||
RFC 2634, DOI 10.17487/RFC2634, June 1999, | RFC 8152, DOI 10.17487/RFC8152, July 2017, | |||
<https://www.rfc-editor.org/info/rfc2634>. | <https://www.rfc-editor.org/info/rfc8152>. | |||
[I-D.ietf-cose-x509] | [COSE-x509] | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Header parameters for carrying and referencing X.509 | Header parameters for carrying and referencing X.509 | |||
certificates", Work in Progress, Internet-Draft, draft- | certificates", Work in Progress, Internet-Draft, draft- | |||
ietf-cose-x509-06, March 9, 2020, | ietf-cose-x509-08, 14 December 2020, | |||
<https://tools.ietf.org/html/draft-ietf-cose-x509-06>. | <https://datatracker.ietf.org/doc/html/draft-ietf-cose- | |||
x509-08>. | ||||
[ESS] Hoffman, P., Ed., "Enhanced Security Services for S/MIME", | ||||
RFC 2634, DOI 10.17487/RFC2634, June 1999, | ||||
<https://www.rfc-editor.org/info/rfc2634>. | ||||
[RFC6194] Polk, T., Chen, L., Turner, S., and P. Hoffman, "Security | [RFC6194] Polk, T., Chen, L., Turner, S., and P. Hoffman, "Security | |||
Considerations for the SHA-0 and SHA-1 Message-Digest | Considerations for the SHA-0 and SHA-1 Message-Digest | |||
Algorithms", RFC 6194, DOI 10.17487/RFC6194, March 2011, | Algorithms", RFC 6194, DOI 10.17487/RFC6194, March 2011, | |||
<https://www.rfc-editor.org/info/rfc6194>. | <https://www.rfc-editor.org/info/rfc6194>. | |||
[I-D.ietf-cose-rfc8152bis-algs] | ||||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Initial Algorithms", Work in Progress, Internet-Draft, | ||||
draft-ietf-cose-rfc8152bis-algs-11, July 1, 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-cose-rfc8152bis- | ||||
algs-11>. | ||||
[I-D.ietf-suit-manifest] | ||||
Moran, B., Tschofenig, H., Birkholz, H., and K. Zandberg, | ||||
"A Concise Binary Object Representation (CBOR)-based | ||||
Serialization Format for the Software Updates for Internet | ||||
of Things (SUIT) Manifest", Work in Progress, Internet- | ||||
Draft, draft-ietf-suit-manifest-09, July 13, 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-suit-manifest-09>. | ||||
[BCP201] Housley, R., "Guidelines for Cryptographic Algorithm | ||||
Agility and Selecting Mandatory-to-Implement Algorithms", | ||||
BCP 201, RFC 7696, November 2015. | ||||
<https://www.rfc-editor.org/info/bcp201> | ||||
[SHA-1-collision] | [SHA-1-collision] | |||
Stevens, M., Bursztein, E., Karpman, P., Albertini, A., | Stevens, M., Bursztein, E., Karpman, P., Albertini, A., | |||
and Y. Markov, "The first collision for full SHA-1", | and Y. Markov, "The first collision for full SHA-1", | |||
February 2017, | February 2017, | |||
<https://shattered.io/static/shattered.pdf>. | <https://shattered.io/static/shattered.pdf>. | |||
[COSE] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | [SUIT-MANIFEST] | |||
RFC 8152, DOI 10.17487/RFC8152, July 2017, | Moran, B., Tschofenig, H., Birkholz, H., and K. Zandberg, | |||
<https://www.rfc-editor.org/info/rfc8152>. | "A Concise Binary Object Representation (CBOR)-based | |||
Serialization Format for the Software Updates for Internet | ||||
of Things (SUIT) Manifest", Work in Progress, Internet- | ||||
Draft, draft-ietf-suit-manifest-19, 9 August 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-suit- | ||||
manifest-19>. | ||||
Author's Address | Author's Address | |||
Jim Schaad | Jim Schaad | |||
August Cellars | August Cellars | |||
Email: ietf@augustcellars.com | ||||
End of changes. 65 change blocks. | ||||
246 lines changed or deleted | 234 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |