| < draft-ietf-suit-firmware-encryption-01.txt | draft-ietf-suit-firmware-encryption-02.txt > | |||
|---|---|---|---|---|
| SUIT H. Tschofenig | SUIT H. Tschofenig | |||
| Internet-Draft Arm Limited | Internet-Draft Arm Limited | |||
| Intended status: Standards Track R. Housley | Intended status: Standards Track R. Housley | |||
| Expires: January 13, 2022 Vigil Security | Expires: April 28, 2022 Vigil Security | |||
| B. Moran | B. Moran | |||
| Arm Limited | Arm Limited | |||
| July 12, 2021 | October 25, 2021 | |||
| Firmware Encryption with SUIT Manifests | Firmware Encryption with SUIT Manifests | |||
| draft-ietf-suit-firmware-encryption-01 | draft-ietf-suit-firmware-encryption-02 | |||
| Abstract | Abstract | |||
| This document specifies a firmware update mechanism where the | This document specifies a firmware update mechanism where the | |||
| firmware image is encrypted. This mechanism uses the IETF SUIT | firmware image is encrypted. Firmware encryption uses the IETF SUIT | |||
| manifest with key establishment provided by the hybrid public-key | manifest with key establishment provided by the hybrid public-key | |||
| encryption (HPKE) scheme or AES Key Wrap (AES-KW) with a pre-shared | encryption (HPKE) scheme and the AES Key Wrap (AES-KW) with a pre- | |||
| key-encryption key. In either case, AES-GCM or AES-CCM is used for | shared key-encryption key. Encryption of the firmware image is | |||
| firmware encryption. | encrypted using AES-GCM or AES-CCM. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 13, 2022. | This Internet-Draft will expire on April 28, 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 26 ¶ | skipping to change at page 2, line 26 ¶ | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 | 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 | |||
| 3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. AES Key Wrap . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. SUIT Envelope and SUIT Manifest . . . . . . . . . . . . . . . 6 | |||
| 5. Hybrid Public-Key Encryption (HPKE) . . . . . . . . . . . . . 9 | 5. AES Key Wrap . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6. Complete Examples . . . . . . . . . . . . . . . . . . . . . . 14 | 6. Hybrid Public-Key Encryption (HPKE) . . . . . . . . . . . . . 11 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 7. CEK Verification . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 8. Complete Examples . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 16 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 17 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 18 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 16 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | 11.2. Informative References . . . . . . . . . . . . . . . . . 17 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 19 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | ||||
| 1. Introduction | 1. Introduction | |||
| Vulnerabilities with Internet of Things (IoT) devices have raised the | Vulnerabilities with Internet of Things (IoT) devices have raised the | |||
| need for a reliable and secure firmware update mechanism that is also | need for a reliable and secure firmware update mechanism that is also | |||
| suitable for constrained devices. To protect firmware images the | suitable for constrained devices. To protect firmware images the | |||
| SUIT manifest format was developed [I-D.ietf-suit-manifest]. The | SUIT manifest format was developed [I-D.ietf-suit-manifest]. The | |||
| SUIT manifest provides a bundle of metadata about the firmware for an | SUIT manifest provides a bundle of metadata about the firmware for an | |||
| IoT device, where to find the firmware image, and the devices to | IoT device, where to find the firmware image, and the devices to | |||
| which it applies. | which it applies. | |||
| The SUIT information model [I-D.ietf-suit-information-model] details | The SUIT information model [I-D.ietf-suit-information-model] details | |||
| the information that has to be offered by the SUIT manifest format. | the information that has to be offered by the SUIT manifest format. | |||
| In addition to offering protection against modification, which is | In addition to offering protection against modification, which is | |||
| provided by a digital signature or a message authentication code, the | provided by a digital signature or a message authentication code, the | |||
| firmware image may also be afforded confidentiality using encryption. | firmware image may also be afforded confidentiality using encryption. | |||
| Encryption prevents third parties, including attackers, from gaining | Encryption prevents third parties, including attackers, from gaining | |||
| access to the firmware image. For example, return-oriented | access to the firmware binary. Hackers typically need intimate | |||
| programming (ROP) requires intimate knowledge of the target firmware | knowledge of the target firmware to mount their attacks. For | |||
| and encryption makes this approach much more difficult to exploit. | example, return-oriented programming (ROP) requires access to the | |||
| binary and encryption makes it much more difficult to write exploits. | ||||
| The SUIT manifest provides the data needed for authorized recipients | The SUIT manifest provides the data needed for authorized recipients | |||
| of the firmware image to decrypt it. | of the firmware image to decrypt it. The firmware image is encrypted | |||
| using a symmetric key. This symmetric cryptographic key is | ||||
| established for encryption and decryption, and that key can be | ||||
| applied to a SUIT manifest, firmware images, or personalization data, | ||||
| depending on the encryption choices of the firmware author. | ||||
| A symmetric cryptographic key is established for encryption and | A symmetric key can be established using a variety of mechanisms; | |||
| decryption, and that key can be applied to a SUIT manifest, firmware | this document defines two approaches for use with the IETF SUIT | |||
| images, or personalization data, depending on the encryption choices | manifest, namely: | |||
| of the firmware author. This symmetric key can be established using | ||||
| a variety of mechanisms; this document defines two approaches for use | ||||
| with the IETF SUIT manifest. Key establishment can be provided by | ||||
| the hybrid public-key encryption (HPKE) scheme or AES Key Wrap (AES- | ||||
| KW) with a pre-shared key-encryption key. These choices reduce the | ||||
| number of possible key establishment options and thereby help | ||||
| increase interoperability between different SUIT manifest parser | ||||
| implementations. | ||||
| The document also contains a number of examples for developers. | - hybrid public-key encryption (HPKE), and | |||
| - AES Key Wrap (AES-KW) using a pre-shared key-encryption key (KEK). | ||||
| These choices reduce the number of possible key establishment options | ||||
| and thereby help increase interoperability between different SUIT | ||||
| manifest parser implementations. | ||||
| The document also contains a number of examples. | ||||
| 2. Conventions and Terminology | 2. Conventions and 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 | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This document assumes familiarity with the IETF SUIT manifest | This document assumes familiarity with the IETF SUIT manifest | |||
| [I-D.ietf-suit-manifest] and the SUIT architecture [RFC9019]. | [I-D.ietf-suit-manifest], the SUIT information model | |||
| [I-D.ietf-suit-information-model] and the SUIT architecture | ||||
| [RFC9019]. | ||||
| In context of encryption, the terms "recipient" and "firmware | The terms sender and recipient are defined in [I-D.irtf-cfrg-hpke] | |||
| consumer" are used interchangeably. | and have the following meaning: | |||
| - Sender: Role of entity which sends an encrypted message. | ||||
| - Recipient: Role of entity which receives an encrypted message. | ||||
| Additionally, the following abbreviations are used in this document: | Additionally, the following abbreviations are used in this document: | |||
| - Key Wrap (KW), defined in RFC 3394 [RFC3394] for use with AES. | - Key Wrap (KW), defined in RFC 3394 [RFC3394] for use with AES. | |||
| - Key-encryption key / key-encrypting key (KEK), a term defined in | - Key-encryption key (KEK), a term defined in RFC 4949 [RFC4949]. | |||
| RFC 4949 [RFC4949]. | ||||
| - Content-encryption key (CEK), a term defined in RFC 2630 | - Content-encryption key (CEK), a term defined in RFC 2630 | |||
| [RFC2630]. | [RFC2630]. | |||
| - Hybrid Public Key Encryption (HPKE), defined in | - Hybrid Public Key Encryption (HPKE), defined in | |||
| [I-D.irtf-cfrg-hpke]. | [I-D.irtf-cfrg-hpke]. | |||
| 3. Architecture | 3. Architecture | |||
| Figure 1 in [RFC9019] shows the architecture for distributing | [RFC9019] describes the architecture for distributing firmware images | |||
| firmware images and manifests from the author to the firmware | and manifests from the author to the firmware consumer. It does, | |||
| consumer. It does, however, not detail the use of encrypted firmware | however, not detail the use of encrypted firmware images. | |||
| images. Figure 1 therefore focuses on those aspects. The firmware | ||||
| server and the device management infrastructure is represented by the | ||||
| distribution system, which is aware of the individual devices a | ||||
| firmware update has to be delivered to. | ||||
| Firmware encryption requires the party doing the encryption to know | ||||
| either the KEK (in case of AES-KW) or the public key of the recipient | ||||
| (in case of HPKE). The firmware author may have knowledge about all | ||||
| the devices but in most cases this will not be likely. Hence, it is | ||||
| the responsibility of the distribution system to perform the firmware | ||||
| encryption. | ||||
| Since including the COSE_Encrypt structure in the manifest | This document enhances the SUIT architecutre to include firmware | |||
| invalidates a a digital signature or a MAC added by the author, this | encryption. Figure 1 shows the distribution system, which represents | |||
| structure needs to be added to the envelope by the distribution | the firmware server and the device management infrastructure. The | |||
| system. This approach offers flexiblity when the number of devices | distribution system is aware of the individual devices to which a | |||
| that need to receive encrypted firmware images changes dynamically or | firmware update has to be delivered. | |||
| when the updates to KEKs or recipient public keys are necessary. As | ||||
| a downside, the author needs to trust the distribution system with | ||||
| performing the encryption of the plaintext firmware image. | ||||
| +----------+ | +----------+ | |||
| | | | | | | |||
| | Author | | | Author | | |||
| | | | | | | |||
| +----------+ +----------+ | +----------+ +----------+ | |||
| | | | | | Device |---+ | | |||
| | Device |---+ | Firmware + | |(Firmware | | | Firmware + | |||
| | | | | Manifest | | Consumer)| | | Manifest | |||
| +----------+ | | | +----------+ | | | |||
| | | | | | | |||
| | +--------------+ | | +--------------+ | |||
| +----------+ | | | | | | | | |||
| | | | Firmware + Manifest | Distribution | | +----------+ | Firmware + Manifest | Distribution | | |||
| | Device |---+------------------------| System | | | Device |---+------------------------| System | | |||
| | | | | | | |(Firmware | | | | | |||
| | Consumer)| | | | | ||||
| +----------+ | +--------------+ | +----------+ | +--------------+ | |||
| | | | | |||
| | | | | |||
| +----------+ | | +----------+ | | |||
| | | | | ||||
| | Device +---+ | | Device +---+ | |||
| | | | |(Firmware | | |||
| | Consumer)| | ||||
| +----------+ | +----------+ | |||
| Figure 1: Firmware Encryption Architecture. | Figure 1: Firmware Encryption Architecture. | |||
| 4. AES Key Wrap | Firmware encryption requires the sender to know the firmware | |||
| consumers and the respective credentials used by the key distribution | ||||
| mechanism. For AES-KW the KEK needs to be known and, in case of | ||||
| HPKE, the sender needs to be in possession of the public key of the | ||||
| recipient. | ||||
| The firmware author may have knowledge about all devices that need to | ||||
| receive an encrypted firmware image but in most cases this will not | ||||
| be likely. The distribution system certainly has the knowledge about | ||||
| the recipients to perform firmware encryption. | ||||
| To offer confidentiality protection for firmware images two | ||||
| deployment variants need to be supported: | ||||
| - The firmware author acts as the sender and the recipient is the | ||||
| firmware consumer (or the firmware consumers). | ||||
| - The firmware author encrypts the firmware image with the | ||||
| distribution system as the initial recipient. Then, the | ||||
| distribution system decrypts and re-encrypts the firmware image | ||||
| towards the firmware consumer(s). Delegating the task of re- | ||||
| encrypting the firmware image to the distribution system offers | ||||
| flexiblity when the number of devices that need to receive | ||||
| encrypted firmware images changes dynamically or when updates to | ||||
| KEKs or recipient public keys are necessary. As a downside, the | ||||
| author needs to trust the distribution system with performing the | ||||
| re-encryption of the firmware image. | ||||
| Irrespectively of the two variants, the key distribution data (in | ||||
| form of the COSE_Encrypt structure) is included in the SUIT envelope | ||||
| rather than in the SUIT manifest since the manifest will be digitally | ||||
| signed (or MACed) by the firmware author. | ||||
| Since the SUIT envelope is not protected cryptographically an | ||||
| adversary could modify the COSE_Encrypt structure. For example, if | ||||
| the attacker alters the key distribution data then a recipient will | ||||
| decrypt the firmware image with an incorrect key. This will lead to | ||||
| expending energy and flash cycles until the failure is detected. To | ||||
| mitigate this attack, the optional suit-cek-verification parameter is | ||||
| added to the manifest. Since the manifest is protected by a digital | ||||
| signature (or a MAC), an adversary cannot successfully modify this | ||||
| value. This parameter allows the recipient to verify whether the CEK | ||||
| has successfully been derived. | ||||
| Details about the changes to the envelope and the manifest can be | ||||
| found in the next section. | ||||
| 4. SUIT Envelope and SUIT Manifest | ||||
| This specification introduces two extensions to the SUIT envelope and | ||||
| the manifest structure, as motivated in Section 3. | ||||
| The SUIT envelope is enhanced with a key exchange payload, which is | ||||
| carried inside the suit-protection-wrappers parameter, see Figure 2. | ||||
| One or multiple SUIT_Encryption_Info payload(s) are carried within | ||||
| the suit-protection-wrappers parameter. The content of the | ||||
| SUIT_Encryption_Info payload is explained in Section 5 (for AES-KW) | ||||
| and in Section 6 (for HPKE). When the encryption capability is used, | ||||
| the suit-protection-wrappers parameter MUST be included in the | ||||
| envelope. | ||||
| SUIT_Envelope_Tagged = #6.107(SUIT_Envelope) | ||||
| SUIT_Envelope = { | ||||
| suit-authentication-wrapper => bstr .cbor SUIT_Authentication, | ||||
| suit-manifest => bstr .cbor SUIT_Manifest, | ||||
| SUIT_Severable_Manifest_Members, | ||||
| suit-protection-wrappers => bstr .cbor { | ||||
| *(int/str) => [+ SUIT_Encryption_Info] | ||||
| } | ||||
| * SUIT_Integrated_Payload, | ||||
| * SUIT_Integrated_Dependency, | ||||
| * $$SUIT_Envelope_Extensions, | ||||
| * (int => bstr) | ||||
| } | ||||
| Figure 2: SUIT Envelope CDDL. | ||||
| The manifest is extended with a CEK verification parameter (called | ||||
| suit-cek-verification), see Figure 3. This parameter is optional and | ||||
| is utilized in environments where battery exhaustion attacks are a | ||||
| concern. Details about the CEK verification can be found in | ||||
| Section 7. | ||||
| SUIT_Manifest = { | ||||
| suit-manifest-version => 1, | ||||
| suit-manifest-sequence-number => uint, | ||||
| suit-common => bstr .cbor SUIT_Common, | ||||
| ? suit-reference-uri => tstr, | ||||
| ? suit-cek-verification => bstr, | ||||
| SUIT_Severable_Members_Choice, | ||||
| SUIT_Unseverable_Members, | ||||
| * $$SUIT_Manifest_Extensions, | ||||
| } | ||||
| Figure 3: SUIT Manifest CDDL. | ||||
| 5. AES Key Wrap | ||||
| The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 | The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 | |||
| [RFC3394], and it can be used to encrypt a randomly generated | [RFC3394], and it can be used to encrypt a randomly generated | |||
| content-encryption key (CEK) with a pre-shared key-encryption key | content-encryption key (CEK) with a pre-shared key-encryption key | |||
| (KEK). The COSE conventions for using AES-KW are specified in | (KEK). The COSE conventions for using AES-KW are specified in | |||
| Section 12.2.1 of [RFC8152]. The encrypted CEK is carried in the | Section 12.2.1 of [RFC8152]. The encrypted CEK is carried in the | |||
| COSE_recipient structure alongside the information needed for AES-KW. | COSE_recipient structure alongside the information needed for AES-KW. | |||
| The COSE_recipient structure, which is a substructure of the | The COSE_recipient structure, which is a substructure of the | |||
| COSE_Encrypt structure, contains the CEK encrypted by the KEK. | COSE_Encrypt structure, contains the CEK encrypted by the KEK. | |||
| When the firmware image is encrypted for use by multiple recipients, | When the firmware image is encrypted for use by multiple recipients, | |||
| there are three options: | there are three options. We use the following notation KEK(R1,S) is | |||
| the KEK shared between recipient R1 and the sender S. Likewise, | ||||
| CEK(R1,S) is shared between R1 and S. If a single CEK or a single | ||||
| KEK is shared with all authorized recipients R by a given sender S in | ||||
| a certain context then we use CEK(_,S) or KEK(_,S), respectively. | ||||
| The notation ENC(plaintext, key) refers to the encryption of | ||||
| plaintext with a given key. | ||||
| - If all of authorized recipients have access to the KEK, a single | - If all authorized recipients have access to the KEK, a single | |||
| COSE_recipient structure contains the encrypted CEK. | COSE_recipient structure contains the encrypted CEK. This means | |||
| KEK(*,S) ENC(CEK,KEK), and ENC(firmware,CEK). | ||||
| - If recipients have different KEKs, then the COSE_recipient | - If recipients have different KEKs, then multiple COSE_recipient | |||
| structure may contain the same CEK encrypted with many different | structures are included but only a single CEK is used. Each | |||
| KEKs. The benefit of this approach is that the firmware image is | COSE_recipient structure contains the CEK encrypted with the KEKs | |||
| encrypted only once with the CEK while the authorized recipients | appropriate for the recipient. In short, KEK_1(R1, S), ..., | |||
| still need to use their individual KEKs to obtain the plaintext. | KEK_n(Rn, S), ENC(CEK, KEK_i) for i=1 to n, and ENC(firmware,CEK). | |||
| The benefit of this approach is that the firmware image is | ||||
| encrypted only once with a CEK while there is no sharing of the | ||||
| KEK accross recipients. Hence, authorized recipients still use | ||||
| their individual KEKs to decrypt the CEK and to subsequently | ||||
| obtain the plaintext firmware. | ||||
| - The last option is to use different CEKs encrypted with KEKs of | - The third option is to use different CEKs encrypted with KEKs of | |||
| the authorized recipients. This is appropriate when no benefits | the authorized recipients. Assume there are KEK_1(R1, S),..., | |||
| can be gained from encrypting and transmitting firmware images | KEK_n(Rn, S), and for i=1 to n the following computations need to | |||
| only once. For example, firmware images may contain information | be made: ENC(CEK_i, KEK_i) and ENC(firmware,CEK_i). This approach | |||
| unique to a device instance. | is appropriate when no benefits can be gained from encrypting and | |||
| transmitting firmware images only once. For example, firmware | ||||
| images may contain information unique to a device instance. | ||||
| Note that the AES-KW algorithm, as defined in Section 2.2.3.1 of | Note that the AES-KW algorithm, as defined in Section 2.2.3.1 of | |||
| [RFC3394], does not have public parameters that vary on a per- | [RFC3394], does not have public parameters that vary on a per- | |||
| invocation basis. Hence, the protected structure in the | invocation basis. Hence, the protected structure in the | |||
| COSE_recipient is a byte string of zero length. | COSE_recipient is a byte string of zero length. | |||
| The COSE_Encrypt conveys information for encrypting the firmware | The COSE_Encrypt conveys information for encrypting the firmware | |||
| image, which includes information like the algorithm and the IV, even | image, which includes information like the algorithm and the IV, even | |||
| though the firmware image is not embedded in the | though the firmware image is not embedded in the | |||
| COSE_Encrypt.ciphertext itself since it conveyed as detached content. | COSE_Encrypt.ciphertext itself since it conveyed as detached content. | |||
| The CDDL for the COSE_Encrypt_Tagged structure is shown in Figure 2. | The CDDL for the COSE_Encrypt_Tagged structure is shown in Figure 4. | |||
| COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) | COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) | |||
| SUIT_Encryption_Info = COSE_Encrypt_Tagged | SUIT_Encryption_Info = COSE_Encrypt_Tagged | |||
| COSE_Encrypt = [ | COSE_Encrypt = [ | |||
| protected : bstr .cbor outer_header_map_protected, | protected : bstr .cbor outer_header_map_protected, | |||
| unprotected : outer_header_map_unprotected, | unprotected : outer_header_map_unprotected, | |||
| ciphertext : null, ; because of detached ciphertext | ciphertext : null, ; because of detached ciphertext | |||
| recipients : [ + COSE_recipient ] | recipients : [ + COSE_recipient ] | |||
| skipping to change at page 7, line 41 ¶ | skipping to change at page 9, line 41 ¶ | |||
| ciphertext : bstr ; CEK encrypted with KEK | ciphertext : bstr ; CEK encrypted with KEK | |||
| ] | ] | |||
| recipient_header_map = | recipient_header_map = | |||
| { | { | |||
| 1 => int, ; algorithm identifier | 1 => int, ; algorithm identifier | |||
| 4 => bstr, ; key identifier | 4 => bstr, ; key identifier | |||
| * label =values ; extension point | * label =values ; extension point | |||
| } | } | |||
| Figure 2: CDDL for AES Key Wrap-based Firmware Encryption | Figure 4: CDDL for AES Key Wrap Encryption | |||
| The COSE specification requires a consistent byte stream for the | The COSE specification requires a consistent byte stream for the | |||
| authenticated data structure to be created, which is shown in | authenticated data structure to be created, which is shown in | |||
| Figure 3. | Figure 5. | |||
| Enc_structure = [ | Enc_structure = [ | |||
| context : "Encrypt", | context : "Encrypt", | |||
| protected : empty_or_serialized_map, | protected : empty_or_serialized_map, | |||
| external_aad : bstr | external_aad : bstr | |||
| ] | ] | |||
| Figure 3: CDDL for Enc_structure Data Structure | Figure 5: CDDL for Enc_structure Data Structure | |||
| As shown in Figure 2, there are two protected fields: one protected | As shown in Figure 4, there are two protected fields: one protected | |||
| field in the COSE_Encrypt structure and a second one in the | field in the COSE_Encrypt structure and a second one in the | |||
| COSE_recipient structure. The 'protected' field in the | COSE_recipient structure. The 'protected' field in the | |||
| Enc_structure, see Figure 3, refers to the content of the protected | Enc_structure, see Figure 5, refers to the content of the protected | |||
| field from the COSE_Encrypt structure, not to the protected field of | field from the COSE_Encrypt structure. | |||
| the COSE_recipient structure. | ||||
| The value of the external_aad is set to null. | The value of the external_aad MUST be set to null. | |||
| The following example illustrates the use of the AES-KW algorithm | The following example illustrates the use of the AES-KW algorithm | |||
| with AES-128. | with AES-128. | |||
| We use the following parameters in this example: | We use the following parameters in this example: | |||
| - IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, | - IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, | |||
| 0x3b, 0x80 | 0x3b, 0x80 | |||
| - KEK: "aaaaaaaaaaaaaaaa" | - KEK: "aaaaaaaaaaaaaaaa" | |||
| - KID: "kid-1" | - KID: "kid-1" | |||
| - Plaintext Firmware: "This is a real firmware image." | - Plaintext Firmware: "This is a real firmware image." | |||
| - Firmware (hex): | - Firmware (hex): | |||
| 546869732069732061207265616C206669726D7761726520696D6167652E | 546869732069732061207265616C206669726D7761726520696D6167652E | |||
| The COSE_Encrypt structure in hex format is (with a line break | The COSE_Encrypt structure, in hex format, is (with a line break | |||
| inserted): | inserted): | |||
| D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D | D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D | |||
| 315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D | 315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D | |||
| The resulting COSE_Encrypt structure in a dignostic format is shown | The resulting COSE_Encrypt structure in a dignostic format is shown | |||
| in Figure 4. | in Figure 6. | |||
| 96( | 96( | |||
| [ | [ | |||
| // protected field with alg=AES-GCM-128 | // protected field with alg=AES-GCM-128 | |||
| h'A10101', | h'A10101', | |||
| { | { | |||
| // unprotected field with iv | // unprotected field with iv | |||
| 5: h'26682306D4FB28CA01B43B80' | 5: h'26682306D4FB28CA01B43B80' | |||
| }, | }, | |||
| // null because of detached ciphertext | // null because of detached ciphertext | |||
| skipping to change at page 9, line 27 ¶ | skipping to change at page 11, line 27 ¶ | |||
| { // unprotected field | { // unprotected field | |||
| 1: -3, // alg=A128KW | 1: -3, // alg=A128KW | |||
| 4: h'6B69642D31' // key id | 4: h'6B69642D31' // key id | |||
| }, | }, | |||
| // CEK encrypted with KEK | // CEK encrypted with KEK | |||
| h'AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D' | h'AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D' | |||
| ] | ] | |||
| ] | ] | |||
| ) | ) | |||
| Figure 4: COSE_Encrypt Example for AES Key Wrap | Figure 6: COSE_Encrypt Example for AES Key Wrap | |||
| The CEK was "4C805F1587D624ED5E0DBB7A7F7FA7EB" and the encrypted | The CEK, in hex format, was "4C805F1587D624ED5E0DBB7A7F7FA7EB" and | |||
| firmware was: | the encrypted firmware (with a line feed added) was: | |||
| A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260 | A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260 | |||
| F9425105F67F0FB6C92248AE289A025258F06C2AD70415 | F9425105F67F0FB6C92248AE289A025258F06C2AD70415 | |||
| 5. Hybrid Public-Key Encryption (HPKE) | 6. Hybrid Public-Key Encryption (HPKE) | |||
| Hybrid public-key encryption (HPKE) [I-D.irtf-cfrg-hpke] is a scheme | Hybrid public-key encryption (HPKE) [I-D.irtf-cfrg-hpke] is a scheme | |||
| that provides public key encryption of arbitrary-sized plaintexts | that provides public key encryption of arbitrary-sized plaintexts | |||
| given a recipient's public key. | given a recipient's public key. | |||
| For use with firmware encryption the scheme works as follows: The | For use with firmware encryption the scheme works as follows: HPKE, | |||
| firmware author uses HPKE, which internally utilizes a non- | which internally utilizes a non-interactive ephemeral-static Diffie- | |||
| interactive ephemeral-static Diffie-Hellman exchange to derive a | Hellman exchange to derive a shared secret, is used to encrypt a CEK. | |||
| shared secret, which is then used to encrypt plaintext. | This CEK is subsequently used to encrypt the firmware image. Hence, | |||
| the plaintext passed to HPKE is the randomly generated CEK. The | ||||
| In the firmware encryption scenario, the plaintext passed to HPKE for | output of the HPKE SealBase function is therefore the encrypted CEK | |||
| encryption is the randomly generated CEK. The output of the HPKE | along with HPKE encapsulated key (i.e. the ephemeral ECDH public | |||
| operation is therefore the encrypted CEK along with HPKE encapsulated | key). | |||
| key (i.e. the ephemeral ECDH public key of the author). The CEK is | ||||
| then used to encrypt the firmware. | ||||
| Only the holder of recipient's private key can decapsulate the CEK to | Only the holder of recipient's private key can decapsulate the CEK to | |||
| decrypt the firmware. Key generation is influced by additional | decrypt the firmware. Key generation in HPKE is influced by | |||
| parameters, such as identity information. | additional parameters, such as identity information. | |||
| This approach allows all recipients to use the same CEK to encrypt | This approach allows all recipients to use the same CEK to encrypt | |||
| the firmware image, in case there are multiple recipients, to fulfill | the firmware image, in case there are multiple recipients, to fulfill | |||
| a requirement for the efficient distribution of firmware images using | a requirement for the efficient distribution of firmware images using | |||
| a multicast or broadcast protocol. | a multicast or broadcast protocol. | |||
| The CDDL for the COSE_Encrypt structure as used with HPKE is shown in | [cose-hpke] defines the use of HPKE with COSE and this specification | |||
| Figure 5. | profiles it. | |||
| COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) | COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) | |||
| SUIT_Encryption_Info = COSE_Encrypt_Tagged | SUIT_Encryption_Info = COSE_Encrypt_Tagged | |||
| ; Layer 0 | ||||
| COSE_Encrypt = [ | COSE_Encrypt = [ | |||
| protected : bstr .cbor header_map, ; must contain alg | protected : bstr .cbor header_map, ; must contain alg | |||
| unprotected : header_map, ; must contain iv | unprotected : header_map, ; must contain iv | |||
| ciphertext : null, ; because of detached ciphertext | ciphertext : null, ; because of detached ciphertext | |||
| recipients : [ + COSE_recipient_outer ] | recipients : [+COSE_recipient_outer] | |||
| ] | ] | |||
| ; Layer 1 | ||||
| COSE_recipient_outer = [ | COSE_recipient_outer = [ | |||
| protected : bstr .size 0, | protected : bstr .size 0, | |||
| unprotected : header_map, ; must contain alg | unprotected : header_map, ; must contain alg | |||
| ciphertext : bstr ; CEK encrypted based on HPKE algo | encCEK : bstr, ; CEK encrypted based on HPKE algo | |||
| recipients : [ + COSE_recipient_inner ] | recipients : [ + COSE_recipient_inner ] | |||
| ] | ] | |||
| ; Layer 2 | ||||
| COSE_recipient_inner = [ | COSE_recipient_inner = [ | |||
| protected : bstr .cbor header_map, ; must contain alg | protected : bstr .cbor header_map, ; must contain HPKE alg | |||
| unprotected : header_map, ; must contain kid, | unprotected : header_map, ; must contain kid and ephemeral public key | |||
| ciphertext : bstr ; CEK encrypted based on HPKE algo | empty : null, | |||
| recipients : null | empty : null | |||
| ] | ] | |||
| header_map = { | header_map = { | |||
| Generic_Headers, | Generic_Headers, | |||
| * label =values, | * label =values, | |||
| } | } | |||
| Generic_Headers = ( | Generic_Headers = ( | |||
| ? 1 => int, ; algorithm identifier | ? 1 => int, ; algorithm identifier | |||
| ? 2 => crv, ; EC identifier | ? 2 => crv, ; EC identifier | |||
| ? 4 => bstr, ; key identifier | ? 4 => bstr, ; key identifier | |||
| ? 5 => bstr ; IV | ? 5 => bstr ; IV | |||
| ) | ) | |||
| Figure 5: CDDL for HPKE-based COSE_Encrypt Structure | Figure 7: CDDL for HPKE-based COSE_Encrypt Structure | |||
| The COSE_Encrypt structure in Figure 5 requires the encrypted CEK and | ||||
| the ephemeral public key of the firmare author to be generated. This | ||||
| is accomplished with the HPKE encryption function as shown in | ||||
| Figure 6. | ||||
| CEK = random() | ||||
| pkR = DeserializePublicKey(recipient_public_key) | ||||
| info = "cose hpke" || 0x00 || COSE_KDF_Context | ||||
| enc, context = SetupBaseS(pkR, info) | ||||
| ciphertext = context.Seal(null, CEK) | ||||
| Figure 6 | ||||
| Legend: | ||||
| - The functions DeserializePublicKey(), SetupBaseS() and Seal() are | ||||
| defined in HPKE [I-D.irtf-cfrg-hpke]. | ||||
| - CEK is a random byte sequence of keysize length whereby keysize | ||||
| corresponds to the size of the indicated symmetric encryption | ||||
| algorithm used for firmware encryption. For example, AES-128-GCM | ||||
| requires a 16 byte key. The CEK would therefore be 16 bytes long. | ||||
| - 'recipient_public_key' represents the public key of the recipient. | ||||
| - 'info' is a data structure described below used as input to the | ||||
| key derivation internal to the HPKE algorithm. In addition to the | ||||
| constant prefix, the COSE_KDF_Context structure is used. The | ||||
| COSE_KDF_Context is shown in Figure 7. | ||||
| The result of the above-described operation is the encrypted CEK | ||||
| (denoted as ciphertext) and the enc - the HPKE encapsulated key (i.e. | ||||
| the ephemeral ECDH public key of the author). | ||||
| PartyInfo = ( | ||||
| identity : bstr, | ||||
| nonce : nil, | ||||
| other : nil | ||||
| ) | ||||
| COSE_KDF_Context = [ | ||||
| AlgorithmID : int, | ||||
| PartyUInfo : [ PartyInfo ], | ||||
| PartyVInfo : [ PartyInfo ], | ||||
| SuppPubInfo : [ | ||||
| keyDataLength : uint, | ||||
| protected : empty_or_serialized_map | ||||
| ], | ||||
| ] | ||||
| Figure 7: COSE_KDF_Context Data Structure | ||||
| Notes: | ||||
| - PartyUInfo.identity corresponds to the kid found in the | ||||
| COSE_Sign_Tagged or COSE_Sign1_Tagged structure (when a digital | ||||
| signature is used). When utilizing a MAC, then the kid is found | ||||
| in the COSE_Mac_Tagged or COSE_Mac0_Tagged structure. | ||||
| - PartyVInfo.identity corresponds to the kid used for the respective | ||||
| recipient from the inner-most recipients array. | ||||
| - The value in the AlgorithmID field corresponds to the alg | ||||
| parameter in the protected structure in the inner-most recipients | ||||
| array. | ||||
| - keyDataLength is set to the number of bits of the desired output | ||||
| value. | ||||
| - protected refers to the protected structure of the inner-most | ||||
| array. | ||||
| The author encrypts the firmware using the CEK with the selected | ||||
| algorithm. | ||||
| The recipient decrypts the encrypted CEK, using two input parameters: | The COSE_Encrypt structure (layer 0) contains algorithm parameters | |||
| for encryption of the firmware image. The protected field MUST | ||||
| contain the 'alg' parameter and the unprotected field MUST contain | ||||
| the 'iv' parameter. The ciphertext is always detached. | ||||
| - the private key skR corresponding to the public key pkR used by | The COSE_recipient_outer structure (layer 1) contains the encrypted | |||
| the author when creating the manifest. | CEK. The protected structure MUST be empty and the unprotected | |||
| structure MUST contain the 'alg' parameter, which carries the | ||||
| algorithm information for protecting the CEK. | ||||
| - the HPKE encapsulated key (i.e. ephemeral ECDH public key) created | The COSE_recipient_inner structure (layer 2) contains the HPKE- | |||
| by the author. | related information. The protected structure MUST contain the 'alg' | |||
| parameter set to the algorithm values in Section 6 of [cose-hpke] and | ||||
| the unprotected structure MUST contain the 'kid' and the 'ephemeral' | ||||
| parameter. | ||||
| If the HPKE operation is successful, the recipient obtains the CEK | To populate the SUIT_Encryption_Info structure the sender creates a | |||
| and can decrypt the firmware. | CEK randomly. The CEK is used to encrypt the firmware image with the | |||
| selected algorithm. | ||||
| Figure 8 shows the HPKE computations performed by the recipient for | The HPKE SealBase function takes various input parameters, as | |||
| decryption. | explained in [cose-hpke]. The most important input parameters are | |||
| the plaintext (CEK in our case) and the public key of the recipient. | ||||
| If successful, SealBase will return the encrypted CEK and the | ||||
| ephemeral public key. | ||||
| info = "cose hpke" || 0x00 || COSE_KDF_Context | The recipient receives the ephemeral public key and the encrypted CEK | |||
| context = SetupBaseR(ciphertext, skR, info) | from the sender. It then uses the HPKE OpenBase function to decrypt | |||
| CEK = context.Open(null, ciphertext) | the ciphertext (which contains the CEK). | |||
| Figure 8 | If the HPKE OpenBase function is successful, the recipient obtains | |||
| the CEK and can decrypt the firmware. The decryption operation is | ||||
| shown in Figure 4 of [cose-hpke]. | ||||
| An example of the COSE_Encrypt structure using the HPKE scheme is | An example of the COSE_Encrypt structure using the HPKE scheme is | |||
| shown in Figure 9. It uses the following algorithm combination: | shown in Figure 8. It uses the following algorithm combination: | |||
| - AES-GCM-128 for encryption of the firmware image. | - AES-GCM-128 for encryption of the firmware image. | |||
| - AES-GCM-128 for encrytion of the CEK. | - AES-GCM-128 for encrytion of the CEK. | |||
| - Key Encapsulation Mechanism (KEM): NIST P-256 | - Key Encapsulation Mechanism (KEM): NIST P-256 | |||
| - Key Derivation Function (KDF): HKDF-SHA256 | - Key Derivation Function (KDF): HKDF-SHA256 | |||
| 96( | 96( | |||
| skipping to change at page 14, line 41 ¶ | skipping to change at page 15, line 37 ¶ | |||
| // kid for recipient static ECDH public key | // kid for recipient static ECDH public key | |||
| 4: h'6B69642D31' | 4: h'6B69642D31' | |||
| }, | }, | |||
| // empty ciphertext | // empty ciphertext | |||
| null | null | |||
| ] | ] | |||
| ] | ] | |||
| ] | ] | |||
| ) | ) | |||
| Figure 9: COSE_Encrypt Example for HPKE | Figure 8: COSE_Encrypt Example for HPKE | |||
| 6. Complete Examples | 7. CEK Verification | |||
| TBD: Example for complete manifest here (which also includes the | The suit-cek-verification parameter contains a byte string resulting | |||
| digital signature). TBD: Multiple recipient example as well. TBD: | from the encryption of 8 bytes of 0xA5 using the CEK. | |||
| Encryption of manifest (in addition of firmware encryption). | ||||
| 7. Security Considerations | [[Editor's Note: Guidance about the selection of an IV needs to be | |||
| added here.]] | ||||
| The algorithms described in this document assume that the firmware | 8. Complete Examples | |||
| author | ||||
| - has either shared a key-encryption key (KEK) with the firmware | [[Editor's Note: Add examples for a complete manifest here (including | |||
| consumer (for use with the AES-Key Wrap scheme), or | a digital signature), multiple recipients, encryption of manifests | |||
| (in comparison to firmware images).]] | ||||
| 9. Security Considerations | ||||
| The algorithms described in this document assume that the party | ||||
| performing the firmware encryption | ||||
| - shares a key-encryption key (KEK) with the firmware consumer (for | ||||
| use with the AES-Key Wrap scheme), or | ||||
| - is in possession of the public key of the firmware consumer (for | - is in possession of the public key of the firmware consumer (for | |||
| use with HPKE). | use with HPKE). | |||
| Both cases require some upfront communication interaction, which is | Both cases require some upfront communication interaction, which is | |||
| not part of the SUIT manifest. This interaction is likely provided | not part of the SUIT manifest. This interaction is likely provided | |||
| by an IoT device management solution, as described in [RFC9019]. | by an IoT device management solution, as described in [RFC9019]. | |||
| For AES-Key Wrap to provide high security it is important that the | For AES-Key Wrap to provide high security it is important that the | |||
| KEK is of high entropy, and that implementations protect the KEK from | KEK is of high entropy, and that implementations protect the KEK from | |||
| skipping to change at page 15, line 37 ¶ | skipping to change at page 16, line 37 ¶ | |||
| In some cases third party companies analyse binaries for known | In some cases third party companies analyse binaries for known | |||
| security vulnerabilities. With encrypted firmware images this type | security vulnerabilities. With encrypted firmware images this type | |||
| of analysis is prevented. Consequently, these third party companies | of analysis is prevented. Consequently, these third party companies | |||
| either need to be given access to the plaintext binary before | either need to be given access to the plaintext binary before | |||
| encryption or they need to become authorized recipients of the | encryption or they need to become authorized recipients of the | |||
| encrypted firmware images. In either case, it is necessary to | encrypted firmware images. In either case, it is necessary to | |||
| explicitly consider those third parties in the software supply chain | explicitly consider those third parties in the software supply chain | |||
| when such a binary analysis is desired. | when such a binary analysis is desired. | |||
| 8. IANA Considerations | 10. IANA Considerations | |||
| This document requests IANA to create new entries in the COSE | ||||
| Algorithms registry established with [I-D.ietf-cose-rfc8152bis-algs]. | ||||
| +-------------+-------+---------+------------+--------+---------------+ | This document does not require any actions by IANA. | |||
| | Name | Value | KDF | Ephemeral- | Key | Description | | ||||
| | | | | Static | Wrap | | | ||||
| +-------------+-------+---------+------------+--------+---------------+ | ||||
| | HPKE/P-256+ | TBD1 | HKDF - | yes | none | HPKE with | | ||||
| | HKDF-256 | | SHA-256 | | | ECDH-ES | | ||||
| | | | | | | (P-256) + | | ||||
| | | | | | | HKDF-256 | | ||||
| +-------------+-------+---------+------------+--------+---------------+ | ||||
| | HPKE/P-384+ | TBD2 | HKDF - | yes | none | HPKE with | | ||||
| | HKDF-SHA384 | | SHA-384 | | | ECDH-ES | | ||||
| | | | | | | (P-384) + | | ||||
| | | | | | | HKDF-384 | | ||||
| +-------------+-------+---------+------------+--------+---------------+ | ||||
| | HPKE/P-521+ | TBD3 | HKDF - | yes | none | HPKE with | | ||||
| | HKDF-SHA521 | | SHA-521 | | | ECDH-ES | | ||||
| | | | | | | (P-521) + | | ||||
| | | | | | | HKDF-521 | | ||||
| +-------------+-------+---------+------------+--------+---------------+ | ||||
| | HPKE | TBD4 | HKDF - | yes | none | HPKE with | | ||||
| | X25519 + | | SHA-256 | | | ECDH-ES | | ||||
| | HKDF-SHA256 | | | | | (X25519) + | | ||||
| | | | | | | HKDF-256 | | ||||
| +-------------+-------+---------+------------+--------+---------------+ | ||||
| | HPKE | TBD4 | HKDF - | yes | none | HPKE with | | ||||
| | X448 + | | SHA-512 | | | ECDH-ES | | ||||
| | HKDF-SHA512 | | | | | (X448) + | | ||||
| | | | | | | HKDF-512 | | ||||
| +-------------+-------+---------+------------+--------+---------------+ | ||||
| 9. References | 11. References | |||
| 9.1. Normative References | 11.1. Normative References | |||
| [I-D.ietf-cose-rfc8152bis-algs] | [cose-hpke] | |||
| Schaad, J., "CBOR Object Signing and Encryption (COSE): | Tschofenig, H., Housley, R., and B. Moran, "Use of Hybrid | |||
| Initial Algorithms", draft-ietf-cose-rfc8152bis-algs-12 | Public-Key Encryption (HPKE) with CBOR Object Signing and | |||
| (work in progress), September 2020. | Encryption (COSE)", October 2021, | |||
| <https://datatracker.ietf.org/doc/html/ | ||||
| draft-tschofenig-cose-hpke-00>. | ||||
| [I-D.ietf-suit-manifest] | [I-D.ietf-suit-manifest] | |||
| Moran, B., Tschofenig, H., Birkholz, H., and K. Zandberg, | Arm Limited, Arm Limited, Fraunhofer SIT, and Inria, "A | |||
| "A Concise Binary Object Representation (CBOR)-based | Concise Binary Object Representation (CBOR)-based | |||
| Serialization Format for the Software Updates for Internet | Serialization Format for the Software Updates for Internet | |||
| of Things (SUIT) Manifest", draft-ietf-suit-manifest-12 | of Things (SUIT) Manifest", draft-ietf-suit-manifest-14 | |||
| (work in progress), February 2021. | (work in progress), July 2021. | |||
| [I-D.irtf-cfrg-hpke] | [I-D.irtf-cfrg-hpke] | |||
| Barnes, R. L., Bhargavan, K., Lipp, B., and C. A. Wood, | Cisco, Inria, Inria, and Cloudflare, "Hybrid Public Key | |||
| "Hybrid Public Key Encryption", draft-irtf-cfrg-hpke-08 | Encryption", draft-irtf-cfrg-hpke-12 (work in progress), | |||
| (work in progress), February 2021. | September 2021. | |||
| [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>. | |||
| [RFC3394] Schaad, J. and R. Housley, "Advanced Encryption Standard | [RFC3394] Schaad, J. and R. Housley, "Advanced Encryption Standard | |||
| (AES) Key Wrap Algorithm", RFC 3394, DOI 10.17487/RFC3394, | (AES) Key Wrap Algorithm", RFC 3394, DOI 10.17487/RFC3394, | |||
| September 2002, <https://www.rfc-editor.org/info/rfc3394>. | September 2002, <https://www.rfc-editor.org/info/rfc3394>. | |||
| [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | |||
| RFC 8152, DOI 10.17487/RFC8152, July 2017, | RFC 8152, DOI 10.17487/RFC8152, July 2017, | |||
| <https://www.rfc-editor.org/info/rfc8152>. | <https://www.rfc-editor.org/info/rfc8152>. | |||
| [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>. | |||
| 9.2. Informative References | 11.2. Informative References | |||
| [I-D.ietf-suit-information-model] | [I-D.ietf-suit-information-model] | |||
| Moran, B., Tschofenig, H., and H. Birkholz, "A Manifest | Arm Limited, Arm Limited, and Fraunhofer SIT, "A Manifest | |||
| Information Model for Firmware Updates in IoT Devices", | Information Model for Firmware Updates in IoT Devices", | |||
| draft-ietf-suit-information-model-11 (work in progress), | draft-ietf-suit-information-model-13 (work in progress), | |||
| April 2021. | July 2021. | |||
| [RFC2630] Housley, R., "Cryptographic Message Syntax", RFC 2630, | [RFC2630] Housley, R., "Cryptographic Message Syntax", RFC 2630, | |||
| DOI 10.17487/RFC2630, June 1999, | DOI 10.17487/RFC2630, June 1999, | |||
| <https://www.rfc-editor.org/info/rfc2630>. | <https://www.rfc-editor.org/info/rfc2630>. | |||
| [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | |||
| FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | |||
| <https://www.rfc-editor.org/info/rfc4949>. | <https://www.rfc-editor.org/info/rfc4949>. | |||
| [RFC8937] Cremers, C., Garratt, L., Smyshlyaev, S., Sullivan, N., | [RFC8937] Cremers, C., Garratt, L., Smyshlyaev, S., Sullivan, N., | |||
| End of changes. 73 change blocks. | ||||
| 268 lines changed or deleted | 296 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||