Skip to content

Relationship between resolvedDependencies and an SBOM? #1531

@ralphbean

Description

@ralphbean

I'm unsure about something about resolvedDependencies (in the build track) and how it does or doesn't overlap with an SBOM.

From https://slsa.dev/spec/v1.2/build-provenance, resolvedDependencies is an:

Unordered collection of artifacts needed at build time. Completeness is best effort, at least through SLSA Build L3. For example, if the build script fetches and executes “example.com/foo.sh”, which in turn fetches “example.com/bar.tar.gz”, then both “foo.sh” and “bar.tar.gz” SHOULD be listed here.

I think of the SBOM of an artifact as "the list of dependencies" of an artifact. If a particular project pulls in libfoo at build time, then a resolved reference to the specific version of libfoo should appear in the SBOM. In the example above, I would think that at least "example.com/bar.tar.gz" should appear in the SBOM. Possibly "example.com/foo.sh" too.

I tend to think of the SLSA resolvedDependencies as the dependencies of the build process, not necessarily the dependencies of the artifact the way we normally talk about dependencies. For example, for a github workflow run, in my opinion, a good list of items to have in the resolvedDependencies would be the specific digests of the specific GH actions that ran as a part of that workflow. Specific identities of the runners or their images would be a solid bonus.

But, should the SLSA build provenance resolvedDependencies also include the (possibly hundreds of) other software dependencies that a build pulls in?

  • Should the SLSA build provenance always be a superset of the SBOM, such that while the SBOM represents the "software dependencies" of the build and the SLSA build provenance includes both that and resolved build system details?
  • Should the SLSA build provenance always be disjoint from the SBOM, such that the SBOM represents the "software dependencies" of the build and the SLSA build provenance includes only resolved build system details?

Is it an exercise deliberately left to implementers?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions