fix(verifier): require signature verification, reject timestamp-only bundles

Merged
JI
4mo ago
+103-36

Summary

VerifyBundle only verified the DSSE signature when a bundle carried an X.509 certificate. A bundle with no certificate but a valid RFC3161 timestamp skipped signature verification and was reported as verified, even though the signature was never checked against any key. Since the timestamp signs only the DSSE signature bytes and not the payload, a forged in-toto statement with arbitrary signature bytes plus a timestamp from a trusted TSA could pass verification.

This change makes signature verification mandatory:

  • A certificate-backed DSSE signature must verify against the trusted root before a bundle is considered verified. The RFC3161 timestamp is now only used to validate the signing window and can never be the sole verification material.
  • Public-key verification material is explicitly rejected as unsupported instead of falling through to the timestamp-only path.
  • Cert-less bundles with no verifiable key are reported as missing verification material rather than verified.

AI assistance disclosure

This change was produced with the assistance of Claude Code, as disclosed via the Assisted-by: commit trailer.