Skip to content

Conversation

@marcelamelara
Copy link
Contributor

@marcelamelara marcelamelara commented Aug 20, 2025

This PR makes revisions to the current text of ITE-10 based on practical experiences and case studies verifying in-toto attestations:

  • 1-1 predicate type-to-step mapping: This simplifies step definitions in layouts as well as attestation verifier implementations.
  • Materials and products field selectors: Since the names of the fields for step materials and products are no longer consistent across predicate types, these selectors allow layout authors to indicate to verifiers where to extract this information from within attestations.

These changes were first proposed at OpenSSF Community Day NA '25.

Signed-off-by: Marcela Melara <[email protected]>
Copy link

@trishankkarthik trishankkarthik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks very much for these simple but highly effective improvements, Marcela! Just a few comments...

Signed-off-by: Marcela Melara <[email protected]>
Signed-off-by: Marcela Melara <[email protected]>
@marcelamelara marcelamelara marked this pull request as ready for review August 26, 2025 00:37
@marcelamelara marcelamelara requested a review from a team as a code owner August 26, 2025 00:37
Signed-off-by: Marcela Melara <[email protected]>
Copy link
Contributor

@trishankatdatadog trishankatdatadog left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💯

@marcelamelara
Copy link
Contributor Author

@adityasaky PTAL

```
predicateType: string
predicate_type: string
inputs_selector: string
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👀 this is interesting. Do we need outputs_selector?

Two cases:
informational -> inputs is subject, no outputs
transformational -> inputs is predicate specific, outputs is subject

we could have just the inputs_selector, with options subject and predicate.<field> where the field is set. If it's predicate.<field> we can safely assume the contents of subject make up the output. If input_selector is subject, then there's no output.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch! Actually, we talk about I/O selectors in the Policy Framework draft.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an interesting suggestion. My inclination is to specify things as explicitly as possible so consumers of policies don't need to bake in implicit assumptions into their verification flow. How do others feel about removing outputs_selector ?

is updated to support matching on predicate types as well. In addition,
The verification workflow in the in-toto v1.0 specification matches links to
use by the name of the step and the key ID used to sign it. This part of the
workflow is updated to support matching on predicate types as well. In addition,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

side note: we don't specify how to match on predicate types; we should consider this but separately.

ResourceDescriptor object is used for pattern matching and the `digest` field
is used to verify equality of two artifacts.

As in in-toto v.10, the `layoutEnvelope` and `layoutKeys` contain the signed
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be v1.0.

in the process. Note that this expects the verifier to be capable of generating
distinct predicates--the in-toto v1.0 verifier was only aware of links and
sublayout verification therefore generated an in-toto summary link. This is
discussed further on in <<Custom Verifiers>>.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is the discussion of the supported languages and custom verifiers? I'd love to have us choose something really small and sane here which is unlikely to have any security issues.

Usually running complex code during signature checking is a bad idea. Since this is running potentially attacker provided code during verification, this should be really locked down. (I acknowledge and regret how inspections work in the current in-toto layouts, so I'm mostly pointing the finger at myself here.)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That discussion is not here: this is specific to just: (1) fixing a step to exactly one predicate type, and (2) introducing I/O Selectors.

The general discussion on policies is here. We do have not a list of supported policy languages and engines, and are not likely to do so. Please see that doc for our rationale on why we want flexibility.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took a look at the document and would love to have more discussion about the pros and cons. Happy to do this in the document, on this issue, or in another format. I do think there needs to be more of a comparative discussion resulting from this, regardless of the eventual design choice.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why don't we discuss over a Zoom/Meet and go from there? I'll send out an invitation.

Co-authored-by: Trishank Karthik Kuppusamy <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants