Own the trust roots
v0.18 adds certificate-transparency checks and Sigstore trusted-root support for keyless attestations. Existing verification behavior is unchanged when these options are not selected.
Certificate transparency
# Operator supplies trusted Fulcio, Rekor, and CT public roots
tine verify result.tine --attestation result.sigstore.json \
--cert-identity ci@example.com \
--cert-oidc-issuer https://token.actions.githubusercontent.com \
--fulcio-root fulcio.pem --rekor-key rekor.pem \
--ct-key ct.pem --require-sct --json--ct-key FILE is repeatable, and one file may hold multiple CT keys. Verification checks an embedded RFC 6962 SCT over the precertificate data and issuer key hash, under the matching log key, with a timestamp inside the leaf certificate's validity. --require-sct requires a CT key. These options require --attestation and are refused for key-signed evidence.
Use one trusted-root file
tine verify result.tine --attestation result.sigstore.json \
--trusted-root trusted_root.json \
--cert-identity ci@example.com \
--cert-oidc-issuer https://token.actions.githubusercontent.com --jsonThe file supplies Rekor, Fulcio, and CT keys. Rekor and CA validity windows use the verified integrated time; CT windows use the certificate's not-before time. When CT logs are listed, an embedded SCT is required.
Do not combine --trusted-root with --rekor-key, --fulcio-root, or --ct-key. It applies only to keyless attestations. CT log IDs must match their key hashes; unsupported Rekor v2 tile logs are skipped because v1 receipts cannot name them.
Refresh explicitly through TUF
# Bootstrap with an independently trusted TUF root; performs network access
tine trust root update --root trusted-tuf-root.json
# Later explicit refresh, using persisted trust state
tine trust root updateNo bootstrap TUF root is embedded. Obtain the first root through an independently trusted channel. The updater verifies root rotations with old/new thresholds, timestamp/snapshot/targets versions, lengths and hashes, expiry, and persisted rollback state.
The verified trusted_root.json is installed in $XDG_CONFIG_HOME/opentine/sigstore/ and becomes the default for keyless verification naming no key file. Nothing is fetched unless the operator runs the updater. --repo-url URL selects the TUF repository.
Reuse a policy
tine trust policy set ci --trusted-root trusted_root.json \
--cert-identity ci@example.com \
--cert-oidc-issuer https://token.actions.githubusercontent.com
tine verify result.tine --attestation result.sigstore.json --policy ci --jsonPolicies now carry trusted_root, ct_key, and require_sct. User ownership, safe-file checks, and explicit flag precedence still apply. See named policies and keyless evidence.
A weekly non-required live Sigstore workflow detects upstream format drift; release gates do not depend on the public service. Read the tagged changelog for the exact contract.