Skip to content

Latest commit

 

History

History
228 lines (184 loc) · 8.02 KB

README.adoc

File metadata and controls

228 lines (184 loc) · 8.02 KB

ITE-6: Enabling contextual in-toto attestations

Table 1. Metadata

ITE

6

Title

Enabling contextual in-toto attestations

Sponsor

Santiago Torres

Status

Accepted

Type

Standards

Created

2020-10-30

Abstract

This in-toto enhancement (ITE) introduces the in-toto Attestation Framework, a specification for generating and expressing verifiable claims about software supply chains. An attestation is authenticated metadata about software artifacts and the processes that generate them. The framework allows users to define custom "predicates" with arbitrary, context-specific schemas. Several predicate types covering common cases have already been introduced, and accompanying ITEs have been proposed to define processes for creating predicate types and with new in-toto layout schemas that can verify them.

Specification

ℹ️
The in-toto Attestation Framework is defined in a stand-alone specification. This ITE presents a high level overview of the specification, and readers should refer to the latest versions of the full specification for all details.

An attestation is a piece of authenticated metadata that expresses one or more claims about software artifacts and the supply chain producing them. This means that, as with traditional in-toto layout and link metadata, attestations are cryptographically signed and embedded in a signature envelope, such as DSSE.

All attestations have the following general schema:

{
  "_type": "https://in-toto.io/Statement/<VERSION>",
  "subject": [
    {
      "name": "<NAME>",
      "digest": {"<ALGORITHM>": "<VALUE>"}
    },
    ...
  ],
  "predicateType": "<URI>",
  "predicate": { ... }
}

The _type field identifies the type of the object, which is unchanged from the status quo. Old-style links use the value link. New-style attestations use the value https://in-toto.io/Statement/<VERSION>;, where <VERSION> identifies the major version of the schema. Implementations can support multiple versions simultaneously using the _type field.

The predicate field contains the contextual metadata about the subject of the attestation. Predicates are identified by the predicateType field, which in-toto implementations must use to parse the contents of the predicate field.

Several predicate types have been proposed to cover common use cases such as SLSA Provenance for describing the origins of software artifacts, SPDX for supporting the SPDX SBOM standard, and link as a drop-in replacement for existing in-toto link metadata. This ITE is accompanied by other ITEs that describe how new predicate types can be introduced to the in-toto community, and update the in-toto layout schema to verify in-toto attestations.

Example

The following in-toto attestation containing a link predicate:

{
  "_type": "https://in-toto.io/Statement/v1",
  "subject": [{"name": "out.bin", "digest": {"sha256": "fedc9876..."}}],
  "predicateType": "https://in-toto.io/Link/v0.2",
  "predicate": {
    "name": "build",
    "command": "make",
    "materials": {"in.txt": {"sha256": "abcd1234..."}},
    "byproducts": {},
    "environment": {}
  }
}

is equivalent to the following old-style in-toto link:

{
  "_type": "link",
  "name": "build",
  "command": "make",
  "materials": {"in.txt": {"sha256": "abcd1234..."}},
  "products": {"out.bin": {"sha256": "fedc9876..."}},
  "byproducts": {},
  "environment": {}
}

Motivation

This ITE was developed jointly by the in-toto maintainers, the Binary Authorization team, and what later became the SLSA team. The framework aligns with the SLSA Attestation Model and is officially recommended by SLSA.

The two main goals of this ITE are to:

  • Make it easier to author and consume arbitrary software artifact metadata. The existing link schema is rigidly focused on running a command that converts materials into products. Several types of metadata do not cleanly fit this model, such as:

    • Provenance of a CI/CD workflow, where there is no particular "command" to run.

    • Code review status.

    • Vulnerability scan result showing known vulnerabilities.

    • Policy decision allowing an artifact to be used in a particular environment.

  • Build a larger ecosystem around software artifact metadata that is not specific to in-toto (or Binary Authorization or any other consumer). By supporting a more generic, extensible attestation format, we allow CI/CD pipelines, vulnerability scanners, and other systems to generate a single set of attestations that can be consumed by anyone. Furthermore, this paves the way for in-toto to support existing formats, such as SPDX or CycloneDX.

Reasoning

The in-toto Attestation Framework specification provides more details and can be found here.

Backwards Compatibility

The new framework supports a drop-in replacement for in-toto link metadata, meaning that the types of claims supported up to this point can continue to be made. Link predicates will be supported as a drop-in replacement for old-style links in in-toto’s workflows.

Separately, in-toto implementations should continue to support old-style link metadata alongside attestations for a transitionary period of time. Implementers are free to determine the specific duration of this period, but it MUST be communicated to the in-toto community. For example, the in-toto reference implementation’s timeline of support for old-style links will be discussed in the official roadmap.

Security

This ITE impacts the security of in-toto in a way that cannot be clearly defined here because security must be evaluated in the context of each individual predicate type. This is out of scope of this ITE and is delegated to each type.

Consider also that each additional predicate type supported adds complexity to implementations and thus adds some amount of residual risk due to the increased attack surface. Given that signatures are verified before predicate type parsing is performed, this risk increase should be from trusted parties who are acting malicious (e.g., insider attacks). Security weaknesses due to a predicate type are thus likely to result in a malicious functionary or sublayout creator being able to mask malicious behavior or escalate the trust in their role.

Note that the link predicate type is isomorphic to the existing link schema and can be translated freely in both directions.

Testing

As with security, each predicate type must be evaluated individually. To learn more, implementers are directed to ITE-9, which describes the process of introducing new predicate types and how they are evaluated.

Prototype Implementation

in-toto’s Go implementation has served as the testbed for the Attestation Framework. Popular predicate types like SLSA Provenance have been implemented there and used in other applications.

Infrastructure Requirements

No changes.