< draft-ietf-suit-manifest-12.txt   draft-ietf-suit-manifest-13.txt >
SUIT B. Moran SUIT B. Moran
Internet-Draft H. Tschofenig Internet-Draft H. Tschofenig
Intended status: Standards Track Arm Limited Intended status: Standards Track Arm Limited
Expires: August 26, 2021 H. Birkholz Expires: November 26, 2021 H. Birkholz
Fraunhofer SIT Fraunhofer SIT
K. Zandberg K. Zandberg
Inria Inria
February 22, 2021 May 25, 2021
A Concise Binary Object Representation (CBOR)-based Serialization Format A Concise Binary Object Representation (CBOR)-based Serialization Format
for the Software Updates for Internet of Things (SUIT) Manifest for the Software Updates for Internet of Things (SUIT) Manifest
draft-ietf-suit-manifest-12 draft-ietf-suit-manifest-13
Abstract Abstract
This specification describes the format of a manifest. A manifest is This specification describes the format of a manifest. A manifest is
a bundle of metadata about code/data obtained by a recipient (chiefly a bundle of metadata about code/data obtained by a recipient (chiefly
the firmware for an IoT device), where to find the that code/data, the firmware for an IoT device), where to find the that code/data,
the devices to which it applies, and cryptographic information the devices to which it applies, and cryptographic information
protecting the manifest. Software updates and Trusted Invocation protecting the manifest. Software updates and Trusted Invocation
both tend to use sequences of common operations, so the manifest both tend to use sequences of common operations, so the manifest
encodes those sequences of operations, rather than declaring the encodes those sequences of operations, rather than declaring the
skipping to change at page 1, line 42 skipping to change at page 1, line 42
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 August 26, 2021. This Internet-Draft will expire on November 26, 2021.
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 3, line 27 skipping to change at page 3, line 27
8.6.1. suit-manifest-version . . . . . . . . . . . . . . . . 38 8.6.1. suit-manifest-version . . . . . . . . . . . . . . . . 38
8.6.2. suit-manifest-sequence-number . . . . . . . . . . . . 38 8.6.2. suit-manifest-sequence-number . . . . . . . . . . . . 38
8.6.3. suit-reference-uri . . . . . . . . . . . . . . . . . 38 8.6.3. suit-reference-uri . . . . . . . . . . . . . . . . . 38
8.6.4. suit-text . . . . . . . . . . . . . . . . . . . . . . 38 8.6.4. suit-text . . . . . . . . . . . . . . . . . . . . . . 38
8.7. text-version-required . . . . . . . . . . . . . . . . . . 40 8.7. text-version-required . . . . . . . . . . . . . . . . . . 40
8.7.1. suit-coswid . . . . . . . . . . . . . . . . . . . . . 40 8.7.1. suit-coswid . . . . . . . . . . . . . . . . . . . . . 40
8.7.2. suit-common . . . . . . . . . . . . . . . . . . . . . 40 8.7.2. suit-common . . . . . . . . . . . . . . . . . . . . . 40
8.7.3. SUIT_Command_Sequence . . . . . . . . . . . . . . . . 42 8.7.3. SUIT_Command_Sequence . . . . . . . . . . . . . . . . 42
8.7.4. Reporting Policy . . . . . . . . . . . . . . . . . . 44 8.7.4. Reporting Policy . . . . . . . . . . . . . . . . . . 44
8.7.5. SUIT_Parameters . . . . . . . . . . . . . . . . . . . 46 8.7.5. SUIT_Parameters . . . . . . . . . . . . . . . . . . . 46
8.7.6. SUIT_Condition . . . . . . . . . . . . . . . . . . . 56 8.7.6. SUIT_Condition . . . . . . . . . . . . . . . . . . . 57
8.7.7. SUIT_Directive . . . . . . . . . . . . . . . . . . . 60 8.7.7. SUIT_Directive . . . . . . . . . . . . . . . . . . . 61
8.7.8. suit-directive-garbage-collect . . . . . . . . . . . 67 8.7.8. suit-directive-garbage-collect . . . . . . . . . . . 68
8.7.9. Integrity Check Values . . . . . . . . . . . . . . . 68 8.7.9. Integrity Check Values . . . . . . . . . . . . . . . 69
8.8. Severable Elements . . . . . . . . . . . . . . . . . . . 68 8.8. Severable Elements . . . . . . . . . . . . . . . . . . . 69
9. Access Control Lists . . . . . . . . . . . . . . . . . . . . 69 9. Access Control Lists . . . . . . . . . . . . . . . . . . . . 70
10. SUIT Digest Container . . . . . . . . . . . . . . . . . . . . 69 10. SUIT Digest Container . . . . . . . . . . . . . . . . . . . . 70
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 70
11.1. SUIT Commands . . . . . . . . . . . . . . . . . . . . . 70 11.1. SUIT Commands . . . . . . . . . . . . . . . . . . . . . 71
11.2. SUIT Parameters . . . . . . . . . . . . . . . . . . . . 72 11.2. SUIT Parameters . . . . . . . . . . . . . . . . . . . . 73
11.3. SUIT Text Values . . . . . . . . . . . . . . . . . . . . 73 11.3. SUIT Text Values . . . . . . . . . . . . . . . . . . . . 74
11.4. SUIT Component Text Values . . . . . . . . . . . . . . . 73 11.4. SUIT Component Text Values . . . . . . . . . . . . . . . 74
11.5. SUIT Algorithm Identifiers . . . . . . . . . . . . . . . 73 11.5. SUIT Algorithm Identifiers . . . . . . . . . . . . . . . 74
11.5.1. SUIT Digest Algorithm Identifiers . . . . . . . . . 73 11.5.1. SUIT Digest Algorithm Identifiers . . . . . . . . . 74
11.5.2. SUIT Compression Algorithm Identifiers . . . . . . . 74 11.5.2. SUIT Compression Algorithm Identifiers . . . . . . . 75
11.5.3. Unpack Algorithms . . . . . . . . . . . . . . . . . 74 11.5.3. Unpack Algorithms . . . . . . . . . . . . . . . . . 75
12. Security Considerations . . . . . . . . . . . . . . . . . . . 75 12. Security Considerations . . . . . . . . . . . . . . . . . . . 76
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 75 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 76
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 75 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 76
14.1. Normative References . . . . . . . . . . . . . . . . . . 75 14.1. Normative References . . . . . . . . . . . . . . . . . . 76
14.2. Informative References . . . . . . . . . . . . . . . . . 76 14.2. Informative References . . . . . . . . . . . . . . . . . 77
Appendix A. A. Full CDDL . . . . . . . . . . . . . . . . . . . . 78 Appendix A. A. Full CDDL . . . . . . . . . . . . . . . . . . . . 79
Appendix B. B. Examples . . . . . . . . . . . . . . . . . . . . 87 Appendix B. B. Examples . . . . . . . . . . . . . . . . . . . . 88
B.1. Example 0: Secure Boot . . . . . . . . . . . . . . . . . 88 B.1. Example 0: Secure Boot . . . . . . . . . . . . . . . . . 89
B.2. Example 1: Simultaneous Download and Installation of B.2. Example 1: Simultaneous Download and Installation of
Payload . . . . . . . . . . . . . . . . . . . . . . . . . 90 Payload . . . . . . . . . . . . . . . . . . . . . . . . . 91
B.3. Example 2: Simultaneous Download, Installation, Secure B.3. Example 2: Simultaneous Download, Installation, Secure
Boot, Severed Fields . . . . . . . . . . . . . . . . . . 92 Boot, Severed Fields . . . . . . . . . . . . . . . . . . 93
B.4. Example 3: A/B images . . . . . . . . . . . . . . . . . . 96 B.4. Example 3: A/B images . . . . . . . . . . . . . . . . . . 96
B.5. Example 4: Load and Decompress from External Storage . . 99 B.5. Example 4: Load and Decompress from External Storage . . 99
B.6. Example 5: Two Images . . . . . . . . . . . . . . . . . . 102 B.6. Example 5: Two Images . . . . . . . . . . . . . . . . . . 102
Appendix C. C. Design Rational . . . . . . . . . . . . . . . . . 105 Appendix C. C. Design Rational . . . . . . . . . . . . . . . . . 105
C.1. C.1 Design Rationale: Envelope . . . . . . . . . . . . . 106 C.1. C.1 Design Rationale: Envelope . . . . . . . . . . . . . 106
C.2. C.2 Byte String Wrappers . . . . . . . . . . . . . . . . 107 C.2. C.2 Byte String Wrappers . . . . . . . . . . . . . . . . 107
Appendix D. D. Implementation Conformance Matrix . . . . . . . . 107 Appendix D. D. Implementation Conformance Matrix . . . . . . . . 107
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 111 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 111
1. Introduction 1. Introduction
skipping to change at page 51, line 9 skipping to change at page 51, line 9
8.7.5.9. suit-parameter-component-offset 8.7.5.9. suit-parameter-component-offset
This parameter sets the offset in a component. Some components This parameter sets the offset in a component. Some components
support multiple possible Slots (offsets into a storage area). This support multiple possible Slots (offsets into a storage area). This
parameter describes the intended Slot to use, identified by its parameter describes the intended Slot to use, identified by its
offset into the component's storage area. This offset MUST be offset into the component's storage area. This offset MUST be
encoded as a positive integer. encoded as a positive integer.
8.7.5.10. suit-parameter-encryption-info 8.7.5.10. suit-parameter-encryption-info
Encryption Info defines the mechanism that Fetch or Copy should use Encryption Info defines the keys and algorithm information Fetch or
to decrypt the data they transfer. SUIT_Parameter_Encryption_Info is Copy has to use to decrypt the confidentiality protected data.
encoded as a COSE_Encrypt_Tagged or a COSE_Encrypt0_Tagged, wrapped SUIT_Parameter_Encryption_Info is encoded as a COSE_Encrypt_Tagged
in a bstr. structure wrapped in a bstr. A separate document will profile the
COSE specification for use of manifest and firmware encrytion.
8.7.5.11. suit-parameter-compression-info 8.7.5.11. suit-parameter-compression-info
SUIT_Compression_Info defines any information that is required for a SUIT_Compression_Info defines any information that is required for a
Recipient to perform decompression operations. SUIT_Compression_Info Recipient to perform decompression operations. SUIT_Compression_Info
is a map containing this data. The only element defined for the map is a map containing this data. The only element defined for the map
in this specification is the suit-compression-algorithm. This in this specification is the suit-compression-algorithm. This
document defines the following suit-compression-algorithm's: ZLIB document defines the following suit-compression-algorithm's: ZLIB
[RFC1950], Brotli [RFC7932], and ZSTD [I-D.kucherawy-rfc8478bis]. [RFC1950], Brotli [RFC7932], and ZSTD [I-D.kucherawy-rfc8478bis].
skipping to change at page 76, line 36 skipping to change at page 77, line 36
<https://en.wikipedia.org/wiki/COFF>. <https://en.wikipedia.org/wiki/COFF>.
[ELF] Wikipedia, ., "Executable and Linkable Format (ELF)", [ELF] Wikipedia, ., "Executable and Linkable Format (ELF)",
2020, <https://en.wikipedia.org/wiki/ 2020, <https://en.wikipedia.org/wiki/
Executable_and_Linkable_Format>. Executable_and_Linkable_Format>.
[HEX] Wikipedia, ., "Intel HEX", 2020, [HEX] Wikipedia, ., "Intel HEX", 2020,
<https://en.wikipedia.org/wiki/Intel_HEX>. <https://en.wikipedia.org/wiki/Intel_HEX>.
[I-D.ietf-cbor-tags-oid] [I-D.ietf-cbor-tags-oid]
Bormann, C. and S. Leonard, "Concise Binary Object Bormann, C., "Concise Binary Object Representation (CBOR)
Representation (CBOR) Tags for Object Identifiers", draft- Tags for Object Identifiers", draft-ietf-cbor-tags-oid-06
ietf-cbor-tags-oid-04 (work in progress), January 2021. (work in progress), March 2021.
[I-D.ietf-sacm-coswid] [I-D.ietf-sacm-coswid]
Birkholz, H., Fitzgerald-McKay, J., Schmidt, C., and D. Birkholz, H., Fitzgerald-McKay, J., Schmidt, C., and D.
Waltermire, "Concise Software Identification Tags", draft- Waltermire, "Concise Software Identification Tags", draft-
ietf-sacm-coswid-16 (work in progress), November 2020. ietf-sacm-coswid-17 (work in progress), February 2021.
[I-D.ietf-suit-architecture] [I-D.ietf-suit-architecture]
Moran, B., Tschofenig, H., Brown, D., and M. Meriac, "A Moran, B., Tschofenig, H., Brown, D., and M. Meriac, "A
Firmware Update Architecture for Internet of Things", Firmware Update Architecture for Internet of Things",
draft-ietf-suit-architecture-15 (work in progress), draft-ietf-suit-architecture-16 (work in progress),
January 2021. January 2021.
[I-D.ietf-suit-information-model] [I-D.ietf-suit-information-model]
Moran, B., Tschofenig, H., and H. Birkholz, "An Moran, B., Tschofenig, H., and H. Birkholz, "A Manifest
Information Model for Firmware Updates in IoT Devices", Information Model for Firmware Updates in IoT Devices",
draft-ietf-suit-information-model-08 (work in progress), draft-ietf-suit-information-model-11 (work in progress),
October 2020. April 2021.
[I-D.ietf-teep-architecture] [I-D.ietf-teep-architecture]
Pei, M., Tschofenig, H., Thaler, D., and D. Wheeler, Pei, M., Tschofenig, H., Thaler, D., and D. Wheeler,
"Trusted Execution Environment Provisioning (TEEP) "Trusted Execution Environment Provisioning (TEEP)
Architecture", draft-ietf-teep-architecture-13 (work in Architecture", draft-ietf-teep-architecture-14 (work in
progress), November 2020. progress), February 2021.
[I-D.kucherawy-rfc8478bis] [I-D.kucherawy-rfc8478bis]
Collet, Y. and M. Kucherawy, "Zstandard Compression and Collet, Y. and M. S. Kucherawy, "Zstandard Compression and
the application/zstd Media Type", draft-kucherawy- the 'application/zstd' Media Type", draft-kucherawy-
rfc8478bis-06 (work in progress), December 2020. rfc8478bis-06 (work in progress), December 2020.
[RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format [RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format
Specification version 3.3", RFC 1950, Specification version 3.3", RFC 1950,
DOI 10.17487/RFC1950, May 1996, DOI 10.17487/RFC1950, May 1996,
<https://www.rfc-editor.org/info/rfc1950>. <https://www.rfc-editor.org/info/rfc1950>.
[RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for
Constrained-Node Networks", RFC 7228, Constrained-Node Networks", RFC 7228,
DOI 10.17487/RFC7228, May 2014, DOI 10.17487/RFC7228, May 2014,
skipping to change at page 78, line 19 skipping to change at page 79, line 19
definition. definition.
SUIT_Envelope_Tagged = #6.48(SUIT_Envelope) SUIT_Envelope_Tagged = #6.48(SUIT_Envelope)
SUIT_Envelope = { SUIT_Envelope = {
? suit-delegation => bstr .cbor SUIT_Delegation, ? suit-delegation => bstr .cbor SUIT_Delegation,
suit-authentication-wrapper => bstr .cbor SUIT_Authentication, suit-authentication-wrapper => bstr .cbor SUIT_Authentication,
suit-manifest => bstr .cbor SUIT_Manifest, suit-manifest => bstr .cbor SUIT_Manifest,
SUIT_Severable_Manifest_Members, SUIT_Severable_Manifest_Members,
* SUIT_Integrated_Payload, * SUIT_Integrated_Payload,
* SUIT_Integrated_Dependency, * SUIT_Integrated_Dependency,
* $$SUIT_Envelope_Extensions, * $$SUIT_Envelope_Extensions
* (int => bstr)
} }
SUIT_Delegation = [ + [ + bstr .cbor CWT ] ] SUIT_Delegation = [ + SUIT_Delegation_Chain ]
SUIT_Delegation_Chain = [ + bstr .cbor CWT ]
CWT = SUIT_Authentication_Block CWT = SUIT_Authentication_Block
SUIT_Authentication = [ SUIT_Authentication = [
bstr .cbor SUIT_Digest, bstr .cbor SUIT_Digest,
* bstr .cbor SUIT_Authentication_Block * bstr .cbor SUIT_Authentication_Block
] ]
SUIT_Digest = [ SUIT_Digest = [
suit-digest-algorithm-id : suit-digest-algorithm-ids, suit-digest-algorithm-id : suit-digest-algorithm-ids,
skipping to change at page 79, line 4 skipping to change at page 80, line 4
suit-digest-algorithm-ids /= algorithm-id-sha512 suit-digest-algorithm-ids /= algorithm-id-sha512
suit-digest-algorithm-ids /= algorithm-id-sha3-224 suit-digest-algorithm-ids /= algorithm-id-sha3-224
suit-digest-algorithm-ids /= algorithm-id-sha3-256 suit-digest-algorithm-ids /= algorithm-id-sha3-256
suit-digest-algorithm-ids /= algorithm-id-sha3-384 suit-digest-algorithm-ids /= algorithm-id-sha3-384
suit-digest-algorithm-ids /= algorithm-id-sha3-512 suit-digest-algorithm-ids /= algorithm-id-sha3-512
SUIT_Authentication_Block /= COSE_Mac_Tagged SUIT_Authentication_Block /= COSE_Mac_Tagged
SUIT_Authentication_Block /= COSE_Sign_Tagged SUIT_Authentication_Block /= COSE_Sign_Tagged
SUIT_Authentication_Block /= COSE_Mac0_Tagged SUIT_Authentication_Block /= COSE_Mac0_Tagged
SUIT_Authentication_Block /= COSE_Sign1_Tagged SUIT_Authentication_Block /= COSE_Sign1_Tagged
COSE_Mac_Tagged = any
COSE_Sign_Tagged = any
COSE_Mac0_Tagged = any
COSE_Sign1_Tagged = any
COSE_Encrypt_Tagged = any
COSE_Encrypt0_Tagged = any
SUIT_Severable_Manifest_Members = ( SUIT_Severable_Manifest_Members = (
? suit-dependency-resolution => bstr .cbor SUIT_Command_Sequence, ? suit-dependency-resolution => bstr .cbor SUIT_Command_Sequence,
? suit-payload-fetch => bstr .cbor SUIT_Command_Sequence, ? suit-payload-fetch => bstr .cbor SUIT_Command_Sequence,
? suit-install => bstr .cbor SUIT_Command_Sequence, ? suit-install => bstr .cbor SUIT_Command_Sequence,
? suit-text => bstr .cbor SUIT_Text_Map, ? suit-text => bstr .cbor SUIT_Text_Map,
? suit-coswid => bstr .cbor concise-software-identity, ? suit-coswid => bstr ;.cbor concise-software-identity,
* $$SUIT_severable-members-extensions, * $$SUIT_severable-members-extensions,
) )
SUIT_Integrated_Payload = (suit-integrated-payload-key => bstr) SUIT_Integrated_Payload = (suit-integrated-payload-key => bstr)
SUIT_Integrated_Dependency = ( SUIT_Integrated_Dependency = (
suit-integrated-payload-key => bstr .cbor SUIT_Envelope suit-integrated-payload-key => bstr .cbor SUIT_Envelope
) )
suit-integrated-payload-key = nint / uint .ge 24 suit-integrated-payload-key = nint / uint .ge 24
SUIT_Manifest_Tagged = #6.480(SUIT_Manifest) SUIT_Manifest_Tagged = #6.480(SUIT_Manifest)
skipping to change at page 80, line 17 skipping to change at page 81, line 10
SUIT_Common = { SUIT_Common = {
? suit-dependencies => SUIT_Dependencies, ? suit-dependencies => SUIT_Dependencies,
? suit-components => SUIT_Components, ? suit-components => SUIT_Components,
? suit-common-sequence => bstr .cbor SUIT_Common_Sequence, ? suit-common-sequence => bstr .cbor SUIT_Common_Sequence,
* $$SUIT_Common-extensions, * $$SUIT_Common-extensions,
} }
SUIT_Dependencies = [ + SUIT_Dependency ] SUIT_Dependencies = [ + SUIT_Dependency ]
SUIT_Components = [ + SUIT_Component_Identifier ] SUIT_Components = [ + SUIT_Component_Identifier ]
concise-software-identity = any ;concise-software-identity = any
SUIT_Dependency = { SUIT_Dependency = {
suit-dependency-digest => SUIT_Digest, suit-dependency-digest => SUIT_Digest,
? suit-dependency-prefix => SUIT_Component_Identifier, ? suit-dependency-prefix => SUIT_Component_Identifier,
* $$SUIT_Dependency-extensions, * $$SUIT_Dependency-extensions,
} }
SUIT_Component_Identifier = [* bstr] SUIT_Component_Identifier = [* bstr]
SUIT_Common_Sequence = [ SUIT_Common_Sequence = [
 End of changes. 20 change blocks. 
58 lines changed or deleted 53 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/