Skip to content

Conversation

ralphbean
Copy link
Contributor

@ralphbean ralphbean commented Oct 10, 2025

Summary

I got confused when trying to figure out why verifycommit didn't have a --use_local_policy option while checktag, level, and leveprov did. Here, trying to expand documentation on the security model to explain that.

New Documentation: docs/VERIFICATION.md

This document explains:

  • Policy Binding Principle: VSAs are cryptographically signed claims bound to specific policies
  • Creation vs Verification: Different trust models for commands that create vs verify attestations
  • Security Anti-Pattern: Why allowing policy override in verifycommit would enable policy substitution attacks
  • Consumer Guidelines: What consumers should verify when evaluating VSAs
  • Policy Evolution: How to handle policy changes and migrations safely

Why This Matters

Currently, the tool's security model is implicit in the code design:

  • Creation commands (checktag, checklevel, checklevelprov) have --use_local_policy
  • Verification command (verifycommit) intentionally lacks this flag

This PR documents the security reasoning behind this design, making it clear that:

  1. Creation commands let you specify which policy you're claiming compliance with
  2. Verification commands validate existing claims against the policy referenced in the VSA
  3. Allowing policy override in verification would defeat the purpose of attestations

Changes

  • New: docs/VERIFICATION.md - Comprehensive verification security model documentation
  • Updated: docs/DESIGN.md - Added reference to verification security model in VSA section
  • Updated: README.md - Added link to verification documentation

Related Issues


Generated with assistance from Claude Code

Add comprehensive documentation explaining the security model for
Verification Summary Attestations (VSAs), focusing on policy binding
and why verification commands intentionally do not allow policy
override.

The new VERIFICATION.md document covers:
- Policy binding principle (VSAs are bound to specific policies)
- Creation vs verification trust models
- Security anti-patterns (policy substitution attacks)
- Consumer verification guidelines
- Policy evolution and migration strategies

Also updates DESIGN.md and README.md to reference the new
documentation.

Assisted-by: Claude Code
Signed-off-by: Ralph Bean <[email protected]>
Copy link
Contributor

@TomHennen TomHennen left a comment

Choose a reason for hiding this comment

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

Hey, thanks for taking an interest in this project.

The suggested change doesn't match the official model for how VSAs are verified though.

Notably, users are not expected to check policy.uri, and are instead expected to check resourceUri.

You can see some of the details here and also this discussion.

This doc also has a draft threat model that we haven't had time to formalize. You can get access if you join https://groups.google.com/g/slsa-discussion, you can also just request access and I'll grant it.

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.

2 participants