[Suit] Mohamed Boucadair's Discuss on draft-ietf-suit-trust-domains-10: (with DISCUSS and COMMENT)
Mohamed Boucadair via Datatracker <noreply@ietf.org> Sun, 06 April 2025 08:47 UTC
Return-Path: <noreply@ietf.org>
X-Original-To: suit@ietf.org
Delivered-To: suit@mail2.ietf.org
Received: from [10.244.8.129] (unknown [104.131.183.230]) by mail2.ietf.org (Postfix) with ESMTP id 45DD9180B999; Sun, 6 Apr 2025 01:47:23 -0700 (PDT)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Mohamed Boucadair via Datatracker <noreply@ietf.org>
To: The IESG <iesg@ietf.org>
X-Test-IDTracker: no
X-IETF-IDTracker: 12.38.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <174392924310.280043.213740659899110671@dt-datatracker-64c5c9b5f9-hz6qg>
Date: Sun, 06 Apr 2025 01:47:23 -0700
Message-ID-Hash: 4SE5WQBT46JEH6XWFRYVBPSZDL5UWLLW
X-Message-ID-Hash: 4SE5WQBT46JEH6XWFRYVBPSZDL5UWLLW
X-MailFrom: noreply@ietf.org
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-suit.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: draft-ietf-suit-trust-domains@ietf.org, suit-chairs@ietf.org, suit@ietf.org, dthaler1968@gmail.com, dave.thaler.ietf@gmail.com
X-Mailman-Version: 3.3.9rc6
Reply-To: Mohamed Boucadair <mohamed.boucadair@orange.com>
Subject: [Suit] Mohamed Boucadair's Discuss on draft-ietf-suit-trust-domains-10: (with DISCUSS and COMMENT)
List-Id: Software Updates for Internet of Things <suit.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/suit/6R9niNFWE1QfbEgg2QM1_E6fcCc>
List-Archive: <https://mailarchive.ietf.org/arch/browse/suit>
List-Help: <mailto:suit-request@ietf.org?subject=help>
List-Owner: <mailto:suit-owner@ietf.org>
List-Post: <mailto:suit@ietf.org>
List-Subscribe: <mailto:suit-join@ietf.org>
List-Unsubscribe: <mailto:suit-leave@ietf.org>
Mohamed Boucadair has entered the following ballot position for draft-ietf-suit-trust-domains-10: Discuss When responding, please keep the subject line intact and reply to all email addresses included in the To and CC lines. (Feel free to cut this introductory paragraph, however.) Please refer to https://www.ietf.org/about/groups/iesg/statements/handling-ballot-positions/ for more information about how to handle DISCUSS and COMMENT positions. The document, along with other ballot positions, can be found here: https://datatracker.ietf.org/doc/draft-ietf-suit-trust-domains/ ---------------------------------------------------------------------- DISCUSS: ---------------------------------------------------------------------- Hi Brendan and Ken, Thank you of the effort put into this document. This review takes into account RFC 9019, RFC 9124, and draft-ietf-suit-manifest. I have a set of DISCUSS and COMMENT items. The list may seem long but that is a sign that I enjoyed reading. Let's walk through and hope to converge before the telechat. Note that there are many nits in the document, I flagged some of them in my marked version, which I have online. I can share the link offline with the authors upon request. # Meta Comments ## Lack of overview of blocking issues since the document was WGLC in 2023 I found that a WGLC was issued in 2023 against -02 but there is no mention in the write-up what were the issues that hindered the publication of the document since then. I also failed to find other records, including in the history tab of the document Datatracker. I checked diff vs -02, but it would be good if we had a summary of the changes summarized “somewhere” (the side-to-side diff is verbose as most of the changes are minor ones): I tagged at least very few changes to the CDDL, removal of the delegation part, and more examples. Also checked the meeting presentation, but again no hint to understand the delay/blocking points. Maybe this is due to my poor search skills, I didn’t find a record of a second WGLC or a conclusion of the first WGLC (-02). ## Need for helpers for those who will deploy Approaching this from OPS, and how this can be put into effect, a short overview of the various pieces being grafted would be helpful. I’m not asking to have that in this document (but would happy if you do so), but I invite the WG to consider having such an overview. If you already have, please share it LOUDLY. Thank you. Please note that I’m not looking for general matters such as 9019, but how the various specs are glued together. ## Lack for friendly representation of CDDL structures --This is not specific to this document, but this document exacerbate the need-- It is not straightforward to pragmatically append the CDDL augmentation to what was defined in the base manifest spec and display graphically the augmentations. It would be useful to have for CDDL a representation similar to RFC8340 for abstract YANG data structure (RFC8791). Hope this will inspire some :-) ## Document Flow CURRENT: 5.4.1. Multiple Manifest Processors I feel like some of the text in this section should be provided early in the document to help readers easily digest. Please think about it. Thanks. # DISCUSS ## Link with the IM/Compatibility (RFC9124) I see this spec as mainly targeting REQ.USE.MFST.COMPONENT from RFC9124. I failed to see how the current spec satisfies the following: Satisfies: USER_STORY.OVERRIDE (Section 4.4.3), USER_STORY.COMPONENT (Section 4.4.4) ## Applicability: RFC7228/RFC7228bs is normative CURRENT: Because of the more complex use cases that are typically targetted by devices implementing this specification, the applicable device class is typically Class 2+ and often isolation level Is8, for example Arm TrustZone for Cortex-M, as described in [I-D.ietf-iotops-7228bis] Should I-D.ietf-iotops-7228bis be normative as this defines the devices to which the spec is applicable? BTW, please fix some nits: NEW: Because of the more complex use cases that are typically targeted by devices implementing this specification, the applicable device class is typically Class 2+ and often isolation level Is8, for example Arm TrustZone for Cortex-M, as described in [I-D.ietf-iotops-7228bis]. ## Consistency with the base manifest CURRENT: Steps 3 and 5 are added to the expected installation workflow of a Recipient: 1. Verify the signature of the Manifest. 2. Verify the applicability of the Manifest. 3. Resolve Dependencies. 4. Fetch Payload(s). 5. Verify Candidate. 6. Install Payload(s). Putting aside steps 3/5, the list does not mirror all the items in 4.2 of the manifest. I’d like to check this is done on purpose and understand why. As I’m there, is there always one “candidate”? I suspect that I understand that the sequential flow will lead to a candidate, but I’m not sure if there are cases where we might have conditional parts of the code and that these conditional parts are handled as single/distinct candidates. ## Amend base manifest spec (1) CURRENT: The new metadata structure is shown below. +-------------------------+ | Envelope | +-------------------------+ | Authentication Block | | Manifest --------------> +------------------------------+ | Severable Elements | | Manifest | | Human-Readable Text | +------------------------------+ | CoSWID | | Structure Version | | Integrated Dependencies | | Sequence Number | | Integrated Payloads | | Reference to Full Manifest | +-------------------------+ +------ Common Structure | | +---- Command Sequences | +-------------------------+ | | | Digests of Envelope Elements | | Common Structure | <--+ | +------------------------------+ +-------------------------+ | | Dependency Indices | +-> +-----------------------+ | Component IDs | | Command Sequence | | Common Command Sequence ---------> +-----------------------+ +-------------------------+ | List of (pairs of ( | | * command code | | * argument / | | reporting policy | | )) | +-----------------------+ Do we need to tag this as updating the manifest as it amends it? As I’m there: * please say this is an update of the figure in Section 4.2 if the manifest spec. * CoSWID: Where is this defined? (2) The same DISCUSS is also triggered by the following: CURRENT: 5.3. Changes to Abstract Machine Description This section augments the Abstract Machine Description (Section 6.4) in [I-D.ietf-suit-manifest]. ## CDDL is Normative CURRENT: The following CDDL describes the Manifest Component ID: RFC 8610 should be listed normative. ## CDDL Consistency CURRENT: The Components specified by SUIT_Dependency will contain a Manifest Envelope that describes a Dependency of the current Manifest. The Manifest is identified, but the Recipient should expect an Envelope when it acquires the Dependency. This is because the Manifest is the one invariant element of the Envelope, where other elements may change by countersigning, adding authentication blocks, or severing elements. When executing suit-condition-image-match over a Component that is designated in SUIT_Dependency, the digest MUST be computed over just I failed to find I don’t see SUIT_Dependency in the CDDL snippets. Please check and let me know if I missed something or whether a fix is needed. Thanks. ## Inappropriate use of the normative language The normative language use in the document should be checked. I flagged at least the following ones (1) CURRENT: Commands defined outside of this document and [I-D.ietf-suit-manifest] MAY have additional restrictions. Consider: “Additional restrictions may be added by future commands”. (2) CURRENT: For example, every Dependency's Dependency Resolution step MUST be executed before any dependent's Payload fetch step. s/MUST/must as this is an example (3) CURRENT: * When a Manifest Processor supports multiple independent Components, they MAY have shared Dependencies. Putting aside an apparent inconsistency between “independent” and “have dependencies”, this sentence can be reworded to be affirmative (s/MAY/may) (4) CURRENT: Because the Author and the Distribution System have different roles and MAY be separate entities, it is highly RECOMMENDED to leverage permissions (see Section 9 of [I-D.ietf-suit-manifest]). For example, The Device can protect itself from attacker who breaches the The first MAY is weird (may, would be just fine) while “highly” in the second part does not change the level of requirement :-) Consider delete that mention. BTW, s/example, The Device/example, the Device ## Lack of elaboration of specific security considerations I was expecting at least a reminder of cons specific to the multi trust domain case. Adding specific pointers where this is discussed in 9124/9019 would be a minimum. ---------------------------------------------------------------------- COMMENT: ---------------------------------------------------------------------- # Title OLD: SUIT Manifest Extensions for Multiple Trust Domains NEW: Software Update for the Internet of Things (SUIT) Manifest Extensions for Multiple Trust Domains # Abstract Consider swapping the two sentence for better flow NEW: A device has more than one trust domain when it enables delegation of different rights to mutually distrusting entities for use for different purposes or Components in the context of firmware or software update. This specification describes extensions to the Software Update for the Internet of Things (SUIT) Manifest format for use in deployments with multiple trust domains. # Introduction (1) CURRENT: Devices that go beyond single-signer update require more complex rules for deploying software updates. For example, devices may require: * software Components from multiple software signing authorities. * a mechanism to remove an unneeded Component * single-object Dependencies * a partly encrypted Manifest so that distribution does not reveal private information * installation performed by a different execution mode than payload fetch I have several comments on this part: + Was “single-signer update” introduced in some other documents? I failed to find this use in the suit manifest spec, rfc9019, etc. Same comment applies for “single-object Dependencies" term. + I was expecting to see explanation of “more complex” in the examples, which is not currently the case. + Consider s/software Components/Components given that “Component” is defined as “An updatable logical block of the Firmware, Software, configuration, or data of the Recipient”. No need to be redundant here. + Is the second bullet specific to the multi signer case? Isn’t this applicable even for the single-signer? + Where “payload fetch” mode is defined? (2) CURRENT: A device may contain a processor in its radio I don’t parse this. Please reword. (3) What is a device operator? Is it the vendor? Else? Please consider adding a definition or supply a reference. (4) Consider add references for TEEP-related entites: CURRENT: * A Trusted Application Manager (TAM) wants to distribute personalisation information to a Trusted Execution Environment in addition to a Trusted Application (TA), (5) Add a reference for “core Manifest specification”. Also, update the teep architecture to refer rfc9397, instead of the I-D. CURRENT: These mechanisms are not part of the core Manifest specification, but they are needed for more advanced use cases, such as the architecture described in [I-D.ietf-teep-architecture]. (6) Fall a little bit short :-( A summary of the extensions would be helpful. CURRENT: This specification extends the SUIT Manifest specification ([I-D.ietf-suit-manifest]). # Section 2 I would avoid redundant terms but refer to draft-ietf-suit-manifest#section 2. Only new terms should be listed here. On the “see” use (not only in this section, but through the document) CURRENT: authorization information, and severable elements (see Section 5.1 of [I-D.ietf-suit-manifest]). There are more than 60 occurrences of such in the document. Please simply delete these as this makes the two too heavy. A reference is there to be checked/viewed/seen/etc. :-) # Section 3 (1) multi trust domain used without being adequately introduced early in the document. Consider teasing this in the introduction: CURRENT: The use of the features presented for use with multiple trust domains (2) Other assumptions: CURRENT: One additional assumption is added for the Update Procedure: * All Dependency Manifests must be present before any Payload is fetched. One additional assumption is added to the Invocation Procedure: Please call out where the “other” assumptions are defined? I suspect that you meant 4.2 of the manifest. If so, please say so. If not, I need to understand ;-) # Section 5 (1) CURRENT: A Dependency is another SUIT_Envelope that describes additional Components. As described in Section 1, Dependencies enable several common use cases. First, cite where the envelope is defined. Second, consider deleting the second sentence; it does not bring much, IMO. (2) ACLs CURRENT: (no ACLs defining which authorities have access to different Components/Commands/Parameters), How/where these ACLs are supplied? Can we have examples or a reference where these examples are provided? (3) Lack of interpreter behavior CURRENT: If the Manifest contains more than one Component and/or Dependency, each Command sequence MUST begin with a Set Component Index Command. Can we include a reminder about what to do when a mandatory condition is not met, I guess the process will abort. A generic statement would be helpful as this applies to other similar statements in the document. (4) Where Update is defined? CURRENT: 1. The dependent MUST populate all Command sequences for the current Procedure (Update or Invoke). Can we please add a pointer where this command is defined? (5) CURRENT: In complex systems, it may not always be clear where the Root Manifest should be stored; Maybe NEW: In complex systems, it may not always be clear where the Root Manifest is stored; (6) Broken reference CURRENT: This section augments the Abstract Machine Description (Section 6.4) in [I-D.ietf-suit-manifest]. Please check as there is no 6.4 in this doc. I guess you meant 6.4 of manifest. Please fix. (7) CURRENT: * Five new Commands are introduced: - Set Parameters - Process Dependency - Is Dependency - Dependency Integrity - Unlink Consider adding a statemen to basically invite readers to look at Section 5.6. (8) what is reference counting/reference count? CURRENT: * When a Manifest Processor supports shared Dependencies, it MUST support reference counting of those Dependencies. That’is? I don’t get the meaning here. I see “reference count” used in some other parts but I have the same issue to parse the meaning, though. (9) Lack of elaboration CURRENT: 3. Loads the specified Component as a Dependency Manifest Envelope. What does that mean concretely? Failed to find an elaboration of this in the doc. (10) Lack of reference CURRENT: Similar to suit-directive-override-parameters, suit-directive-set- Cite 8.4.10.3 of manifest (idem for other similar constructs) (11) Some more reasoning is needed: CURRENT: parameters allows the Manifest to configure behavior of future Directives by changing Parameters that are read by those Directives. Set Parameters is for use when Dependencies are used because it allows a Manifest to modify the behavior of its Dependencies. This explains why this is useful for dependency, but does not explain it can’t be used for other contexts. (12) Factorize and ease identify failure conditions CURRENT: If the current Component index does not have an entry in the suit- dependencies map, then this Command MUST Abort. If the current Component index has not been the target of a suit- condition-dependency-integrity, then this Command MUST Abort. If the current Component is True, then this Directive applies to all Dependencies. If the current section is "Common metadata," then the Command sequence MUST Abort. May factorize the abort part and list below the conditions as bullet list. Also, please consider having a section with a summary of abort conditions defined in this specification. (13) TTL and Configurable parameters CURRENT: The Manifest Processor MAY cache the results of these operations for later use from the context of the current Manifest. Is there any TTL associated with this? If so, is that controllable/tunable? Similar to the abort comment, consider having a dedicated section on configurable parameters supported by the specification. I see that you mention at least two conditions to flush out the cache. That’s great. # Section 8 Please check this sentence: CURRENT: The Distribution System can Set the Parameter URI in the Fetch/ # Section 9 Any reason the labels weren’t assigned to be consistent with the flow use? CURRENT: | 7 | Dependency Integrity | Section 5.6.4 | +-------+----------------------+---------------+ | 8 | Is Dependency | Section 5.6.3 | +-------+----------------------+---------------+ | 11 | Process Dependency | Section 5.6.2 | +-------+----------------------+---------------+ | 19 | Set Parameters | Section 5.6.1 | +-------+----------------------+---------------+ | 33 | Unlink | Section 5.6.5 | +-------+----------------------+---------------+ Hope this helps. Cheers, Med
- [Suit] Mohamed Boucadair's Discuss on draft-ietf-… Mohamed Boucadair via Datatracker
- [Suit] Re: Mohamed Boucadair's Discuss on draft-i… Brendan Moran
- [Suit] Re: Mohamed Boucadair's Discuss on draft-i… mohamed.boucadair