Skip to content

Commit 34a8a0a

Browse files
authored
editorial: draft: Improve instructions to verify source VSAs (#1498)
The prior instructions weren't complete and were somewhat spread out. Tried to consolidate in one spot. Also fixed a typo in the general verification summary docs that incorrectly referenced slsaResult instead of verificationResult. fixes #1445 --------- Signed-off-by: Tom Hennen <tomhennen@google.com>
1 parent 8b0ccfe commit 34a8a0a

File tree

3 files changed

+13
-19
lines changed

3 files changed

+13
-19
lines changed

docs/spec/draft/source-requirements.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -590,10 +590,8 @@ Example implementations:
590590

591591
#### How to verify
592592

593-
- VSAs for source revisions MUST follow [the standard method of VSA verification](./verification_summary.md#how-to-verify).
594-
- Users SHOULD check that an allowed branch is listed in `subject.annotations.sourceRefs` to ensure the revision is from an appropriate context within the repository.
595-
- Users SHOULD check that the expected `SLSA_SOURCE_LEVEL_` is listed within `verifiedLevels`.
596-
- Users MUST ignore any unrecognized values in `verifiedLevels`.
593+
See [Verifying Source](./verifying-source.md) for instructions how to verify
594+
VSAs for Source Revisions.
597595

598596
### Source provenance attestations
599597

docs/spec/draft/verification_summary.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,8 @@ Verification MUST include the following steps:
299299
value. This step ensures that the consumer is using the VSA for the
300300
producer's intended purpose.
301301

302-
6. Verify that the value for `slsaResult` is `PASSED`. This step ensures the
303-
artifact is suitable for the consumer's purposes.
302+
6. Verify that the value for `verificationResult` is `PASSED`. This step
303+
ensures the artifact is suitable for the consumer's purposes.
304304

305305
7. Verify that `verifiedLevels` contains the expected value. This step ensures
306306
that the artifact is suitable for the consumer's purposes.

docs/spec/draft/verifying-source.md

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ recording the result of prior verifications. Source VSAs may be issued by a VSA
2525
provider to make a SLSA source level determination based on the content of those
2626
attestations.
2727

28-
## How to verify SLSA a source revision
28+
## How to verify a source revision
2929

3030
The source consumer checks:
3131

@@ -88,17 +88,10 @@ Once, when bootstrapping the verifier:
8888

8989
</details>
9090

91-
Given a revision and its VSA:
92-
93-
1. [Verify][validation-model] the envelope's signature using the roots of
94-
trust, resulting in a list of recognized public keys (or equivalent).
95-
2. [Verify][validation-model] that statement's `subject` matches the digest of
96-
the revision in question.
97-
3. Verify that the `predicateType` is `https://slsa.dev/verification_summary/v1`.
98-
4. Look up the SLSA Source Level in the roots of trust, using the recognized
99-
public keys and the `verifier.id`, defaulting to SLSA Source L1.
100-
101-
[validation-model]: https://github.com/in-toto/attestation/blob/main/docs/validation.md#validation-model
91+
Given a revision and its VSA follow the
92+
[VSA verification instructions](./verification_summary.md#how-to-verify) and the
93+
[validation-model] using the revision identifier to perform subject matching and
94+
checking the `verifier.id` against the root-of-trust described above.
10295

10396
### Step 2: Check Expectations
10497

@@ -117,12 +110,15 @@ fields:
117110
118111
| What | Why
119112
| ---- | ---
120-
| Verifier (SCS) identity from [Step 1] | To prevent an adversary from substituting a VSA making false claims from an unintended SCS.
113+
| `verifier.id` identity from [Step 1] | To prevent an adversary from substituting a VSA making false claims from an unintended SCS.
114+
| `subject.digest` from [Step 1] | To prevent an adversary from substituting a VSA from another revision.
115+
| `verificationResult` | To prevent an adversary from providing a VSA for a revision that failed some aspect of the organization's expectations.
121116
| `predicate.resourceUri` | To prevent an adversary from substituting a VSA for the intended repository (e.g. `git+https://github.com/IntendedOrg/hello-world`) for another (e.g. `git+https://github.com/AdversaryOrg/hello-world`)
122117
| `subject.annotations.sourceRefs` | To prevent an adversary from substituting the intended revision from one branch (e.g. `release`) with another (e.g. `experimental_auth`).
123118
| `verifiedLevels` | To ensure the expected controls were in place for the creation of the revision. E.g. `SLSA_SOURCE_LEVEL_3`, `ORG_SOURCE_STATIC_ANALYSIS`, etc...
124119

125120
[Threat "B"]: threats#b-modifying-the-source
121+
[validation-model]: https://github.com/in-toto/attestation/blob/main/docs/validation.md#validation-model
126122

127123
### Step 3: Verify Evidence using Source Provenance [optional]
128124

0 commit comments

Comments
 (0)