RESEARCH / SPECIFICATION

The CDK Evidence Model Specification

Version 1.0 Published 2026-07-29 Authors CDK Core Team DRAFT

Abstract

This document defines the Evidence Model: the structure of a single attestation, independent of how attestations relate to one another (see the Trust Graph Specification). It specifies the envelope format, predicate types, and signing model every CDK attestation conforms to — built on existing in-toto and DSSE conventions rather than a proprietary format.

1. Terminology

Statement
The unsigned claim: a subject, a predicate type, and predicate data.
Predicate
The type-specific payload describing what happened.
Envelope
The signed wrapper around a Statement, per the DSSE format.
Signer
The identity whose signature is attached to an envelope.

2. The Envelope

Every attestation is wrapped in a DSSE — a Dead Simple Signing Envelope — the same envelope format used by in-toto and Sigstore. CDK does not define its own signing wrapper; it reuses one that verifiers already know how to check.

dsse-envelope.json
{
  "payload": "<base64-encoded Statement>",
  "payloadType": "application/vnd.in-toto+json",
  "signatures": [
    { "keyid": "", "sig": "<base64-encoded signature>" }
  ]
}

3. Predicate Types

The predicateType field determines how predicate is interpreted. CDK defines one predicate type per event category:

approval/v1
Pull request or change approval.
deployment/v1
Deployment authorization and execution.
policy-evaluation/v1
Result of an automated policy check.

4. Signing

Signatures are produced using Sigstore's keyless signing flow — short-lived certificates issued against an OIDC identity, with no long-term private key for CDK or the signer to manage. Verification requires no CDK-specific tooling; any Sigstore-compatible verifier can check a signature independently, the same way it would check any other in-toto attestation.

5. Complete Example

The unsigned Statement:

statement.json
{
  "_type": "https://in-toto.io/Statement/v1",
  "predicateType": "https://cdk.dev/predicates/deployment/v1",
  "subject": [
    { "name": "release-2026.07", "digest": { "sha256": "8f92ab…" } }
  ],
  "predicate": {
    "actor": "[email protected]",
    "policy": "release-policy-v3",
    "timestamp": "2026-07-28T09:41:00Z",
    "status": "verified"
  }
}

The same Statement, base64-encoded and signed inside its envelope:

signed-envelope.json
{
  "payload": "eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCAuLi59",
  "payloadType": "application/vnd.in-toto+json",
  "signatures": [
    { "keyid": "", "sig": "MEUCIQDx8f92ab…" }
  ]
}

References

in-toto — Attestation FrameworkITE-6
DSSE — Dead Simple Signing Envelopegithub.com/secure-systems-lab
Sigstore — Keyless Signingsigstore.dev
The CDK Trust Graph Specificationv1.0