Internet-Draft | Firmware Encryption | May 2021 |
Tschofenig, et al. | Expires 26 November 2021 | [Page] |
This document specifies a firmware update mechanism where the firmware image is encrypted. This mechanism uses the IETF SUIT manifest with key establishment provided by the hybrid public-key encryption (HPKE) scheme or AES Key Wrap (AES-KW) with a pre-shared key-encryption key. In either case, AES-GCM or AES-CCM is used for firmware encryption.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
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 and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 26 November 2021.¶
Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.¶
Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. To protect firmware images the SUIT manifest format was developed [I-D.ietf-suit-manifest]. The SUIT manifest provides a bundle of metadata about the firmware for an IoT device, where to find the firmware image, and the devices to which it applies.¶
The SUIT information model [I-D.ietf-suit-information-model] details the information that has to be offered by the SUIT manifest format. In addition to offering protection against modification, which is provided by a digital signature or a message authentication code, the firmware image may also be confidentiality protected using encryption.¶
Encryption prevents third parties, including attackers, from gaining access to the firmware image. This might be done to protect confidential information or prevent discovery of vulnerabilities through reverse engineering. The SUIT manifest provides the data needed for authorized recipients of the firmware image to decrypt it.¶
A 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. 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 for interoperability of different SUIT manifest implementations. The document also offers a number of examples for developers.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document assumes familiarity with the IETF SUIT manifest [I-D.ietf-suit-manifest] and the SUIT architecture [RFC9019].¶
The terms "recipient" and "firmware consumer" are used interchangeably.¶
The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 [RFC3394], and it can be used to encrypt a randomly generated content-encryption key (CEK) with a pre-shared key-encryption key (KEK). The COSE conventions for using AES-KW are specified in Section 12.2.1 of [RFC8152]. The encrypted CEK is carried in the COSE_recipient structure alongside the information needed for AES-KW. The COSE_recipient structure, which is a substructure of the COSE_Encrypt, contains the CEK encrypted by the KEK. When the firmware image is encrypted for use by multiple recipients, the COSE_recipient structure will contain one encrypted CEK if all of the authorized recipients have access to the KEK.¶
However, the COSE_recipient structure can contain the same CEK encrypted with many different KEKs if needed to reach all of the authorized recipients.¶
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-invocation basis. Hence, the protected structure in the COSE_recipient is a byte string of zero length.¶
The COSE_Encrypt conveys information for encrypting the firmware image, which includes information like the algorithm and the IV, even though the firmware image is not embedded in the COSE_Encrypt.ciphertext itself since it conveyed as detached content.¶
The CDDL for the COSE_Encrypt_Tagged structure is shown in Figure 1.¶
The COSE specification requires a consistent byte stream for the authenticated data structure to be created, which is defined as shown in Figure 2.¶
As it can be seen in the CDDL in Figure 1, there are two protected fields and the 'protected' field in the Enc_structure, see Figure 2, refers to the outer protected field, not the protected field of the COSE_recipient structure.¶
The value of the external_aad is set to null.¶
The following example illustrates the use of the AES-KW algorithm with AES-128.¶
We use the following parameters in this example:¶
The COSE_Encrypt structure in hex format is (with a line break inserted):¶
D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D 315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D¶
The resulting COSE_Encrypt structure in a dignostic format is shown in Figure 3.¶
The CEK was "4C805F1587D624ED5E0DBB7A7F7FA7EB" and the encrypted firmware was:¶
A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260 F9425105F67F0FB6C92248AE289A025258F06C2AD70415¶
Hybrid public-key encryption (HPKE) [I-D.irtf-cfrg-hpke] is a scheme that provides public key encryption of arbitrary-sized plaintexts given a recipient's public key.¶
For use with firmware encryption the scheme works as follows: The firmware author uses HPKE, which internally utilizes a non-interactive ephemeral-static Diffie-Hellman exchange to derive a shared secret, which is then used to encrypt plaintext. In the firmware encryption scenario, the plaintext passed to HPKE for encryption is a randomly generated CEK. The output of the HPKE operation is therefore the encrypted CEK along with HPKE encapsulated 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 decrypt the firmware. Key generation is influced by additional parameters, such as identity information.¶
This approach allows us to have all recipients to use the same CEK to encrypt the firmware image, in case there are multiple recipients, to fulfill a requirement for the efficient distribution of firmware images using a multicast or broadcast protocol.¶
The CDDL for the COSE_Encrypt structure as used with HPKE is shown in Figure 4.¶
The COSE_Encrypt structure in Figure 4 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 here:¶
CEK = random() pkR = DeserializePublicKey(recipient_public_key) info = "cose hpke" || 0x00 || COSE_KDF_Context enc, context = SetupBaseS(pkR, info) ciphertext = context.Seal(null, CEK)¶
Legend:¶
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).¶
Notes:¶
The author encrypts the firmware using the CEK with the selected algorithm.¶
The recipient decrypts the received ciphertext, i.e. the encrypted CEK, using two input parameters:¶
If the HPKE operation is successful, the recipient obtains the CEK and can decrypt the firmware.¶
The following text shows the HPKE operations performed by the recipient:¶
info = "cose hpke" || 0x00 || COSE_KDF_Context context = SetupBaseR(ciphertext, skR, info) CEK = context.Open(null, ciphertext)¶
An example of the COSE_Encrypt structure using the HPKE scheme is shown in Figure 6.¶
TBD: Add example for complete manifest here (which also includes the digital signature). TBD: Add multiple recipient example as well. TBD: Add encryption of manifest (in addition of firmware encryption).¶
This entire document is about security.¶
The algorithms described in this document assume that the firmware author¶
Both cases require some upfront communication interaction, which is not part of the SUIT manifest.¶
This document requests IANA to create new entries in the COSE Algorithms registry established with [I-D.ietf-cose-rfc8152bis-algs].¶
+-------------+-------+---------+------------+--------+---------------+ | 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 | +-------------+-------+---------+------------+--------+---------------+¶
We would like to thank Henk Birkholz for his feedback on the CDDL description in this document.¶