idnits 2.17.1 draft-tschofenig-suit-firmware-encryption-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. == The document seems to contain a disclaimer for pre-RFC5378 work, but was first submitted on or after 10 November 2008. The disclaimer is usually necessary only for documents that revise or obsolete older RFCs, and that take significant amounts of text from those RFCs. If you can contact all authors of the source material and they are willing to grant the BCP78 rights to the IETF Trust, you can and should remove the disclaimer. Otherwise, the disclaimer is needed and you can ignore this comment. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (May 31, 2021) is 1061 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) ** Downref: Normative reference to an Informational draft: draft-ietf-cose-rfc8152bis-algs (ref. 'I-D.ietf-cose-rfc8152bis-algs') == Outdated reference: A later version (-25) exists of draft-ietf-suit-manifest-12 == Outdated reference: A later version (-12) exists of draft-irtf-cfrg-hpke-08 ** Downref: Normative reference to an Informational draft: draft-irtf-cfrg-hpke (ref. 'I-D.irtf-cfrg-hpke') ** Downref: Normative reference to an Informational RFC: RFC 3394 ** Obsolete normative reference: RFC 8152 (Obsoleted by RFC 9052, RFC 9053) == Outdated reference: A later version (-13) exists of draft-ietf-suit-information-model-11 -- Obsolete informational reference (is this intentional?): RFC 2630 (Obsoleted by RFC 3369, RFC 3370) Summary: 4 errors (**), 0 flaws (~~), 6 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 SUIT H. Tschofenig 3 Internet-Draft Arm Limited 4 Intended status: Standards Track R. Housley 5 Expires: December 2, 2021 Vigil Security 6 B. Moran 7 Arm Limited 8 May 31, 2021 10 Firmware Encryption with SUIT Manifests 11 draft-tschofenig-suit-firmware-encryption-01 13 Abstract 15 This document specifies a firmware update mechanism where the 16 firmware image is encrypted. This mechanism uses the IETF SUIT 17 manifest with key establishment provided by the hybrid public-key 18 encryption (HPKE) scheme or AES Key Wrap (AES-KW) with a pre-shared 19 key-encryption key. In either case, AES-GCM or AES-CCM is used for 20 firmware encryption. 22 Status of This Memo 24 This Internet-Draft is submitted in full conformance with the 25 provisions of BCP 78 and BCP 79. 27 Internet-Drafts are working documents of the Internet Engineering 28 Task Force (IETF). Note that other groups may also distribute 29 working documents as Internet-Drafts. The list of current Internet- 30 Drafts is at https://datatracker.ietf.org/drafts/current/. 32 Internet-Drafts are draft documents valid for a maximum of six months 33 and may be updated, replaced, or obsoleted by other documents at any 34 time. It is inappropriate to use Internet-Drafts as reference 35 material or to cite them other than as "work in progress." 37 This Internet-Draft will expire on December 2, 2021. 39 Copyright Notice 41 Copyright (c) 2021 IETF Trust and the persons identified as the 42 document authors. All rights reserved. 44 This document is subject to BCP 78 and the IETF Trust's Legal 45 Provisions Relating to IETF Documents 46 (https://trustee.ietf.org/license-info) in effect on the date of 47 publication of this document. Please review these documents 48 carefully, as they describe your rights and restrictions with respect 49 to this document. Code Components extracted from this document must 50 include Simplified BSD License text as described in Section 4.e of 51 the Trust Legal Provisions and are provided without warranty as 52 described in the Simplified BSD License. 54 This document may contain material from IETF Documents or IETF 55 Contributions published or made publicly available before November 56 10, 2008. The person(s) controlling the copyright in some of this 57 material may not have granted the IETF Trust the right to allow 58 modifications of such material outside the IETF Standards Process. 59 Without obtaining an adequate license from the person(s) controlling 60 the copyright in such materials, this document may not be modified 61 outside the IETF Standards Process, and derivative works of it may 62 not be created outside the IETF Standards Process, except to format 63 it for publication as an RFC or to translate it into languages other 64 than English. 66 Table of Contents 68 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 69 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 70 3. AES Key Wrap . . . . . . . . . . . . . . . . . . . . . . . . 4 71 4. Hybrid Public-Key Encryption (HPKE) . . . . . . . . . . . . . 7 72 5. Complete Examples . . . . . . . . . . . . . . . . . . . . . . 12 73 6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 74 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 75 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 76 8.1. Normative References . . . . . . . . . . . . . . . . . . 14 77 8.2. Informative References . . . . . . . . . . . . . . . . . 15 78 Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 16 79 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 81 1. Introduction 83 Vulnerabilities with Internet of Things (IoT) devices have raised the 84 need for a reliable and secure firmware update mechanism that is also 85 suitable for constrained devices. To protect firmware images the 86 SUIT manifest format was developed [I-D.ietf-suit-manifest]. The 87 SUIT manifest provides a bundle of metadata about the firmware for an 88 IoT device, where to find the firmware image, and the devices to 89 which it applies. 91 The SUIT information model [I-D.ietf-suit-information-model] details 92 the information that has to be offered by the SUIT manifest format. 93 In addition to offering protection against modification, which is 94 provided by a digital signature or a message authentication code, the 95 firmware image may also be afforded confidentiality using encryption. 97 Encryption prevents third parties, including attackers, from gaining 98 access to the firmware image. For example, return-oriented 99 programming (ROP) requires intimate knowledge of the target firmware 100 and that encryption makes this approach much more difficult to 101 exploit. The SUIT manifest provides the data needed for authorized 102 recipients of the firmware image to decrypt it. 104 A symmetric cryptographic key is established for encryption and 105 decryption, and that key can be applied to a SUIT manifest, firmware 106 images, or personalization data, depending on the encryption choices 107 of the firmware author. This symmetric key can be established using 108 a variety of mechanisms; this document defines two approaches for use 109 with the IETF SUIT manifest. Key establishment can be provided by 110 the hybrid public-key encryption (HPKE) scheme or AES Key Wrap (AES- 111 KW) with a pre-shared key-encryption key. These choices reduce the 112 number of possible key establishment options for interoperability of 113 different SUIT manifest implementations. The document also offers a 114 number of examples for developers. 116 2. Conventions and Terminology 118 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 119 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 120 "OPTIONAL" in this document are to be interpreted as described in 121 BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all 122 capitals, as shown here. 124 This document assumes familiarity with the IETF SUIT manifest 125 [I-D.ietf-suit-manifest] and the SUIT architecture [RFC9019]. 127 The terms "recipient" and "firmware consumer" are used 128 interchangeably. 130 Additionally, the following abbreviations are used in this document: 132 - Key Wrap (KW), defined in RFC 3394 [RFC3394] for use with AES. 134 - Key-encryption key / key-encrypting key (KEK), a term defined in 135 RFC 1949 [RFC1949]. 137 - Content-encryption key (CEK), a term defined in RFC 2630 138 [RFC2630]. 140 - Hybrid Public Key Encryption (HPKE), defined in 141 [I-D.irtf-cfrg-hpke]. 143 3. AES Key Wrap 145 The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 146 [RFC3394], and it can be used to encrypt a randomly generated 147 content-encryption key (CEK) with a pre-shared key-encryption key 148 (KEK). The COSE conventions for using AES-KW are specified in 149 Section 12.2.1 of [RFC8152]. The encrypted CEK is carried in the 150 COSE_recipient structure alongside the information needed for AES-KW. 151 The COSE_recipient structure, which is a substructure of the 152 COSE_Encrypt, contains the CEK encrypted by the KEK. When the 153 firmware image is encrypted for use by multiple recipients, the 154 COSE_recipient structure will contain one encrypted CEK if all of the 155 authorized recipients have access to the KEK. 157 However, the COSE_recipient structure can contain the same CEK 158 encrypted with many different KEKs if needed to reach all of the 159 authorized recipients. 161 Note that the AES-KW algorithm, as defined in Section 2.2.3.1 of 162 [RFC3394], does not have public parameters that vary on a per- 163 invocation basis. Hence, the protected structure in the 164 COSE_recipient is a byte string of zero length. 166 The COSE_Encrypt conveys information for encrypting the firmware 167 image, which includes information like the algorithm and the IV, even 168 though the firmware image is not embedded in the 169 COSE_Encrypt.ciphertext itself since it conveyed as detached content. 171 The CDDL for the COSE_Encrypt_Tagged structure is shown in Figure 1. 173 COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) 175 SUIT_Encryption_Info = COSE_Encrypt_Tagged 177 COSE_Encrypt = [ 178 protected : bstr .cbor outer_header_map_protected, 179 unprotected : outer_header_map_unprotected, 180 ciphertext : null, ; because of detached ciphertext 181 recipients : [ + COSE_recipient ] 182 ] 184 outer_header_map_protected = 185 { 186 1 => int, ; algorithm identifier 187 * label =values ; extension point 188 } 190 outer_header_map_unprotected = 191 { 192 5 => bstr, ; IV 193 * label =values ; extension point 194 } 196 COSE_recipient = [ 197 protected : bstr .size 0, 198 unprotected : recipient_header_map, 199 ciphertext : bstr ; CEK encrypted with KEK 200 ] 202 recipient_header_map = 203 { 204 1 => int, ; algorithm identifier 205 4 => bstr, ; key identifier 206 * label =values ; extension point 207 } 209 Figure 1: CDDL for AES Key Wrap-based Firmware Encryption 211 The COSE specification requires a consistent byte stream for the 212 authenticated data structure to be created, which is defined as shown 213 in Figure 2. 215 Enc_structure = [ 216 context : "Encrypt", 217 protected : empty_or_serialized_map, 218 external_aad : bstr 219 ] 221 Figure 2: CDDL for Enc_structure Data Structure 223 As it can be seen in the CDDL in Figure 1, there are two protected 224 fields and the 'protected' field in the Enc_structure, see Figure 2, 225 refers to the outer protected field, not the protected field of the 226 COSE_recipient structure. 228 The value of the external_aad is set to null. 230 The following example illustrates the use of the AES-KW algorithm 231 with AES-128. 233 We use the following parameters in this example: 235 - IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, 236 0x3b, 0x80 238 - KEK: "aaaaaaaaaaaaaaaa" 240 - KID: "kid-1" 242 - Plaintext Firmware: "This is a real firmware image." 244 - Firmware (hex): 245 546869732069732061207265616C206669726D7761726520696D6167652E 247 The COSE_Encrypt structure in hex format is (with a line break 248 inserted): 250 D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D 251 315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D 253 The resulting COSE_Encrypt structure in a dignostic format is shown 254 in Figure 3. 256 96( 257 [ 258 // protected field with alg=AES-GCM-128 259 h'A10101', 260 { 261 // unprotected field with iv 262 5: h'26682306D4FB28CA01B43B80' 263 }, 264 // null because of detached ciphertext 265 null, 266 [ // recipients array 267 h'', // protected field 268 { // unprotected field 269 1: -3, // alg=A128KW 270 4: h'6B69642D31' // key id 271 }, 272 // CEK encrypted with KEK 273 h'AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D' 274 ] 275 ] 276 ) 278 Figure 3: COSE_Encrypt Example for AES Key Wrap 280 The CEK was "4C805F1587D624ED5E0DBB7A7F7FA7EB" and the encrypted 281 firmware was: 283 A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260 284 F9425105F67F0FB6C92248AE289A025258F06C2AD70415 286 4. Hybrid Public-Key Encryption (HPKE) 288 Hybrid public-key encryption (HPKE) [I-D.irtf-cfrg-hpke] is a scheme 289 that provides public key encryption of arbitrary-sized plaintexts 290 given a recipient's public key. 292 For use with firmware encryption the scheme works as follows: The 293 firmware author uses HPKE, which internally utilizes a non- 294 interactive ephemeral-static Diffie-Hellman exchange to derive a 295 shared secret, which is then used to encrypt plaintext. In the 296 firmware encryption scenario, the plaintext passed to HPKE for 297 encryption is a randomly generated CEK. The output of the HPKE 298 operation is therefore the encrypted CEK along with HPKE encapsulated 299 key (i.e. the ephemeral ECDH public key of the author). The CEK is 300 then used to encrypt the firmware. 302 Only the holder of recipient's private key can decapsulate the CEK to 303 decrypt the firmware. Key generation is influced by additional 304 parameters, such as identity information. 306 This approach allows us to have all recipients to use the same CEK to 307 encrypt the firmware image, in case there are multiple recipients, to 308 fulfill a requirement for the efficient distribution of firmware 309 images using a multicast or broadcast protocol. 311 The CDDL for the COSE_Encrypt structure as used with HPKE is shown in 312 Figure 4. 314 COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) 316 SUIT_Encryption_Info = COSE_Encrypt_Tagged 318 COSE_Encrypt = [ 319 protected : bstr .cbor header_map, ; must contain alg 320 unprotected : header_map, ; must contain iv 321 ciphertext : null, ; because of detached ciphertext 322 recipients : [ + COSE_recipient_outer ] 323 ] 325 COSE_recipient_outer = [ 326 protected : bstr .size 0, 327 unprotected : header_map, ; must contain alg 328 ciphertext : bstr ; CEK encrypted based on HPKE algo 329 recipients : [ + COSE_recipient_inner ] 330 ] 332 COSE_recipient_inner = [ 333 protected : bstr .cbor header_map, ; must contain alg 334 unprotected : header_map, ; must contain kid, 335 ciphertext : bstr ; CEK encrypted based on HPKE algo 336 recipients : null 337 ] 339 header_map = { 340 Generic_Headers, 341 * label =values, 342 } 344 Generic_Headers = ( 345 ? 1 => int, ; algorithm identifier 346 ? 2 => crv, ; EC identifier 347 ? 4 => bstr, ; key identifier 348 ? 5 => bstr ; IV 349 ) 351 Figure 4: CDDL for HPKE-based COSE_Encrypt Structure 353 The COSE_Encrypt structure in Figure 4 requires the encrypted CEK and 354 the ephemeral public key of the firmare author to be generated. This 355 is accomplished with the HPKE encryption function as shown in 356 Figure 5. 358 CEK = random() 359 pkR = DeserializePublicKey(recipient_public_key) 360 info = "cose hpke" || 0x00 || COSE_KDF_Context 361 enc, context = SetupBaseS(pkR, info) 362 ciphertext = context.Seal(null, CEK) 364 Figure 5 366 Legend: 368 - The functions DeserializePublicKey(), SetupBaseS() and Seal() are 369 defined in HPKE [I-D.irtf-cfrg-hpke]. 371 - CEK is a random byte sequence of keysize length whereby keysize 372 corresponds to the size of the indicated symmetric encryption 373 algorithm used for firmware encryption. For example, AES-128-GCM 374 requires a 16 byte key. The CEK would therefore be 16 bytes long. 376 - 'recipient_public_key' represents the public key of the recipient. 378 - 'info' is a data structure described below used as input to the 379 key derivation internal to the HPKE algorithm. In addition to the 380 constant prefix, the COSE_KDF_Context structure is used. The 381 COSE_KDF_Context is shown in Figure 6. 383 The result of the above-described operation is the encrypted CEK 384 (denoted as ciphertext) and the enc - the HPKE encapsulated key (i.e. 385 the ephemeral ECDH public key of the author). 387 PartyInfo = ( 388 identity : bstr, 389 nonce : nil, 390 other : nil 391 ) 393 COSE_KDF_Context = [ 394 AlgorithmID : int, 395 PartyUInfo : [ PartyInfo ], 396 PartyVInfo : [ PartyInfo ], 397 SuppPubInfo : [ 398 keyDataLength : uint, 399 protected : empty_or_serialized_map 400 ], 401 ] 403 Figure 6: COSE_KDF_Context Data Structure 405 Notes: 407 - PartyUInfo.identity corresponds to the kid found in the 408 COSE_Sign_Tagged or COSE_Sign1_Tagged structure (when a digital 409 signature is used. When utilizing a MAC, then the kid is found in 410 the COSE_Mac_Tagged or COSE_Mac0_Tagged structure. 412 - PartyVInfo.identity corresponds to the kid used for the respective 413 recipient from the inner-most recipients array. 415 - The value in the AlgorithmID field corresponds to the alg 416 parameter in the protected structure in the inner-most recipients 417 array. 419 - keyDataLength is set to the number of bits of the desired output 420 value. 422 - protected refers to the protected structure of the inner-most 423 array. 425 The author encrypts the firmware using the CEK with the selected 426 algorithm. 428 The recipient decrypts the received ciphertext, i.e. the encrypted 429 CEK, using two input parameters: 431 - the private key skR corresponding to the public key pkR used by 432 the author when creating the manifest. 434 - the HPKE encapsulated key (i.e. ephemeral ECDH public key) created 435 by the author. 437 If the HPKE operation is successful, the recipient obtains the CEK 438 and can decrypt the firmware. 440 Figure 7 shows the HPKE computations performed by the recipient for 441 decryption. 443 info = "cose hpke" || 0x00 || COSE_KDF_Context 444 context = SetupBaseR(ciphertext, skR, info) 445 CEK = context.Open(null, ciphertext) 447 Figure 7 449 An example of the COSE_Encrypt structure using the HPKE scheme is 450 shown in Figure 8. 452 96( 453 [ 454 // protected field with alg=AES-GCM-128 455 h'A10101', 456 { // unprotected field with iv 457 5: h'26682306D4FB28CA01B43B80' 458 }, 459 // null because of detached ciphertext 460 null, 461 [ // COSE_recipient_outer 462 h'', // empty protected field 463 { // unprotected field with ... 464 1: 1 // alg=A128GCM 465 }, 466 // Encrypted CEK 467 h'FA55A50CF110908DA6443149F2C2062011A7D8333A72721A', 468 [ // COSE_recipient_inner 469 // protected field with alg HPKE/P-256+HKDF-256 (new) 470 h'A1013818', 471 { // unprotected field with ... 472 // HPKE encapsulated key 473 -1: h'A4010220012158205F...979D51687187510C445', 474 // kid for recipient static ECDH public key 475 4: h'6B69642D31' 476 }, 477 // empty ciphertext 478 null 479 ] 480 ] 481 ] 482 ) 484 Figure 8: COSE_Encrypt Example for HPKE 486 5. Complete Examples 488 TBD: Add example for complete manifest here (which also includes the 489 digital signature). TBD: Add multiple recipient example as well. 490 TBD: Add encryption of manifest (in addition of firmware encryption). 492 6. Security Considerations 494 The algorithms described in this document assume that the firmware 495 author 497 - has either shared a key-encryption key (KEK) with the firmware 498 consumer (for use with the AES-Key Wrap scheme), or 500 - is in possession of the public key of the firmware consumer (for 501 use with HPKE). 503 Both cases require some upfront communication interaction, which is 504 not part of the SUIT manifest. This interaction is likely be 505 provided by a IoT device management solution, as described in 506 [RFC9019]. 508 For AES-Key Wrap to provide high security it is important that the 509 KEK is of high entropy, and that implementations protect the KEK from 510 disclosure. Compromise of the KEK may result in the disclosure of 511 all key data protected with that KEK. 513 Since the CEK is randomly generated, it must be ensured that the 514 guidelines for random number generations are followed, see [RFC8937]. 516 7. IANA Considerations 518 This document requests IANA to create new entries in the COSE 519 Algorithms registry established with [I-D.ietf-cose-rfc8152bis-algs]. 521 +-------------+-------+---------+------------+--------+---------------+ 522 | Name | Value | KDF | Ephemeral- | Key | Description | 523 | | | | Static | Wrap | | 524 +-------------+-------+---------+------------+--------+---------------+ 525 | HPKE/P-256+ | TBD1 | HKDF - | yes | none | HPKE with | 526 | HKDF-256 | | SHA-256 | | | ECDH-ES | 527 | | | | | | (P-256) + | 528 | | | | | | HKDF-256 | 529 +-------------+-------+---------+------------+--------+---------------+ 530 | HPKE/P-384+ | TBD2 | HKDF - | yes | none | HPKE with | 531 | HKDF-SHA384 | | SHA-384 | | | ECDH-ES | 532 | | | | | | (P-384) + | 533 | | | | | | HKDF-384 | 534 +-------------+-------+---------+------------+--------+---------------+ 535 | HPKE/P-521+ | TBD3 | HKDF - | yes | none | HPKE with | 536 | HKDF-SHA521 | | SHA-521 | | | ECDH-ES | 537 | | | | | | (P-521) + | 538 | | | | | | HKDF-521 | 539 +-------------+-------+---------+------------+--------+---------------+ 540 | HPKE | TBD4 | HKDF - | yes | none | HPKE with | 541 | X25519 + | | SHA-256 | | | ECDH-ES | 542 | HKDF-SHA256 | | | | | (X25519) + | 543 | | | | | | HKDF-256 | 544 +-------------+-------+---------+------------+--------+---------------+ 545 | HPKE | TBD4 | HKDF - | yes | none | HPKE with | 546 | X448 + | | SHA-512 | | | ECDH-ES | 547 | HKDF-SHA512 | | | | | (X448) + | 548 | | | | | | HKDF-512 | 549 +-------------+-------+---------+------------+--------+---------------+ 551 8. References 553 8.1. Normative References 555 [I-D.ietf-cose-rfc8152bis-algs] 556 August Cellars, "CBOR Object Signing and Encryption 557 (COSE): Initial Algorithms", draft-ietf-cose-rfc8152bis- 558 algs-12 (work in progress), September 2020. 560 [I-D.ietf-suit-manifest] 561 Arm Limited, Arm Limited, Fraunhofer SIT, and Inria, "A 562 Concise Binary Object Representation (CBOR)-based 563 Serialization Format for the Software Updates for Internet 564 of Things (SUIT) Manifest", draft-ietf-suit-manifest-12 565 (work in progress), February 2021. 567 [I-D.irtf-cfrg-hpke] 568 Cisco, Inria, Inria, and Cloudflare, "Hybrid Public Key 569 Encryption", draft-irtf-cfrg-hpke-08 (work in progress), 570 February 2021. 572 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 573 Requirement Levels", BCP 14, RFC 2119, 574 DOI 10.17487/RFC2119, March 1997, 575 . 577 [RFC3394] Schaad, J. and R. Housley, "Advanced Encryption Standard 578 (AES) Key Wrap Algorithm", RFC 3394, DOI 10.17487/RFC3394, 579 September 2002, . 581 [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", 582 RFC 8152, DOI 10.17487/RFC8152, July 2017, 583 . 585 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 586 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 587 May 2017, . 589 8.2. Informative References 591 [I-D.ietf-suit-information-model] 592 Arm Limited, Arm Limited, and Fraunhofer SIT, "A Manifest 593 Information Model for Firmware Updates in IoT Devices", 594 draft-ietf-suit-information-model-11 (work in progress), 595 April 2021. 597 [RFC1949] Ballardie, A., "Scalable Multicast Key Distribution", 598 RFC 1949, DOI 10.17487/RFC1949, May 1996, 599 . 601 [RFC2630] Housley, R., "Cryptographic Message Syntax", RFC 2630, 602 DOI 10.17487/RFC2630, June 1999, 603 . 605 [RFC8937] Cremers, C., Garratt, L., Smyshlyaev, S., Sullivan, N., 606 and C. Wood, "Randomness Improvements for Security 607 Protocols", RFC 8937, DOI 10.17487/RFC8937, October 2020, 608 . 610 [RFC9019] Moran, B., Tschofenig, H., Brown, D., and M. Meriac, "A 611 Firmware Update Architecture for Internet of Things", 612 RFC 9019, DOI 10.17487/RFC9019, April 2021, 613 . 615 Appendix A. Acknowledgements 617 We would like to thank Henk Birkholz for his feedback on the CDDL 618 description in this document. Additionally, we would like to thank 619 Michael Richardson and Carsten Bormann for their review feedback. 621 Authors' Addresses 623 Hannes Tschofenig 624 Arm Limited 626 EMail: hannes.tschofenig@arm.com 628 Russ Housley 629 Vigil Security, LLC 631 EMail: housley@vigilsec.com 633 Brendan Moran 634 Arm Limited 636 EMail: Brendan.Moran@arm.com