This is outdated and content has been moved to https://github.com/notaryproject/notaryproject/pull/131
As per signing-verfication-workflow step 3.2, if an OCI artifact contains multiple signatures, we need a mechanism to filter out the signatures based on the given trust criteria. Otherwise, we will have to download and evaluate all the associated signatures. Since there is no upper bound on the number of signatures that can be associated with an artifact, this poses an availability risk.
=== PR BEGINS ===
To filter out signatures based on the aforementioned trust criteria, we need to surface this trust criteria information in the signature artifact manifest. The only entry in the subject manifest that allows for arbitrary data is annotations, so we will be using annotations to surface certificate(s) identifier and signed attributes.
org.opencontainers.notary.x509certs.fingerprint.sha256
: This REQUIRED annotation and its value contain a list of sha-256 fingureprint of certificate and certificate chain used for signature generation.org.opencontainers.notary.signature.signedattributes
: This OPTIONAL annotation and its value contains the list of signed attributes.Keys using the org.opencontainers.notary
namespace are reserved for use in the Notary signature artifact manifest and MUST NOT be used by other specifications and extensions, including other OCI specifications.
org.opencontainers.notary.x509certs.fingerprint.sha256
as key and this JSON array as value.org.opencontainers.notary.signature.signed-attributes
as key and this JSON object as the value.blobs->mediaType
attribute and supported signature envelope format, filter out signature manifests.scope
configured in trust policies, get the applicable trust policy and trust stores.org.opencontainers.notary.x509certs.fingerprint.sha256
annotation. If there is at least one match then continue to the next step. Otherwise, move to the next signature artifact descriptor(step 2.1). If all signature artifact manifests have already been processed, fail the OCI artifact pull request and exit.=== PR ENDS ===
notary