Skip to content

Predicate type

https://socair.ai/oci-binding/v1

Socair OCI binding

A signed statement that an OCI model artifact carries exactly the bytes a Socair attestation is about, so an admission policy can check that attestation against the digest a pod pulls.

Shape

Envelope
An in-toto Statement v1 (https://in-toto.io/Statement/v1) in a DSSE envelope with payload type application/vnd.in-toto+json, signed with Ed25519. It verifies offline: no transparency log or certificate authority is involved.
Subject
One subject: the OCI artifact by registry and repository, with its manifest digest. The attestation it names is about the model’s bytes; the binding is about the manifest that carries them.

Predicate

artifact
The OCI artifact as attach read it: name, manifest digest and media type, artifact type, the config blob’s media type and digest (named, not covered), how the layers were matched (one file, or a model directory by path), and every layer by digest, size, media type, and annotated path.
attestation
The Socair attestation it binds, by the SHA-256 of its envelope, with fields repeated from it: its subject, document id and hash, issue time, signer key id, issuer, check set version, and promotion state, and for a conditional promotion the acceptor, the accepted rows, and the acceptance’s expiry.
bound_utc
When attach signed the binding. The signer’s claim: no transparency log records it.
tool_version
The socair version that wrote it.

Sign and verify

socair attach registry.example/models/tiny:v1 \
  --attestation report.dsse.json --key operator.key \
  --trusted operator.pub
socair verify registry.example/models/tiny:v1 \
  --trusted operator.pub

What the signature means

  • socair attach and socair verify with an OCI reference are in 0.1.0-rc.4 and later.
  • attach verifies the attestation, and its signed acceptance when it is conditional, and checks that the artifact’s layers carry exactly the attested bytes before it signs. A raw layer (ModelPack, KitOps, Docker Model Runner) is matched by its digest; an image’s tar layers (a KServe ModelCar image, the model under /models) are matched by the files inside them, which attach reads. An image index, and a layer type the doc does not list as matched (a .tar+zstd layer among them), are refused.
  • It pushes two referrers of the artifact: the binding with the attestation (artifact type application/vnd.socair.attestation.v1+json, each envelope annotated ai.socair.predicate-type), and the binding again as a Sigstore bundle, which cosign verify-attestation reads with the operator’s public key.
  • A verified binding is not an approval. A policy must read the attestation’s promotion state, and for a conditional promotion decide whether conditions are acceptable and check the acceptance’s expiry.
  • verify does not take the binding’s word: it verifies the attestation and matches the layers again itself. The manifest’s config blob is named but not covered.

Where it is defined

The other signed documents: Socair attestation, Socair acceptance, Socair reference feed, Socair inventory snapshot, Socair derivation record.