﻿<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Notary Project | A set of specifications and tools intended to provide a cross-industry standard for securing software supply chains. – Notary Project documentation</title><link>https://notaryproject.dev/docs/</link><description>Recent content in Notary Project documentation on Notary Project | A set of specifications and tools intended to provide a cross-industry standard for securing software supply chains.</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://notaryproject.dev/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: Authenticate with OCI-compliant registries</title><link>https://notaryproject.dev/docs/user-guides/how-to/registry-authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/registry-authentication/</guid><description>
&lt;p>You can use &lt;code>notation&lt;/code> to authenticate to an OCI-compliant registry. This is useful for inspecting artifacts in registries that do not offer a web frontend for view artifacts.&lt;/p>
&lt;p>When you authenticate to an OCI-compliant registry, &lt;code>notation&lt;/code>, by default, uses a &lt;a href="#configure-a-credentials-store">credentials store&lt;/a> to store your credentials in a secure manner. It is possible to store your credentials in &lt;a href="#configure-environment-variables-to-authenticate-to-an-oci-compliant-registry">environment variables&lt;/a> or as &lt;a href="#configure-configjson-to-authenticate-to-an-oci-compliant-registry">base64 encoded values in a configuration file&lt;/a>, but these approaches are not secure and are not recommended for production environments. &lt;strong>It is strongly recommended that you use a credentials store to authenticate to an OCI-compliant registry.&lt;/strong>&lt;/p>
&lt;h2 id="configure-a-credentials-store">Configure a credentials store&lt;/h2>
&lt;p>A credentials store is a secure location that stores your credentials, such as usernames and passwords. Operating systems often include a default credentials store, such as &lt;em>osxkeychain&lt;/em> on macOS or &lt;em>wincred&lt;/em> on Windows. You can also use a third-party credentials store, such as &lt;a href="https://www.passwordstore.org/" target="_blank" rel="noopener">pass&lt;/a>.&lt;/p>
&lt;p>By default, &lt;code>notation&lt;/code> uses a credentials store during the following operations:&lt;/p>
&lt;ul>
&lt;li>Store credentials when you log in to a registry&lt;/li>
&lt;li>Read credentials when accessing a registry to sign, verify, or display artifacts&lt;/li>
&lt;li>Delete credentials from the credentials store when you log out of a registry&lt;/li>
&lt;/ul>
&lt;p>You have three options for configuring a credentials store:&lt;/p>
&lt;ol>
&lt;li>Use the &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/">&lt;code>notation&lt;/code> config.json file&lt;/a>.&lt;/li>
&lt;li>Use the Docker configuration file, which is located at &lt;code>~/.docker/config.json&lt;/code>.&lt;/li>
&lt;li>Use the default credentials store for your operating system.&lt;/li>
&lt;/ol>
&lt;p>&lt;code>notation&lt;/code> will resolve the credentials store in the order shown above. If no credential store is available and no other method is used for credentials, such as environment variables, &lt;code>notation login&lt;/code> will not store the credentials and the command will fail.&lt;/p>
&lt;div class="alert alert-important" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;p>If you have Docker installed on your system and used &lt;code>docker login&lt;/code> to authenticate to your OCI-compliant registry, your credentials are already stored and available to &lt;code>notation&lt;/code>. In this case, you don&amp;rsquo;t need to run &lt;code>notation login&lt;/code> again to authenticate to your OCI-compliant registry.&lt;/p>
&lt;p>Docker also implements a fallback mechanism for storing your credentials. If no credentials store is available, Docker will store your credentials as base64 encoded values in the Docker configuration file. This is not secure and is not recommended for production environments. For more details, see &lt;a href="https://docs.docker.com/engine/reference/commandline/login/#default-behavior" target="_blank" rel="noopener">&lt;code>docker login&lt;/code> default behavior&lt;/a>.&lt;/p>
&lt;/div>
&lt;p>To configure a credentials store in the &lt;code>notation&lt;/code> configuration file, add a &lt;code>credStore&lt;/code> to the &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/">&lt;code>notation&lt;/code> config.json file&lt;/a>. The following example shows &lt;code>osxkeychain&lt;/code> as the configured credentials store.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#a40000">...&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;credStore&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;osxkeychain&amp;#34;&lt;/span>
&lt;span style="color:#a40000">...&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>To configure a credentials store in the Docker configuration file, add a &lt;code>credStore&lt;/code> to &lt;code>~/.docker/config.json&lt;/code>. The following example shows &lt;code>pass&lt;/code> as the configured credentials store.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#a40000">...&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;credsStore&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;pass&amp;#34;&lt;/span>
&lt;span style="color:#a40000">...&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-environment-variables-to-authenticate-to-an-oci-compliant-registry">Configure environment variables to authenticate to an OCI-compliant registry&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Environment variables are not secure for storing sensitive data such as usernames and passwords and should not be used in a production environment.
&lt;/div>
&lt;p>Set the &lt;code>NOTATION_USERNAME&lt;/code> and &lt;code>NOTATION_PASSWORD&lt;/code> environment variables to authenticate to an OCI-compliant registry.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-bash" data-lang="bash">&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">NOTATION_USERNAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;YOUR_REGISTRY_USERNAME&amp;#34;&lt;/span>
&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">NOTATION_PASSWORD&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;YOUR_REGISTRY_PASSWORD&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the environment variables are set, you can use Notation with your registry without &lt;code>notation login&lt;/code>.&lt;/p>
&lt;p>For security reasons, unset the environment variables after you are done interacting with the OCI-compliant registry. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">unset NOTATION_USERNAME
unset NOTATION_PASSWORD
&lt;/code>&lt;/pre>&lt;h2 id="configure-configjson-to-authenticate-to-an-oci-compliant-registry">Configure &lt;code>config.json&lt;/code> to authenticate to an OCI-compliant registry&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Storing credentials in &lt;code>config.json&lt;/code> is not secure for storing sensitive data such as usernames and passwords and should not be used in a production environment.
&lt;/div>
&lt;p>You can configure the &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/">&lt;code>notation&lt;/code> config.json file&lt;/a> to store the credentials for your OCI-compliant registry as base64 encoded values. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;auths&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;&amp;lt;registry&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;auth&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;base64encoded&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="use-notation-login-to-authenticate-to-an-oci-compliant-registry">Use &lt;code>notation login&lt;/code> to authenticate to an OCI-compliant registry&lt;/h2>
&lt;p>To authenticate to an OCI-compliant registry, use the &lt;code>notation login&lt;/code> command with your registry, username, and password. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation login -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt; &amp;lt;registry&amp;gt;
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
If &lt;code>notation login&lt;/code> is failing, you may need to &lt;a href="#configure-a-credentials-store">Configure a credentials store&lt;/a>. Alternatively in development and testing environments, you can use &lt;a href="#configure-environment-variables-to-authenticate-to-an-oci-compliant-registry">environment variables&lt;/a> to authenticate to an OCI-compliant registry.
&lt;/div>
&lt;h2 id="use-notation-logout-to-log-out-of-an-oci-compliant-registry">Use &lt;code>notation logout&lt;/code> to log out of an OCI-compliant registry&lt;/h2>
&lt;p>To log out of an OCI-compliant registry, use the &lt;code>notation logout&lt;/code> command with your registry. For example:&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
&lt;p>Using &lt;code>notation logout&lt;/code> will remove the credentials from the configured credentials store. If you are using the Docker configuration file as your credentials store, &lt;code>notation logout&lt;/code> will remove the credentials from the Docker configuration file.&lt;/p>
&lt;p>If both the Docker configuration file and the &lt;code>notation&lt;/code> configuration file are configured with a credentials store, &lt;code>notation logout&lt;/code> will remove the credentials from credentials stored configured in the &lt;code>notation&lt;/code> configuration file.&lt;/p>
&lt;/div>
&lt;pre>&lt;code class="language-console" data-lang="console">notation logout &amp;lt;registry&amp;gt;
&lt;/code>&lt;/pre>&lt;h2 id="oci-compliant-registries">OCI-compliant registries&lt;/h2>
&lt;p>For a full list of OCI-compliant registries compatible with &lt;code>notation&lt;/code>, see &lt;a href="https://notaryproject.dev/docs/faq/#what-registries-are-compatible-with-notary">OCI-compliant registries&lt;/a>.&lt;/p></description></item><item><title>Docs: Create a trust policy and verify artifacts</title><link>https://notaryproject.dev/docs/user-guides/tutorials/trust-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/tutorials/trust-policy/</guid><description>
&lt;p>As part of the process to verify a container image with Notation, you need to configure the trust policy to specify trusted identities that sign the artifacts, and the level of signature verification to use. For more details, see &lt;a href="https://github.com/notaryproject/notaryproject/blob/v1.0.0/specs/trust-store-trust-policy.md#trust-store" target="_blank" rel="noopener">trust policy spec&lt;/a>.&lt;/p>
&lt;p>This tutorial shows you how to create a trust policy with different trusted identities and levels of signature verification.&lt;/p>
&lt;h2 id="create-an-example-registry-with-an-image">Create an example registry with an image&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
The following example creates a registry with &lt;a href="https://github.com/oras-project/distribution/pkgs/container/registry" target="_blank" rel="noopener">oras-project/registry&lt;/a>. This registry should only be used for development purposes. When using other registries, ensure the registry is compatible with OCI Image specification v1.1.0. Starting with &lt;code>v1.0.0-rc.1&lt;/code> of &lt;code>notation&lt;/code>, by default, signatures are stored using &lt;a href="https://github.com/opencontainers/image-spec/blob/v1.1.0-rc2/artifact.md" target="_blank" rel="noopener">OCI Artifact Manifest&lt;/a>, which is defined in &lt;a href="https://github.com/opencontainers/image-spec/tree/v1.1.0-rc2" target="_blank" rel="noopener">OCI Image spec v1.1.0&lt;/a>).
&lt;/div>
&lt;pre>&lt;code class="language-console" data-lang="console">docker run -d -p 5000:5000 ghcr.io/oras-project/registry:v1.0.0-rc.3
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
For Apple silicon, add the &lt;code>--platform linux/arm64&lt;/code> parameter.
&lt;/div>
&lt;p>Use &lt;code>docker buildx build&lt;/code> and &lt;code>docker push&lt;/code> to build and push a sample image to your registry.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker buildx build -t localhost:5000/net-monitor:v1 https://github.com/wabbit-networks/net-monitor.git#main
docker push localhost:5000/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>Save the digest value of the image from the output of &lt;code>docker push&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-output" data-lang="output">The push refers to repository [localhost:5000/net-monitor]
2556c54bfdf3: Pushed
fb6ca4f9c8d3: Pushed
ded7a220bb05: Pushed
v1: digest: sha256:1111111111111111111111111111111111111111111111111111111111111111 size: 942
&lt;/code>&lt;/pre>&lt;p>In the above example, the digest value of the image is &lt;em>&lt;code>sha256:1111111111111111111111111111111111111111111111111111111111111111&lt;/code>&lt;/em>.&lt;/p>
&lt;h2 id="create-example-certificates-and-sign-the-image">Create example certificates and sign the image&lt;/h2>
&lt;p>Use &lt;code>notation cert generate-test&lt;/code> to generate three example certificates and trust stores for signing the image.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert generate-test valid-example
notation cert generate-test expired-example
notation cert generate-test missing-example
&lt;/code>&lt;/pre>&lt;ul>
&lt;li>The &lt;em>valid-example&lt;/em> certificate and trust store will be used to sign the image with a valid signature.&lt;/li>
&lt;li>The &lt;em>expired-example&lt;/em> certificate and trust store will be used to sign the image with an expired signature.&lt;/li>
&lt;li>The &lt;em>missing-example&lt;/em> certificate and trust store will not be used to sign the image, but will be used to demonstrate the trust policy.&lt;/li>
&lt;/ul>
&lt;p>Use &lt;code>notation ls&lt;/code> to list the current signatures for your image. The following example sets the value of &lt;em>$IMAGE&lt;/em> to the name of the image and its digest value.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Always use the digest value of an image when signing since they are immutable. Tag values are mutable and can reference a different container image than the original signed container image.
&lt;/div>
&lt;pre>&lt;code class="language-console" data-lang="console">IMAGE=localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
notation ls $IMAGE
&lt;/code>&lt;/pre>&lt;p>Confirm there are no signatures listed.&lt;/p>
&lt;p>Use &lt;code>notation sign&lt;/code> to sign the image with two different signatures.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation sign $IMAGE -k valid-example
notation sign $IMAGE --expiry 30s -k expired-example
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>notation ls&lt;/code> to confirm there are two signatures.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation ls $IMAGE
localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
└── application/vnd.cncf.notary.v2.signature
├── sha256:2222222222222222222222222222222222222222222222222222222222222222
├── sha256:3333333333333333333333333333333333333333333333333333333333333333
&lt;/code>&lt;/pre>&lt;h2 id="create-a-trust-policy">Create a trust policy&lt;/h2>
&lt;p>Create a &lt;code>trustpolicy.json&lt;/code> with the following trust policy in the notation configuration directory.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
For Linux, the notation configuration directory is &lt;code>${HOME}/.config/notation/&lt;/code>. For macOS, the notation configuration directory is &lt;code>${HOME}/Library/Application\ Support/notation/&lt;/code>. For Windows, the notation configuration folder is &lt;code>%USERPROFILE%\AppData\Roaming\notation\&lt;/code>.
&lt;/div>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;trust-policy-example&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;strict&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:valid-example&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above example has a verification level of &lt;em>strict&lt;/em> and uses the &lt;em>valid-example&lt;/em> trust store.&lt;/p>
&lt;h2 id="verify-image-signatures-using-the-trust-policy">Verify image signatures using the trust policy&lt;/h2>
&lt;p>The trust policy you created in the previous step uses a verification level of &lt;em>strict&lt;/em> but there&amp;rsquo;s also &lt;em>permissive&lt;/em>, &lt;em>audit&lt;/em>, and &lt;em>skip&lt;/em>. For more details on see &lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/trust-store-trust-policy.md#trust-policy" target="_blank" rel="noopener">trust policy spec&lt;/a>.&lt;/p>
&lt;p>Use &lt;code>notation verify&lt;/code> to verify the image using the &lt;em>strict&lt;/em> verification level and &lt;em>valid-example&lt;/em> trust store and confirm it succeeds.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE
Successfully verified signature for localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
&lt;/code>&lt;/pre>&lt;p>Update the trust store to use the &lt;em>expired-example&lt;/em> trust store.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;trust-policy-example&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;strict&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:expired-example&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation verify&lt;/code> to verify the image using the &lt;em>strict&lt;/em> verification level and &lt;em>expired-example&lt;/em> trust store and confirm it fails.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE
Error: signature verification failed for all the signatures associated with localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
&lt;/code>&lt;/pre>&lt;p>This example fails because the &lt;em>strict&lt;/em> verification level does not allow expired certificates. When creating the &lt;em>expired-example&lt;/em> certificate and trust store, the certificate&amp;rsquo;s expiration was set for 30 seconds.&lt;/p>
&lt;p>Update the trust policy to use the &lt;em>permissive&lt;/em> verification level, which only logs if there is an expired certificate.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;trust-policy-example&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;permissive&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:expired-example&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation verify&lt;/code> to verify the image using the &lt;em>permissive&lt;/em> verification level and &lt;em>expired-example&lt;/em> trust store and confirm it succeeds while logging the expired certificate.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE
Warning: expiry was set to &amp;quot;logged&amp;quot; and failed with error: digital signature has expired on &amp;quot;Fri, 09 Dec 2022 16:30:07 -0600&amp;quot;
Successfully verified signature for localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
&lt;/code>&lt;/pre>&lt;p>Update the trust policy to use the &lt;em>missing-example&lt;/em> trust store.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;trust-policy-example&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;permissive&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:missing-example&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation verify&lt;/code> to verify the image using the &lt;em>permissive&lt;/em> verification level and &lt;em>missing-example&lt;/em> trust store and confirm it fails.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE
Error: signature verification failed for all the signatures associated with localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
&lt;/code>&lt;/pre>&lt;p>This example fails because the &lt;em>permissive&lt;/em> verification level does not allow missing certificates. When creating the &lt;em>missing-example&lt;/em> certificate and trust store, the certificate was not used to sign the image.&lt;/p>
&lt;p>Update the trust store to use the &lt;em>audit&lt;/em> verification level.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;trust-policy-example&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;audit&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:missing-example&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation verify&lt;/code> to verify the image using the &lt;em>audit&lt;/em> verification level and &lt;em>missing-example&lt;/em> trust store and confirm it succeeds while logging the missing certificate.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE
Warning: authenticity was set to &amp;quot;logged&amp;quot; and failed with error: signature is not produced by a trusted signer
Successfully verified signature for localhost:5000/net-monitor@sha256:1111111111111111111111111111111111111111111111111111111111111111
&lt;/code>&lt;/pre>&lt;h2 id="cleanup">Cleanup&lt;/h2>
&lt;h3 id="remove-the-notation-configuration">Remove the notation configuration&lt;/h3>
&lt;p>To remove local keys, self-signed certificates, and notation configurations, remove the notation configuration directory.&lt;/p>
&lt;p>For linux:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">rm -r ${HOME}/.config/notation/
&lt;/code>&lt;/pre>&lt;p>For macOS:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">rm -r ${HOME}/Library/Application\ Support/notation/
&lt;/code>&lt;/pre>&lt;p>For Windows, delete the directory &lt;code>%USERPROFILE%\AppData\Roaming\notation\&lt;/code>&lt;/p>
&lt;h3 id="remove-the-registry">Remove the registry&lt;/h3>
&lt;p>To remove the registry running on your development computer:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker rm -f $(docker ps -q)
&lt;/code>&lt;/pre></description></item><item><title>Docs: Install the notation CLI</title><link>https://notaryproject.dev/docs/user-guides/installation/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/installation/cli/</guid><description>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
&lt;code>notation&lt;/code> v2.0.0-alpha.1 is for testing purposes and not stable yet. The features in this release are subject to change until it reaches stable release v2.0.0.
&lt;/div>
&lt;h2 id="download-and-install-the-cli-for-linux">Download and install the CLI for Linux&lt;/h2>
&lt;p>Download the latest stable release of the notation CLI binary for Linux and checksum file, then verify the integrity of the download.&lt;/p>
&lt;p>Set the &lt;code>NOTATION_VERSION&lt;/code> environment variable to the version of notation you want to download. The latest version is &lt;code>2.0.0-alpha.1&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">export NOTATION_VERSION=2.0.0-alpha.1
&lt;/code>&lt;/pre>&lt;p>For ARM processors:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_linux_arm64.tar.gz
curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_checksums.txt
shasum --check notation_$NOTATION_VERSION\_checksums.txt
&lt;/code>&lt;/pre>&lt;p>For x86 processors:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_linux_amd64.tar.gz
curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_checksums.txt
shasum --check notation_$NOTATION_VERSION\_checksums.txt
&lt;/code>&lt;/pre>&lt;p>Confirm the &lt;code>shasum&lt;/code> command succeeds for the archive file you downloaded. For example, the following shows a successful checksum verification for the &lt;code>notation_2.0.0-alpha.1_linux_arm64.tar.gz&lt;/code> archive file:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">...
shasum: notation_2.0.0-alpha.1_windows_amd64.zip: No such file or directory
notation_2.0.0-alpha.1_windows_amd64.zip: FAILED open or read
shasum: notation_2.0.0-alpha.1_linux_amd64.tar.gz: No such file or directory
notation_2.0.0-alpha.1_linux_amd64.tar.gz: FAILED open or read
notation_2.0.0-alpha.1_linux_arm64.tar.gz: OK
shasum: notation_2.0.0-alpha.1_darwin_amd64.tar.gz: No such file or directory
notation_2.0.0-alpha.1_darwin_amd64.tar.gz: FAILED open or read
shasum: notation_2.0.0-alpha.1_darwin_arm64.tar.gz: No such file or directory
notation_2.0.0-alpha.1_darwin_arm64.tar.gz: FAILED open or read
shasum: WARNING: 4 listed files could not be read
...
&lt;/code>&lt;/pre>&lt;p>Expand the archive file directly into &lt;code>/usr/bin/&lt;/code>:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">tar xvzf &amp;lt;ARCHIVE_FILE&amp;gt; -C /usr/bin/ notation
&lt;/code>&lt;/pre>&lt;p>Alternatively, you can expand the archive file to a different directory and add it to your path. For example, the following command expands the archive file to &lt;code>&amp;lt;EXAMPLE_PATH&amp;gt;/notation-cli/&lt;/code> and adds it to your path using the &lt;code>PATH&lt;/code> variable in &lt;code>~/.bashrc&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">tar xvzf &amp;lt;ARCHIVE_FILE&amp;gt; -C &amp;lt;EXAMPLE_PATH&amp;gt;/notation-cli/ notation
echo 'export PATH=&amp;quot;$PATH:&amp;lt;EXAMPLE_PATH&amp;gt;/notation-cli/&amp;quot;' &amp;gt;&amp;gt; ~/.bashrc
&lt;/code>&lt;/pre>&lt;h2 id="download-and-install-the-cli-for-macos">Download and install the CLI for macOS&lt;/h2>
&lt;p>Download the latest stable release of the notation CLI binary for macOS and checksum file, then verify the integrity of the download.&lt;/p>
&lt;p>Set the &lt;code>NOTATION_VERSION&lt;/code> environment variable to the version of notation you want to download. The latest version is &lt;code>2.0.0-alpha.1&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">export NOTATION_VERSION=2.0.0-alpha.1
&lt;/code>&lt;/pre>&lt;p>For Apple Silicon processors:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_darwin_arm64.tar.gz
curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_checksums.txt
shasum --check notation_$NOTATION_VERSION\_checksums.txt
&lt;/code>&lt;/pre>&lt;p>For Intel processors:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_darwin_amd64.tar.gz
curl -LO https://github.com/notaryproject/notation/releases/download/v$NOTATION_VERSION/notation_$NOTATION_VERSION\_checksums.txt
shasum --check notation_$NOTATION_VERSION\_checksums.txt
&lt;/code>&lt;/pre>&lt;p>Confirm the &lt;code>shasum&lt;/code> command succeeds for the archive file you downloaded. For example, the following shows a successful checksum verification for the &lt;code>notation_2.0.0-alpha.1_darwin_amd64.tar.gz&lt;/code> archive file:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">...
shasum: notation_2.0.0-alpha.1_windows_amd64.zip: No such file or directory
notation_2.0.0-alpha.1_windows_amd64.zip: FAILED open or read
shasum: notation_2.0.0-alpha.1_linux_amd64.tar.gz: No such file or directory
notation_2.0.0-alpha.1_linux_amd64.tar.gz: FAILED open or read
shasum: notation_2.0.0-alpha.1_linux_arm64.tar.gz: No such file or directory
notation_2.0.0-alpha.1_linux_arm64.tar.gz: FAILED open or read
notation_2.0.0-alpha.1_darwin_amd64.tar.gz: OK
shasum: notation_2.0.0-alpha.1_darwin_arm64.tar.gz: No such file or directory
notation_2.0.0-alpha.1_darwin_arm64.tar.gz: FAILED open or read
shasum: WARNING: 4 listed files could not be read
...
&lt;/code>&lt;/pre>&lt;p>Expand the archive file directly into &lt;code>/usr/local/bin&lt;/code>:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">sudo tar xvzf &amp;lt;ARCHIVE_FILE&amp;gt; -C /usr/local/bin/ notation
&lt;/code>&lt;/pre>&lt;p>Alternatively, you can expand the archive file to a different directory and add it to your path. For example, the following command expands the archive file to &lt;code>&amp;lt;EXAMPLE_PATH&amp;gt;/notation-cli/&lt;/code> and adds it to your path using the &lt;code>PATH&lt;/code> variable in &lt;code>~/.zshhrc&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">tar xvzf &amp;lt;ARCHIVE_FILE&amp;gt; -C &amp;lt;EXAMPLE_PATH&amp;gt;/notation-cli/ notation
echo 'export PATH=&amp;quot;$PATH:&amp;lt;EXAMPLE_PATH&amp;gt;/notation-cli/&amp;quot;' &amp;gt;&amp;gt; ~/.zshrc
&lt;/code>&lt;/pre>&lt;h2 id="download-and-install-the-cli-for-windows">Download and install the CLI for Windows&lt;/h2>
&lt;p>Download the latest stable release of the notation CLI binary for Windows and checksum file:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/notation/releases/download/v2.0.0-alpha.1/notation_2.0.0-alpha.1_windows_amd64.zip" target="_blank" rel="noopener">notation_2.0.0-alpha.1_windows_amd64.zip&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notation/releases/download/v2.0.0-alpha.1/notation_2.0.0-alpha.1_checksums.txt" target="_blank" rel="noopener">notation_2.0.0-alpha.1_checksums.txt&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Use the &lt;a href="https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-7.3" target="_blank" rel="noopener">Get-FileHash&lt;/a> command in powershell to generate the hash of the archive file.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">(Get-FileHash .\notation_2.0.0-alpha.1_windows_amd64.zip).Hash
&lt;/code>&lt;/pre>&lt;p>Compare the results of the command with the value in the checksum file. The two values should match.&lt;/p>
&lt;p>Expand the archive file and add &lt;code>notation.exe&lt;/code> to &lt;code>%ProgramFiles%/notation/bin&lt;/code>&lt;/p>
&lt;p>Alternatively, you can expand the archive file to a different directory and add it to your path.&lt;/p>
&lt;h2 id="additional-configuration">Additional configuration&lt;/h2>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;code>notation&lt;/code> automatically creates the &lt;code>NOTATION_CONFIG&lt;/code> directory if it does not exist.
&lt;/div>
&lt;p>For more on the &lt;code>NOTATION_CONFIG&lt;/code> directory and configuring your environment with &lt;code>notation&lt;/code> see:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/">Notation directory structure for system configuration&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/how-to/notation-config-file/">Customize the Notation configuration file&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Docs: Overview</title><link>https://notaryproject.dev/docs/notary-project-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/notary-project-overview/</guid><description>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>The Notary Project is a set of specifications and tools intended to provide a cross-industry standard for securing software supply chains by using authentic container images and other OCI artifacts. Notation Project specifications and tooling provides signing and verification workflows for OCI artifacts, signature portability across OCI compliant registries, and integration with 3rd party key management solutions through a plugin model. Notary Project is also the name of the GitHub organization that has multiple prominent subprojects like Notation, Notary Project specifications, and Notary. Very often we use the name Notary Project to refer to all the above as well as the community that drives the specifications and the implementations. To learn more about Notary Project terms, please refer to the &lt;a href="https://notaryproject.dev/docs/faq/#notary-project-terms" target="_blank" rel="noopener">FAQ&lt;/a>.&lt;/p>
&lt;p>Here is a list of repositories under the Notary Project organization&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Repository&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/.github" target="_blank" rel="noopener">.github&lt;/a>&lt;/td>
&lt;td>This repository contains the Notary Project governance and other common documents that are shared across all repositories under the Notary Project organization.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/meeting-notes" target="_blank" rel="noopener">meeting-notes&lt;/a>&lt;/td>
&lt;td>This repository contains the archived meeting notes.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/notary" target="_blank" rel="noopener">notary&lt;/a>&lt;/td>
&lt;td>This repository contains the source code for the server and the client of the initial TUF-based implementation circa 2016.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/specifications" target="_blank" rel="noopener">specifications&lt;/a>&lt;/td>
&lt;td>This repository contains the latest Notary Project requirements, scenarios, specifications, and security audits to overcome the challenges from the initial implementation of 2016.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/notaryproject.dev" target="_blank" rel="noopener">notaryproject.dev&lt;/a>&lt;/td>
&lt;td>This repository contains the source code and content for the &lt;a href="https://notaryproject.dev" target="_blank" rel="noopener">Notary Project website&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/notation" target="_blank" rel="noopener">notation&lt;/a>&lt;/td>
&lt;td>This repository contains the source code for the convenient CLI implementation of the new Notary Project specifications.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/notation-go" target="_blank" rel="noopener">notation-go&lt;/a>&lt;/td>
&lt;td>This repository contains the source code for the convenient Golang library implementation of the new Notary Project signing and verification flow.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/notation-core-go" target="_blank" rel="noopener">notation-core-go&lt;/a>&lt;/td>
&lt;td>This repository contains the source code for the Golang library implementation of the Notary Project signature (hereafter &amp;ldquo;Notary Project signature&amp;rdquo;) specification and wrapping (COSE and JWS).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/roadmap" target="_blank" rel="noopener">roadmap&lt;/a>&lt;/td>
&lt;td>This repository is intended for keeping track of development activities in the Notary Project. It may be retired in the future as feature request and milestones are moved to the appropriate repositories.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/notaryproject/tuf" target="_blank" rel="noopener">tuf&lt;/a>&lt;/td>
&lt;td>This repository is intended for prototyping the storage of TUF metadata in OCI-compliant registries. It is not under active development at the moment but there are plans to revive it in the future.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="project-status">Project status&lt;/h2>
&lt;p>The Notary Project is in active development. The latest release announcements are published on the &lt;a href="https://notaryproject.dev/blog/" target="_blank" rel="noopener">Notary Project blog&lt;/a>. The Notary Project community uses the &lt;a href="https://github.com/orgs/notaryproject/projects/10" target="_blank" rel="noopener">project board&lt;/a> for project planning and status tracking. You can also use GitHub milestones to track the progress of each repository:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/milestones" target="_blank" rel="noopener">The Notary Project specification milestones&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notation/milestones" target="_blank" rel="noopener">notation CLI milestones&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notation-go/milestones" target="_blank" rel="noopener">notation-go library milestones&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notation-core-go/milestones" target="_blank" rel="noopener">notation-core-go library milestones&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notary/milestones" target="_blank" rel="noopener">notary milestones&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="security">Security&lt;/h2>
&lt;p>The Notary Project has a continuous fuzz testing implemented for the following repositories: &lt;code>notary&lt;/code>, &lt;code>notation-go&lt;/code>, and &lt;code>notation-core-go&lt;/code>.&lt;/p>
&lt;p>In addition, the Notary Project has had several public security audits:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/blob/v1.0.0/security/reports/audit/ADA-notation-security-audit-23.pdf" target="_blank" rel="noopener">Jul 7, 2023 by ADA Logics&lt;/a> security audit covering &lt;code>notation&lt;/code>, &lt;code>notation-go&lt;/code>, and &lt;code>notation-core-go&lt;/code> repositories.&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/blob/v1.0.0/security/reports/fuzzing/ADA-fuzzing-audit-22-23.pdf" target="_blank" rel="noopener">Mar 21, 2023 by ADA Logics&lt;/a> fuzz testing audit covering &lt;code>notary&lt;/code>, &lt;code>notation-go&lt;/code>, and &lt;code>notation-core-go&lt;/code> repositories.&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notary/blob/master/docs/resources/cure53_tuf_notary_audit_2018_08_07.pdf" target="_blank" rel="noopener">August 7, 2018 by Cure53&lt;/a>) covering TUF and the &lt;code>notary&lt;/code> repository.&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/notary/blob/master/docs/resources/ncc_docker_notary_audit_2015_07_31.pdf" target="_blank" rel="noopener">July 31, 2015 by NCC&lt;/a> covering &lt;code>notary&lt;/code> repository.&lt;/li>
&lt;/ul>
&lt;h2 id="community">Community&lt;/h2>
&lt;p>You can reach the Notary Project community and developers via the following channels:&lt;/p>
&lt;ul>
&lt;li>Join the &lt;a href="https://app.slack.com/client/T08PSQ7BQ/CQUH8U287/" target="_blank" rel="noopener">Notary Project Slack channel&lt;/a> for discussions and to ask questions.&lt;/li>
&lt;li>Follow the &lt;a href="https://mobile.twitter.com/NotaryProject" target="_blank" rel="noopener">@NotaryProject&lt;/a> for news about the Notary Project.&lt;/li>
&lt;li>Join the &lt;a href="https://notaryproject.dev/community/#community-meetings" target="_blank" rel="noopener">Notary Project community meetings&lt;/a> to stay on top of the latest discussions and development activities.
&lt;ul>
&lt;li>Active meeting notes are captured at the &lt;a href="https://hackmd.io/_vrqBGAOSUC_VWvFzWruZw?view" target="_blank" rel="noopener">Notary Project meeting notes&lt;/a>&lt;/li>
&lt;li>Archived meeting notes are stored in the &lt;a href="https://github.com/notaryproject/meeting-notes" target="_blank" rel="noopener">meeting-notes repository&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Docs: Quickstart: Sign and validate a container image</title><link>https://notaryproject.dev/docs/quickstart-guides/quickstart-sign-image-artifact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/quickstart-guides/quickstart-sign-image-artifact/</guid><description>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Playground&lt;/h4>
You can also follow this guide on online remote cloud interactive playground on killercoda: &lt;a href="https://killercoda.com/notaryproject/scenario/notation">https://killercoda.com/notaryproject/scenario/notation&lt;/a>
&lt;/div>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Before you begin, you need:&lt;/p>
&lt;ul>
&lt;li>Docker installed and running, such as &lt;a href="https://www.docker.com/products/docker-desktop/" target="_blank" rel="noopener">Docker desktop&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/installation/cli/">Notation CLI&lt;/a> installed and configured.&lt;/li>
&lt;/ul>
&lt;h2 id="create-an-oci-compatible-registry">Create an OCI-compatible registry&lt;/h2>
&lt;p>Create and run an OCI-compatible registry on your development computer using the &lt;a href="https://github.com/distribution/distribution" target="_blank" rel="noopener">distribution/distribution&lt;/a> with the &lt;a href="https://docs.docker.com/registry/spec/api/#deleting-an-image" target="_blank" rel="noopener">image deletion&lt;/a> enabled. The following command creates a registry that is accessible at &lt;code>localhost:5001&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker run -d -p 5001:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true --name registry registry
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
If the host port 5001 is already in use, you can use another host port.
&lt;/div>
&lt;p>If you want to use Notation with other registries, refer to &lt;a href="https://notaryproject.dev/docs/registry-support/">which registries support Notary Project signatures&lt;/a> for more alternatives. See &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/registry-authentication/">Authenticate with OCI-compliant registries&lt;/a> when you log in to another OCI registry.&lt;/p>
&lt;h2 id="add-an-image-to-the-oci-compatible-registry">Add an image to the OCI-compatible registry&lt;/h2>
&lt;p>The following commands build and push the &lt;a href="https://github.com/wabbit-networks/net-monitor#main" target="_blank" rel="noopener">wabbit-networks/net-monitor&lt;/a> container image to your container registry.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker build -t localhost:5001/net-monitor:v1 https://github.com/wabbit-networks/net-monitor.git#main
docker push localhost:5001/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>Get the digest value of the &lt;em>localhost:5001/net-monitor:v1&lt;/em> image using &lt;code>docker inspect&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker inspect --format='{{index .RepoDigests 0}}' localhost:5001/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>Output:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
&lt;/code>&lt;/pre>&lt;p>In the above example, the digest value is &lt;code>sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a&lt;/code>. The reference to the container image using the digest value is &lt;code>localhost:5000/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a&lt;/code>.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Notation resolves the tag to the digest before signing if a tag is used to identify the container image. Always reference and use the image digest instead of a tag since digest is immutable.
&lt;/div>
&lt;h2 id="list-the-signatures-associated-with-the-container-image">List the signatures associated with the container image&lt;/h2>
&lt;p>Use &lt;code>notation ls&lt;/code> to show any signatures associated with the container image you built and pushed in the previous section.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">IMAGE=localhost:5001/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
notation ls $IMAGE
&lt;/code>&lt;/pre>&lt;p>Confirm there are no signatures shown in the output.&lt;/p>
&lt;h2 id="generate-a-test-key-and-self-signed-certificate">Generate a test key and self-signed certificate&lt;/h2>
&lt;p>Use &lt;code>notation cert generate-test&lt;/code> to generate a test RSA key for signing artifacts, and a self-signed X.509 test certificate for verifying artifacts.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
A self-signed certificate should be used for testing or development purposes only.
&lt;/div>
&lt;p>The following command generates a test key and a self-signed X.509 certificate. With the &lt;code>--default&lt;/code> flag, the test key is set as a default signing key. The self-signed X.509 certificate is added to a named trust store &lt;code>wabbit-networks.io&lt;/code> of type &lt;code>ca&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert generate-test --default &amp;quot;wabbit-networks.io&amp;quot;
&lt;/code>&lt;/pre>
&lt;div class="alert alert-note" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
At this time, test key and self-signed certificate files created using &lt;code>notation cert generate-test&lt;/code> can&amp;rsquo;t be removed using only &lt;code>notation key delete&lt;/code> and &lt;code>notation cert delete&lt;/code>. For more details on fully removing the test key and self-signed certificate files, see &lt;a href="https://notaryproject.dev/docs/user-guides/installation/uninstall/#remove-the-test-key-and-self-signed-certificate" target="_blank" rel="noopener">Remove the test key and self-signed certificate&lt;/a>.
&lt;/div>
&lt;p>Use &lt;code>notation key ls&lt;/code> to confirm the signing key is correctly configured. Key name with a &lt;code>*&lt;/code> prefix is the default key.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation key ls
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>notation cert ls&lt;/code> to confirm the certificate is stored in the trust store.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert ls
&lt;/code>&lt;/pre>&lt;h2 id="sign-the-container-image">Sign the container image&lt;/h2>
&lt;p>Use &lt;code>notation sign&lt;/code> to sign the container image.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation sign $IMAGE
&lt;/code>&lt;/pre>&lt;p>By default, the signature format is &lt;code>JWS&lt;/code>. Use &lt;code>--signature-format&lt;/code> to use &lt;a href="https://datatracker.ietf.org/doc/html/rfc8152/" target="_blank" rel="noopener">COSE&lt;/a> signature format.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation sign --signature-format cose $IMAGE
&lt;/code>&lt;/pre>&lt;p>The generated signature is pushed to the registry and the digest of the container image returned.&lt;/p>
&lt;p>Use &lt;code>notation ls&lt;/code> to show the signature associated with the container image.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation ls $IMAGE
&lt;/code>&lt;/pre>&lt;p>Confirm there is one signature, for example:&lt;/p>
&lt;pre>&lt;code class="language-output" data-lang="output">$ notation ls $IMAGE
localhost:5001/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
└── application/vnd.cncf.notary.v2.signature
└── sha256:ba3a68a28648ba18c51a479145fca60d96b43dc96c6ab22f412c89ac56a9038b
&lt;/code>&lt;/pre>&lt;h2 id="create-a-trust-policy">Create a trust policy&lt;/h2>
&lt;p>To verify the container image, configure the trust policy to specify trusted identities that sign the artifacts, and level of signature verification to use. For more details, see &lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/trust-store-trust-policy.md#trust-policy" target="_blank" rel="noopener">trust policy spec&lt;/a>.&lt;/p>
&lt;p>Create a JSON file with the following trust policy, for example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">cat &lt;span style="color:#4e9a06">&amp;lt;&amp;lt;EOF &amp;gt; ./trustpolicy.json
&lt;/span>&lt;span style="color:#4e9a06">{
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;version&amp;#34;: &amp;#34;1.0&amp;#34;,
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;trustPolicies&amp;#34;: [
&lt;/span>&lt;span style="color:#4e9a06"> {
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;name&amp;#34;: &amp;#34;wabbit-networks-images&amp;#34;,
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;registryScopes&amp;#34;: [ &amp;#34;*&amp;#34; ],
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;signatureVerification&amp;#34;: {
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;level&amp;#34; : &amp;#34;strict&amp;#34;
&lt;/span>&lt;span style="color:#4e9a06"> },
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;trustStores&amp;#34;: [ &amp;#34;ca:wabbit-networks.io&amp;#34; ],
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;trustedIdentities&amp;#34;: [
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;*&amp;#34;
&lt;/span>&lt;span style="color:#4e9a06"> ]
&lt;/span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;span style="color:#4e9a06"> ]
&lt;/span>&lt;span style="color:#4e9a06">}
&lt;/span>&lt;span style="color:#4e9a06">EOF&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation policy import&lt;/code> to import the trust policy configuration from a JSON file. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation policy import ./trustpolicy.json
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation policy show&lt;/code> to view the applied policy configuration. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation policy show
&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above JSON creates a trust policy named &lt;code>wabbit-networks-images&lt;/code>. The policy has &lt;code>registryScopes&lt;/code> set to &lt;code>*&lt;/code>, which applies the policy to all the artifacts of any registry. The &lt;code>signatureVerification&lt;/code> is set to &lt;code>strict&lt;/code>, which checks all validations and any failure will fail the signature verification. This policy uses the &lt;code>wabbit-networks.io&lt;/code> trust store of type &lt;code>ca&lt;/code> which was created in the previous step. For more details on trust policies, see &lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/trust-store-trust-policy.md#trust-policy" target="_blank" rel="noopener">trust policy spec&lt;/a>.&lt;/p>
&lt;p>To enable trust policy for specific repositories, set the &lt;code>registryScopes&lt;/code> to those specific repositories. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#4e9a06">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#a40000">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;localhost:5001/net-monitor&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;localhost:5001/nginx&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;localhost:5001/hello-world&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="verify-the-container-image">Verify the container image&lt;/h2>
&lt;p>Use &lt;code>notation verify&lt;/code> to verify signatures associated with the container image.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation verify $IMAGE
&lt;/code>&lt;/pre>&lt;p>The digest of the supplied artifact is returned upon successful verification.&lt;/p>
&lt;h2 id="cleanup">Cleanup&lt;/h2>
&lt;p>To remove the sample registry running on your development computer:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker rm -f registry
&lt;/code>&lt;/pre>&lt;p>To reset your &lt;code>notation&lt;/code> configuration, remove the notation configuration directory. For more details, see &lt;a href="https://notaryproject.dev/docs/user-guides/installation/uninstall/">Remove the configuration files&lt;/a>.&lt;/p></description></item><item><title>Docs: Securely develop plugins for Notation</title><link>https://notaryproject.dev/docs/developer-guides/secure-plugin-development/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/developer-guides/secure-plugin-development/</guid><description>
&lt;div class="alert alert-important" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;p>Best practices for developing and distributing plugins for Notation are covered in the &lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/plugin-extensibility.md" target="_blank" rel="noopener">Notary Project specification for plugins&lt;/a>. Carefully review that specification before developing and distributing plugins for Notation.&lt;/p>
&lt;p>The following guidance is not a substitute for the Notary Project specification for plugins. It is intended to highlight key security considerations for developing and distributing plugins for Notation.&lt;/p>
&lt;/div>
&lt;h2 id="general-security-guidance">General security guidance&lt;/h2>
&lt;p>In general when developing your plugin, ensure you strictly adhere to the &lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/plugin-extensibility.md" target="_blank" rel="noopener">Notary Project specification for plugins&lt;/a>.&lt;/p>
&lt;p>Plugins run as a binary and are invoked by Notation. This means that the plugin has access to the same resources as the user running Notation. This includes access to the filesystem, network, and other resources. Ensure you are only accessing resources that are required for your plugin to function.&lt;/p>
&lt;p>In some cases, your plugin may have access to sensitive data such as private keys. Ensure that you are not leaking this data to the filesystem, network, or other resources, including &lt;code>stdout&lt;/code> and &lt;code>stderr&lt;/code>.&lt;/p>
&lt;p>If using the &lt;code>pluginConfig&lt;/code> key/value store, do not store sensitive data in as the data is not encrypted and is stored as plaintext.&lt;/p>
&lt;h2 id="securely-distributing-plugins">Securely distributing plugins&lt;/h2>
&lt;p>Ensure that you are distributing your plugin from a secure location and over a secure channel. For example, using a website or server you control and using HTTPS. If you are using a public repository, ensure it is a known, reputable repository that uses HTTPS, such as GitHub.&lt;/p>
&lt;p>It is strongly recommended that you provide some way for users to verify the integrity of the plugin binary, such as providing a checksum or signature. This allows users to verify that the plugin binary has not been corrupted or tampered with.&lt;/p></description></item><item><title>Docs: Manage trust policies</title><link>https://notaryproject.dev/docs/user-guides/how-to/manage-trust-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/manage-trust-policy/</guid><description>
&lt;p>By default, &lt;code>notation&lt;/code> configures and manages a trust policy in the &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/">configuration directory&lt;/a>. You can directly change the trust policy file in that directory to manage your trust policies.&lt;/p>
&lt;p>Alternatively, you can manage trust policies using the &lt;code>notation policy import&lt;/code> and &lt;code>notation policy show&lt;/code> commands. These commands have the following benefits over directly editing the default trust policy file:&lt;/p>
&lt;ul>
&lt;li>Significantly easier to manage multiple trust policies&lt;/li>
&lt;li>You don&amp;rsquo;t need to know the name and location of the default trust policy file&lt;/li>
&lt;li>Quickly view the current trust policy&lt;/li>
&lt;/ul>
&lt;p>To view the current trust policy, use &lt;code>notation policy show&lt;/code>:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation policy show
&lt;/code>&lt;/pre>&lt;p>The following output shows an example of a trust policy:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation policy show
{
&amp;quot;version&amp;quot;: &amp;quot;1.0&amp;quot;,
&amp;quot;trustPolicies&amp;quot;: [
{
&amp;quot;name&amp;quot;: &amp;quot;wabbit-networks-images&amp;quot;,
&amp;quot;registryScopes&amp;quot;: [ &amp;quot;*&amp;quot; ],
&amp;quot;signatureVerification&amp;quot;: {
&amp;quot;level&amp;quot; : &amp;quot;strict&amp;quot;
},
&amp;quot;trustStores&amp;quot;: [ &amp;quot;ca:wabbit-networks.io&amp;quot; ],
&amp;quot;trustedIdentities&amp;quot;: [
&amp;quot;*&amp;quot;
]
}
]
}
&lt;/code>&lt;/pre>&lt;p>You can override this trust policy by importing a new trust policy using &lt;code>notation policy import&lt;/code>. For example, if you had the following trust policy defined in &lt;code>permissive-trustpolicy.json&lt;/code>;&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;wabbit-networks-images&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;permissive&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:wabbit-networks.io&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>The following command imports &lt;code>permissive-trustpolicy.json&lt;/code> to override the trust policy:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation policy import ./permissive-trustpolicy.json
&lt;/code>&lt;/pre>&lt;p>The following example output shows &lt;code>notation&lt;/code> importing the trust policy and prompting to confirm overwriting the existing trust policy:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation policy import ./permissive-trustpolicy.json
Existing trust policy configuration found, do you want to overwrite it? [y/N] y
Trust policy configuration imported successfully.
&lt;/code>&lt;/pre>&lt;p>Confirm the new trust policy by running &lt;code>notation policy show&lt;/code> again. Notice that the &lt;code>signatureVerification&lt;/code> level is now &lt;code>permissive&lt;/code>:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation policy show
{
&amp;quot;version&amp;quot;: &amp;quot;1.0&amp;quot;,
&amp;quot;trustPolicies&amp;quot;: [
{
&amp;quot;name&amp;quot;: &amp;quot;wabbit-networks-images&amp;quot;,
&amp;quot;registryScopes&amp;quot;: [ &amp;quot;*&amp;quot; ],
&amp;quot;signatureVerification&amp;quot;: {
&amp;quot;level&amp;quot; : &amp;quot;permissive&amp;quot;
},
&amp;quot;trustStores&amp;quot;: [ &amp;quot;ca:wabbit-networks.io&amp;quot; ],
&amp;quot;trustedIdentities&amp;quot;: [
&amp;quot;*&amp;quot;
]
}
]
}
&lt;/code>&lt;/pre></description></item><item><title>Docs: Quickstart: Sign and validate a non-image artifact</title><link>https://notaryproject.dev/docs/quickstart-guides/quickstart-sign-non-image-artifact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/quickstart-guides/quickstart-sign-non-image-artifact/</guid><description>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Before you begin, you need:&lt;/p>
&lt;ul>
&lt;li>Docker installed and running, such as &lt;a href="https://www.docker.com/products/docker-desktop/" target="_blank" rel="noopener">Docker desktop&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/installation/cli/">Notation CLI&lt;/a> installed and configured.&lt;/li>
&lt;/ul>
&lt;h2 id="create-an-oci-compatible-registry">Create an OCI-compatible registry&lt;/h2>
&lt;p>Create and run an OCI-compatible registry on your development computer using the &lt;a href="https://github.com/distribution/distribution" target="_blank" rel="noopener">distribution/distribution&lt;/a> with the &lt;a href="https://docs.docker.com/registry/spec/api/#deleting-an-image" target="_blank" rel="noopener">image deletion&lt;/a> enabled. The following command creates a registry that is accessible at &lt;code>localhost:5001&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker run -d -p 5001:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true --name registry registry
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
If the host port 5001 is already in use, you can use another host port.
&lt;/div>
&lt;p>If you want to use Notation with other registries, refer to &lt;a href="https://notaryproject.dev/docs/faq/#what-registries-are-compatible-with-notary">which registries are compatible with the Notary Project&lt;/a> for more alternatives. See &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/registry-authentication/">Authenticate with OCI-compliant registries&lt;/a> when you log in to another OCI registry.&lt;/p>
&lt;h2 id="add-an-image-to-the-oci-compatible-registry">Add an image to the OCI-compatible registry&lt;/h2>
&lt;p>The following commands build and push the &lt;a href="https://github.com/wabbit-networks/net-monitor#main" target="_blank" rel="noopener">wabbit-networks/net-monitor&lt;/a> container image to your container registry.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker build -t localhost:5001/net-monitor:v1 https://github.com/wabbit-networks/net-monitor.git#main
docker push localhost:5001/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>Get the digest value of the &lt;em>localhost:5001/net-monitor:v1&lt;/em> image using &lt;code>docker inspect&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker inspect --format='{{index .RepoDigests 0}}' localhost:5001/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>Output:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">localhost:5001/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
&lt;/code>&lt;/pre>&lt;p>In the above example, the digest value is &lt;code>sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a&lt;/code>. The reference to the container image using the digest value is &lt;code>localhost:5000/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a&lt;/code>.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Notation resolves the tag to the digest before signing if a tag is used to identify the container image. Always reference and use the image digest instead of a tag since digest is immutable.
&lt;/div>
&lt;p>Use an environment variable to store the digest value of the container image. This environment variable is used in later steps. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">IMAGE=localhost:5001/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
&lt;/code>&lt;/pre>&lt;h2 id="generate-an-sbom-for-the-container-image">Generate an SBOM for the container image&lt;/h2>
&lt;p>Use &lt;code>docker sbom&lt;/code> to generate an SBOM for the container image. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker sbom --output SBOM.txt $IMAGE
&lt;/code>&lt;/pre>&lt;h2 id="attach-the-sbom-to-the-container-image">Attach the SBOM to the container image&lt;/h2>
&lt;p>Use &lt;code>oras attach&lt;/code> to attach the SBOM to the container image. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">oras attach $IMAGE SBOM.txt --artifact-type example/sbom
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>oras discover&lt;/code> to confirm the SBOM is attached to the container image. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">oras discover $IMAGE -o tree
&lt;/code>&lt;/pre>&lt;p>Confirm the SBOM is attached to the container image. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">localhost:5000/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
└── example/sbom
└── sha256:6cbf7cc5ffa82b030b57ff820d49a86c143d8c6ac483b8e5eead81be8b223fc4
&lt;/code>&lt;/pre>&lt;p>Use an environment variable to store the digest value of the SBOM. This environment variable is used in later steps. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">SBOM=localhost:5000/net-monitor@sha256:6cbf7cc5ffa82b030b57ff820d49a86c143d8c6ac483b8e5eead81be8b223fc4
&lt;/code>&lt;/pre>&lt;h2 id="list-the-signatures-associated-with-the-sbom">List the signatures associated with the SBOM&lt;/h2>
&lt;p>Use &lt;code>notation ls&lt;/code> to show any signatures associated with the SBOM you attached in the previous section.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation ls $SBOM
&lt;/code>&lt;/pre>&lt;p>Confirm there are no signatures shown in the output.&lt;/p>
&lt;h2 id="generate-a-test-key-and-self-signed-certificate">Generate a test key and self-signed certificate&lt;/h2>
&lt;p>Use &lt;code>notation cert generate-test&lt;/code> to generate a test RSA key for signing artifacts, and a self-signed X.509 test certificate for verifying artifacts.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
A self-signed certificate should be used for testing or development purposes only.
&lt;/div>
&lt;p>The following command generates a test key and a self-signed X.509 certificate. With the &lt;code>--default&lt;/code> flag, the test key is set as a default signing key. The self-signed X.509 certificate is added to a named trust store &lt;code>wabbit-networks.io&lt;/code> of type &lt;code>ca&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert generate-test --default &amp;quot;wabbit-networks.io&amp;quot;
&lt;/code>&lt;/pre>
&lt;div class="alert alert-note" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
At this time, test key and self-signed certificate files created using &lt;code>notation cert generate-test&lt;/code> can&amp;rsquo;t be removed using only &lt;code>notation key delete&lt;/code> and &lt;code>notation cert delete&lt;/code>. For more details on fully removing the test key and self-signed certificate files, see &lt;a href="https://notaryproject.dev/docs/user-guides/installation/uninstall/#remove-the-test-key-and-self-signed-certificate" target="_blank" rel="noopener">Remove the test key and self-signed certificate&lt;/a>.
&lt;/div>
&lt;p>Use &lt;code>notation key ls&lt;/code> to confirm the signing key is correctly configured. Key name with a &lt;code>*&lt;/code> prefix is the default key.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation key ls
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>notation cert ls&lt;/code> to confirm the certificate is stored in the trust store.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert ls
&lt;/code>&lt;/pre>&lt;h2 id="sign-the-sbom">Sign the SBOM&lt;/h2>
&lt;p>Use &lt;code>notation sign&lt;/code> to sign the SBOM.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation sign $SBOM
&lt;/code>&lt;/pre>&lt;p>By default, the signature format is &lt;code>JWS&lt;/code>. Use &lt;code>--signature-format&lt;/code> to use &lt;a href="https://datatracker.ietf.org/doc/html/rfc8152/" target="_blank" rel="noopener">COSE&lt;/a> signature format.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation sign --signature-format cose $SBOM
&lt;/code>&lt;/pre>&lt;p>The generated signature is pushed to the registry and the digest of the SBOM is returned.&lt;/p>
&lt;p>Use &lt;code>notation ls&lt;/code> to show the signature associated with the SBOM.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation ls $SBOM
&lt;/code>&lt;/pre>&lt;p>Confirm there is one signature, for example:&lt;/p>
&lt;pre>&lt;code class="language-output" data-lang="output">$ notation ls $SBOM
localhost:5001/net-monitor@sha256:073b75987e95b89f187a89809f08a32033972bb63cda279db8a9ca16b7ff555a
└── application/vnd.cncf.notary.signature
└── sha256:ba3a68a28648ba18c51a479145fca60d96b43dc96c6ab22f412c89ac56a9038b
&lt;/code>&lt;/pre>&lt;h2 id="create-a-trust-policy">Create a trust policy&lt;/h2>
&lt;p>To verify the SBOM, configure the trust policy to specify trusted identities that sign the artifacts, and level of signature verification to use. For more details, see &lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/trust-store-trust-policy.md#trust-policy" target="_blank" rel="noopener">trust policy spec&lt;/a>.&lt;/p>
&lt;p>Create a JSON file with the following trust policy, for example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">cat &lt;span style="color:#4e9a06">&amp;lt;&amp;lt;EOF &amp;gt; ./trustpolicy.json
&lt;/span>&lt;span style="color:#4e9a06">{
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;version&amp;#34;: &amp;#34;1.0&amp;#34;,
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;trustPolicies&amp;#34;: [
&lt;/span>&lt;span style="color:#4e9a06"> {
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;name&amp;#34;: &amp;#34;wabbit-networks-images&amp;#34;,
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;registryScopes&amp;#34;: [ &amp;#34;*&amp;#34; ],
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;signatureVerification&amp;#34;: {
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;level&amp;#34; : &amp;#34;strict&amp;#34;
&lt;/span>&lt;span style="color:#4e9a06"> },
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;trustStores&amp;#34;: [ &amp;#34;ca:wabbit-networks.io&amp;#34; ],
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;trustedIdentities&amp;#34;: [
&lt;/span>&lt;span style="color:#4e9a06"> &amp;#34;*&amp;#34;
&lt;/span>&lt;span style="color:#4e9a06"> ]
&lt;/span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;span style="color:#4e9a06"> ]
&lt;/span>&lt;span style="color:#4e9a06">}
&lt;/span>&lt;span style="color:#4e9a06">EOF&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation policy import&lt;/code> to import the trust policy configuration from a JSON file. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation policy import ./trustpolicy.json
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>notation policy show&lt;/code> to view the applied policy configuration. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation policy show
&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above JSON creates a trust policy named &lt;code>wabbit-networks-images&lt;/code>. The policy has &lt;code>registryScopes&lt;/code> set to &lt;code>*&lt;/code>, which applies the policy to all the artifacts of any registry. The &lt;code>signatureVerification&lt;/code> is set to &lt;code>strict&lt;/code>, which checks all validations and any failure will fail the signature verification. This policy uses the &lt;code>wabbit-networks.io&lt;/code> trust store of type &lt;code>ca&lt;/code> which was created in the previous step. For more details on trust policies, see &lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/trust-store-trust-policy.md#trust-policy" target="_blank" rel="noopener">trust policy spec&lt;/a>.&lt;/p>
&lt;p>To enable trust policy for specific repositories, set the &lt;code>registryScopes&lt;/code> to those specific repositories. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#4e9a06">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#a40000">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;localhost:5001/net-monitor&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;localhost:5001/nginx&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;localhost:5001/hello-world&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="verify-the-container-image">Verify the container image&lt;/h2>
&lt;p>Use &lt;code>notation verify&lt;/code> to verify signatures associated with the SBOM.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation verify $SBOM
&lt;/code>&lt;/pre>&lt;p>The digest of the supplied artifact is returned upon successful verification.&lt;/p>
&lt;h2 id="cleanup">Cleanup&lt;/h2>
&lt;p>To remove the sample registry running on your development computer:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker rm -f registry
&lt;/code>&lt;/pre>&lt;p>To reset your &lt;code>notation&lt;/code> configuration, remove the notation configuration directory. For more details, see &lt;a href="https://notaryproject.dev/docs/user-guides/installation/uninstall/">Remove the configuration files&lt;/a>.&lt;/p></description></item><item><title>Docs: Sign and verify artifacts in CI/CD and GitOps</title><link>https://notaryproject.dev/docs/user-guides/tutorials/cicd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/tutorials/cicd/</guid><description>
&lt;h2 id="cicd">CI/CD&lt;/h2>
&lt;p>Notary Project provides solutions to help users sign and verify artifacts in CI/CD pipelines with Notation GitHub Actions and Azure DevOps. Follow the guidance below to get started Notation in CI/CD.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/marketplace/actions/notation-actions" target="_blank" rel="noopener">Notation GitHub Actions&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://learn.microsoft.com/en-us/azure/security/container-secure-supply-chain/articles/notation-ado-task-sign" target="_blank" rel="noopener">Sign and verify a container image with Notation in Azure DevOps Pipelines&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="gitops">GitOps&lt;/h2>
&lt;p>In addition, Notary Project collaborates with the Flux community to enable signature verification in GitOps. The Flux source-controller supports verifying the authenticity of OCI artifacts signed with Notation. See &lt;a href="https://fluxcd.io/blog/2024/05/flux-v2.3.0/" target="_blank" rel="noopener">Signatures verification with Notation in Flux&lt;/a> for details.&lt;/p></description></item><item><title>Docs: Uninstall the notation CLI and its configuration</title><link>https://notaryproject.dev/docs/user-guides/installation/uninstall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/installation/uninstall/</guid><description>
&lt;p>The &lt;code>notation&lt;/code> CLI uses the following directories for its binaries and configuration files:&lt;/p>
&lt;ul>
&lt;li>&lt;code>NOTATION_BIN&lt;/code> is the directory for the &lt;code>notation&lt;/code> binary.&lt;/li>
&lt;li>&lt;code>NOTATION_LIBEXEC&lt;/code> is the directory for other binaries, such as plugins, used by the &lt;code>notation&lt;/code>.&lt;/li>
&lt;li>&lt;code>NOTATION_CONFIG&lt;/code> is the directory for the configuration files, including trust stores and trust policies.&lt;/li>
&lt;/ul>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;code>notation&lt;/code> has default values for &lt;code>NOTATION_BIN&lt;/code>, &lt;code>NOTATION_LIBEXEC&lt;/code>, or &lt;code>NOTATION_CONFIG&lt;/code>, but &lt;code>notation&lt;/code> does not set those environment variables. These environment variables are optional, but if you wish to override the default values, you can set them to another value. For more details on each directory as well as the default location of those directories on each platform, see &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/" target="_blank" rel="noopener">Notation directory structure for system configuration&lt;/a>.
&lt;/div>
&lt;h2 id="remove-the-notation-cli">Remove the notation CLI&lt;/h2>
&lt;p>Delete the &lt;code>NOTATION_BIN&lt;/code> directory to remove the &lt;code>notation&lt;/code> binary.&lt;/p>
&lt;h2 id="remove-the-additional-binaries">Remove the additional binaries&lt;/h2>
&lt;p>Delete the &lt;code>NOTATION_LIBEXEC&lt;/code> directory to remove the additional binaries, including plugins.&lt;/p>
&lt;h2 id="remove-the-configuration-files">Remove the configuration files&lt;/h2>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;code>notation&lt;/code> automatically creates the &lt;code>NOTATION_CONFIG&lt;/code> directory if it does not exist. If you remove the &lt;code>NOTATION_CONFIG&lt;/code> directory, &lt;code>notation&lt;/code> will recreate the directory the next time you run a command.
&lt;/div>
&lt;p>Delete the &lt;code>NOTATION_CONFIG&lt;/code> directory to remove the configuration files.&lt;/p>
&lt;h2 id="remove-the-test-key-and-self-signed-certificate">Remove the test key and self-signed certificate&lt;/h2>
&lt;p>You can generate a sample test key and self-signed certificate using &lt;code>notation cert generate-test&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert generate-test --default &amp;quot;wabbit-networks.io&amp;quot;
&lt;/code>&lt;/pre>&lt;p>At this time, that key and self-signed certificate files can&amp;rsquo;t be removed using &lt;code>notation key delete&lt;/code> and &lt;code>notation cert delete&lt;/code>. To remove this key and self-signed certificate files, remove the key from the signing list and certificate from the trust store using &lt;code>notation key delete&lt;/code> and &lt;code>notation cert delete&lt;/code>, then manually delete the key and certificate files.&lt;/p>
&lt;p>Use &lt;code>notation key ls&lt;/code> to show the location of the key and certificate files. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation key ls
NAME KEY PATH CERTIFICATE PATH ID PLUGIN NAME
* wabbit-networks.io NOTATION_CONFIG/localkeys/wabbit-networks.io.key NOTATION_CONFIG/localkeys/wabbit-networks.io.crt
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>notation key delete&lt;/code> to remove the key from the signing list. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation key delete wabbit-networks.io
&lt;/code>&lt;/pre>&lt;p>Remove the key file using the path from &lt;code>notation key ls&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">rm NOTATION_CONFIG/localkeys/wabbit-networks.io.key
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>notation cert delete&lt;/code> to remove the certificate reference from the trust store. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert delete --type ca --store wabbit-networks.io wabbit-networks.io.crt
&lt;/code>&lt;/pre>&lt;p>Remove the certificate file using the path from &lt;code>notation key ls&lt;/code>. For example to remove certificate file in BASH:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">rm NOTATION_CONFIG/localkeys/wabbit-networks.io.crt
&lt;/code>&lt;/pre></description></item><item><title>Docs: Customize the Notation configuration file</title><link>https://notaryproject.dev/docs/user-guides/how-to/notation-config-file/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/notation-config-file/</guid><description>
&lt;p>This guide demonstrates how to customize the Notation system configuration in &lt;code>config.json&lt;/code> and signing key in &lt;code>signingkeys.json&lt;/code> respectively. By default, you don&amp;rsquo;t need to create or modify them since Notation has default system settings and signing key configuration unless you want to customize them.&lt;/p>
&lt;h2 id="location">Location&lt;/h2>
&lt;p>The configuration file &lt;code>config.json&lt;/code> location is different per operating system. &lt;code>signingkeys.json&lt;/code> will be generated and stored in the same directory with &lt;code>config.json&lt;/code>. You can use the Notation CLI or libraries to alter locations through the &lt;code>XDG_CONFIG_HOME&lt;/code> environment variable.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
You can find the details of Notation directory structure for system configuration in this &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/" target="_blank" rel="noopener">guide&lt;/a>.
&lt;/div>
&lt;h3 id="linux">Linux&lt;/h3>
&lt;p>&lt;code>config.json&lt;/code> should be manually created and placed in &lt;code>~/.config/notation/config.json&lt;/code>.&lt;/p>
&lt;h3 id="windows">Windows&lt;/h3>
&lt;p>&lt;code>config.json&lt;/code> should be manually created and placed in &lt;code>~/AppData/Roaming/notation/config.json&lt;/code>.&lt;/p>
&lt;h3 id="darwin--macos">Darwin / macOS&lt;/h3>
&lt;p>&lt;code>config.json&lt;/code> should be manually created and placed in &lt;code>~/Library/Application Support/notation/config.json&lt;/code>.&lt;/p>
&lt;h2 id="sample-of-configjson">Sample of config.json&lt;/h2>
&lt;p>You can follow the example below to customize the Notation configuration in &lt;code>config.json&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;credsStore&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;pass&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;credHelpers&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registry.io&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;pass&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureFormat&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;jws&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;insecureRegistries&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;registry.wabbit-networks.io&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>This table explains the properties in &lt;code>config.json&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>credsStore&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>default trust store name. Notation will read the configuration from Docker Credential Store by default unless you configure this filed in &lt;code>config.json&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>credHelpers&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>a registry host name address to trust store name map. Notation will read the configuration from Docker Credential Store by default unless you configure this filed in &lt;code>config.json&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>signatureFormat&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>define the signature envelope format, support jws or cose&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>insecureRegistries&lt;/code>&lt;/td>
&lt;td>&lt;em>array&lt;/em>&lt;/td>
&lt;td>a list of registries that may be used without https&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="sample-of-signingkeysjson">Sample of signingkeys.json&lt;/h2>
&lt;p>Users only needs to interact with &lt;code>notation key&lt;/code> command, which will generate/update this &lt;code>signingkeys.json&lt;/code> file. An example of generated &lt;code>signingkeys.json&lt;/code> is shown below.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;default&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;wabbit-networks&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;keys&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;wabbit-networks&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;id&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;some-remote-key-id&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;pluginName&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;io.cncf.notary.v2.some.plugin&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;import.acme-rockets&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;keyPath&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/home/demo/.config/notation/localkeys/import.acme-rockets.key&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;certPath&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/home/demo/.config/notation/localkeys/import.acme-rockets.crt&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>This table explains the properties in &lt;code>signingkeys.json&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>signingKeys.default&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>signing key to be used when &lt;code>notation sign&lt;/code> is called without &lt;code>--name&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>signingKeys.keys&lt;/code>&lt;/td>
&lt;td>&lt;em>array&lt;/em>&lt;/td>
&lt;td>collection of signing keys&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>key.name&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>named reference to a key&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>key.id&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>identifier of remote key&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>key.pluginName&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>name of plugin that should be used for signing&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>key.keyPath&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>location by which the key can be found by the notation cli or notation libraries&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>key.certPath&lt;/code>&lt;/td>
&lt;td>&lt;em>string&lt;/em>&lt;/td>
&lt;td>location by which the paired certificate can be found by the notation cli or notation libraries&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: Install and manage notation plugins</title><link>https://notaryproject.dev/docs/user-guides/how-to/plugin-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/plugin-management/</guid><description>
&lt;p>Plugins for &lt;code>notation&lt;/code> provide functionality and integration with key stores and signing services. For example:&lt;/p>
&lt;ul>
&lt;li>The &lt;a href="https://github.com/Azure/notation-azure-kv" target="_blank" rel="noopener">notation-azure-kv&lt;/a> plugin allows you to sign a Notation-generated payload with a private key in &lt;a href="https://learn.microsoft.com/en-us/azure/key-vault/general/overview?wt.mc_id=azurelearn_inproduct_oss_notaryproject" target="_blank" rel="noopener">Azure Key Vault&lt;/a>.&lt;/li>
&lt;li>The &lt;a href="https://docs.aws.amazon.com/signer/latest/developerguide/image-signing-prerequisites.html" target="_blank" rel="noopener">AWS Signer plugin for Notation&lt;/a> lets you sign and verify images using Notation with keys and certificates managed by &lt;a href="https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html" target="_blank" rel="noopener">AWS Signer&lt;/a>, a signing service.&lt;/li>
&lt;li>The &lt;a href="https://github.com/Venafi/notation-venafi-csp" target="_blank" rel="noopener">Venafi CodeSign Protect plugin for Notation&lt;/a> enables the secure signing and verification of images using the &lt;a href="https://venafi.com/codesign-protect/" target="_blank" rel="noopener">Venafi CodeSign Protect&lt;/a> platform.&lt;/li>
&lt;/ul>
&lt;h2 id="install-a-plugin">Install a plugin&lt;/h2>
&lt;p>To install a plugin, run the &lt;code>notation plugin install&lt;/code> command to directly install a plugin either from a URL or from the host file system. This will create a &lt;code>{plugin-name}&lt;/code> directory in &lt;code>{NOTATION_LIBEXEC}/plugins/&lt;/code> if the directory does not exist. The supported plugin file formats are &lt;code>.zip, .tar.gz&lt;/code> and &lt;code>single plugin executable file&lt;/code>. Alternatively, if you are using an application that bundles a plugin and the &lt;code>notation&lt;/code> binary together, such as &lt;a href="https://docs.aws.amazon.com/signer/latest/developerguide/image-signing-prerequisites.html" target="_blank" rel="noopener">AWS Signer&lt;/a>, see the installation instructions from the vendor.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Before creating the &lt;code>{plugin-name}&lt;/code> directory, confirm you are using a name that follows the &lt;a href="#plugin-naming-structure">naming structure&lt;/a> for plugins. Plugins that do not follow the naming structure will not be recognized by &lt;code>notation&lt;/code>.
&lt;/div>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;h3 id="install-a-plugin-from-file-system">Install a plugin from file system:&lt;/h3>
&lt;p>&lt;code>notation plugin install --file &amp;lt;file_path&amp;gt;&lt;/code>&lt;/p>
&lt;h3 id="install-a-plugin-from-url">Install a plugin from URL:&lt;/h3>
&lt;p>&lt;code>notation plugin install --sha256sum &amp;lt;digest&amp;gt; --url &amp;lt;HTTPS_URL&amp;gt;&lt;/code>&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">plugin&lt;/h4>
The following examples show how to install each plugin on a Linux AMD64 machine. To install a plugin on other operating systems and architectures, please get the URL or plugin binary file from plugin vendors' website.
&lt;/div>
&lt;h2 id="install-notation-aws-signer-plugin">Install Notation AWS Signer plugin&lt;/h2>
&lt;p>To find out more about the AWS Signer plugin, please refer to their official &lt;a href="https://docs.aws.amazon.com/signer/latest/developerguide/image-signing-prerequisites.html" target="_blank" rel="noopener">documentation&lt;/a>.&lt;/p>
&lt;h3 id="install-from-file-system">Install from file system&lt;/h3>
&lt;pre>&lt;code class="language-console" data-lang="console">wget https://d2hvyiie56hcat.cloudfront.net/linux/amd64/plugin/latest/notation-aws-signer-plugin.zip
notation plugin install --file notation-aws-signer-plugin.zip
Successfully installed plugin com.amazonaws.signer.notation.plugin, version 1.0.298
&lt;/code>&lt;/pre>&lt;p>Upon successful execution, the plugin is copied to Notation&amp;rsquo;s plugin directory.&lt;/p>
&lt;h2 id="install-notation-azure-key-vault-plugin-v102">Install Notation Azure Key Vault Plugin (v1.0.2)&lt;/h2>
&lt;p>To find out more about the Azure Key Vault Plugin, please refer to this &lt;a href="https://github.com/Azure/notation-azure-kv" target="_blank" rel="noopener">GitHub repository&lt;/a>.&lt;/p>
&lt;h3 id="install-from-url">Install from URL:&lt;/h3>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin install --url https://github.com/Azure/notation-azure-kv/releases/download/v1.0.2/notation-azure-kv_1.0.2_linux_amd64.tar.gz --sha256sum f2b2e131a435b6a9742c202237b9aceda81859e6d4bd6242c2568ba556cee20e
Downloading plugin from https://github.com/Azure/notation-azure-kv/releases/download/v1.0.2/notation-azure-kv_1.0.2_linux_amd64.tar.gz
Download completed
Successfully installed plugin azure-kv, version 1.0.2
&lt;/code>&lt;/pre>&lt;h3 id="install-from-local-file">Install from local file:&lt;/h3>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin install --file notation-azure-kv_1.0.2_linux_amd64.tar.gz
Successfully installed plugin azure-kv, version 1.0.2
&lt;/code>&lt;/pre>&lt;h2 id="install-notation-venafi-plugin-v032">Install Notation Venafi Plugin (v0.3.2)&lt;/h2>
&lt;p>To find out more about the Venafi Plugin, please refer to this &lt;a href="https://github.com/Venafi/notation-venafi-csp" target="_blank" rel="noopener">GitHub repository&lt;/a>.&lt;/p>
&lt;h3 id="install-from-url-1">Install from URL:&lt;/h3>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin install --url https://github.com/Venafi/notation-venafi-csp/releases/download/v0.3.2/notation-venafi-csp-linux-amd64.tar.gz --sha256sum f9e52bce64c8b6dcc9a7c8d5e204b911ba29a06fb8c35cefe9fd21cc5693a6d1
Successfully installed plugin venafi-csp, version 0.3.2-release
&lt;/code>&lt;/pre>&lt;h3 id="install-from-local-file-1">Install from local file:&lt;/h3>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin install --file notation-venafi-csp-linux-amd64.tar.gz
Successfully installed plugin venafi-csp, version 0.3.2-release
&lt;/code>&lt;/pre>&lt;p>To confirm you plugin is installed, run &lt;code>notation plugin list&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin list
&lt;/code>&lt;/pre>&lt;p>Confirm the plugin is listed in the output. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation plugin list
NAME DESCRIPTION VERSION CAPABILITIES ERROR
azure-kv Sign artifacts with keys in Azure Key Vault 1.0.2 [SIGNATURE_GENERATOR.RAW] &amp;lt;nil&amp;gt;
com.amazonaws.signer.notation.plugin AWS Signer plugin for Notation 1.0.298 [SIGNATURE_GENERATOR.ENVELOPE SIGNATURE_VERIFIER.TRUSTED_IDENTITY SIGNATURE_VERIFIER.REVOCATION_CHECK] &amp;lt;nil&amp;gt;
venafi-csp Sign artifacts with keys in Venafi CodeSign Protect 0.3.2-release [SIGNATURE_GENERATOR.ENVELOPE SIGNATURE_VERIFIER.TRUSTED_IDENTITY] &amp;lt;nil&amp;gt;
&lt;/code>&lt;/pre>&lt;h2 id="uninstall-a-plugin">Uninstall a plugin&lt;/h2>
&lt;p>To uninstall a plugin, use &lt;code>notation plugin uninstall&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin uninstall &amp;lt;plugin_name&amp;gt;
&lt;/code>&lt;/pre>&lt;p>To confirm your plugin is uninstalled, run &lt;code>notation plugin list&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation plugin list
&lt;/code>&lt;/pre>&lt;h2 id="plugin-naming-structure">Plugin naming structure&lt;/h2>
&lt;p>The &lt;code>notation&lt;/code> CLI strictly follows the &lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/plugin-extensibility.md#plugin-mechanism" target="_blank" rel="noopener">Notary Project specification for plugins&lt;/a>. This includes the naming structure for the plugin binary and the plugin directory. All plugins must be named &lt;code>notation-{plugin-name}&lt;/code> and placed in the &lt;code>{NOTATION_LIBEXEC}/plugins/{plugin-name}/&lt;/code> directory. Also, you can&amp;rsquo;t modify the filename of the plugin binary from the &lt;code>tar.gz&lt;/code> file when installing a plugin.&lt;/p>
&lt;p>For example, the full path to the &lt;a href="https://github.com/Azure/notation-azure-kv" target="_blank" rel="noopener">notation-azure-kv&lt;/a> plugin is &lt;code>{NOTATION_LIBEXEC}/plugins/azure-kv/notation-azure-kv&lt;/code>.&lt;/p>
&lt;p>If the plugin name or plugin directory does not match the naming structure or the plugin name is altered, &lt;code>notation&lt;/code> will not recognize the plugin.&lt;/p>
&lt;h2 id="security-best-practices-for-plugins">Security best practices for plugins&lt;/h2>
&lt;p>Plugins are binaries that run on your host and can receive sensitive information from &lt;code>notation&lt;/code> such as signatures, private keys, and payload data. As a result, it is strongly recommended that you follow these security best practices when using plugins:&lt;/p>
&lt;ul>
&lt;li>Ensure that you only download plugins and their checksums from known, trusted sources&lt;/li>
&lt;li>When available, use checksum verification or signature verification to confirm the plugin binary is not corrupted&lt;/li>
&lt;/ul>
&lt;h2 id="available-plugins">Available plugins&lt;/h2>
&lt;p>The following plugins are currently available for &lt;code>notation&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.aws.amazon.com/signer/latest/developerguide/image-signing-prerequisites.html" target="_blank" rel="noopener">AWS Signer&lt;/a> plugin for Notation. For more details on using this plugin for sign and verify images, see &lt;a href="https://aws.amazon.com/blogs/containers/announcing-container-image-signing-with-aws-signer-and-amazon-eks/" target="_blank" rel="noopener">Notation with AWS Signer&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Azure/notation-azure-kv" target="_blank" rel="noopener">notation-azure-kv&lt;/a>. For more details on using this plugin, see &lt;a href="https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push?wt.mc_id=azurelearn_inproduct_oss_notaryproject" target="_blank" rel="noopener">Sign a Notation-generated payload with a certificate in Azure Key Vault&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://github.com/Venafi/notation-venafi-csp" target="_blank" rel="noopener">Venafi CodeSign Protect&lt;/a> plugin for Notation that leverages the &lt;a href="https://venafi.com/codesign-protect/" target="_blank" rel="noopener">Venafi CodeSign Protect&lt;/a> platform. For more details on using this plugin, see the usage &lt;a href="https://github.com/Venafi/notation-venafi-csp/blob/main/README.md" target="_blank" rel="noopener">instructions&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Docs: Manage images as OCI image layout</title><link>https://notaryproject.dev/docs/user-guides/how-to/oci-image-layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/oci-image-layout/</guid><description>
&lt;p>OCI image layout is a directory structure that contains files and folders that refer to an OCI image. OCI image layout is defined in &lt;a href="https://github.com/opencontainers/image-spec/blob/v1.1.0-rc2/image-layout.md" target="_blank" rel="noopener">OCI image spec&lt;/a>. Using OCI image layout, you can sign images on local disk before pushing them to the remote registry.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
This feature is experimental. It is not recommended for production use.
&lt;/div>
&lt;h2 id="create-oci-image-layout-for-an-image">Create OCI image layout for an image&lt;/h2>
&lt;p>Use &lt;code>docker buildx build&lt;/code> with the &lt;code>--output type=oci&lt;/code> flag to create an OCI image layout for an image.&lt;/p>
&lt;p>For example, create a Dockerfile with the following content:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-dockerfile" data-lang="dockerfile">&lt;span style="color:#204a87;font-weight:bold">FROM&lt;/span>&lt;span style="color:#4e9a06"> alpine&lt;/span>&lt;span style="color:#a40000">
&lt;/span>&lt;span style="color:#a40000">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">CMD&lt;/span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;hello world!&amp;#39;&lt;/span>&lt;span style="color:#a40000">
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use &lt;code>docker buildx create&lt;/code> and &lt;code>docker buildx build&lt;/code> to create an OCI image layout for the image defined in the Dockerfile.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker buildx create --use
docker buildx build . -f Dockerfile -o type=oci,dest=hello-world.tar -t hello-world:v1
&lt;/code>&lt;/pre>&lt;p>The above example sets &lt;code>output=hello-world.tar&lt;/code> to save the OCI image layout as a tar file named &lt;code>hello-world.tar&lt;/code>. To view the OCI image layout as a directory structure, extract the tar file.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">mkdir hello-world
tar -xf ./hello-world.tar -C hello-world
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
You must extract the tar file before you can sign an image as an OCI image layout.
&lt;/div>
&lt;h2 id="sign-an-image-as-an-oci-image-layout">Sign an image as an OCI image layout&lt;/h2>
&lt;p>To sign an existing image as an OCI image layout, enable the &lt;code>NOTATION_EXPERIMENTAL&lt;/code> environment variable and use the &lt;code>notation sign&lt;/code> command with the &lt;code>--oci-layout&lt;/code> flag. The following example enables the &lt;code>NOTATION_EXPERIMENTAL&lt;/code> environment variable, creates a self-signed certificate, and signs the image &lt;code>hello-world:v1&lt;/code> as an OCI image layout.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">export NOTATION_EXPERIMENTAL=1
notation cert generate-test wabbit-networks.io --default
notation sign --oci-layout ./hello-world:v1
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Signatures are stored in the same OCI image layout directory, and associated with OCI image.
&lt;/div>
&lt;p>Use &lt;code>notation list --oci-layout&lt;/code> to list signatures associated with an OCI image layout.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation list --oci-layout ./hello-world:v1
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="verify-an-image-as-an-oci-image-layout">Verify an image as an OCI image layout&lt;/h2>
&lt;p>You can verify an image as an OCI image layout using &lt;code>notation verify --scope&lt;/code> and setting &lt;code>registryScopes&lt;/code> in your trust policy. For example, the following trust policy has &lt;code>registryScopes&lt;/code> set to &lt;code>local/hello-world&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;local-images-policy&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;local/hello-world&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;strict&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ca:wabbit-networks.io&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;*&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>The following command imports &lt;code>permissive-trustpolicy.json&lt;/code>:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation policy import ./permissive-trustpolicy.json
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>notation verify&lt;/code> with &lt;code>--scope&lt;/code> set to the same value you set in your trust policy to verify the image against signatures:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation verify --oci-layout ./hello-world:v1 --scope &lt;span style="color:#4e9a06">&amp;#34;local/hello-world&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="push-an-oci-image-layout-to-a-remote-registry">Push an OCI image layout to a remote registry&lt;/h2>
&lt;p>You can push an image to a remote registry as an OCI image layout on local disk using the &lt;a href="https://oras.land/docs/CLI/installation" target="_blank" rel="noopener">oras&lt;/a> CLI.&lt;/p>
&lt;p>If you need a remote registry, you can create and run an OCI-compatible registry on your development computer using the &lt;a href="https://github.com/distribution/distribution" target="_blank" rel="noopener">distribution/distribution&lt;/a> with the &lt;a href="https://docs.docker.com/registry/spec/api/#deleting-an-image" target="_blank" rel="noopener">image deletion&lt;/a> enabled. The following command creates a registry that is accessible at &lt;code>localhost:5001&lt;/code>.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">docker run -d -p 5001:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true --name registry registry
&lt;/code>&lt;/pre>&lt;p>Use &lt;code>oras cp&lt;/code> to push the OCI image layout to the remote registry. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">oras cp ./hello-world:v1 --from-oci-layout -r localhost:5001/hello-world:v1
&lt;/code>&lt;/pre>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
You must use the flag &lt;code>-r&lt;/code> so that the signatures are copied together with the image.
&lt;/div>
&lt;p>Use &lt;code>notation list&lt;/code> and &lt;code>notation verify&lt;/code> to list and verify the image signatures. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation list localhost:5001/hello-world:v1
notation verify localhost:5001/hello-world:v1
&lt;/code>&lt;/pre>&lt;h2 id="oci-compliant-registries">OCI-compliant registries&lt;/h2>
&lt;p>For a full list of OCI-compliant registries compatible with &lt;code>notation&lt;/code>, see &lt;a href="https://notaryproject.dev/docs/faq/#what-registries-are-compatible-with-notary">OCI-compliant registries&lt;/a>.&lt;/p></description></item><item><title>Docs: Securely deploying Notation</title><link>https://notaryproject.dev/docs/user-guides/secure-deployment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/secure-deployment/</guid><description>
&lt;p>A deployment of Notation, specifically the &lt;code>notation&lt;/code> CLI, is used for signing and verifying container images. The &lt;code>notation&lt;/code> CLI is usually deployed on a development computer or in a CI/CD pipeline, such as GitHub Actions.&lt;/p>
&lt;p>A deployment has several sensitive components:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/how-to/manage-trust-policy/">Trust policies&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/how-to/directory-structure/">Trust stores and certificates&lt;/a>&lt;/li>
&lt;li>Plugins&lt;/li>
&lt;/ul>
&lt;p>It is strongly recommended that you follow the best practices in this document to secure your deployment of Notation. Notation works with a shared responsibility model, meaning users and organizations are responsible for securing the &lt;code>notation&lt;/code> CLI deployment.&lt;/p>
&lt;p>Failure to secure the filesystem on development computers and hosts with &lt;code>notation&lt;/code> CLI deployments can result in malicious plugins being installed, trust policies being modified to allow verification compromised or untrusted artifacts, and trust stores being modified to have untrusted or compromised certificates.&lt;/p>
&lt;h2 id="secure-the-installation-and-binary">Secure the installation and binary&lt;/h2>
&lt;p>When manually installing the binary, it is critical to download both the binary and its checksum from a trusted source, such as the &lt;a href="https://github.com/notaryproject/notation/releases" target="_blank" rel="noopener">notation GitHub repo&lt;/a>, over HTTPS. You should also verify the checksum of the binary before using it. When using a package manager, such as &lt;a href="https://brew.sh/" target="_blank" rel="noopener">Homebrew&lt;/a>, it is critical to use a package manager that provides authenticity guarantees. For example, Homebrew uses &lt;a href="https://gnupg.org/" target="_blank" rel="noopener">GPG&lt;/a> to verify the authenticity of the packages it installs.&lt;/p>
&lt;p>When downloading the binary without installing it, for example to use it in a CI/CD pipeline, it is critical to download both the binary and checksum from a trusted source, such as the &lt;a href="https://github.com/notaryproject/notation/releases" target="_blank" rel="noopener">notation GitHub repo&lt;/a>, over HTTPS. You should also verify the checksum of the binary. If all users on the host will need access to the binary, copy the binary to &lt;code>/usr/local/bin&lt;/code> with the owner set to &lt;code>root&lt;/code> and the permission set to &lt;code>rwxr-xr-x (755)&lt;/code>. This operation will require &lt;code>sudo&lt;/code> or root access. If only one user, such as your account, will need access to the binary, copy the binary to a directory that users own with the owner set to that user and the permission set to &lt;code>rwx------ (700)&lt;/code>.&lt;/p>
&lt;h2 id="secure-the-trust-policy-file">Secure the trust policy file&lt;/h2>
&lt;p>When creating a trust policy that only one user, such as your account, needs create the policy using &lt;code>notation policy import&lt;/code> as that user without &lt;code>sudo&lt;/code>. This approach ensures the policy file is stored in the correct directory with appropriate permissions.&lt;/p>
&lt;p>Manually moving the trust file and setting the directory and file permissions is not recommended, but if you choose to do so, you must adhere to the following guidelines:&lt;/p>
&lt;ul>
&lt;li>The policy file should be stored in a directory that user owns with the permission set to &lt;code>rwx------ (700)&lt;/code>.&lt;/li>
&lt;li>The policy file should have the permission set to &lt;code>rw------- (600)&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="secure-certificates">Secure certificates&lt;/h2>
&lt;p>When setting up a signing key for yourself, you should use your own account to do that. Never use &lt;code>sudo&lt;/code> or as a separate user unless you are an admin and try to set up the signing key for that user. This recommendation applies for both the binary installed for all users on the system or just for you.&lt;/p>
&lt;p>When downloading certificates for validation, always obtain them from trusted sources. For web-based downloads, using HTTPS. For vendor-specific sources, use the tools provided by the vendor. Use &lt;code>notation cert add&lt;/code> to add the certificates to the trust store.&lt;/p>
&lt;p>Manually moving certificates and setting the directory and file permissions is not recommended, but if you choose to do so, you must set the permissions for those certificate files to &lt;code>rw------- (600)&lt;/code> to prevent access from other users since those certificates may contain confidential information.&lt;/p>
&lt;h2 id="secure-filesystem-access">Secure filesystem access&lt;/h2>
&lt;p>The sensitive components of a deployment of Notation are stored on the filesystem. For development computers managed by individuals and hosts directly managed by your organization, you should follow general best practices as well as your organization&amp;rsquo;s best practices for securing those development computers and hosts, such as:&lt;/p>
&lt;ul>
&lt;li>Ensuring the operating system is fully patched&lt;/li>
&lt;li>The disk encryption follows your organizations encryption policies&lt;/li>
&lt;li>Use strong passwords and adhere to your organization&amp;rsquo;s password policies&lt;/li>
&lt;li>Access to the Notation deployment directory is restricted to only authorized users, such as those with &lt;code>sudo&lt;/code> access, administrators, or the user that owns the directory&lt;/li>
&lt;/ul>
&lt;p>Every organization has different policies and best practices for securing development computers and hosts, and they should be followed as a part securing filesystem on development computers and hosts with &lt;code>notation&lt;/code> CLI deployments.&lt;/p>
&lt;h2 id="other-security-best-practices">Other security best practices&lt;/h2>
&lt;p>For development computers managed by individuals and hosts directly managed by your organization, ensure the access to those systems as well as locations of the sensitive components of a deployment of Notation are restricted to only authorized users.&lt;/p>
&lt;p>For computers not directly managed by individuals or your organization, such as hosts used for CI/CD pipelines, ensure manner in which the sensitive components of a deployment of Notation are stored, accessed, and transmitted to those computers follows your organizations best practices and are restricted only to authorized users.&lt;/p></description></item><item><title>Docs: Experimental features</title><link>https://notaryproject.dev/docs/user-guides/experimental-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/experimental-features/</guid><description>
&lt;p>Starting in version &lt;code>v1.0.0-rc.4&lt;/code>, Notation began introducing experimental features. Experimental features are features that are not yet ready for production use but are available for testing and evaluation. Experimental features may change significantly in later releases or be completely removed. Experimental features are not enabled by default and are not supported.&lt;/p>
&lt;p>Currently, Notation has the following experimental features:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/how-to/oci-image-layout/">Signing, listing and verifying images as OCI image layout&lt;/a>&lt;/li>
&lt;li>Store signatures using artifact manifest (requires registry support). Deprecated in &lt;code>v1.0.0-rc.5&lt;/code>.&lt;/li>
&lt;li>Use &lt;a href="https://github.com/opencontainers/distribution-spec/blob/v1.1.0-rc2/spec.md#enabling-the-referrers-api" target="_blank" rel="noopener">Referrers API&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>To enable experimental features, set the &lt;code>NOTATION_EXPERIMENTAL&lt;/code> environment variable to &lt;code>1&lt;/code>, for example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">export NOTATION_EXPERIMENTAL=1
&lt;/code>&lt;/pre></description></item><item><title>Docs: Manage signatures</title><link>https://notaryproject.dev/docs/user-guides/how-to/manage-signatures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/manage-signatures/</guid><description>
&lt;div class="alert alert-important" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
When managing signatures on artifacts in remote repositories that require authentication, you must authenticate using &lt;code>notation login&lt;/code> before you can manage signatures on artifacts in those repositories. For more information, see &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/registry-authentication/" target="_blank" rel="noopener">Authenticate to a remote repository&lt;/a>.
&lt;/div>
&lt;h2 id="list-signatures-on-an-artifact">List signatures on an artifact&lt;/h2>
&lt;p>Use &lt;code>notation list&lt;/code> to show the signatures associated with an artifact.&lt;/p>
&lt;div class="alert alert-important" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;p>When using &lt;code>notation list&lt;/code>, use the fully qualified artifact reference, including the digest. For example, &lt;code>localhost:5001/net-monitor@sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445&lt;/code>. You can use &lt;code>notation list&lt;/code> with a tag, for example, &lt;code>localhost:5001/net-monitor:latest&lt;/code>. Using a tag is not recommended since a tag is mutable and may be updated to point to a different version of the artifact. A digest is not mutable and always points to the same version of the artifact.&lt;/p>
&lt;p>To find the digest of an artifact, use &lt;code>notation list&lt;/code> with the artifact reference. For example, &lt;code>notation list localhost:5001/net-monitor:v1&lt;/code>. You can also use &lt;code>oras manifest fetch --descriptor&lt;/code> on OCI registries. For example, &lt;code>oras manifest fetch --descriptor REGISTRY/IMAGE:TAG&lt;/code>.&lt;/p>
&lt;/div>
&lt;pre>&lt;code class="language-console" data-lang="console">IMAGE=localhost:5001/net-monitor@sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445
notation list $IMAGE
&lt;/code>&lt;/pre>&lt;p>The following example shows an artifact with one signature:&lt;/p>
&lt;pre>&lt;code class="language-output" data-lang="output">$ notation list $IMAGE
localhost:5001/net-monitor@sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445
└── application/vnd.cncf.notary.v2.signature
└── sha256:ba3a68a28648ba18c51a479145fca60d96b43dc96c6ab22f412c89ac56a9038b
&lt;/code>&lt;/pre>&lt;h2 id="inspect-a-signature-on-an-artifact">Inspect a signature on an artifact&lt;/h2>
&lt;p>Use &lt;code>notation inspect&lt;/code> to inspect the signatures of an artifact. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation inspect $IMAGE
Inspecting all signatures for signed artifact
localhost:5001/net-monitor@sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445
└── application/vnd.cncf.notary.signature
├── sha256:1bf07b33089e65e9e83a780c7f405ba36aa4ef2b2fb031535cc6e89042ac0a0f
│ ├── media type: application/jose+json
│ ├── signature algorithm: RSASSA-PSS-SHA-256
│ ├── signed attributes
│ │ ├── signingScheme: notary.x509
│ │ └── signingTime: Sun Jun 11 19:56:47 2023
│ ├── user defined attributes
│ │ └── (empty)
│ ├── unsigned attributes
│ │ └── signingAgent: Notation/1.0.0
│ ├── certificates
│ │ └── SHA256 fingerprint: 3f32321edede5df5bb02e88749217ef10c6c4ce8a5d62bb2136257a0ade6e832
│ │ ├── issued to: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ │ ├── issued by: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ │ └── expiry: Mon Jun 12 18:56:09 2023
│ └── signed artifact
│ ├── media type: application/vnd.docker.distribution.manifest.v2+json
│ ├── digest: sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445
│ └── size: 942
└── sha256:e503cadaa2ffee0272acc8ec1dcb4f737a7245b01491e86b9a382ca3fed88297
├── media type: application/cose
├── signature algorithm: RSASSA-PSS-SHA-256
├── signed attributes
│ ├── signingScheme: notary.x509
│ └── signingTime: Sun Jun 11 19:57:14 2023
├── user defined attributes
│ └── (empty)
├── unsigned attributes
│ └── signingAgent: Notation/1.0.0
├── certificates
│ └── SHA256 fingerprint: 3f32321edede5df5bb02e88749217ef10c6c4ce8a5d62bb2136257a0ade6e832
│ ├── issued to: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ ├── issued by: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ └── expiry: Mon Jun 12 18:56:09 2023
└── signed artifact
├── media type: application/vnd.docker.distribution.manifest.v2+json
├── digest: sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445
└── size: 942
&lt;/code>&lt;/pre>&lt;p>The output contains all the certificate information used for signing the artifact. You can use this information to validate the signing certificates and certificate chain.&lt;/p>
&lt;p>The output also contains details about the artifact that was signed, such as the digest. You can use this information to confirm that the correct artifact was signed.&lt;/p>
&lt;h2 id="delete-a-signature-on-an-artifact">Delete a signature on an artifact&lt;/h2>
&lt;p>Use &lt;code>notation list&lt;/code> to list signatures associated with an artifact. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation list $IMAGE
localhost:5001/net-monitor@sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445
└── application/vnd.cncf.notary.signature
└── sha256:fffeeedddcccbbbbaaa000999888777666555444333222111000fff000eee0000
&lt;/code>&lt;/pre>&lt;p>In the above example, the digest of the signature is &lt;code>sha256:fffeeedddcccbbbbaaa000999888777666555444333222111000fff000eee0000&lt;/code>.&lt;/p>
&lt;p>Use the &lt;a href="https://oras.land/docs/CLI/installation" target="_blank" rel="noopener">oras&lt;/a> CLI to delete the signature with &lt;code>oras manifest delete&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">oras manifest delete --distribution-spec v1.1-referrers-tag localhost:5001/net-monitor@sha256:fffeeedddcccbbbbaaa000999888777666555444333222111000fff000eee0000
Are you sure you want to delete the manifest &amp;quot;sha256:fffeeedddcccbbbbaaa000999888777666555444333222111000fff000eee0000&amp;quot; and all tags associated with it? [y/N] y
Deleted localhost:5001/net-monitor@sha256:fffeeedddcccbbbbaaa000999888777666555444333222111000fff000eee0000
&lt;/code>&lt;/pre>&lt;p>Confirm that the signature is deleted with &lt;code>notation list&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation list $IMAGE
localhost:5001/net-monitor@sha256:111222333444555666777888999000aaabbbcccdddeeefff0001112223334445 has no associated signature
&lt;/code>&lt;/pre>&lt;p>The above example shows that the only signature associated with the artifact is deleted.&lt;/p></description></item><item><title>Docs: Notary Project specifications and requirements</title><link>https://notaryproject.dev/docs/notary-specification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/notary-specification/</guid><description>
&lt;p>More information on the Specifications, requirements, and other details about the Notary Project can be found in the &lt;a href="https://github.com/notaryproject/specifications/tree/main" target="_blank" rel="noopener">Specification repository&lt;/a>.&lt;/p></description></item><item><title>Docs: Frequently asked questions</title><link>https://notaryproject.dev/docs/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/faq/</guid><description>
&lt;h2 id="jws-signature-envelope">JWS signature envelope&lt;/h2>
&lt;p>&lt;strong>Q: Why is JWT not used as the signature envelope format?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> JWT uses JWS compact serialization which do not support unsigned attributes. Notary Project signature requires support for unsigned attributes. Instead we use the &lt;em>JWS JSON Serialization&lt;/em> representation, which supports unsigned attributes.&lt;/p>
&lt;p>&lt;strong>Q: Why JWT &lt;code>exp&lt;/code> and &lt;code>iat&lt;/code> claims are not used?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Unlike JWT which always contains a JSON payload, &lt;a href="https://github.com/notaryproject/notaryproject/blob/v1.0.0/specs/signature-specification.md" target="_blank" rel="noopener">Notary Project OCI Signature Specification&lt;/a> envelope can support payloads other than JSON, like binary. Reusing the JWT payload structure and claims, limits the signature envelope to only support JSON payload, which is not extendable. Also, reusing JWT claims requires following same claim semantics as defined in JWT specifications. The &lt;a href="https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4" target="_blank" rel="noopener">&lt;code>exp&lt;/code>&lt;/a> claim requires that verifier MUST reject the signature if current time equals or is greater than &lt;code>exp&lt;/code>, where as the Notary Project&amp;rsquo;s &lt;a href="https://github.com/notaryproject/notaryproject/blob/v1.0.0/specs/trust-store-trust-policy.md" target="_blank" rel="noopener">trust store and trust policy&lt;/a> allows verification policy to define how expiry is handled.&lt;/p>
&lt;h2 id="signature-specification">Signature specification&lt;/h2>
&lt;p>&lt;strong>Q: How will Notation support multiple signature envelope formats?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> The &lt;code>mediaType&lt;/code> of artifact manifest&amp;rsquo;s blob identifies the signature envelope type.&lt;br>
The client implementation can use the aforementioned &lt;code>mediaType&lt;/code> to parse the signature envelope.&lt;/p>
&lt;p>&lt;strong>Q: How will Notation support multiple payload formats?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> The Signature envelope MUST have a versioning mechanism to support multiple payload formats.
For &lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/signature-envelope-jws.md" target="_blank" rel="noopener">JWS JSON serialization&lt;/a> signature envelope, versioning is achieved by the &lt;code>cty&lt;/code> field in ProtectedHeaders.&lt;/p>
&lt;h2 id="signature-scheme">Signature scheme&lt;/h2>
&lt;p>&lt;strong>Q: What is the relationship of Signing Scheme with Signature Envelope format?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Signing Scheme aims to be agnostic of the Signature Envelope format.
A given signing scheme can be implemented through any signature envelope format (such as JWS or COSE) as long as it can support the required signature schema used by the signing scheme.&lt;/p>
&lt;p>&lt;strong>Q: Why is the trust store used for Signing Authority (&lt;code>x509/signingAuthority&lt;/code>) distinct from trust store for Certificate Authority (&lt;code>x509/ca&lt;/code>), why can’t they share the same trust store?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Signing Authority is a different type of trusted entity as compared to Certificate Authority (CA) or Timestamping Authority (TSA).
A CA is trusted for verifying the identity of a signing entity (end user) and issuing it a certificate, whereas a TSA is trusted to generate authentic timestamp.
In contrast, an SA is trusted to generate signatures on behalf of an end user (signature requestor) and also to generate authentic timestamp as part of the signature.
If we use a shared trust store for CA and SA, a verifying entity does not have the ability to differentiate between CA and SA when the verifying entity configures trusted roots in the trust store.
This has implication such as an end user with CA issued certificate can masquerade themselves as an SA by generating a signature with signing scheme &lt;code>notary.x509.signingAuthority&lt;/code>.&lt;/p>
&lt;h2 id="trust-store-and-trust-policy">Trust store and trust policy&lt;/h2>
&lt;p>&lt;strong>Q: Does the trust policy of the Notary Project specification and its implementation in Notation support &lt;code>n&lt;/code> out of &lt;code>m&lt;/code> signatures verification requirement?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> The Notary Project specifications and its implementation in Notation doesn&amp;rsquo;t support n out m signature requirement verification scheme.
Signature verification workflow succeeds if verification succeeds for at least one signature.&lt;/p>
&lt;p>&lt;strong>Q: Does the Notary Project specification and its implementation in Notation support overriding of revocation endpoints to support signature verification in disconnected environments?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Not natively supported but a user can configure &lt;code>revocationValidations&lt;/code> to &lt;code>skip&lt;/code> and then use extended validations to check for revocation.&lt;/p>
&lt;p>&lt;strong>Q: Why user needs to include a complete certificate chain (leading to root) in the signature?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Without a complete certificate chain, the implementation won&amp;rsquo;t be able to perform an exhaustive revocation check, which will lead to security issues, and that&amp;rsquo;s the reason for enforcing a complete certificate chain.&lt;/p>
&lt;p>&lt;strong>Q: Why are we validating artifact signature first instead of signing identity?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Ideally, we should validate the signing identity first and then use the public key in the signing identity to validate the artifact signature.
However, this will lead to poor performance in the case where the signature is not valid as there are lots of validations against the signing identity including network calls for revocations, and possibly we won&amp;rsquo;t even need to read the trust store/trust policy if the signature validation fails.
Also, by validating artifact signature first we will still fail the validation if the signing identity is not trusted.&lt;/p>
&lt;h2 id="notary-project-terms">Notary Project Terms&lt;/h2>
&lt;p>Below are the frequently asked questions about Notary Project terms. For detailed definitions of each Notary Project term, please refer to the &lt;a href="https://notaryproject.dev/docs/glossary/">glossary&lt;/a> page.&lt;/p>
&lt;p>&lt;strong>Q: What is Notary Project?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> The Notary Project is a set of specifications and tools intended to provide a cross-industry standard for securing software supply chains by using authentic container images and other OCI artifacts. Notary Project is also the name of the GitHub organization that has multiple prominent subprojects like Notation, Notary Project specifications, and Notary. Very often we use the name Notary Project to refer to all the above as well as the community that drives the specifications and the implementations.&lt;/p>
&lt;p>&lt;strong>Q: How are Notary and Notary Project related?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Notary is one of the subprojects under the Notary Project organization. Notary uses The Update Framework (TUF) to implement client and server components that run and interact with trusted collections that describe the content in a container registry. The name Notary comes from the &lt;code>notary&lt;/code> CLI that is used to manage the trusted collections. The code that has the implementation of the client and the server components is available in the &lt;a href="https://github.com/notaryproject/notary" target="_blank" rel="noopener">notaryproject/notary&lt;/a> repository.&lt;/p>
&lt;p>&lt;strong>Q: What is the difference between Notary Project and TUF?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> &lt;a href="https://github.com/theupdateframework" target="_blank" rel="noopener">The Update Framework (aka TUF)&lt;/a> is a CNCF graduated project that helps developers maintain the security of software update systems. TUF is a separate community and separate GitHub organization. One of the subprojects under Notary Project, &lt;a href="https://github.com/notaryproject/notary" target="_blank" rel="noopener">&lt;code>notary&lt;/code>&lt;/a>, uses TUF for the implementation.&lt;/p>
&lt;p>&lt;strong>Q: What is Notary Project specification?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> Due to some portability challenges with the TUF-based implementation in Notary, circa 2019, the Notary Project community decided to work on a portable signature specification. This resulted in the creation of the &lt;a href="https://github.com/notaryproject/specifications" target="_blank" rel="noopener">specifications&lt;/a> subproject. The Notary Project specifications are shared across repositories under Notary Project as well as used by other open-source projects and/or vendor tools that want to interoperate with the Notary Project tooling. The Notary Project community plans to add other specifications in the future as our work on software supply chain evolves.&lt;/p>
&lt;p>&lt;strong>Q: Does Notary Project signature specification leverage TUF?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> No, the Notary Project &lt;a href="https://github.com/notaryproject/specifications/blob/v1.0.0/specs/signature-specification.md" target="_blank" rel="noopener">signature specification&lt;/a> does not leverage TUF.&lt;/p>
&lt;p>&lt;strong>Q: What is the difference between Notation and Notary?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> &lt;a href="https://github.com/notaryproject/notation" target="_blank" rel="noopener">Notation&lt;/a> and &lt;a href="https://github.com/notaryproject/notary" target="_blank" rel="noopener">Notary&lt;/a> are both subprojects of Notary Project and offer capabilities for signing container images. Notation implements the new &lt;a href="https://github.com/notaryproject/specifications/" target="_blank" rel="noopener">Notary Project signing specification and workflows&lt;/a> while Notary is based on &lt;a href="https://theupdateframework.com" target="_blank" rel="noopener">The Update Framework&lt;/a> (TUF) and does not implement any of the Notary Project specifications. While Notation has a CLI and libraries and leverages existing key management infrastructure and &lt;a href="https://opencontainers.org/" target="_blank" rel="noopener">OCI-compliant&lt;/a> registries, Notary has a server and client components. An example of a &lt;code>notary&lt;/code> implementation is Docker Content Trust (DCT). In addition to signing artifacts, Notation handles artifact verification, signature portability, and integration with third-party key/certificate management solutions via a plugin model.&lt;/p>
&lt;p>&lt;strong>Q: I&amp;rsquo;ve heard the term &amp;ldquo;Notary v2&amp;rdquo;. What does this mean?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>A:&lt;/strong> The term &amp;ldquo;Notary v2&amp;rdquo; or &amp;ldquo;notary v2&amp;rdquo; was previously used by members of the Notary Project community and others. However, various meanings were ascribed to it, leading to its ambiguous usage with some people referring to it as the entire Notary Project and others as the &lt;a href="https://github.com/notaryproject/notation" target="_blank" rel="noopener">Notation CLI&lt;/a>. Because of this ambiguity, the term &amp;ldquo;Notary v2&amp;rdquo; or &amp;ldquo;notary v2&amp;rdquo; is no longer used by the Notary Project community. While the term may still be visible in some articles on the internet, the name &amp;ldquo;Notary v2&amp;rdquo; or &amp;ldquo;notary v2&amp;rdquo; is only preserved for historical reasons and will not be used by the Notary Project community going forward.&lt;/p></description></item><item><title>Docs: Notation directory structure for system configuration</title><link>https://notaryproject.dev/docs/user-guides/how-to/directory-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/directory-structure/</guid><description>
&lt;p>Notation CLI requires local file systems support for the following components. They should be stored in different places per different operating system.&lt;/p>
&lt;ul>
&lt;li>Notation binary&lt;/li>
&lt;li>Plugins&lt;/li>
&lt;li>Configurations&lt;/li>
&lt;li>Trust stores&lt;/li>
&lt;li>Trust policies&lt;/li>
&lt;li>Signing key store&lt;/li>
&lt;li>Caches&lt;/li>
&lt;/ul>
&lt;p>This documentation specifies the recommended directory structure for those components.&lt;/p>
&lt;h2 id="category">Category&lt;/h2>
&lt;p>The directories for various components are classified into the following catagories.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Alias&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>NOTATION_BIN&lt;/code>&lt;/td>
&lt;td>Directory for executable binaries&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>NOTATION_LIBEXEC&lt;/code>&lt;/td>
&lt;td>Directory for binaries not meant to be executed directly by users' shell or scripts&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>NOTATION_CONFIG&lt;/code>&lt;/td>
&lt;td>Directory for configurations&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>NOTATION_CACHE&lt;/code>&lt;/td>
&lt;td>Directory for caches, such as Certificate Revocation List (CRL) caches&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>On Unix systems, &lt;code>notation&lt;/code> follows &lt;a href="https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html" title="XDG Base Directory Specification" target="_blank" rel="noopener">XDG Base Directory Specification&lt;/a> for user level directories. On Windows, &lt;a href="https://docs.microsoft.com/windows/win32/shell/knownfolderid" title="Known Folders" target="_blank" rel="noopener">Known Folders&lt;/a> and &lt;a href="https://docs.microsoft.com/windows/apps/design/app-settings/store-and-retrieve-app-data" title="App Settings" target="_blank" rel="noopener">App Settings&lt;/a> are followed equivalently. On Darwin, &lt;a href="https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW14" title="macOS File System" target="_blank" rel="noopener">macOS File System&lt;/a> with &lt;a href="https://support.apple.com/HT204899" title="System Integrity Protection" target="_blank" rel="noopener">System Integrity Protection&lt;/a> is followed equivalently.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Default directory paths in Notation 0.12.0-beta.1 only supports user level.
&lt;/div>
&lt;h3 id="user-level">User Level&lt;/h3>
&lt;p>Default directory paths for various operating systems at user level are specified as below.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Directory&lt;/th>
&lt;th>Unix&lt;/th>
&lt;th>Windows&lt;/th>
&lt;th>Darwin&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>NOTATION_LIBEXEC&lt;/code>&lt;/td>
&lt;td>&lt;code>$XDG_CONFIG_HOME/notation&lt;/code>&lt;/td>
&lt;td>&lt;code>%AppData%/notation&lt;/code>&lt;/td>
&lt;td>&lt;code>~/Library/Application Support/notation&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>NOTATION_CONFIG&lt;/code>&lt;/td>
&lt;td>&lt;code>$XDG_CONFIG_HOME/notation&lt;/code>&lt;/td>
&lt;td>&lt;code>%AppData%/notation&lt;/code>&lt;/td>
&lt;td>&lt;code>~/Library/Application Support/notation&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>NOTATION_CACHE&lt;/code>&lt;/td>
&lt;td>&lt;code>$XDG_CACHE_HOME/notation&lt;/code>&lt;/td>
&lt;td>&lt;code>%LocalAppData%/notation&lt;/code>&lt;/td>
&lt;td>&lt;code>~/Library/Caches/notation&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>On Unix, &lt;code>$XDG_CONFIG_HOME&lt;/code> is default to &lt;code>~/.config&lt;/code> and &lt;code>$XDG_CACHE_HOME&lt;/code> is default to &lt;code>~/.cache&lt;/code> if XDG environment variables are empty.&lt;/p>
&lt;p>There is no default &lt;code>NOTATION_BIN&lt;/code> path at user level since the &lt;code>notation&lt;/code> binary can be put anywhere as long as it in the &lt;code>PATH&lt;/code> environment variable. Common directories on Unix/Darwin are &lt;code>~/bin&lt;/code> and &lt;code>~/.local/bin&lt;/code> where manual &lt;code>PATH&lt;/code> update by users may be required.&lt;/p>
&lt;p>On Unix systems, if both &lt;code>$HOME&lt;/code> and &lt;code>$XDG_CONFIG_HOME&lt;/code> are &lt;strong>not&lt;/strong> set, &lt;code>notation&lt;/code> will default to &lt;code>.notation/&lt;/code> in the current directory.&lt;/p>
&lt;h2 id="structure">Structure&lt;/h2>
&lt;p>The overall directory structure for &lt;code>notation&lt;/code> is summarized as follows.&lt;/p>
&lt;pre>&lt;code>{NOTATION_BIN}
└── notation
{NOTATION_CACHE}
└── crl
└── {sha256-hash-of-the-CRL-downloading-URL}
{NOTATION_CONFIG}
├── config.json
├── localkeys
│   ├── {key-name}.crt
│   └── {key-name}.pem
├── signingkeys.json
├── trustpolicy.json
└── truststore
└── {trust-store-type}
└── {named-store}
└── {cert-file}
{NOTATION_LIBEXEC}
└── plugins
└── {plugin-name}
└── notation-{plugin-name}
&lt;/code>&lt;/pre>&lt;h3 id="notation-binary">Notation Binary&lt;/h3>
&lt;p>The path for the &lt;code>notation&lt;/code> binary is as follows.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_BIN}/notation
&lt;/code>&lt;/pre>&lt;p>On Windows, the &lt;code>.exe&lt;/code> extension is required for executables.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_BIN}/notation.exe
&lt;/code>&lt;/pre>&lt;h3 id="plugin">Plugin&lt;/h3>
&lt;p>&lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/plugin-extensibility.md" title="Notation Extensibility for Signing and Verification" target="_blank" rel="noopener">Plugins&lt;/a> are binaries not meant to be executed directly by users' shell or scripts. The path of a plugin follows the pattern below.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_LIBEXEC}/plugins/{plugin-name}/notation-{plugin-name}
&lt;/code>&lt;/pre>&lt;p>On Windows, the &lt;code>.exe&lt;/code> extension is required for executables.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_LIBEXEC}/plugins/{plugin-name}/notation-{plugin-name}.exe
&lt;/code>&lt;/pre>&lt;h3 id="general-configuration">General Configuration&lt;/h3>
&lt;p>The path of the general configuration file of the &lt;code>notation&lt;/code> CLI is as follows.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_CONFIG}/config.json
&lt;/code>&lt;/pre>&lt;h3 id="trust-store">Trust Store&lt;/h3>
&lt;p>A trust store is a directory located within the filesystem that contains multiple collections of certificates, which are used to validate signatures. The Notary Project trust store currently support three types of certificates:&lt;/p>
&lt;ul>
&lt;li>Certificates from Certificate Authorities (CAs), which are stored in the &lt;code>X509/ca&lt;/code> directory.&lt;/li>
&lt;li>Signing Authority certificates, stored in the &lt;code>X509/signingAuthority&lt;/code> directory.&lt;/li>
&lt;li>Time Stamping Authority (TSA) certificates, which will be supported in future releases and will be stored in the &lt;code>X509/tsa&lt;/code> directory.&lt;/li>
&lt;/ul>
&lt;p>These sub-directories also known as named stores support certificate files with the .pem, .crt, and .cer extensions.&lt;/p>
&lt;p>The path of a certificate file in a &lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/trust-store-trust-policy.md#trust-store" title="Trust Store" target="_blank" rel="noopener">Trust Store&lt;/a> follows the pattern below:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_CONFIG}/truststore/{trust-store-type}/{named-store}/{cert-file}
&lt;/code>&lt;/pre>&lt;h3 id="trust-policy">Trust Policy&lt;/h3>
&lt;p>Developers can create a trust policy to verify artifact signatures from a registry. A trust policy is a policy language which specifies which identities are trusted to validate an artifact signature and the level of signature verification to be used. Typically, a trust policy is written in JSON and located within the notation configuration directory.&lt;/p>
&lt;p>The path of the &lt;a href="https://github.com/notaryproject/notaryproject/blob/main/specs/trust-store-trust-policy.md#trust-policy" title="Trust Policy" target="_blank" rel="noopener">Trust Policy&lt;/a> file is as follows.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_CONFIG}/trustpolicy.json
&lt;/code>&lt;/pre>&lt;h3 id="signing-key-store">Signing Key Store&lt;/h3>
&lt;p>Developers sign artifacts using local private keys with associated certificate chain. The signing key information is tracked in a JSON file at:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_CONFIG}/signingkeys.json
&lt;/code>&lt;/pre>&lt;p>The signing key store is user-specific. Developers SHOULD consider safe places to store the passphrase-protected key and certificate pairs, or opt to remote signing.&lt;/p>
&lt;p>For testing purpose, the following directory structure is suggested.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">{NOTATION_CONFIG}/localkeys/{key-name}.crt
{NOTATION_CONFIG}/localkeys/{key-name}.pem
&lt;/code>&lt;/pre>&lt;p>Since &lt;code>signingkeys.json&lt;/code> takes references in absolute paths, it is not required to copy the private keys and certificates used for signing to the above directory structure.&lt;/p>
&lt;h3 id="caches">Caches&lt;/h3>
&lt;p>Since Notation v1.3.0, CRL files are cached by default to reduce network traffic to the CRL server, thereby minimizing potential server throttling and enhancing performance with lower latency. The path of cached CRLs follows the pattern below.&lt;/p>
&lt;pre>&lt;code>{NOTATION_CACHE}/crl/{sha256-hash-of-the-CRL-downloading-URL}
&lt;/code>&lt;/pre>&lt;h2 id="examples">Examples&lt;/h2>
&lt;p>Examples are shown on various operating systems where the user &lt;code>exampleuser&lt;/code> overrides the &lt;code>notation&lt;/code> config, cache and the trust policy.&lt;/p>
&lt;h3 id="unix">Unix&lt;/h3>
&lt;pre>&lt;code>/
└── home
   └── exampleuser
   └── .cache
   | └── crl
   | ├── f2ca1bb6c7e907d06dafe4687e579fceceae8f2e6b6b8bdf0abdd33b264e9a0e
| └── 05b3abf2579a5eb66403cd78be557fd860633a1fe2103c7642030defe32c657f
   └── .config
   └── notation
   ├── config.json
   ├── localkeys
   │   ├── dev.crt
   │   ├── dev.pem
   │   ├── test.crt
   │   └── test.pem
   ├── plugins
   │   └── com.example.bar
   │   └── notation-com.example.bar
   ├── signingkeys.json
   ├── trustpolicy.json
   └── truststore
   └── x509
   ├── ca
   │   └── acme-rockets
   │   └── cert4.pem
   └── tsa
   └── publicly-trusted-tsa
   └── tsa-cert2.pem
&lt;/code>&lt;/pre>&lt;h3 id="windows">Windows&lt;/h3>
&lt;pre>&lt;code>C:.
└── Users
└── exampleuser
└── AppData
├── Local
│ └── notation
   │ └── crl
   │ ├── f2ca1bb6c7e907d06dafe4687e579fceceae8f2e6b6b8bdf0abdd33b264e9a0e
│ └── 05b3abf2579a5eb66403cd78be557fd860633a1fe2103c7642030defe32c657f
└── Roaming
└── notation
├── config.json
├── localkeys
│   ├── dev.crt
│   ├── dev.pem
│   ├── test.crt
│   └── test.pem
├── plugins
│   └── com.example.bar
│   └── notation-com.example.bar.exe
├── signingkeys.json
├── trustpolicy.json
└── truststore
└── x509
├── ca
│   └── acme-rockets
│   └── cert4.pem
└── tsa
└── publicly-trusted-tsa
└── tsa-cert2.pem
&lt;/code>&lt;/pre>&lt;h3 id="darwin--macos">Darwin / macOS&lt;/h3>
&lt;pre>&lt;code>/
└── Users
   └── exampleuser
   └── Caches
   | └── crl
   | ├── f2ca1bb6c7e907d06dafe4687e579fceceae8f2e6b6b8bdf0abdd33b264e9a0e
| └── 05b3abf2579a5eb66403cd78be557fd860633a1fe2103c7642030defe32c657f
   └── Library
   └── Application Support
      └── notation
      ├── config.json
      ├── localkeys
      │   ├── dev.crt
      │   ├── dev.pem
      │   ├── test.crt
      │   └── test.pem
      ├── plugins
      │   └── com.example.bar
      │   └── notation-com.example.bar
      ├── signingkeys.json
      ├── trustpolicy.json
      └── truststore
      └── x509
      ├── ca
      │   └── acme-rockets
      │   └── cert4.pem
      └── tsa
      └── publicly-trusted-tsa
      └── tsa-cert2.pem
&lt;/code>&lt;/pre></description></item><item><title>Docs: Troubleshooting</title><link>https://notaryproject.dev/docs/user-guides/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/troubleshooting/</guid><description>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
To suggest a troubleshooting item, &lt;a href="https://github.com/notaryproject/notaryproject.dev/edit/main/content/en/docs/troubleshooting.md" target="_blank" rel="noopener">create a pull request PR with your suggested item&lt;/a>
&lt;/div>
&lt;h2 id="how-do-i-troubleshoot-issues-with-signatures">How do I troubleshoot issues with signatures?&lt;/h2>
&lt;p>&lt;code>oras manifest fetch&lt;/code> fetches information about an artifact; such as mediatype, config, layers, and annotations. By using the &lt;code>--descriptor&lt;/code> flag, you can fetch only the descriptor of an artifact. Inspect the descriptor of a remote artifact sent for signing using &lt;code>oras manifest fetch --descriptor&lt;/code>. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ oras manifest fetch --descriptor IMAGE:TAG
{&amp;quot;mediaType&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;digest&amp;quot;:&amp;quot;sha256:...&amp;quot;,&amp;quot;size&amp;quot;:...}
&lt;/code>&lt;/pre>&lt;p>Confirm the details, such as the &lt;em>mediaType&lt;/em> and &lt;em>digest&lt;/em> match the details of the artifact sent for signing.&lt;/p>
&lt;p>Inspect the signatures of a remote artifact using &lt;code>notation inspect&lt;/code> with the digest value for the artifact. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation inspect localhost:5001/net-monitor@sha256:cae906b84806687f02272d00a7000ff31a6be6281bb72f16bdef2fcd67d41786
Inspecting all signatures for signed artifact
localhost:5001/net-monitor@sha256:cae906b84806687f02272d00a7000ff31a6be6281bb72f16bdef2fcd67d41786
└── application/vnd.cncf.notary.signature
├── sha256:1bf07b33089e65e9e83a780c7f405ba36aa4ef2b2fb031535cc6e89042ac0a0f
│ ├── media type: application/jose+json
│ ├── signature algorithm: RSASSA-PSS-SHA-256
│ ├── signed attributes
│ │ ├── signingScheme: notary.x509
│ │ └── signingTime: Sun Jun 11 19:56:47 2023
│ ├── user defined attributes
│ │ └── (empty)
│ ├── unsigned attributes
│ │ └── signingAgent: Notation/1.0.0
│ ├── certificates
│ │ └── SHA256 fingerprint: 3f32321edede5df5bb02e88749217ef10c6c4ce8a5d62bb2136257a0ade6e832
│ │ ├── issued to: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ │ ├── issued by: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ │ └── expiry: Mon Jun 12 18:56:09 2023
│ └── signed artifact
│ ├── media type: application/vnd.docker.distribution.manifest.v2+json
│ ├── digest: sha256:cae906b84806687f02272d00a7000ff31a6be6281bb72f16bdef2fcd67d41786
│ └── size: 942
└── sha256:e503cadaa2ffee0272acc8ec1dcb4f737a7245b01491e86b9a382ca3fed88297
├── media type: application/cose
├── signature algorithm: RSASSA-PSS-SHA-256
├── signed attributes
│ ├── signingScheme: notary.x509
│ └── signingTime: Sun Jun 11 19:57:14 2023
├── user defined attributes
│ └── (empty)
├── unsigned attributes
│ └── signingAgent: Notation/1.0.0
├── certificates
│ └── SHA256 fingerprint: 3f32321edede5df5bb02e88749217ef10c6c4ce8a5d62bb2136257a0ade6e832
│ ├── issued to: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ ├── issued by: CN=wabbit-networks.io,O=Notary,L=Seattle,ST=WA,C=US
│ └── expiry: Mon Jun 12 18:56:09 2023
└── signed artifact
├── media type: application/vnd.docker.distribution.manifest.v2+json
├── digest: sha256:cae906b84806687f02272d00a7000ff31a6be6281bb72f16bdef2fcd67d41786
└── size: 942
&lt;/code>&lt;/pre>&lt;p>The output contains all the certificate information used for signing the artifact. You can use this information to validate the signing certificates and certificate chain.&lt;/p>
&lt;p>The output also contains details about the artifact that was signed, such as the digest. You can use this information to confirm that the correct artifact was signed.&lt;/p>
&lt;p>For more information about signatures and their components, see &lt;a href="https://github.com/notaryproject/notaryproject/blob/v1.0.0/specs/signature-specification.md" target="_blank" rel="noopener">the Notary signature specification&lt;/a>.&lt;/p>
&lt;h2 id="enabling-notation-cli-commands-logging">Enabling notation CLI commands logging&lt;/h2>
&lt;p>To troubleshoot issues with the notation CLI, you can use the &lt;code>--verbose&lt;/code> or &lt;code>-v&lt;/code> flag for more detailed logging. Using the &lt;code>--verbose&lt;/code> flag gives more detailed information about the notation CLI command. This is useful in identifying and resolving issues effectively.&lt;/p>
&lt;p>Use the &lt;code>--verbose&lt;/code> flag to enable verbose logging when running a notation CLI command. For example:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation verify --verbose localhost:5000/net-monitor@sha256:xxx
&lt;/code>&lt;/pre>&lt;/div>&lt;p>In addition, there is &lt;code>--debug&lt;/code>, which is intended for developers to debug the notation CLI. It is not recommended to use &lt;code>--debug&lt;/code> for end-user troubleshooting.&lt;/p>
&lt;h2 id="when-i-verify-an-artifact-i-get-the-error-error-open-homeconfignotationtrustpolicyjson-no-such-file-or-directory">When I verify an artifact, I get the error &amp;lsquo;Error: open $HOME/.config/notation/trustpolicy.json: no such file or directory&amp;rsquo;&lt;/h2>
&lt;p>This error is likely related to trust policy configuration. Verify you have a trust policy set up before you attempt to verify an artifact. &lt;code>notation policy show&lt;/code> can be used to view the current trust policy in use. If you need to override an existing trust policy with a new one, you can use the &lt;code>notation policy import&lt;/code> command to import a new trust policy. For more details, see &lt;a href="https://notaryproject.dev/docs/user-guides/how-to/manage-trust-policy/">Manage trust policies&lt;/a>&lt;/p>
&lt;h2 id="when-i-verify-an-artifact-i-get-the-error-homeconfignotation-truststorex509camytruststore-does-not-exist">When I verify an artifact, I get the error &amp;lsquo;&amp;quot;$HOME/.config/notation/ truststore/x509/ca/mytruststore&amp;quot; does not exist&amp;rsquo;&lt;/h2>
&lt;p>This error indicates the trust store doesn&amp;rsquo;t exist or the trust store name is not correct. Trust store typically contains a set of certificate files, where the trust identities are retrieved to verify signatures. You can use &lt;code>notation cert add&lt;/code> to add trust stores.&lt;/p>
&lt;p>The above error shows that the type of trust store is &lt;code>ca&lt;/code>, and the trust store name is &lt;code>mytruststore&lt;/code>. Aside &lt;code>ca&lt;/code> trust store type, X.509 also supports other types of trust stores such as, the &lt;code>x509/signingAuthority&lt;/code> and &lt;code>x509/tsa&lt;/code>. For more details, please refer to the &lt;a href="https://github.com/notaryproject/notaryproject/blob/v1.0.0-rc.2/specs/trust-store-trust-policy.md#trust-store-and-trust-policy-specification" target="_blank" rel="noopener">trust store and trust policy specification&lt;/a>&lt;/p>
&lt;p>To verify &lt;code>ca&lt;/code> and &lt;code>mytruststore&lt;/code> exist, use &lt;code>notation cert list&lt;/code>, then confirm whether the type of store &lt;code>ca&lt;/code> and store name &lt;code>mytruststore&lt;/code> are in the list with the right certificate file stored.&lt;/p>
&lt;p>If &lt;code>ca&lt;/code> and &lt;code>mytruststore&lt;/code> are not in the list, use &lt;code>notation cert add&lt;/code> to add them. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert add --type ca --store mytruststore mycertfile.crt
&lt;/code>&lt;/pre>&lt;h2 id="when-i-verify-an-artifact-i-get-the-error-signature-is-not-produced-by-a-trusted-signer">When I verify an artifact, I get the error &amp;lsquo;signature is not produced by a trusted signer&amp;rsquo;&lt;/h2>
&lt;p>Assuming the trust store and trust policy are configured correctly, this is a verification failure and that artifact should not be used.&lt;/p>
&lt;p>Specifically, this error indicates that the artifact is signed by an unknown identity, which should not be trusted, based on the trust policy. In this case, the verification should fail and users should not use the artifact.&lt;/p>
&lt;p>To confirm the trust store and trust policy are configured correctly:&lt;/p>
&lt;ol>
&lt;li>If you have multiple trust policies in &lt;code>trustpolicy.json&lt;/code> file, confirm you are using the correct trust policy for this artifact by running &lt;code>notation policy show&lt;/code>. This will display information about the trust policy used for verifying the artifact.&lt;/li>
&lt;li>Check the &lt;code>trustStores&lt;/code> property and confirm the value is correctly configured.&lt;/li>
&lt;li>Check the &lt;code>trustedIdentities&lt;/code> property and confirm the value is correctly configured.&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>If the value is &lt;code>&amp;quot;*&amp;quot;&lt;/code>, it means all the certificates stored in the trust stored (configured in &lt;code>trustStores&lt;/code>) are trusted. then you need to make sure the certificates in the trust stores can be used to verify the signatures.&lt;/li>
&lt;li>If the value is in the format of x509 subject info, like &lt;code>&amp;quot;x509.subject: CN=example.io,O=Notary,L=Seattle,ST=WA,C=US&amp;quot;&lt;/code>, then you need to make sure it is the identity that produces the signature.&lt;/li>
&lt;/ul>
&lt;p>Use &lt;code>notation cert show&lt;/code> to show the details of the certificate in the trust store. For example:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation cert show --type ca --store mytruststore mycertificate.crt
&lt;/code>&lt;/pre>&lt;p>An example of output:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">Certificate details
--------------------------------------------------------------------------------
Issuer: CN=example.io,O=Notary,L=Seattle,ST=WA,C=US
Subject: CN=example.io,O=Notary,L=Seattle,ST=WA,C=US
Valid from: 2023-06-22 08:33:39 +0000 UTC
Valid to: 2023-06-23 08:33:39 +0000 UTC
IsCA: false
SHA256 Thumbprint: 3ab41b683b24b40abfa87c1fe26c81b917a9ccc1c4bf60f90e2b41deb86f5220
&lt;/code>&lt;/pre>&lt;p>Check the &lt;code>Subject&lt;/code> info in the output. If it is the identity that signs the artifact, you need to add the &lt;code>Subject&lt;/code> info into &lt;code>trustedIdentities&lt;/code>.&lt;/p>
&lt;h2 id="when-i-verify-an-artifact-i-get-the-error-signature-verification-failed-for-all-the-signatures-associated-with-image">When I verify an artifact, I get the error &amp;lsquo;signature verification failed for all the signatures associated with ${IMAGE}&amp;rsquo;&lt;/h2>
&lt;p>This is an expected error message when all the signatures associated with &lt;code>${IMAGE}&lt;/code> are not trusted. If all signatures are trusted, it may be one of the following issues:&lt;/p>
&lt;ul>
&lt;li>Not having a trust store configured or the trust store is not configured correctly.&lt;/li>
&lt;li>Trust store is not readable or the certificates stored in the trust store are not readable&lt;/li>
&lt;li>No certificates were stored in trust store&lt;/li>
&lt;/ul>
&lt;p>Rerun the verify command with &lt;code>--verbose&lt;/code> to get more details.&lt;/p>
&lt;p>The following example shows the trust store &lt;code>mystore&lt;/code> has not be configured correctly or can&amp;rsquo;t be found:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE --verbose
...
ERRO authenticity validation failed. Failure reason: error while loading the trust store, &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore&amp;quot; does not exist
WARN Signature sha256:11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff failed verification with error: error while loading the trust store, &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore&amp;quot; does not exist
Error: signature verification failed for all the signatures associated with localhost:5001/net-monitor@sha256:000999888777666555444333222111fffeeedddcccbbbbaaa000999888777666
&lt;/code>&lt;/pre>&lt;p>The following example shows the certificate &lt;code>mystore.crt&lt;/code> in the &lt;code>mystore&lt;/code> trust store could not be accessed:&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">notation verify --v $IMAGE
...
ERRO authenticity validation failed. Failure reason: error while loading the trust store, error while reading certificates from &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore/mystore.crt&amp;quot;: open &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore/mystore.crt&amp;quot;: permission denied
WARN Signature sha256:11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff failed verification with error: error while loading the trust store, error while reading certificates from &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore/mystore.crt&amp;quot;: open /home/USER/.config/notation/truststore/x509/ca/mystore/mystore.crt: permission denied
Error: signature verification failed for all the signatures associated with localhost:5001/net-monitor@sha256:000999888777666555444333222111fffeeedddcccbbbbaaa000999888777666
&lt;/code>&lt;/pre>&lt;p>The following example shows that there are no certificates in the &lt;code>mystore&lt;/code> trust store.&lt;/p>
&lt;pre>&lt;code class="language-console" data-lang="console">$ notation verify $IMAGE --verbose
...
ERRO authenticity validation failed. Failure reason: error while loading the trust store, trust store &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore&amp;quot; has no x509 certificates
WARN Signature sha256:11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff failed verification with error: error while loading the trust store, trust store &amp;quot;/home/USER/.config/notation/truststore/x509/ca/mystore&amp;quot; has no x509 certificates
Error: signature verification failed for all the signatures associated with localhost:5001/net-monitor@sha256:000999888777666555444333222111fffeeedddcccbbbbaaa000999888777666
&lt;/code>&lt;/pre>&lt;h2 id="i-have-configured-trust-policy-but-i-still-get-the-error-no-applicable-trust-policy">I have configured trust policy, but I still get the error &amp;lsquo;no applicable trust policy&amp;rsquo;&lt;/h2>
&lt;p>This error indicates that the &lt;code>registryScopes&lt;/code> property is not correctly configured. This property contains a list of repository URIs, where the artifacts are stored. Verify the signing artifact is stored in one of the listed repositories. If not, add the missing repository URI in &lt;code>registryScopes&lt;/code>, or you can add a new trust policy for the missing repository.&lt;/p>
&lt;p>The repository URI is in the format of &lt;code>${registry-name}/${namespace}/${repository-name}&lt;/code>. For example, if the artifact to be verified is &lt;code>registry.acme-rockets.io/software/net-monitor@sha256:xxx&lt;/code>, then the value for &lt;code>registryScopes&lt;/code> should be &lt;code>registry.acme-rockets.io/software/net-monitor&lt;/code>.&lt;/p>
&lt;p>The following values are not correct:&lt;/p>
&lt;ul>
&lt;li>&lt;code>registry.acme-rockets.io&lt;/code>&lt;/li>
&lt;li>&lt;code>registry.acme-rockets.io/software&lt;/code>&lt;/li>
&lt;/ul>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
Wildcards are not supported in &lt;code>registryScopes&lt;/code> property. Each repository URI should be listed explicitly.
&lt;/div>
&lt;h2 id="when-i-verify-an-artifact-i-get-the-error-malformed-trustpolicyjson-file">When I verify an artifact, I get the error &amp;lsquo;malformed trustpolicy.json file&amp;rsquo;&lt;/h2>
&lt;p>This is usually an encoding problem of &lt;code>trustpolicy.json&lt;/code> file. Notation expects &lt;code>utf-8 without BOM&lt;/code> or &lt;code>ascii&lt;/code> encoding for &lt;code>trustpolicy.json&lt;/code> file.&lt;/p>
&lt;p>Windows PowerShell (prior to v6) uses the Unicode &lt;code>UTF-16LE&lt;/code> encoding by default, and &lt;code>utf-8 without BOM&lt;/code> is not supported. If you are building &lt;code>trustpolicy.json&lt;/code> file in Windows PowerShell (prior to v6), make sure you change the file encoding to &lt;code>ascii&lt;/code>.&lt;/p>
&lt;h2 id="when-i-verify-an-artifact-i-get-the-error-failed-to-unmarshal-the-payload-content-in-the-signature-blob-to-envelopepayload">When I verify an artifact, I get the error &amp;lsquo;Failed to unmarshal the payload content in the signature blob to envelope.Payload&amp;rsquo;&lt;/h2>
&lt;p>This is usually an encoding problem of payload content in the signature envelope. Notary Project signatures can be produced by different tools per &lt;a href="https://github.com/notaryproject/notaryproject/blob/v1.0.0-rc.2/specs/signature-specification.md" target="_blank" rel="noopener">signature specification&lt;/a>. The payload content is a &lt;code>JSON&lt;/code> document defined in the signature specification, and the encoding should be &lt;code>utf-8 without BOM&lt;/code> or &lt;code>ascii&lt;/code>.&lt;/p>
&lt;p>Windows PowerShell (prior to v6) uses the Unicode &lt;code>UTF-16LE&lt;/code> encoding by default, and &lt;code>utf-8 without BOM&lt;/code> is not supported. If you are building payload content in Windows PowerShell (prior to v6), make sure you change the payload content encoding to &lt;code>ascii&lt;/code>.&lt;/p></description></item><item><title>Docs: Glossary</title><link>https://notaryproject.dev/docs/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/glossary/</guid><description>
&lt;h2 id="notary-project">Notary Project&lt;/h2>
&lt;p>The Notary Project refers to the &lt;a href="https://github.com/notaryproject" target="_blank" rel="noopener">GitHub organization&lt;/a>, the community, all specifications, and all the repositories under the GitHub organization, including community-released tools like &lt;a href="https://github.com/notaryproject/notary" target="_blank" rel="noopener">notary&lt;/a> and &lt;a href="https://github.com/notaryproject/notation" target="_blank" rel="noopener">notation&lt;/a>.&lt;/p>
&lt;h2 id="notary">Notary&lt;/h2>
&lt;p>Notary is a TUF &lt;a href="https://theupdateframework.com/" target="_blank" rel="noopener">(The Update Framework)&lt;/a> based artifact signing &lt;strong>implementation&lt;/strong>. It consists of a server and client components. The server infrastructure tightly integrates with the container registry and keeps track of the images pushed to the registry. The client component is referred to as the notary command-line interface (CLI), which handles tasks such as signing and pushing container images to a registry and updating metadata. The CLI communicates with the registry and the key and metadata management server component. The most prominent use of this implementation is in Docker Content Trust (DCT). The server and the client implementation can be found in the &lt;a href="https://github.com/notaryproject/notary" target="_blank" rel="noopener">notary&lt;/a> repository under the Notary Project organization.&lt;/p>
&lt;h2 id="notation">Notation&lt;/h2>
&lt;p>Notation, based on new set of specifications unrelated to TUF, is a newer implementation from the Notary Project. It refers to the implementation of the Notation CLI and the Notation libraries. Notation offers signing and verification workflows for OCI artifacts, enables signature portability across OCI-compliant registries, and facilitates integration with third-party key management solutions through a plugin model. The CLI itself is referred to as the &lt;a href="https://github.com/notaryproject/notation" target="_blank" rel="noopener">Notation CLI&lt;/a> while the libraries are referred to as the &lt;a href="https://github.com/notaryproject/notation-go" target="_blank" rel="noopener">Notation-Go&lt;/a> library and the &lt;a href="https://github.com/notaryproject/notation-core-go" target="_blank" rel="noopener">Notation-Core-Go&lt;/a> library. Stakeholders can use libraries independently of the Notation CLI for integrating Notation with their own client tools.&lt;/p>
&lt;h2 id="notary-project-specifications">Notary Project Specifications&lt;/h2>
&lt;p>Notary Project Specifications, mainly created between years 2021-2022, are a collection of specifications distributed across &amp;ldquo;subprojects&amp;rdquo; within the Notary Project. Notation CLI and libraries have implemented these specifications, which are also utilized by other OSS projects and/or vendor tools that seek to interoperate with the Notary Project tooling. These specifications are stored in the &lt;a href="https://github.com/notaryproject/specifications" target="_blank" rel="noopener">specifications&lt;/a> repository under the Notary Project.&lt;/p>
&lt;p>Notary Project specifications are categorized into:&lt;/p>
&lt;p>&lt;strong>OCI Signature Specifications:&lt;/strong>
These specifications are specific to the &lt;a href="https://github.com/opencontainers" target="_blank" rel="noopener">Open Container Initiative (OCI)&lt;/a>. It describes how the Notary Project&amp;rsquo;s Signing Scheme is applied to signatures stored in OCI registries. This category includes the following specifications:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/signature-specification.md" target="_blank" rel="noopener">Notary Project OCI Signature Specification&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/signing-and-verification-workflow.md" target="_blank" rel="noopener">Notary Project OCI Signing and Verification Workflow&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/signature-envelope-cose.md" target="_blank" rel="noopener">Notary Project OCI COSE Envelope&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/signature-envelope-jws.md" target="_blank" rel="noopener">Notary Project OCI JWS Envelope&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Signing Scheme Specification:&lt;/strong> The Signing Scheme Specification is not specific to any particular storage method. It describes the supported signing schemes. Any tool that supports those schemes might be able to produce signatures that are compatible with Notary Project tools. The specification under this category includes the &lt;a href="https://github.com/notaryproject/specifications/blob/main/specs/signing-scheme.md" target="_blank" rel="noopener">Notary Project Signing Scheme.&lt;/a>&lt;/p>
&lt;h2 id="tuf">TUF&lt;/h2>
&lt;p>TUF refers to &lt;a href="https://theupdateframework.com/" target="_blank" rel="noopener">The Update Framework&lt;/a>. A &lt;a href="https://github.com/notaryproject/tuf" target="_blank" rel="noopener">tuf&lt;/a> repository under the Notary Project organization is intended for prototyping the storage of TUF metadata in OCI-compliant registries. It is not under active development at the moment.&lt;/p></description></item><item><title>Docs: Verification of container image on Kubernetes</title><link>https://notaryproject.dev/docs/user-guides/how-to/verify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/verify/</guid><description>
&lt;p>As container images continue to be distributed across various channels, it becomes increasingly important for consumers to ensure that the downloaded container images are authentic before deploying them into their Kubernetes environment. This practice helps mitigate potential cyber threats. Container image verification is the process of evaluating the digital signature of a container image to determine if a container image is considered authentic. Let’s say, you’ve downloaded a signed image from a public source for deployment within your Kubernetes cluster. How do you validate the authenticity and integrity of the image? Which tools should you use for verifying signed images during deployment? This guide describes verification scenarios on Kubernetes and suggests tools for validating signed container images before deploying them on Kubernetes. Let&amp;rsquo;s take a look at this scenario in more detail:&lt;/p>
&lt;h2 id="verification-scenario-on-kubernetes">Verification Scenario on Kubernetes&lt;/h2>
&lt;p>This scenario describes a series of steps that a software publisher and consumer go through to ensure the integrity of a software package.&lt;/p>
&lt;p>The software publisher builds and pushes an application to a container registry such as Docker Hub. This process results in the creation of a container image. Before making the container image accessible to the public, the software publisher uses the &lt;a href="https://notaryproject.dev/docs/user-guides/installation/cli/">Notation Command Line Interface (CLI)&lt;/a> to generate cryptographic keys for signing the image. These keys consist of a private key for creating a digital signature and a corresponding public key for image verification.&lt;/p>
&lt;p>After signing the image, it gets uploaded to a public repository such as GitHub Packages, using the &lt;a href="https://oras.land/docs/installation" target="_blank" rel="noopener">OCI Registry As Storage (ORAS) command line&lt;/a> tool. Potential users are required to verify the image before using it. Users can use the Notation CLI to validate the signature digest and inspect the signature along with its certificate information to confirm the image&amp;rsquo;s authenticity. However, an additional layer of security is applied to validate images before deployment on Kubernetes. Users can use any Open Policy Agent (OPA) or admission controller of their choice to define and enforce policies to ensure images meet established security and authenticity criteria. The admission controller operates on specified policies to validate image deployment on Kubernetes. If the image is signed by a trusted source, it admits the image into Kubernetes resources, ready for deployment. However, if the image is unsigned or does not pass the authenticity check, its deployment gets blocked, preventing any potentially malicious or tampered images from being deployed into the Kubernetes cluster.&lt;/p>
&lt;p>The following solutions can be used to verify signed container images before deployment on Kubernetes:&lt;/p>
&lt;h3 id="ratify-and-opa-gatekeeper">Ratify and OPA GateKeeper&lt;/h3>
&lt;p>Within your Kubernetes environment, &lt;a href="https://github.com/open-policy-agent/gatekeeper" target="_blank" rel="noopener">OPA Gatekeeper&lt;/a> can be utilized as the admission controller for defining policies that artifacts must adhere to, alongside &lt;a href="https://github.com/deislabs/ratify" target="_blank" rel="noopener">Ratify&lt;/a>, to validates the admission of only signed images for deployment. Refer to this article on how to &lt;a href="https://ratify.dev/blog/sign-and-verify-image-with-notation-ratify" target="_blank" rel="noopener">Sign and verify an image with Notation, Ratify, and OPA Gatekeeper&lt;/a>.&lt;/p>
&lt;h3 id="kyverno">Kyverno&lt;/h3>
&lt;p>&lt;a href="https://kyverno.io/#td-block-1" target="_blank" rel="noopener">Kyverno&lt;/a> is a policy engine designed for Kubernetes. It allows users to generate Kubernetes policies to validate, mutate, generate, and clean up Kubernetes resources, and &lt;a href="https://kyverno.io/docs/writing-policies/verify-images/notary/#verifying-image-signatures" target="_blank" rel="noopener">verify image signatures&lt;/a> and artifacts to help secure the software supply chain.&lt;/p></description></item><item><title>Docs: Notary Project Adopters</title><link>https://notaryproject.dev/docs/adopters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/adopters/</guid><description>
&lt;p>The following organizations are known adopters who use Notation in production or integrate Notation into their products and services.&lt;/p>
&lt;p>We are happy and proud to have you all as part of the community! To add your use case and organization to this list, please raise a pull request.&lt;/p>
&lt;p>All organizations are sorted alphabetically below.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Organization&lt;/th>
&lt;th>Website&lt;/th>
&lt;th>Scenario&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Alibaba Cloud&lt;/td>
&lt;td>&lt;a href="https://www.alibabacloud.com/">https://www.alibabacloud.com/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://www.alibabacloud.com/help/en/ack/ack-managed-and-ack-dedicated/security-and-compliance/use-notation-and-ratify-to-sign-and-verify-oci-artifacts" target="_blank" rel="noopener">Sign and verify OCI artifacts using Notation and Alibaba Cloud Key Management Service&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Amazon&lt;/td>
&lt;td>&lt;a href="https://aws.amazon.com/">https://aws.amazon.com/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://docs.aws.amazon.com/signer/latest/developerguide/image-signing-prerequisites.html" target="_blank" rel="noopener">AWS Signer&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Bitnami&lt;/td>
&lt;td>&lt;a href="https://bitnami.com/">https://bitnami.com/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://blog.bitnami.com/2024/03/bitnami-packaged-containers-and-helm.html" target="_blank" rel="noopener">Sign and verify containers and Helm charts available in Docker Hub&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>containerd&lt;/td>
&lt;td>&lt;a href="http://containerd.io/">http://containerd.io/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/containerd/nerdctl/blob/main/docs/notation.md" target="_blank" rel="noopener">container image sign and verify with notation tool&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Connaisseur&lt;/td>
&lt;td>&lt;a href="https://github.com/sse-secure-systems/connaisseur">https://github.com/sse-secure-systems/connaisseur&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://sse-secure-systems.github.io/connaisseur/latest/validators/notation/" target="_blank" rel="noopener">Verify container images signed with Notation when deploying them to Kubernetes&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Harbor&lt;/td>
&lt;td>&lt;a href="https://goharbor.io/">https://goharbor.io/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://goharbor.io/docs/main/working-with-projects/working-with-images/sign-images/#use-notationexperimental-to-sign-artifacts-with-distribution-spec-v11-mode" target="_blank" rel="noopener">Storage and display Notary Project signature&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Kyverno&lt;/td>
&lt;td>&lt;a href="https://kyverno.io/">https://kyverno.io/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://kyverno.io/docs/writing-policies/verify-images/notary/" target="_blank" rel="noopener">Support verifying Notary Project signature&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Microsoft&lt;/td>
&lt;td>&lt;a href="https://www.microsoft.com/">https://www.microsoft.com/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://learn.microsoft.com/azure/container-registry/container-registry-tutorial-sign-build-push?wt.mc_id=azurelearn_inproduct_oss_notaryproject" target="_blank" rel="noopener">Build, sign, and verify container images using Notation and Azure Key Vault&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ratify&lt;/td>
&lt;td>&lt;a href="https://ratify.sh/">https://ratify.sh/&lt;/a>&lt;/td>
&lt;td>Validating OCI Artifact signatures using Notation library&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Tanzu Application Catalog&lt;/td>
&lt;td>&lt;a href="https://tanzu.vmware.com/application-catalog">https://tanzu.vmware.com/application-catalog&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://tanzu.vmware.com/content/vmware-application-catalog-resources/tanzu-application-catalog-leverages-notation" target="_blank" rel="noopener">Sign and Verify OCI artifacts (e.g. Helm charts, container images, and metadata bundles&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Venafi&lt;/td>
&lt;td>&lt;a href="https://venafi.com/codesign-protect/">https://venafi.com/codesign-protect/&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/Venafi/notation-venafi-csp" target="_blank" rel="noopener">Sign and Verify container images using Notation and Venafi CodeSign Protect&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Nomad Admission Control Proxy&lt;/td>
&lt;td>&lt;a href="https://github.com/mxab/nacp">https://github.com/mxab/nacp&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/mxab/nacp?tab=readme-ov-file#notation" target="_blank" rel="noopener">Uses &lt;code>notation-go&lt;/code> remote verify to validate images when deploying Nomad Jobs&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>KubeStellar&lt;/td>
&lt;td>&lt;a href="https://console.kubestellar.io">https://console.kubestellar.io&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://console.kubestellar.io/missions/install-ratify?utm_source=github&amp;amp;utm_medium=adopters&amp;amp;utm_campaign=cncf_outreach&amp;amp;utm_term=ratify" target="_blank" rel="noopener">Guided Ratify install mission with automated Gatekeeper + Ratify deployment, signature verification testing, and AI-powered troubleshooting across multi-cluster Kubernetes fleets&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: Registry support</title><link>https://notaryproject.dev/docs/registry-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/registry-support/</guid><description>
&lt;p>The following registries, listed in alphabetical order, support Notary Project OCI signatures:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html" target="_blank" rel="noopener">Amazon Elastic Container Registry&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://learn.microsoft.com/azure/container-registry/?wt.mc_id=azurelearn_inproduct_oss_notaryproject" target="_blank" rel="noopener">Azure Container Registry&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/distribution/distribution" target="_blank" rel="noopener">Distribution Distribution&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hub.docker.com" target="_blank" rel="noopener">Docker Hub&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry" target="_blank" rel="noopener">GitHub Container Registry&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://goharbor.io/" target="_blank" rel="noopener">Harbor&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jfrog.com/artifactory/" target="_blank" rel="noopener">JFrog Artifactory&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://zotregistry.io/" target="_blank" rel="noopener">Zot registry&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Docs: Timestamping</title><link>https://notaryproject.dev/docs/user-guides/how-to/timestamping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/how-to/timestamping/</guid><description>
&lt;p>In the X.509 Public Key Infrastructure (PKI) system, digital signatures must be generated within the certificate&amp;rsquo;s validity period, as expired certificates compromise the signature&amp;rsquo;s trustworthiness. The &lt;a href="https://www.rfc-editor.org/rfc/rfc3161" target="_blank" rel="noopener">RFC 3161&lt;/a> standard defines the internet X.509 PKI Time-Stamp Protocol (TSP), where a timestamp is issued by a trusted third party acting as a Time Stamping Authority (TSA). These trusted timestamps extend the trust of signatures created within certificates validity, enabling successful signature verification even after certificates have expired.&lt;/p>
&lt;p>Since Notation v1.2.0 release, Notation supports RFC 3161 compliant timestamping. During signing, a timestamp countersignature is added to the Notary Project signature envelope for the signing artifact, ensuring the trustworthiness of the signature through validation. However, Notation does not use timestamp to verify that the signature was created before any certificate revocation, as the revocation time is not deterministic. For example, the revocation time may not coincide with the time the certificates are compromised.&lt;/p>
&lt;p>This guide describes how to sign and verify artifacts in OCI (&lt;a href="https://github.com/opencontainers" target="_blank" rel="noopener">Open Container Initiative&lt;/a>) compliant registries with timestamping. Artifacts in OCI-compliant registries can be container images or other artifacts such as Software Bill of Materials (SBOM).&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Before starting, ensure you have:&lt;/p>
&lt;ul>
&lt;li>Learned the basic signing and verification workflow following the &lt;a href="https://notaryproject.dev/docs/quickstart-guides/" target="_blank" rel="noopener">guide&lt;/a> since Timestamping feature was added on top of existing signing and verification workflows.&lt;/li>
&lt;li>Installed Notation CLI v1.2.0. If not, follow the &lt;a href="https://notaryproject.dev/docs/user-guides/installation/" target="_blank" rel="noopener">installation guides&lt;/a>.&lt;/li>
&lt;li>Installed Notation plugins for signing with keys stored in a KMS (Key Management System), such as Azure Key Vault.&lt;/li>
&lt;li>A container image or artifact stored in an OCI-compliant registry.&lt;/li>
&lt;/ul>
&lt;h2 id="sign-artifacts-in-oci-compliant-registries-with-timestamping">Sign artifacts in OCI-compliant registries with timestamping&lt;/h2>
&lt;p>To sign artifacts in OCI-compliant registries with timestamping, you need to select a trusted &lt;a href="https://www.rfc-editor.org/rfc/rfc3161" target="_blank" rel="noopener">RFC 3161&lt;/a> compliant TSA. There are public TSAs available, such as &lt;a href="https://www.digicert.com/" target="_blank" rel="noopener">DigitCert&lt;/a> TSA and &lt;a href="https://www.globalsign.com/" target="_blank" rel="noopener">Globalsign&lt;/a> TSA. Since Notation CLI v1.2.0, two flags &lt;code>--timestamp-url&lt;/code> and &lt;code>--timestamp-root-cert&lt;/code> are introduced to the &lt;code>notation sign&lt;/code> command for RFC 3161 timestamping. Use the flag &lt;code>--timestamp-url&lt;/code> to specify the URL of the TSA that you trusted. Use the flag &lt;code>--timestamp-root-cert&lt;/code> to specify the filepath of downloaded root cert file for the trusted TSA. The root cert serves as the trust anchor to establish the chain of trust of the TSA. This is to protect you from MITM (Man-in-the-Middle) attacks. Upon successful execution of &lt;code>notation sign&lt;/code>, the TSA response will be stored in the signature envelope. An example command:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation sign --timestamp-url &amp;lt;TSA_URL&amp;gt; --timestamp-root-cert &amp;lt;TSA_ROOT_CERT&amp;gt; --key &amp;lt;KEY_NAME&amp;gt; &amp;lt;REFERENCE_TO_ARTIFACT&amp;gt;
&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example, if you choose DigiCert public TSA, the URL is &lt;code>http://timestamp.digicert.com&lt;/code>, and you can download the root certificate &lt;a href="https://cacerts.digicert.com/DigiCertTrustedRootG4.crt" target="_blank" rel="noopener">here&lt;/a> and name it as &lt;code>digicert_root_cert.crt&lt;/code>. The command looks like:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation sign --timestamp-url &lt;span style="color:#4e9a06">&amp;#34;http://timestamp.digicert.com&amp;#34;&lt;/span> --timestamp-root-cert &lt;span style="color:#4e9a06">&amp;#34;digicert_root_cert.crt&amp;#34;&lt;/span> --key &amp;lt;KEY_NAME&amp;gt; &amp;lt;REFERENCE_TO_ARTIFACT&amp;gt;
&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you do not specify the two flags &lt;code>--timestamp-url&lt;/code> and &lt;code>--timestamp-root-cert&lt;/code>, artifacts are signed without timestamping.&lt;/p>
&lt;h2 id="inspect-signatures-with-rfc-3161-timestamp">Inspect signatures with RFC 3161 timestamp&lt;/h2>
&lt;p>Since Notation v1.2.0, the &lt;code>notation inspect&lt;/code> command is enhanced to show RFC 3161 timestamp in the output.&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation inspect &amp;lt;REFERENCE_TO_ARTIFACT&amp;gt;
&lt;/code>&lt;/pre>&lt;/div>&lt;p>An example output:&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-text" data-lang="text">├── unsigned attributes
│ ├── timestamp signature
│ │ ├── timestamp: [Tue Aug 20 00:14:59 2024, Tue Aug 20 00:14:59 2024]
│ │ └── certificates
│ │ ├── SHA256 fingerprint: d2f6e46ded7422ccd1d440576841366f828ada559aae3316af4d1a9ad40c7828
│ │ │ ├── issued to: CN=DigiCert Timestamp 2023,O=DigiCert\, Inc.,C=US
│ │ │ ├── issued by: CN=DigiCert Trusted G4 RSA4096 SHA256 TimeStamping CA,O=DigiCert\, Inc.,C=US
│ │ │ └── expiry: Fri Oct 13 23:59:59 2034
│ │ ├── SHA256 fingerprint: 281734d4592d1291d27190709cb510b07e22c405d5e0d6119b70e73589f98acf
│ │ │ ├── issued to: CN=DigiCert Trusted G4 RSA4096 SHA256 TimeStamping CA,O=DigiCert\, Inc.,C=US
│ │ │ ├── issued by: CN=DigiCert Trusted Root G4,OU=www.digicert.com,O=DigiCert Inc,C=US
│ │ │ └── expiry: Sun Mar 22 23:59:59 2037
│ │ └── SHA256 fingerprint: 33846b545a49c9be4903c60e01713c1bd4e4ef31ea65cd95d69e62794f30b941
│ │ ├── issued to: CN=DigiCert Trusted Root G4,OU=www.digicert.com,O=DigiCert Inc,C=US
│ │ ├── issued by: CN=DigiCert Assured ID Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
│ │ └── expiry: Sun Nov 9 23:59:59 2031
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Under the field &lt;code>timestamp signature&lt;/code>, there are &lt;code>timestamp&lt;/code> and &lt;code>certificates&lt;/code> fields. The value of &lt;code>certificates&lt;/code> lists all the certificates included in the TSA response.&lt;/p>
&lt;h2 id="verify-artifacts-in-oci-compliant-registries-with-timestamping">Verify artifacts in OCI-compliant registries with timestamping&lt;/h2>
&lt;p>To verify artifacts in OCI-compliant registries with timestamping, you need to create a trust store with the type of &lt;code>tsa&lt;/code>, add the downloaded TSA root certificate, and use the trust store in the trust policy for verification.&lt;/p>
&lt;p>Here are the steps:&lt;/p>
&lt;ol>
&lt;li>Create the trust store with the type &lt;code>tsa&lt;/code>:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation cert add --type tsa --store &amp;lt;TSA_STORE_NAME&amp;gt; &amp;lt;TSA_ROOT_CERT_FILEPATH&amp;gt;
&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>Update your trust policy to add the &lt;code>tsa&lt;/code> trust store to the property &lt;code>trustStores&lt;/code>.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;POLICY_NAME&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;REPO_URL&amp;gt;&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;strict&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ca:&amp;lt;CA_STORE_NAME&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;tsa:&amp;lt;TSA_STORE_NAME&amp;gt;&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;x509.subject: &amp;lt;SUBJECT_OF_SIGNING_CERT&amp;gt;&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Import and use the new trust policy:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation policy import &amp;lt;POLICY_FILE_NAME&amp;gt;.json
&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>Verify artifacts, optionally you can use flag &lt;code>-v&lt;/code> to view the verbose logs:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">notation verify -v &amp;lt;REFERENCE_TO_ARTIFACT&amp;gt;
&lt;/code>&lt;/pre>&lt;/div>&lt;p>If the signature was generated with timestamping before certificates expiry, the signature verification will succeed despite certificates expiry at verification time. However, if the trust store of the &lt;code>tsa&lt;/code> type is not properly established or not configured within the trust policy, the signature verification will fail due to certificates expire.&lt;/p>
&lt;h2 id="configuration-for-timestamp-verification">Configuration for timestamp verification&lt;/h2>
&lt;p>By default, if the trust store of &lt;code>tsa&lt;/code> type is created and configured in the trust policy, Notation will always perform timestamp verification no matter the certificates expire or not. In scenarios you may want to perform timestamp verification only after certificates expire, you can configure additional property &lt;code>verifyTimestamp&lt;/code> under the parent property &lt;code>signatureVerification&lt;/code> and set the value to &lt;code>afterCertExpiry&lt;/code> in the trust policy. For example,&lt;/p>
&lt;div class="highlight">&lt;pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-json" data-lang="json">&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;1.0&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustPolicies&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;POLICY_NAME&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;registryScopes&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;lt;REPO_URL&amp;gt;&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;signatureVerification&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;level&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;strict&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;verifyTimestamp&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;afterCertExpiry&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustStores&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ca:&amp;lt;CA_STORE_NAME&amp;gt;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;tsa:&amp;lt;TSA_STORE_NAME&amp;gt;&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;span style="color:#204a87;font-weight:bold">&amp;#34;trustedIdentities&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;span style="color:#4e9a06">&amp;#34;x509.subject: &amp;lt;SUBJECT_OF_SIGNING_CERT&amp;gt;&amp;#34;&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>To restore to the default behavior, you can either remove the property &lt;code>verifyTimestamp&lt;/code>, or set the value to &lt;code>always&lt;/code>.&lt;/p>
&lt;h2 id="what-is-the-next">What is the next?&lt;/h2>
&lt;p>In the future, we&amp;rsquo;ll use the system certificate store to verify the chain of trust of a TSA, eliminating the need for you to download and use the root certificate.&lt;/p></description></item><item><title>Community: Notary v2 Meeting Notes Archive - 2019</title><link>https://notaryproject.dev/community/meeting-notes/meeting-notes-2019/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/community/meeting-notes/meeting-notes-2019/</guid><description>
&lt;h2 id="notary-v2-kickoff-meeting">Notary v2 Kickoff Meeting&lt;/h2>
&lt;p>December 12, 2019&lt;/p>
&lt;h2 id="agenda">Agenda&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Time&lt;/th>
&lt;th>Agenda&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>10:00-10:30&lt;/td>
&lt;td>Arrival&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10:30-10:45&lt;/td>
&lt;td>Welcome &amp;amp; intros&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>11:00-11:20&lt;/td>
&lt;td>Goals for the meeting&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>11:20-11:45&lt;/td>
&lt;td>Goals for Notary v2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>11:45-12:30&lt;/td>
&lt;td>Requirement discussion&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>12:30-01:00&lt;/td>
&lt;td>Lunch&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>01:00-03:00&lt;/td>
&lt;td>Open Discussions TBD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>03:00-03:30&lt;/td>
&lt;td>House Keeping/Next Steps&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>03:30-05:00&lt;/td>
&lt;td>Unbooked, as some have previous committments&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>06:00-??:??&lt;/td>
&lt;td>Dinner downtown seattle (location tbd)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>Dinner (location tbd. Please reply with any dietary restrictions for lunch and dinner)&lt;/li>
&lt;/ul>
&lt;h2 id="attendees">Attendees&lt;/h2>
&lt;ul>
&lt;li>Steve Lasker (Microsoft acr/mcr)&lt;/li>
&lt;li>Sajay Antony (Microsoft acr/mcr)&lt;/li>
&lt;li>Shiwei Zhang (Microsoft acr/mcr)&lt;/li>
&lt;li>Ralph Squillace (Microsoft)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS / container runtimes)&lt;/li>
&lt;li>Jay Pipes (aws eks)&lt;/li>
&lt;li>Raja (aws ecr/hybrid)&lt;/li>
&lt;li>Tue (aws / ecr)&lt;/li>
&lt;li>Lahiru (aws / ecr)&lt;/li>
&lt;li>Vincent Batts (red hat)&lt;/li>
&lt;li>Jon Johnson (google)&lt;/li>
&lt;li>Omar Paul (aws - product manager ecr)&lt;/li>
&lt;li>Lindsay Smith (google gcr)&lt;/li>
&lt;li>Lukasz Opyrchal (google gcr)&lt;/li>
&lt;li>Derek McGowan (docker)&lt;/li>
&lt;li>Michael Hasuenblaus (aws)&lt;/li>
&lt;li>Michael Brown (OCI/IBM)&lt;/li>
&lt;li>Miloslav Trmac (RedHat)&lt;/li>
&lt;li>Joey (quay)&lt;/li>
&lt;li>Hank (quay)&lt;/li>
&lt;li>Kenny (quay)&lt;/li>
&lt;li>Evan (quay)&lt;/li>
&lt;li>Maria Moore (NYU)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Chad Metcalf (Docker)&lt;/li>
&lt;li>Kat (JFrog)&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;h2 id="meeting-notes">Meeting Notes&lt;/h2>
&lt;h3 id="video-of-the-discussions">Video of the discussions&lt;/h3>
&lt;p>&lt;a href="https://youtu.be/mZ_x0KW33Tg">https://youtu.be/mZ_x0KW33Tg&lt;/a> (all three segments combined)&lt;/p>
&lt;h3 id="goals-for-the-meeting">Goals for the meeting&lt;/h3>
&lt;ul>
&lt;li>Round table discussion&lt;/li>
&lt;li>Justin - Identify areas of focus&lt;/li>
&lt;/ul>
&lt;h3 id="goals-for-notary-v2">Goals for notary v2&lt;/h3>
&lt;ul>
&lt;li>Reading/reference material&lt;/li>
&lt;li>&lt;a href="https://docs.google.com/document/d/1OeH1-PpERE_9bs12klQstlaf-Omn-1_Rapu0DF7FiVg/edit#heading=h.r39ivww1ygm8" target="_blank" rel="noopener">Notary v2 Google Doc from Justin&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/opencontainers/distribution-spec/issues/70" target="_blank" rel="noopener">Artifacts Signing Requirements&lt;/a>&lt;/li>
&lt;li>Previous discussion in opencontainers/image-spec
&lt;ul>
&lt;li>&lt;a href="https://github.com/opencontainers/image-spec/issues/22" target="_blank" rel="noopener">#22&lt;/a>, &lt;a href="https://github.com/opencontainers/image-spec/issues/176" target="_blank" rel="noopener">#176&lt;/a>, &lt;a href="https://github.com/opencontainers/image-spec/issues/480" target="_blank" rel="noopener">#480&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Support up/down the stack, inlcuding K8s, and other container hosts&lt;/li>
&lt;li>Consistency across registry operators&lt;/li>
&lt;li>SteveLas - Each cloud can point customers to a central oss/notary location for general documentation, then each cloud only needs to provide their unique interaction, such as auth or how the info is displayed&lt;/li>
&lt;li>SteveLas - each cloud has the ability to utilzie their specific providers, such as auth and key storage. The spec would provide a common api for customers, but the underlying interaction would be open. Just as ddocker-distribution enables cloud specifi&lt;/li>
&lt;li>Justin - Consistency of signatures, movement between repos as well as cross registry&lt;/li>
&lt;li>Joey - the simpler we can keep things, the more likely we can all standardize on tooling, now&lt;/li>
&lt;li>Steve - How much do we need to save compat on previous notary/content trust is a good question&lt;/li>
&lt;li>Vincent - reusing infra for existing, should be a goal&lt;/li>
&lt;li>Justin - keeping signatures in the registry, so it&amp;rsquo;s not separate components for clouds/vendors to implement&lt;/li>
&lt;li>Joey - if you can use arbitray mime types, keeping the signature in the registry is helpful. Can leverage caches, like the kube image cache&lt;/li>
&lt;li>SteveLas - should we support signatures in the registry, for artifacts that are stored externally?&lt;/li>
&lt;li>Radu - storing signatures inside the registry, but the CNAB is stored outside the registry is a requirement for air-gapped environment&lt;/li>
&lt;li>Joey - if manifest lists can reference an external entity, will that suffice? (internal/external references)&lt;/li>
&lt;li>Radu - the entity that is signed, needs to reference the content digest that&amp;rsquo;s stored in the registry (&lt;strong>Radu - please correct this note&lt;/strong>)&lt;/li>
&lt;li>Vincent - should have a means to deal with compression and decompression scenarios.&lt;/li>
&lt;li>Vincent - You should sign the opaque blob. How a registry, or transport handles compression is a separate element&lt;/li>
&lt;li>SteveLas - signature movement/copy must be fully copied into the destination environment. Users within the air-gapped enviornment must be able to self validate the signature wihtin that air-gapped environment&lt;/li>
&lt;li>Justin - how do we get the public keys between environments?&lt;/li>
&lt;li>Marina - As long as the initial root of trust is good, the destination shouldn&amp;rsquo;t matter.&lt;/li>
&lt;li>Miloslav - if an ISV signs an artifact, that should be maintained (if consumers have public keys directly from the ISV, don’t allow a registry to sign on-behalf)
&lt;ul>
&lt;li>Some signatures may not move, rather stay in their source.&lt;/li>
&lt;li>&amp;ldquo;please lets not re-invent the Certificate Authority ecosystem&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Justin - with Docker Hub, there&amp;rsquo;s currently too many keys as each repo can have it&amp;rsquo;s own key.&lt;/li>
&lt;li>Justin - vendors should have the ability to have a single key to represent all their images, rather than each artifact having their own&lt;/li>
&lt;li>evan - registry keys vs repo keys, and having a hierarchy&lt;/li>
&lt;li>Vincent - should their be a tiered level of trust between certs?&lt;/li>
&lt;li>SteveLas - how do we enable clients/nodes to support signatures? Is this a policy? Do we need to incorporate the flow into K8s and other container hosts?&lt;/li>
&lt;li>Justin - when should the signature be verified. If you use a tag, is it late binding?&lt;/li>
&lt;li>Vincent - assumed it would be more like the admission controller scneario&lt;/li>
&lt;li>Raja - at the cluster - should it determine based on a dev or production environment. The same application/same image might have different policies, based on the environemnt&lt;/li>
&lt;li>Vincent - should be pre-flight validation capable&lt;/li>
&lt;li>Vincent - revocation/ejection of artifacts for comprimised certs&lt;/li>
&lt;li>Raja - how do we handle revocation across air-gapped registries&lt;/li>
&lt;li>Vincent - can we do multiple signatures, as it moves across the workflow?&lt;/li>
&lt;li>Justin - signatures through the CI flow.&lt;/li>
&lt;li>Steve - signatures by scanning solution, to say it&amp;rsquo;s been security signed&lt;/li>
&lt;li>Vincent - multiple signatures might something we can do later&lt;/li>
&lt;li>Tue - can we do signatures on the base layers?&lt;/li>
&lt;li>Vincent - this scenario was supported in Docker 1.8?, and we&amp;rsquo;d have to revisit to bring it back.&lt;/li>
&lt;li>Joey - can we sign the signed manifest with another signature? Tuf may have a solution for threshold signatures. If we&amp;rsquo;re concerned about multiple sigs, we should be able leverage what&amp;rsquo;s already there (TUF)&lt;/li>
&lt;li>Raja - should each layer have different pointers.&lt;/li>
&lt;li>Steve - this could help with the base image vulnerabilities issues&lt;/li>
&lt;li>Vincent - need to account for the squash scenarios&lt;/li>
&lt;li>Miloslav - for multi-signatures, need to think about two different roots of trust (!= TUF threshold signing)&lt;/li>
&lt;li>Miloslav - manifest digests are used for things like openshift, to assure consistency. We should make sure the signature doesn&amp;rsquo;t change the digest.&lt;/li>
&lt;li>Vincnet - you can have manifest lists, point to additional manifest lists. Clients could hop through the manifest lists.&lt;/li>
&lt;li>Lindsay - what does it mean for a registry to sign content? How do signatures flow through registries if a registry doesn&amp;rsquo;t support signing?&lt;/li>
&lt;li>Justin - It doesn&amp;rsquo;t make sense for the registry to sign artifacts. The client should sign it. Where they do signing is a different question.&lt;/li>
&lt;li>Joey - as long as we have the necessary hooks, for cloud, or external cloud hsm providers.&lt;/li>
&lt;li>Raja - what does multi-tenancy look like. An org with multiple subsidearies.&lt;/li>
&lt;li>SteveLas - Should a distribution spec incorporate multi-tenancy for storing multiple customer keys&lt;/li>
&lt;li>Justin - how does mirroring work in these scenarios?&lt;/li>
&lt;li>Joey - if built atop distirbution, handling multi-tenancy already, there shouldn&amp;rsquo;t be any additional work, other than handling heirarchical root keys
&lt;ul>
&lt;li>idealiy, there&amp;rsquo;s a way for the protocol to know a root key, for a tenant, is located at this place. The registry could have a root key.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Marina - could this be handled with delegation?&lt;/li>
&lt;li>Justin - when discussing docker hub, if you did root at the org, it could like repo inormation. You might be able to pull the tuf metadata to get all the repos. Changed at the last minute. Should revisit the concerns.&lt;/li>
&lt;li>Evan - There&amp;rsquo;s an &lt;a href="https://github.com/theupdateframework/taps/blob/master/tap4.md#use-case-2-hiding-sensitive-metadata-and-targets" target="_blank" rel="noopener">extension&lt;/a> to TUF to explain how to disambiguate public and private.&lt;/li>
&lt;/ul>
&lt;h3 id="client-experiencerequirements">Client Experience/Requirements&lt;/h3>
&lt;ul>
&lt;li>Justin Signing should be built into everything. It shouldn&amp;rsquo;t have to be a seperate tool&lt;/li>
&lt;li>Joey - docker made containers avaialble to the world, becuase the experiences were frictionless and consolidated.&lt;/li>
&lt;li>Samuel - the challenge with it only being built in, doesn&amp;rsquo;t allow for different trust policies. What if I wanted to express different expiration dates.&lt;/li>
&lt;li>Justin - can there be a plug-in model?&lt;/li>
&lt;li>Samuel - use case - I want to provide a trust policy to a cluster, where do I define this for prod vs. staging.&lt;/li>
&lt;li>Samuel - I don&amp;rsquo;t want to put all the policy information into the client.&lt;/li>
&lt;li>Justin - should there be a default/normal policy.&lt;/li>
&lt;li>Steve - should the plug-in model be at the registry as well, to enforce policies, before the image is even pulled.&lt;/li>
&lt;li>Joey - preventing pulls, outside of auth are overly restrictive.&lt;/li>
&lt;li>Sajay - Notary is currently a different endpoint. Should the notary server be separate? This causes vnet/firewall rule challenges&lt;/li>
&lt;li>Justin - Registry should have this part of the endpoint.&lt;/li>
&lt;li>Steve - Capabilties - how can a registry support a set of capabiliites that it supports, as opposed to having a strict versoin MUST list.&lt;/li>
&lt;li>Joey - TAP, based on python supports a feature discovery scenario&lt;/li>
&lt;li>Should add this capabilities/discovery approach to distribution, as a base, as part of v1?
&lt;ul>
&lt;li>Vincent - as long as it doesn&amp;rsquo;t take too long&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Justin - should standardize a set of annotations for signing&lt;/li>
&lt;li>MikeBrown - reminder for existing annotation rules and predefined examples:
&lt;ul>
&lt;li>&lt;a href="https://github.com/opencontainers/image-spec/blob/master/annotations.md#annotations">https://github.com/opencontainers/image-spec/blob/master/annotations.md#annotations&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Justin - probably need a breakout for threat model.&lt;/li>
&lt;li>Tue - some customers may want the registry to provide a managed signing solution (whether it does it itself and/or hands that off to a service such as aws KMS).&lt;/li>
&lt;li>Omar - when launching workloads across many nodes, should make sure the design does not prevent a way for a control plane or node to verify prior to pulling the entire image. (e.g. revoked, check publisher)&lt;/li>
&lt;li>Joey - lets not solve key distribution as part of all this. API can return a redirect to go &amp;lsquo;here&amp;rsquo; to verify/manage keys, lets key management be part of the orchestrator, for example.&lt;/li>
&lt;li>Mike - manage pull policy from the pod spec in kubelet. +1 to the point above, the container runtime nor the registry implements policy, e.g. running verified images.&lt;/li>
&lt;li>Justin - make sure out-of-band key management does not cause a &amp;lsquo;million&amp;rsquo; keys to exist and be used in signing and verifying&lt;/li>
&lt;li>Sam - Cannot really have a system to allow trust without having a way to also signify mistrust.&lt;/li>
&lt;li>Justin - experience from v1 was not as optimal as what docker trust laid out, that may be a model for how the cli looks like (as a starting point). E.g. observability of the signature was not good.&lt;/li>
&lt;li>Steve, Sajay - Most of our support cases are around usability today. Must make this simple to use for clients.&lt;/li>
&lt;/ul>
&lt;h3 id="breakout-conversations">Breakout Conversations&lt;/h3>
&lt;ul>
&lt;li>How compression/decompression is handled with signatures&lt;/li>
&lt;li>What do signatures look like witihin a registry
&lt;ul>
&lt;li>Justin - Detached signatures?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Use case/test cases&lt;/li>
&lt;li>Policy plug-ins
&lt;ul>
&lt;li>Client plug-ins&lt;/li>
&lt;li>Registry plug-ins&lt;/li>
&lt;li>Does a registry provide a way for clients to pull in policy plug-ins to avoid a client from implmeenting a rogue plug-in?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Annotations and how do we think about a registry and client understanding a signature&lt;/li>
&lt;li>Key Management&lt;/li>
&lt;li>Signature Storage (OCI, etc)&lt;/li>
&lt;li>Threat model&lt;/li>
&lt;li>UX (cli, api, params)&lt;/li>
&lt;/ul>
&lt;h2 id="signature-storage">Signature Storage&lt;/h2>
&lt;ul>
&lt;li>Justin - do people want x509, pki?&lt;/li>
&lt;li>Marina - should be careful about providing too many options&lt;/li>
&lt;li>Vincent - if I push an opaque sig to a registry, there&amp;rsquo;s certain things that can be encoded, but there&amp;rsquo;s data that&amp;rsquo;s signed in it, and data that&amp;rsquo;s attached to it (hints). Some things must be wrapped up underneath the signature.&lt;/li>
&lt;li>Steve - how can we have a set of annotations that aren&amp;rsquo;t required to be signed&lt;/li>
&lt;li>open discussion - any non-signed metadata is externally tracked, not part of this signing solution.&lt;/li>
&lt;li>Open discussion - mutation - for notary v2, we&amp;rsquo;ll focus on signing a specific object. Tracking it&amp;rsquo;s history is not part of this scope. If someone takes a signed artifact, makes some change, inlcuding annotations, they can re-sign it, but we&amp;rsquo;re not worrying about tracking the previous signature.&lt;/li>
&lt;li>Justin/Vincent - should focus on signing the checksum of the descriptor, to account for different mediaTypes (artifact types). &lt;em>Note&lt;/em>: should follow-up with Derek on some history here.&lt;/li>
&lt;li>Justin: annotations should have publisher information.&lt;/li>
&lt;li>Vincent - SWID discussion on how it might make sense for storing the signature info&lt;/li>
&lt;li>Mike Brown - need to think about how encyrpted content relates to signing&lt;/li>
&lt;/ul>
&lt;h2 id="strawman">Strawman&lt;/h2>
&lt;ul>
&lt;li>Jon - strawman: &lt;a href="https://gist.github.com/jonjohnsonjr/6f179e5876118561ca8ed9504e68c9ae">https://gist.github.com/jonjohnsonjr/6f179e5876118561ca8ed9504e68c9ae&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="use-cases">Use Cases&lt;/h2>
&lt;h3 id="local-build-push-pull-run">Local Build, Push, Pull, Run&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> Prior to doing any deploymnet, a developer can test the sign, push, run scenario.&lt;/p>
&lt;h3 id="automated-build-push-pull-run">Automated Build, Push, Pull, Run&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> A CI/CD solution can be triggered by a git commit. The system can build an artifact, sign it, and push it to the registry. The production system can pull the artifact, verify the signature and run it.&lt;/p>
&lt;h3 id="automated-build-push-pull-failed-run">Automated Build, Push, Pull, Failed Run&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> A CI/CD solution can be triggered by a git commit. The system can build an artifact, sign it, and push it to the registry. The production system can pull the artifact, verify the signature and reject it, thus not run it.&lt;/p>
&lt;h3 id="multiple-runtimes-and-orchestrators">Multiple runtimes and orchestrators&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> The &lt;em>Automated Build, Push, Pull, Run&lt;/em> use case can execute on a Docker, containerd runtime, and in a k8s environment.&lt;/p>
&lt;h3 id="verify-base-images">Verify base images&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> A CI/CD build system uses base images that are signed. It can verify the signature as part of using them when adding them as layers.&lt;/p>
&lt;h3 id="move-images-across-registry">Move images across registry&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> A signed image exists in one registry. I can pull that image and push it into another registry which can validate the signature.&lt;/p>
&lt;h3 id="sign-more-than-just-an-image">Sign more than just an image&lt;/h3>
&lt;p>&lt;strong>[Must have]&lt;/strong> A CI/CD system can have a registry that supports more than container images, signs for example a helm chart and stores it in a registry. A client can then verify the chart before using it.&lt;/p>
&lt;h3 id="policy-management">Policy Management&lt;/h3>
&lt;p>The ability for a cloud provider/vendor to implement a policy managmenet solution&lt;/p>
&lt;h3 id="running-a-packaged-product">Running a Packaged Product&lt;/h3>
&lt;p>I can find a product on a public or vendors registry. I can then move the artifact&amp;hellip;&lt;/p>
&lt;h2 id="notary-v2-timeline">Notary v2 Timeline&lt;/h2>
&lt;ul>
&lt;li>Omar - we all have pressing timelines. We&amp;rsquo;ll need a solution we can all implement prior to &lt;em>2022!&lt;/em>&lt;/li>
&lt;li>Omar - Conclusion after the kickoff meeting was that we&amp;rsquo;d have a proposal in time to get a Q4 2020 implementation&lt;/li>
&lt;/ul>
&lt;h3 id="house-keeping">House Keeping&lt;/h3>
&lt;ul>
&lt;li>Balancing Geo challenges of participants
&lt;ul>
&lt;li>occasionaly on-site meetings, with regular conversations on slack&lt;/li>
&lt;li>Use the CNCF Slack:notary v2 for all breakouts&lt;/li>
&lt;li>KubeCon EU on-site meeting? (concern that several key folks wont be able to attend )
&lt;ul>
&lt;li>Arrange on-site meeting at &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank" rel="noopener">KubeConEU March 30-April 2&lt;/a>&lt;/li>
&lt;li>Justin - we have two 35 min Notary slots&lt;/li>
&lt;li>For those that do attend KubeConEU, we&amp;rsquo;ll schedule an afternoon with dial-in for others to attend&lt;/li>
&lt;li>Steve to arrange logistics (day 0 or +1)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Will focus on the OCI weekly call for now&lt;/li>
&lt;li>We may schedule one-off calls for specific breakout topics,&lt;/li>
&lt;li>Justin to get a CNCF/Notary zoom room&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Where to post community content?
&lt;ul>
&lt;li>notary org, although github/notary is taken&lt;/li>
&lt;li>Justin - should assume Notary v2 is a new org, not a branch&lt;/li>
&lt;li>Justin to find a new org&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Timeline for notary v2 - setting realistic expectations
&lt;ul>
&lt;li>Scope to ship a Notary v2 experience in 2020&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Next steps
&lt;ul>
&lt;li>breakouts for:
&lt;ul>
&lt;li>Capabilities/PEP for distribtuion-spec (Vincent)&lt;/li>
&lt;li>Use Cases (Steve) first week of Feb as a working draft&lt;/li>
&lt;li>Threat Model (Justin)
&lt;ul>
&lt;li>Key Management ()&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Signature Storage (Vincent/Derek?)&lt;/li>
&lt;li>UX (Omar)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="dinnerdrinks">Dinner/Drinks&lt;/h2>
&lt;ul>
&lt;li>for the purposes of security, no notes permitted
@ 5:30pm
&lt;strong>Black Bottle Gastrotavern&lt;/strong>
2600 1st Avenue
Seattle, WA 98121
(206) 441-1500&lt;/li>
&lt;/ul></description></item><item><title>Community: Notary v2 Meeting Notes Archive - 2020</title><link>https://notaryproject.dev/community/meeting-notes/meeting-notes-2020/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/community/meeting-notes/meeting-notes-2020/</guid><description>
&lt;h2 id="december-7-2020">December 7, 2020&lt;/h2>
&lt;h3 id="attendees">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker&lt;/li>
&lt;li>David Freilich (VMware)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="november-9-2020">November 9, 2020&lt;/h2>
&lt;h3 id="attendees-1">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Garry Ing (VMware)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-1">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Review Key Management Requirements (#3 onwards) &lt;a href="https://github.com/notaryproject/requirements/pull/38/files?short_path=ce834e0#diff-ce834e0f33c8faa5afad4489d4edf5d224c22ba1e28a5deea73e058ba784bd95">https://github.com/notaryproject/requirements/pull/38/files?short_path=ce834e0#diff-ce834e0f33c8faa5afad4489d4edf5d224c22ba1e28a5deea73e058ba784bd95&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-1">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="november-2-2020">November 2, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=ciNW19F_T_8" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-2">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Furkat Gofurov (Ericsson)&lt;/li>
&lt;li>Marco Franssen (Philips - Research)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Jesse Butler (AWS)&lt;/li>
&lt;li>Ian McMillan (Microsoft)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-2">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>NV2 Demo, &lt;a href="https://github.com/notaryproject/requirements/blob/main/scenarios.md" target="_blank" rel="noopener">focusing on the main end to end (e2e) scenario&lt;/a>
&lt;ul>
&lt;li>Instnace of distribution hosting prototype changes at nv2.azurewebsites.net. Could be registry.wabbitnetworks.io or registry.acmerockets.io
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/nv2/blob/prototype-1/docs/distribution/persistance-discovery-options.md" target="_blank" rel="noopener">Distribution change docs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/distribution/pull/1" target="_blank" rel="noopener">Distribution change PR#1&lt;/a>&lt;/li>
&lt;li>[Interactive Demo &amp;amp; Review NV2 Prototype](&lt;a href="https://github.com/sajayantony/nv2-">https://github.com/sajayantony/nv2-&lt;/a>
demo#configurations) (Steve)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Review Key Management Requirements &lt;a href="https://github.com/notaryproject/requirements/pull/38/files?short_path=ce834e0#diff-ce834e0f33c8faa5afad4489d4edf5d224c22ba1e28a5deea73e058ba784bd95">https://github.com/notaryproject/requirements/pull/38/files?short_path=ce834e0#diff-ce834e0f33c8faa5afad4489d4edf5d224c22ba1e28a5deea73e058ba784bd95&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-2">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="october-26-2020">October 26, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=LKPnJLmASyk&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=29" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-3">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marco Franssen (Philips - Research)&lt;/li>
&lt;li>Trent Jones (GitHub)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Jan Tilles (Ericsson)&lt;/li>
&lt;li>Jesse Butler (aws)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-3">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Review &lt;a href="https://github.com/notaryproject/requirements/pull/38" target="_blank" rel="noopener">Key Distribution Workflows&lt;/a> - Niaz&lt;/li>
&lt;li>Client workkflow for TUF proposal
&lt;ul>
&lt;li>&lt;a href="https://docs.google.com/document/d/1VXrCTyHeLQUJLgMYYRKXYyMQ3kPM0ywGiqiQ7tMxiOg/edit?usp=sharing">https://docs.google.com/document/d/1VXrCTyHeLQUJLgMYYRKXYyMQ3kPM0ywGiqiQ7tMxiOg/edit?usp=sharing&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-3">Notes:&lt;/h3>
&lt;ul>
&lt;li>OCI Artifacts &amp;amp; Collections Slides (&lt;a href="https://github.com/SteveLasker/drafts/blob/main/media/oci-artifact-collections.pptx?raw=true" target="_blank" rel="noopener">PowerPoint&lt;/a>, &lt;a href="https://github.com/SteveLasker/drafts/blob/main/media/oci-artifact-collections.pdf" target="_blank" rel="noopener">PDF&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h2 id="october-19-2020">October 19, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=y_myKegg1OQ" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-4">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Furkat Gofurov (Ericsson)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Sajay Antony (Microsoft)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-4">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Review end to end, &lt;code>build, sign, push, discover, pull&lt;/code> of signatures (Steve, Sajay)
&lt;ul>
&lt;li>&lt;a href="https://github.com/sajayantony/nv2-demo">https://github.com/sajayantony/nv2-demo&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>proposal for using TUF for default/public, while allowing for fine-grained client control for private repos: &lt;a href="https://docs.google.com/drawings/d/1lboE1EmbYOKpwRm6sUSrZbKoZD8V6ilo5eHOEAEYizc/edit?usp=sharing">https://docs.google.com/drawings/d/1lboE1EmbYOKpwRm6sUSrZbKoZD8V6ilo5eHOEAEYizc/edit?usp=sharing&lt;/a>&lt;/li>
&lt;li>Reminder: Next week, we&amp;rsquo;ll be 1 hour earlier&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-4">Notes:&lt;/h3>
&lt;ul>
&lt;li>Current prototype - supports at least one key&lt;/li>
&lt;li>New policies would support n keys, and specific keys&lt;/li>
&lt;li>What are the policies, and how would they be implemented (spec&amp;rsquo;d)&lt;/li>
&lt;li>Demo Script&lt;/li>
&lt;/ul>
&lt;pre>&lt;code>docker build -t wabbitnetworks.azurecr.io/net-monitor:v1 .
docker notary sign wabbitnetworks.azurecr.io/net-monitor:v1 wabbit-networks.crt
docker notary --enabled
docker push wabbitnetworks.azurecr.io/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>On a different node (conceptually)
with the wabbit-networks key&lt;/p>
&lt;pre>&lt;code>docker notary --enabled
docker pull wabbitnetworks.azurecr.io/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>Pull fails, as the key doesn&amp;rsquo;t exist&lt;/p>
&lt;pre>&lt;code>az keyvault get-key
docker pull wabbitnetworks.azurecr.io/net-monitor:v1
&lt;/code>&lt;/pre>&lt;p>• Because the key exists, pull succeeds&lt;/p>
&lt;pre>&lt;code>docker tag wabbitnetworks.azurecr.io/net-monitor:v1 acmerockets.azurecr.io/net-monitor:v1
docker notary sign acmerockets.azurecr.io/net-monitor:v1 acme-rockets.crt
docker push acmerockets.azurecr.io/net-monitor:v1
&lt;/code>&lt;/pre>&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="october-12-2020">October 12, 2020&lt;/h2>
&lt;h3 id="attendees-5">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Jesse Butler (AWS)&lt;/li>
&lt;li>Furkat Gofurov (Ericsson)&lt;/li>
&lt;li>Jan Tilles (Ericsson)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-5">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-5">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="october-5th-2020">October 5th, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=D4bGYUZRUB0&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=27" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-6">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Steve Lasker (Azure)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-6">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Review feedback on &lt;a href="https://github.com/notaryproject/requirements/pull/38">https://github.com/notaryproject/requirements/pull/38&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Timestamping Service Authorities&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="notes-6">Notes:&lt;/h3>
&lt;ul>
&lt;li>Using TUF for root key distribution - Marina&lt;/li>
&lt;li>Clarify signature validation mechanism - Niaz&lt;/li>
&lt;li>Suggestions for signature verification based on package name - Niaz&lt;/li>
&lt;li>Investigate whether public timestamping was considered for TUF and if there were any drawbacks identified - Marina&lt;/li>
&lt;li>Focus on seom worklfows for where &amp;amp; how keys are acquired to enable signing and verification. Niaz to add to the key managment docs&lt;/li>
&lt;li>Proposal to move 1 hour earlier to keep the existing attendees and add others that couldn&amp;rsquo;t make it. Steve to send info out on slack for others to comment.&lt;/li>
&lt;li>Sounds like Friday key management meetings will merge with the Monday meetings.&lt;/li>
&lt;/ul>
&lt;h2 id="september-28-2020">September 28, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=sMD-mDSKHzE&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=26" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-7">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Tero Saarni (Ericsson&lt;/li>
&lt;li>Derek McGowan&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-7">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Key Management update - Niaz&lt;/li>
&lt;li>Distribution/Artifact design/working session (adding reference and collection artifact type) - Steve, Derek&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-7">Notes:&lt;/h3>
&lt;ul>
&lt;li>add a collection type that wasn&amp;rsquo;t index
Separate definition - not in image-spec
Which manifest type they should use
The stuff in image-spec used for other things.
The types are defined in a generic way, but not documented as such&lt;/li>
&lt;/ul>
&lt;p>Separate into the artifact types
Indexes suport other indexes - some registries don&amp;rsquo;t support as they don&amp;rsquo;t expect. How many levels deef should I allow?
From an image client perspective&lt;/p>
&lt;p>Resuing those types is a bit confusing as other clients don&amp;rsquo;t know how to handle them?
Adding config to index is a good start, but we should further seperate from the image directly.
Image clients - that&amp;rsquo;s the bulk of what exists today.
I&amp;rsquo;d rather not touch that part of the definition and define something that&amp;rsquo;s generic.
Derek - not convinced that a signature need to be an artifact.
1:many with immutable tags, but they don&amp;rsquo;t actually have tags.
Special endpoints to fetch them.
Should we consider endpoints that are specific to signatures
More optimial for clients
Give me all the signatures for this type
Does it really fit in with other artifacts.
Is a signature meta-data on an artifact.&lt;/p>
&lt;p>Marina
The order of signature discovery
Do you start with the artifact, then the signature
Of the 10 signatures on an artifact, how do I know to only download the 1 I care about&lt;/p>
&lt;p>Derek
Are attributes a way to identify which signature (generic thing) I actually want (filter upon)
Is there a general way, or a specific way to get signatures
Today, we thing of tags (sometimes digests) and things that refer to it&lt;/p>
&lt;p>Ordering is critical to the success
How do we get the digest we trust, from the tag&lt;/p>
&lt;p>Different types&lt;/p>
&lt;ul>
&lt;li>Artifacts&lt;/li>
&lt;li>Meta-data - data on a specific object&lt;/li>
&lt;li>Signatures&lt;/li>
&lt;li>are tags just special types of metadata&lt;/li>
&lt;li>Referneces can/must be capabile of cross repo scenarios (helm chart refences wordpress and mysql)&lt;/li>
&lt;/ul>
&lt;p>Clear we need an extension to the distribution api - should we add a signature api?&lt;/p>
&lt;p>Separate out the searching/filtering from a single repo to across repositories&lt;/p>
&lt;p>Serge - do we support signatures across repos? - do we every want to rule this out?
Derek - questions on security challenges
Notion of cross repo mounting exists today
If a user pushes a refernece to something they don&amp;rsquo;t have access, how is that evaluated&lt;/p>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="september-21-2020">September 21, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=dE8BE5Vin_Y&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=25" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-8">Attendees&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-8">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/nv2/pull/14" target="_blank" rel="noopener">Proposal for generic reverse lookup #14
Open&lt;/a>
&lt;ul>
&lt;li>should we persist the config linkage&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Discussion on:
&lt;ul>
&lt;li>manifest generation library for non-image artifacts&lt;/li>
&lt;li>client updates for &lt;a href="https://github.com/notaryproject/nv2/blob/prototype-1/media/notary-e2e-scenarios.png" target="_blank" rel="noopener">Notary v2 e2e workflow&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="notes-8">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="september-14-2020">September 14, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=jnR_ab4uL6U&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=24" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-9">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Jan Tilles (Ericsson)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Jesse Butler (AWS)&lt;/li>
&lt;li>Furkat Gofurov (Ericsson)&lt;/li>
&lt;li>Serge Hallyn (Cisco)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-9">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>No specific items - will join for conversation&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-9">Notes:&lt;/h3>
&lt;ul>
&lt;li>Progress has been on the distribution aspects which will enable signature persistance, but no specific updates to report in the nv2 prototype this week&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="september-7-2020---cancelled">September 7, 2020 - cancelled&lt;/h2>
&lt;h2 id="august-31-2020">August 31, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=iEUB6ev7byc&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=23" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-10">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-10">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>TUF demo (Marina)
&lt;ul>
&lt;li>Some new TUF features that address scalability concerns&lt;/li>
&lt;li>How TUF can be used with private repositories&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Open Discussion on progress thus far (Steve, et all)&lt;/li>
&lt;/ul>
&lt;h3 id="notes-10">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="august-24-2020">August 24, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=3ApNm_HTV4w&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=22" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-11">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Jesse Butler (AWS)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-11">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/nv2/pull/2" target="_blank" rel="noopener">Specification and Prototype - JWT based signature update #2&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/nv2/pull/5" target="_blank" rel="noopener">Distribution API Proposal #5&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-11">Notes:&lt;/h3>
&lt;ul>
&lt;li>Create an nv2 branch for prototypes, leaving main for the ultimate reference implementation&lt;/li>
&lt;li>Open issues for open topics in #2 PR&lt;/li>
&lt;li>Distribution Spec PR
&lt;ul>
&lt;li>Index reference doesn&amp;rsquo;t explictly declare no tags - needs this for clarity&lt;/li>
&lt;li>Add a multi-arch example of signed content&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="august-17-2020">August 17, 2020&lt;/h2>
&lt;p>KubeCon EU Virtual&lt;/p>
&lt;h2 id="august-10-2020">August 10, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=j-1L2oGkpNQ" target="_blank" rel="noopener">Video recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-12">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Varderes Barsegyan (DNAnexus)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-12">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/29" target="_blank" rel="noopener">Review PR: Move goals and stakeholders to root readme #29&lt;/a> -Steve&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/30" target="_blank" rel="noopener">Review PR: Add requirements doc #30&lt;/a> -Steve&lt;/li>
&lt;li>nv2 Prototype Registry Persistence &amp;amp; APIs - &lt;a href="https://github.com/avtakkar/nv2/pull/2" target="_blank" rel="noopener">WIP: distribution API proposals #2&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-12">Notes:&lt;/h3>
&lt;ul>
&lt;li>Do we need Goals, Scenarios and Requirements? Seems the requirments can be merged into the scenarios - general agreement&lt;/li>
&lt;li>For the scenarios, we have a core set of scenarios, with an additional for key managmeent. We&amp;rsquo;ll keep the key management seperate for now, enabling a streamlined working group. As they get solidified, we can merge them with the core scenarios.&lt;/li>
&lt;li>Distribution Spec Signature proposals:
&lt;ul>
&lt;li>Seems we have some agreement OCI Index is a better model for keeping track of depdencies, as it already tracks index to manifest. Which a signature is a link to a manifest.&lt;/li>
&lt;li>This does mean we need to continue the OCI Index supporting a config object for both persistance of the signature object, and uniquely identifying the index as a signature type. &lt;a href="https://github.com/opencontainers/artifacts/issues/25" target="_blank" rel="noopener">Add Index support for artifact type #25&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Are signatures &amp;ldquo;special&amp;rdquo; enough to need a separate API?
&lt;ul>
&lt;li>For discovery API, we briefly discussed the two paging APIs. The one consistent with the distribution tag listing, and a more generic version used on standard REST APIs. Sam provided the &lt;a href="https://cloud.google.com/apis/design/design_patterns#list_pagination" target="_blank" rel="noopener">google API design reference&lt;/a>.&lt;/li>
&lt;li>Do we have a signature discovery API, or a generic API for what manifests represent a given digest?
&lt;ul>
&lt;li>Provide a list of all indexes that refer to digest sha256:abc123&lt;/li>
&lt;li>Provide a list of all indexes that refer to digest sha256:abc123 that has an artifact type of application/vnd.cncf.notary.config.v2+jwt&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Agreed to defer this to online conversation&lt;/li>
&lt;li>For signature upload in relation to role based access: rather than have a separate API for signature linking, that wouldn&amp;rsquo;t scale to other artifact types, should we use the standard push/upload APIs and outline role check should be done enabling a scalable and consistent model for other artifact types?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Steve to finish documenting &lt;a href="https://github.com/avtakkar/nv2/pull/2" target="_blank" rel="noopener">WIP: distribution API proposals #2&lt;/a>, incorporating feedback&lt;/li>
&lt;li>Please provide some eyes on the &lt;a href="https://github.com/shizhMSFT/nv2/pull/16" target="_blank" rel="noopener">JWT encoding staged PR&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="july-31-2020">July 31, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=T1kvJKDiXAU&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=20" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-13">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marco Franssen (Philips - Research)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-13">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Multiple Root Keys&lt;/li>
&lt;li>Key Revocation&lt;/li>
&lt;/ul>
&lt;h3 id="notes-13">Notes:&lt;/h3>
&lt;ul>
&lt;li>Key sharing service serves the purpose of multi-registry world.
&lt;ul>
&lt;li>it allows a company to define what they trust&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Registry clients connect to key sharing service to fetch trusted roots
&lt;ul>
&lt;li>To prevent usability issues a client should be able to connect to a single key sharing service&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Key sharing service can be used to redirect to other key sharing services or give an overview of the trusted keys
&lt;ul>
&lt;li>What are potential threads for the key sharing service?&lt;/li>
&lt;li>How can we protect against these threads?&lt;/li>
&lt;li>The key sharing service should also be able to run as an offline airgapped service. This allows offline/airgapped solutions to rely on this airgapped service.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Should the keysharing be embedded in the registry?&lt;/li>
&lt;li>How does key revocation propagate to clients via key sharing service?&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="july-27-2020">July 27, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=uzrvLo4sAAE&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=19" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>Note: &lt;a href="https://calendar.google.com/calendar/r/eventedit/copy/dGJmams1amZqajl1MHFwcmRvYWg5OThrNjFfMjAyMDA3MjdUMTcwMDAwWiBsaW51eGZvdW5kYXRpb24ub3JnX281YXZqbHZ0MmNhZTlicTdhOTVlbWM0NzQwQGc" target="_blank" rel="noopener">Meeting will be 7am Pacific time&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;h3 id="attendees-14">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Shiwei Zhang (Microsoft)&lt;/li>
&lt;li>Miloslav Trmač&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-14">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/shizhMSFT/nv2/tree/stevelas/readme-updates" target="_blank" rel="noopener">nv2 signing prototype&lt;/a> Shiwei / Steve&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-14">Notes:&lt;/h3>
&lt;ul>
&lt;li>Outline the multiple signature scenario better - identifying how the references could be used&lt;/li>
&lt;li>Questions on scopying and support of TUF metadata&lt;/li>
&lt;li>Ouline what&amp;rsquo;s in prototype phase 1, vs. future prototypes - like TUF metadata. Ralph volunteered to help - and it&amp;rsquo;s now written in history&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="july-24-2020">July 24, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=6mK325VUC0k&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=18" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-15">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Marco Franssen (Philips - Research)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-15">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Finalize Pull Request &lt;a href="https://github.com/notaryproject/requirements/pull/27" target="_blank" rel="noopener">PR&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-15">Notes:&lt;/h3>
&lt;ul>
&lt;li>Revisions for scenarios doc:
&lt;ul>
&lt;li>Define addtional personas for deployment roles and registry operators&lt;/li>
&lt;li>Add diagrams to clarify steps in signing, uploading to registry, and deploying containers&lt;/li>
&lt;li>Add diagrams for key rotation&lt;/li>
&lt;li>Clarify how air-gapped regions can manage trust store&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Root rotation now involves a third component. Does this introduce additional risk?
&lt;ul>
&lt;li>Justin to clarify risk for discussion at next week&amp;rsquo;s meeting.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="july-20-2020">July 20, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=bIFKRdh0Fvs&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=17" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-16">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Donald Stufft (Datadog)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Jesse Butler (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-16">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Key management working group discussion &lt;a href="https://github.com/notaryproject/requirements/pull/27" target="_blank" rel="noopener">PR&lt;/a> (Niaz)&lt;/li>
&lt;/ul>
&lt;h3 id="notes-16">Notes:&lt;/h3>
&lt;ul>
&lt;li>Should we support CAs?
&lt;ul>
&lt;li>May be optional, but shouldn&amp;rsquo;t be required. If needed, an extensibility option.&lt;/li>
&lt;li>Not clear there are benefits for CA keys, and Cappos hasn&amp;rsquo;t seen much demand.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="july-17-2020">July 17, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=nMVFU89rHuA&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=16" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-17">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Marco Franssen (Philips Research)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-17">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-17">Notes:&lt;/h3>
&lt;ul>
&lt;li>Some open questions
&lt;ul>
&lt;li>How to sync certificates to be known to different notary instances? (public vs private company internal)
&lt;ul>
&lt;li>Airgapped.&lt;/li>
&lt;li>Pulling from different registries at runtime platforms&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>How to enable self managed portal for bigger organizations?
&lt;ul>
&lt;li>admins can manage creation of new targets&lt;/li>
&lt;li>team can manage delegations themself for their targets&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>How would a CI job retrieve it&amp;rsquo;s delegation and cleanup afterwards to sign images?
&lt;ul>
&lt;li>Auto expire after 10 minutes (lifetime of CI job)&lt;/li>
&lt;li>Auto register this CI delegation on the given target
&lt;ul>
&lt;li>Does an ACME like challenge work here?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Review &lt;a href="https://github.com/notaryproject/requirements/pull/27" target="_blank" rel="noopener">draft of use cases for key management scenarios&lt;/a>
&lt;ul>
&lt;li>Justin and Trishank to do this&lt;/li>
&lt;li>Raised some potential issues on role/metadata files vs signatures directly on manifests/indices, and scalability of revocation lists vs explicit metadata on keys&lt;/li>
&lt;li>Niaz interested in use cases such as different roots of trust in a registry: e.g., company vs individual developers&lt;/li>
&lt;li>Niaz to add in motivation on why steps are being taken.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="july-13-2020">July 13, 2020&lt;/h2>
&lt;h3 id="attendees-18">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-18">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Niaz wanted more time to incorporate feedback. Watch for an invite for this friday for key signing scenarios.&lt;/li>
&lt;li>no agenda, agreed to defer to next week.&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-18">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="july-10-2020">July 10, 2020&lt;/h2>
&lt;h3 id="attendees-19">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marco Franssen (Philips Research)&lt;/li>
&lt;li>Ian Kaneshiro (Ctrl Cmd)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-19">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Scope of key management scenarios&lt;/li>
&lt;li>Dates
&lt;ul>
&lt;li>7/10 Identify use cases&lt;/li>
&lt;li>7/17 Detail out all use cases&lt;/li>
&lt;li>7/24 Review draft requirements&lt;/li>
&lt;li>7/31 Finalize requirements&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Review pull request &lt;a href="https://github.com/notaryproject/requirements/pull/27">https://github.com/notaryproject/requirements/pull/27&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-19">Notes:&lt;/h3>
&lt;ul>
&lt;li>Hybrid scenario for root key in HSM, delegate key on local machine.&lt;/li>
&lt;li>Add in details for how hosts are configured.&lt;/li>
&lt;li>Philips solution for managing Notary v1 keys. &lt;a href="https://github.com/philips-labs/dct-notary-admin/tree/develop/docs">https://github.com/philips-labs/dct-notary-admin/tree/develop/docs&lt;/a>&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="july-6-2020">July 6, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=WA4XcZztd7g&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=15" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-20">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Trishank K Kuppusamy (Datadog)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Omar Paul (AWS)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-20">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Preliminary sharing of experience with Signy on Notary v1
&lt;ul>
&lt;li>What is &lt;a href="https://github.com/cnabio/cnab-spec" target="_blank" rel="noopener">CNAB&lt;/a>?&lt;/li>
&lt;li>What is &lt;a href="https://github.com/cnabio/cnab-spec/blob/master/300-CNAB-security.md" target="_blank" rel="noopener">CNAB Security&lt;/a>?&lt;/li>
&lt;li>&lt;a href="https://github.com/cnabio/cnab-spec/blob/master/301-metadata-repositories.md#minimum-viable-product-mvp" target="_blank" rel="noopener">MVP to sign bundles&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/cnabio/cnab-spec/blob/master/301-metadata-repositories.md#extending-the-MVP-to-verify-the-provenance-of-bundles" target="_blank" rel="noopener">Extending MVP to add SBOM&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/cnabio/signy/pull/74" target="_blank" rel="noopener">Example minimal SBOM&lt;/a>: machines can only add hashes for images in bundles, but nothing else&lt;/li>
&lt;li>Signy: the reference implementation for CNAB-Sec&lt;/li>
&lt;li>&lt;a href="https://github.com/cnabio/signy/pull/59" target="_blank" rel="noopener">Lesson #1: reusing keys&lt;/a>&lt;/li>
&lt;li>Push &lt;code>timestamp&lt;/code> and &lt;code>snapshot&lt;/code> to server/signer&lt;/li>
&lt;li>As of today morning, Philips &lt;a href="https://github.com/philips-labs/dct-notary-admin" target="_blank" rel="noopener">dct-notary-admin&lt;/a> is also doing the same&lt;/li>
&lt;li>Reuse &lt;code>root&lt;/code> and &lt;code>targets&lt;/code> across bundles/repos&lt;/li>
&lt;li>Need to revisit idea why Notary &lt;em>needs&lt;/em> a separate metadata repo per image/bundle/etc&lt;/li>
&lt;li>&lt;a href="https://github.com/cnabio/signy/pull/80" target="_blank" rel="noopener">Lesson #2: using the power of delegations&lt;/a>&lt;/li>
&lt;li>What are delegations?&lt;/li>
&lt;li>Using delegations to safely include SBOM metadata&lt;/li>
&lt;li>notary-dct-admin also would like to use the delegations to decentralize how developers use their keys&lt;/li>
&lt;li>Demo&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Lessons from notary-dct-admin
&lt;ul>
&lt;li>Interested in Notary v2&lt;/li>
&lt;li>Working with extending Notary v1, like Signy, in the meantime&lt;/li>
&lt;li>Agnostic storage and key backends&lt;/li>
&lt;li>One-click key revocation&lt;/li>
&lt;li>Looking for funding (can CNCF help here?)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>EU+Asia friendly meeting time?
&lt;ul>
&lt;li>Harbor, Philips, etc are interested&lt;/li>
&lt;li>We should include them&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-20">Notes:&lt;/h3>
&lt;ul>
&lt;li>Radu and Trishank to write an issue about lessons learned&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="june-29-2020">June 29, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=EbDIHPb4pHg&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=14" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-21">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;li>Serge Hallyn (Cisco)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-21">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>A &lt;a href="https://github.com/SteveLasker/nv2" target="_blank" rel="noopener">sketch and process for how and where SMEs can engage in an exploratory prototype&lt;/a> (Steve)&lt;/li>
&lt;li>Ephemeral clients as a design requirement. (Justin Cormack)&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-21">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="june-22-2020">June 22, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=xhSqkJ0Dz3s&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=13" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-22">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Donald Stufft (Datadog)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-22">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://docs.google.com/spreadsheets/d/18iwWnWvAAZ4In33EWJBgdAWVFE720B_z0eQlB4FpjNc/edit?ts=5ed7d6f4#gid=142880264" target="_blank" rel="noopener">Metadata overhead comparison&lt;/a> (Marina)&lt;/li>
&lt;li>Scheduling Key Management meeting &lt;a href="https://doodle.com/poll/ziiqg66hnbnmhygw">https://doodle.com/poll/ziiqg66hnbnmhygw&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/24" target="_blank" rel="noopener">Pull request for Key Management Scenarios&lt;/a> (Niaz)&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-22">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="june-15-2020">June 15, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=2YFvi4VSJNw&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=12" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-23">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marina Moore (TUF)&lt;/li>
&lt;li>Justin Cappos (TUF)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;li>Evan Cordell (Red Hat)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Derek McGowan&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Donald Stufft (Datadog)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-23">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://docs.google.com/document/d/1zBxqRAlZ9I8iBIYaGj9dHuubxBZv9tt_JalB9bUaiew/edit#" target="_blank" rel="noopener">Notary design scenarios and TUF&lt;/a>
&lt;ul>
&lt;li>Where do we go from here?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-23">Notes:&lt;/h3>
&lt;ul>
&lt;li>Registry/Repo RBAC -Storage - Write up a constraint/scenario such that signatures/metadata are stored alongside image data, without the need for a separate service endpoint. (Steve)&lt;/li>
&lt;li>Need key management scenarios written up. Marina offered to make a PR with the initial key management scenarios.&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="june-8-2020">June 8, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=iYHv3qkl76U&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=11" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-24">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Serge Hallyn (Cisco)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Tue Tran&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-24">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Target Scenarios for nv2 prototype&lt;/li>
&lt;li>Added &lt;a href="https://github.com/notaryproject/requirements/pull/22" target="_blank" rel="noopener">signature verification lookup design pr#22&lt;/a> copied from google doc: &lt;a href="https://docs.google.com/document/d/1VvT6IsnRFuWlhewbL4iY2h6PhLeA57aOoz_mejwRzzE/edit#heading=h.2gazcsgmxkub" target="_blank" rel="noopener">Notary v2 - Verification Persistence by Reference&lt;/a>
&lt;ul>
&lt;li>Mitr - good to have a requiment to not require changing digest references&lt;/li>
&lt;li>Cappos - non goals - protection from attack if a registry is compromised.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Cappos (ran out of time; pushed to next week)
&lt;ul>
&lt;li>Discussion with Samuel Karp&lt;/li>
&lt;li>Security issue&lt;/li>
&lt;li>Performance will come next week&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-24">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="june-1-2020">June 1, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=86W2ZaJkEdk&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=10" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-25">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-25">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Target Scenarios for nv2 prototype&lt;/li>
&lt;li>Added &lt;a href="https://github.com/notaryproject/requirements/pull/22" target="_blank" rel="noopener">signature verification lookup design pr#22&lt;/a> copied from google doc: &lt;a href="https://docs.google.com/document/d/1VvT6IsnRFuWlhewbL4iY2h6PhLeA57aOoz_mejwRzzE/edit#heading=h.2gazcsgmxkub" target="_blank" rel="noopener">Notary v2 - Verification Persistence by Reference&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-25">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="may-25-2020">May 25, 2020&lt;/h2>
&lt;p>Meeting cancelled per US Memorial Day Holiday
We&amp;rsquo;ll reconvene next Monday, June 1st&lt;/p>
&lt;h2 id="may-18-2020">May 18, 2020&lt;/h2>
&lt;h3 id="attendees-26">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Tero Saarni (Ericsson)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Serge Hallyn (Cisco)&lt;/li>
&lt;li>Stuart Hayton (IBM)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Evan Cordell (Red Hat)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-26">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://docs.google.com/document/d/1w8PFELVxt4p1aMk5oJv0RbDyd5J4OyvwguNSNZ1sJNw/edit?ts=5ec1e68c#" target="_blank" rel="noopener">TUF signatures&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-26">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="may-4-2020">May 4, 2020&lt;/h2>
&lt;h3 id="attendees-27">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Serge Hallyn (Cisco, lurking)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-27">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Cappos, Moore, Kuppusamy: &lt;a href="https://docs.google.com/document/d/10XXgvb67ITy4VGUJJJUK2y-3nhnabaQ70RCmk4b5QIU/edit?usp=sharing" target="_blank" rel="noopener">Thoughts on Notary-v2 design proposals&lt;/a>&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-27">Notes:&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Should a signature couple a tag and a digest to say that combination is &amp;ldquo;signed&amp;rdquo; and verifed at a given time?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We haven&amp;rsquo;t yet written down a &amp;ldquo;requirement&amp;rdquo; that digests and/or tags can&amp;rsquo;t change as the result of signing an artifact. Is that a requirement?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/notaryproject/requirements/pull/20/files" target="_blank" rel="noopener">Attacker goals in the threat model&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="may-4-2020---nv2">May 4, 2020 - nv2&lt;/h2>
&lt;h3 id="attendees-28">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-28">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Where do signatures go?&lt;/li>
&lt;li>&lt;a href="https://docs.google.com/document/d/1oOmGR6kA4Rfl8YBTZHlE_3jFyEIpySwdHnVfDjVbtOU/edit" target="_blank" rel="noopener">Signatures in OCI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.google.com/document/d/1VvT6IsnRFuWlhewbL4iY2h6PhLeA57aOoz_mejwRzzE/edit#heading=h.2gazcsgmxkub" target="_blank" rel="noopener">Notary v2 - Verification Persistence by Reference&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/6" target="_blank" rel="noopener">Deisgn Options&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-28">Notes:&lt;/h3>
&lt;ul>
&lt;li>Cappos, Moore, Kuppusamy - some feedback on the &lt;a href="https://github.com/notaryproject/requirements/pull/6" target="_blank" rel="noopener">Deisgn Options&lt;/a>
&lt;ul>
&lt;li>Option 3, does the entire SBOM have to be entireley downloaded?&lt;/li>
&lt;li>Does the SBOM need to be signed as well&lt;/li>
&lt;li>sam - sign an sbom of the sbom&lt;/li>
&lt;li>What does the client request, an image, or a tag?
&lt;ul>
&lt;li>the client requests a digest or a tag&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Discussion of option 4 having separate uploads of signed content&lt;/li>
&lt;li>Discussion of whether a digest can or shouldn&amp;rsquo;t have to change
&lt;ul>
&lt;li>Can a naming convention be used?&lt;/li>
&lt;li>Joey - when a signature is pushed, an entry is pushed as the orignal manifest, with a new api that links manifests and declaration.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Vincent - Reminder for the need to track separate ACLs&lt;/li>
&lt;li>Cappos - can you trust a registry?&lt;/li>
&lt;li>Joey - can pushes of linkages between docuemnts be identifiable for walking back compromises&lt;/li>
&lt;li>Cormack - can we build a secuirty solution without reverse linkages?&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Additional references:
&lt;ul>
&lt;li>&lt;a href="https://hackmd.io/Ljkrt0LORmeVznREeGOWuQ" target="_blank" rel="noopener">OCI Distribution-spec ext discussion&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="april-27-2020---nv2">April 27, 2020 - nv2&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=PFt_EQfQmXM&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=9" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-29">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-29">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-29">Notes:&lt;/h3>
&lt;ul>
&lt;li>Justin Cormack - Doc for a minimalisitc implementation to get started. Tuf with a separate doc format for fitting in a registry to see where it goes.&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="april-27-2020">April 27, 2020&lt;/h2>
&lt;h3 id="attendees-30">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Aaron Lynch&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-30">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-30">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="april-22-2020---nv2-breakout">April 22, 2020 - nv2 breakout&lt;/h2>
&lt;h3 id="attendees-31">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-31">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Identify some goals of the experience.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Sketch out an experience for SMEs to engage within their areas.&lt;/p>
&lt;ul>
&lt;li>Learn what&amp;rsquo;s hard that needs more investments&lt;/li>
&lt;li>Learn what&amp;rsquo;s easy, we can just do now&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Repos for iteration:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/nv2">https://github.com/notaryproject/nv2&lt;/a> - Notary v2 Client we’ll experiment with&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/distribution">https://github.com/notaryproject/distribution&lt;/a> - For any potential changes we’d want to push back to the distribution-spec.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Housekeeping&lt;/p>
&lt;ul>
&lt;li>what language will we use?
&lt;ul>
&lt;li>Golang&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>what are the apis/ux we&amp;rsquo;ll focus on?&lt;/li>
&lt;li>what are the extension models we need to support for the nv2 client&lt;/li>
&lt;li>What are the registry extensions do we need?&lt;/li>
&lt;li>maintainers&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>MVP&lt;/p>
&lt;ol>
&lt;li>Sign an artifact&lt;/li>
&lt;li>Push the artifact and signature to a registry&lt;/li>
&lt;li>Pull an artifact from a registry, validating it&amp;rsquo;s signature&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Needs&lt;/p>
&lt;ol>
&lt;li>Concrete representations for signatures&lt;/li>
&lt;li>API changes required on distribution, &lt;em>if any&lt;/em>&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Prototyping Order&lt;/p>
&lt;ol>
&lt;li>Sign &amp;amp; Push a signature to a registry
&lt;ul>
&lt;li>Manifest is in the registry&lt;/li>
&lt;li>Persistence - how do we represent a signature in the registry?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Pull an artifact from the registry, validating it&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Misc discussion&lt;/p>
&lt;ul>
&lt;li>How to manage ACLs on signatures and artifacts?&lt;/li>
&lt;li>VBatts - should be able to sign layers&lt;/li>
&lt;li>Justin - should we be able to sign artifacts not owned
&lt;ul>
&lt;li>Steve - customers want to sign content for different environments, which means they are signing someone elsese content&lt;/li>
&lt;li>in-repo signatures as a first model&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Focusing on detached signatures
&lt;ul>
&lt;li>&lt;a href="https://github.com/opencontainers/distribution-spec/pull/111" target="_blank" rel="noopener">extension proposal #111&lt;/a> (discussion &lt;a href="https://hackmd.io/Ljkrt0LORmeVznREeGOWuQ?edit">https://hackmd.io/Ljkrt0LORmeVznREeGOWuQ?edit&lt;/a>)&lt;/li>
&lt;li>Push an artifact, then push another manifest that includes a signature for that artifact. It could support mulitple signatures.&lt;/li>
&lt;li>Steve - How can we support immutable manifests so users don&amp;rsquo;t have to pull/push and the registry needs to cope with updates?&lt;/li>
&lt;li>Sajay - the concept of a signed manifest that points to the content and the signature.
&lt;ul>
&lt;li>Tags can be updated, but the content digest doesn&amp;rsquo;t get updated.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Derek - how to reference signature collections, as opposed to tag listing.&lt;/li>
&lt;li>VBatts - can unordered list be pushed, so the collection doesn&amp;rsquo;t need to be signed?&lt;/li>
&lt;li>Need to account for deleting signatures when the artifacts are deleted.&lt;/li>
&lt;li>Justin - additional signatures can be pushed to the registry, as a signature manifet.&lt;/li>
&lt;li>Can we push individual index objects, each with a separate signature so we don&amp;rsquo;t have to update a single signature index?
&lt;ul>
&lt;li>There&amp;rsquo;s no existing reverse lookup for the indexes that represent a manifest&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Sajay/Justin - could we morph Notary v1 metadata with a Notary v2 model to have tags updated with new signatures. Client can infer a naming scheme with different properites.&lt;/li>
&lt;li>Steve - can we say Notary v2 doesn&amp;rsquo;t store different pointers for signed and unsigned content for the same tag?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>ToDo:&lt;/p>
&lt;ul>
&lt;li>Steve to add a comment to the distribution fork &lt;code>readme.md&lt;/code> to identify it&amp;rsquo;s for collaboration on changes we might propose to the distribution spec and eventually merge back to docker/distribution.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;em>add your topics&lt;/em>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="notes-31">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="april-20-2020---monday-call">April 20, 2020 - Monday call&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=qbS5aTCAayI&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=8" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-32">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Stuart Hayton (IBM)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Derek McGowan (Docker)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-32">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Scenarios Update&lt;/li>
&lt;li>Prototype&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-32">Notes:&lt;/h3>
&lt;ul>
&lt;li>Scenarios Update&lt;/li>
&lt;li>Prototype&lt;/li>
&lt;li>Aaron - what&amp;rsquo;s the value of the signature?
&lt;ul>
&lt;li>Discussion of signature and post validation verificaiton using TUF&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Justin Cappos
&lt;ul>
&lt;li>Discussion of signatures being the foucs, vs. verification, which had been the trusted &amp;ldquo;annotation&amp;rdquo;. Focus on the result, that the document wasn&amp;rsquo;t tampered with.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Niaz
&lt;ul>
&lt;li>Layered approach, which could include additional meta-data&lt;/li>
&lt;li>What&amp;rsquo;s a core, vs. extensibility requirement?
&lt;ul>
&lt;li>eg: Do some signatures can about names, while others may not&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="april-20-2020---nv2-experiment">April 20, 2020 - nv2 experiment&lt;/h2>
&lt;h3 id="attendees-33">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Omar Paul (AWS)&lt;/li>
&lt;li>Stuart Hayton (IBM)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-33">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-33">Notes:&lt;/h3>
&lt;ul>
&lt;li>Signing vs. Content Verifcation&lt;/li>
&lt;li>Multiple phases
&lt;ol>
&lt;li>What does a signed document in a registry look like&lt;/li>
&lt;li>Prototype this in the OSS registry&lt;/li>
&lt;li>Write a client that can push/pull signatures&lt;/li>
&lt;li>Write a client that can valiate signatures&lt;/li>
&lt;li>Build a more complex client, like TUF, that would layer atop the above signatures and validation&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>First we fork docker/distribution
&lt;ul>
&lt;li>Add root signature api&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Add an nv2 client to push/pull/sign content&lt;/li>
&lt;li>Then, we add a tuf client that uses the above interfaces
&lt;ul>
&lt;li>Tuf client takes tuf repository to a registry version, then converts it back&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Key Managemnet
&lt;ul>
&lt;li>APIs for external key management solution&lt;/li>
&lt;li>Solution for the 98% of others&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Next nv2 call
&lt;ul>
&lt;li>Justin Cormack - Wednesday or Friday 9am or 10am&lt;/li>
&lt;li>Derek - Wednesday 9 or 10&lt;/li>
&lt;li>VBatts&lt;/li>
&lt;li>Sam - Wednesday 10&lt;/li>
&lt;li>Sajay&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="april-13-2020">April 13, 2020&lt;/h2>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=IVG_9ZFhKzY&amp;amp;list=PLj6h78yzYM2O1BOGT3hLdJTJCKz0f-bYq&amp;amp;index=7" target="_blank" rel="noopener">Recording&lt;/a>&lt;/p>
&lt;h3 id="attendees-34">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Aaron Lynch&lt;/li>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Evan Cordell (Red Hat)&lt;/li>
&lt;li>Serge Hallyn (Cisco)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-34">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Working group status
&lt;ul>
&lt;li>Sceanrios Feedback
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/15#issuecomment-612988900" target="_blank" rel="noopener">Push/pull between signing and tuf evaluation&lt;/a> PR# 15&lt;/li>
&lt;li>Justin - if we over scope scenarios, we narrow the conversation
&lt;ul>
&lt;li>Focus on the goals, leaving as much as possible about the mechnisms out. ex: have to have puncture resitant tires on an ambulance removes the option to have helicopters&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Niaz - can we assure we&amp;rsquo;re capturing the notes in the PRs.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Threat Model Update
&lt;ul>
&lt;li>Niaz - until we have more of a design in place, it&amp;rsquo;s hard to do a threat model analysis. At the high-level we have the threats we want to capture. Some conversations around key management.&lt;/li>
&lt;li>&amp;ldquo;What does signing attest to&amp;rdquo;, for example.&lt;/li>
&lt;li>Discussion about splitting up the threat model requirements, vs. an actual threat model of a design.&lt;/li>
&lt;li>Key managment spearate from a threat model design.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>UX flow
&lt;ul>
&lt;li>We&amp;rsquo;ll start to sketch out an experience for iterative work. There&amp;rsquo;s nothing concerete about the sketch, rather an experience to learn from, enabling folks to engage with their expertise.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Housekeeping
&lt;ul>
&lt;li>Niaz suggested we see if we can get a different time slot, which he&amp;rsquo;ll help coordinate for brekout meetings. We&amp;rsquo;ll chat on the Notary v2 slack channel for everyones visibility.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="notes-34">Notes:&lt;/h3>
&lt;h2 id="april-6-2020">April 6, 2020&lt;/h2>
&lt;h3 id="attendees-35">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Vibhav Bobade (Red Hat)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-35">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Working group status
&lt;ul>
&lt;li>Scenarios&lt;/li>
&lt;li>Key Management / Threat Model&lt;/li>
&lt;li>Signature Persistance&lt;/li>
&lt;li>UX&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="notes-35">Notes:&lt;/h3>
&lt;ul>
&lt;li>Discussion for how to represetnt a TUF concept of a collection&lt;/li>
&lt;li>What is the extent of design/constraints are we hitting? Is the existing OCI Index/Manifest design enough?&lt;/li>
&lt;li>We&amp;rsquo;ve been working with the assumption the existing OCI spec meets most of the capabilities, with some tweaks. But, that may not be the case.&lt;/li>
&lt;li>Threat model team to focus on more documentation of the proposal and discussion.&lt;/li>
&lt;li>Hoping to get more progress, as is reasonable, within the next week&lt;/li>
&lt;li>Ask to wrap up the current PR for scenarios so we have a common doc to reference. We can and will likely iterate on additions, but lets get a &lt;a href="https://github.com/notaryproject/requirements/pull/15" target="_blank" rel="noopener">Scenarios PR merged&lt;/a>.&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="march-30-2020">March 30, 2020&lt;/h2>
&lt;h3 id="attendees-36">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Joey Schorr (Red Hat)&lt;/li>
&lt;li>Josh Dolitsky (Blood Orange)&lt;/li>
&lt;li>Peter Engelbert (Blood Orange)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Rita Zhang (Microsoft)&lt;/li>
&lt;li>Richard Nguyen (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Matthew Russo (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Shubhra Deshpande (AWS)&lt;/li>
&lt;li>Vincent Batts&lt;/li>
&lt;li>Adrian Mouat (Container Solutions)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Ram Chinchani (Cisco)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items--notes">Agenda Items &amp;amp; Notes&lt;/h3>
&lt;ul>
&lt;li>9:00am – 9:30 Artifacts update
&lt;ul>
&lt;li>Status of the spec&lt;/li>
&lt;li>IANA mediaType registration updates&lt;/li>
&lt;li>Josh - how many types would need anything more than the generic ones?
&lt;ul>
&lt;li>Steve - likely not many. But, if they do, they can&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Joey - We need to make sure the proposal states that &lt;em>handling&lt;/em> of downloaded layers/blobs is artifact specific. As well, if we are mixing different kinds of artifacts, it should be done via an index, not using different layers (IMO)&lt;/li>
&lt;li>Repo: &lt;a href="https://github.com/opencontainers/artifacts">https://github.com/opencontainers/artifacts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>9:30-10:00: Getting the Distribution Spec to a 1.0
&lt;ul>
&lt;li>A set of proposals, such as the extension proposal #111 that could get incorporated into the 1.0 spec.&lt;/li>
&lt;li>Hanging extensions off a repo enables ACL (Access Control Lists) to be enforced on the extnesion, in relation to the artifact.&lt;/li>
&lt;li>Minor details - like the Readme.md need updates&lt;/li>
&lt;li>Clarifications that are flushing out from the conformance testing.&lt;/li>
&lt;li>Josh - &lt;a href="https://github.com/opencontainers/distribution-spec/issues/117" target="_blank" rel="noopener">Spec Language Updates&lt;/a>&lt;/li>
&lt;li>VBatts - Would like to get an RC2 out&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>10:00-10:30: Supporting the Secure Supply Chain efforts
&lt;ul>
&lt;li>How OCI, Artifacts &amp;amp; Notary can support the Software Supply Chain efforts with SBoM, GPL Source and other content, stored in a registry, signed with Notary v2.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>10:30-11:00 Notary v2
&lt;ul>
&lt;li>Derek - Signatures in OCI Distribtuions
&lt;ul>
&lt;li>Fit into the existing OCI spec&lt;/li>
&lt;li>Planning on having the extension design integrated to allow for signatures&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Discussion of signing collections, querying a collection of signatures&lt;/li>
&lt;li>Discussion of offline verification of signatures using snapshots
&lt;ul>
&lt;li>good conversation for the breakout groups&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="threat-model-meeting-27-march-2020">Threat model meeting 27 March 2020&lt;/h2>
&lt;h3 id="attendees-37">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Justin Cormack&lt;/li>
&lt;li>Justin Cappos&lt;/li>
&lt;li>Niaz Khan&lt;/li>
&lt;li>Marina Moore&lt;/li>
&lt;li>Samuel Karp&lt;/li>
&lt;li>tuetran&lt;/li>
&lt;li>lahiru&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-36">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>where are we with threat model?&lt;/li>
&lt;/ul>
&lt;h3 id="notes-36">Notes:&lt;/h3>
&lt;ul>
&lt;li>TODO: remove from scenarios doc any design pieces&lt;/li>
&lt;li>TODO: improve wording on thread model: forward looking crypto agility&lt;/li>
&lt;li>roles: operator, producer consumer&lt;/li>
&lt;li>motivation vs what is wrong&lt;/li>
&lt;li>do we have to trust the registry?&lt;/li>
&lt;li>minimal possible trust.&lt;/li>
&lt;li>how does user get trust of publisher. If user knows the key registry doesnt neeed trust.&lt;/li>
&lt;li>naming vs location. third party vs first party.&lt;/li>
&lt;li>registry A deletes software where you have in B. How can you continue to trust.&lt;/li>
&lt;li>model of who the actors are and what they are trying to achieve.&lt;/li>
&lt;li>TODO: list of roles (the length of the threat model) and basic use cases.&lt;/li>
&lt;li>Which roles are providing signatures?&lt;/li>
&lt;li>Information about them.&lt;/li>
&lt;li>Signing collections is impossible.&lt;/li>
&lt;li>discussion about properties of registries - privacy needs.&lt;/li>
&lt;li>Niaz: key administrator role. Add as a TAP for TUF?&lt;/li>
&lt;/ul>
&lt;h2 id="march-23-2020">March 23, 2020&lt;/h2>
&lt;h3 id="attendees-38">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Dan Lorenc&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Carmen Puccio (AWS)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Marina Moore&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-37">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>A quick check-in for folks&lt;/li>
&lt;li>Breakout Updates&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-37">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>NOTE:&lt;/strong> we appreciate some may be coping with, assisting others at this time. While others are looking for something creative to do with their time. We&amp;rsquo;ll continue to the weekly meetings, with breakouts where possible. We will NOT make any fina/final decions as we recognize that some may not be able to engage right now. We expect things to get worse before they get better, so we&amp;rsquo;ll continue to adjust. If you&amp;rsquo;re leading a breakout, and need to step back, please just ask for some help to take the lead. We&amp;rsquo;re a diverse group of people that are here becuase we believe in community, which is made of people.- &lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;li>Some were confused about the start time. Steve to update the heading of these notes. Please see the cncf calendar as Amye has been awesome to keep these updated.&lt;/li>
&lt;li>Breakout Updates&lt;/li>
&lt;li>Justin-Hoping to get a threat model this week
&lt;ul>
&lt;li>&lt;a href="https://app.slack.com/client/T08PSQ7BQ/C0105KCEN6T" target="_blank" rel="noopener">#notary-v2-oci&lt;/a> slack channel created&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Steve - Discussion on status of scenarios. If we can get :eyes: on &lt;a href="https://github.com/notaryproject/requirements/pull/15" target="_blank" rel="noopener">#15&lt;/a> we can wrap-up a baseline
&lt;ul>
&lt;li>Discussion of the mirroring PR, looking great. A minor clarification on the verification step so we can also merge.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Key Management - possibly create another slack channel
&lt;ul>
&lt;li>Trishank to send a draft of a key management HackMD&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Please put breakout notes here, with a mid-week update if needed - AJust add another ## heading&lt;/li>
&lt;li>Some teams may split out to another slack channel, with a link provided here for others to engage.&lt;/li>
&lt;li>A bit of a concern about too many slack channels. If we do, lets try to keep them focused and not force folks to montior too many slacks.
&lt;ul>
&lt;li>We&amp;rsquo;ll update here weekly for those that want to hear, but don&amp;rsquo;t have time to egnage&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/6" target="_blank" rel="noopener">Initial Design Ideas&lt;/a>
&lt;ul>
&lt;li>should we move these to an issue, or another location?&lt;/li>
&lt;li>Samuel - the requriements repo is a working location
&lt;ul>
&lt;li>we&amp;rsquo;ll continue it here, as issues doesn&amp;rsquo;t have good editing/comments&lt;/li>
&lt;li>Justin spoke to the hackmd folks&lt;/li>
&lt;li>VBatts - would be great if we could somehow integrate hackmd with github&lt;/li>
&lt;li>At this point we&amp;rsquo;ll keep things where they are. As we get further along in design, or we may merge this in as it evolves.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="march-16-2020">March 16, 2020&lt;/h2>
&lt;h3 id="attendees-39">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Evan Cordell (Red Hat)&lt;/li>
&lt;li>Dave Trudgian (Sylabs)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Ian Kaneshiro (Sylabs)&lt;/li>
&lt;li>Dan Lorenc (Google)&lt;/li>
&lt;li>Dave Billing (Cisco)&lt;/li>
&lt;li>Vibhav Bobade (Red Hat)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-38">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Breakout Recap
&lt;ul>
&lt;li>Justin - Signature Storage conversations with Vincent &amp;amp; Derek. A writeup will be done for next week&lt;/li>
&lt;li>Steve - Scenarios have been staged for PR feedback.
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/18" target="_blank" rel="noopener">Readme Link Fixup&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/15" target="_blank" rel="noopener">Scenario updates, incorporating scenarios from @JustinCappos&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Key Management needs a separate focus from Threat Model
&lt;ul>
&lt;li>Discussion of getting more details on the threat models before we focus on details of key managment&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Breakout teams will split off for discussions
&lt;ul>
&lt;li>Please use this Hackmd.io doc for those working at different times&lt;/li>
&lt;li>Post meeting times for those that can attend, and subsequent recordings
&lt;ul>
&lt;li>Threat model meeting: &lt;a href="https://calendar.google.com/event?action=TEMPLATE&amp;amp;tmeid=NXUzbXZmZzZhY2RwbmZwc3VsbDBnbTFtcmwganVzdGluY2FwcG9zQG0&amp;amp;tmsrc=justincappos%40gmail.com">https://calendar.google.com/event?action=TEMPLATE&amp;amp;tmeid=NXUzbXZmZzZhY2RwbmZwc3VsbDBnbTFtcmwganVzdGluY2FwcG9zQG0&amp;amp;tmsrc=justincappos%40gmail.com&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Radu did a Helm 3 w/Notary 1 prototype: &lt;a href="https://github.com/helm/helm/pull/6282">https://github.com/helm/helm/pull/6282&lt;/a>
&lt;ul>
&lt;li>Uses signatures, pushed to OCI Artifact supported registries, pushed with &lt;a href="https://github.com/deislabs/oras" target="_blank" rel="noopener">ORAS&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="notes-38">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="march-9-2020">March 9, 2020&lt;/h2>
&lt;h3 id="attendees-40">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Jon Johnson (Google)&lt;/li>
&lt;li>Dave Billing (Cisco)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Joshua Lock (VMware)&lt;/li>
&lt;li>Evan Cordell (Red Hat)&lt;/li>
&lt;li>Justin Cappos (NYU)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Serge Hallyn (Cisco)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Daniel Jiang (VMware)&lt;/li>
&lt;li>Ram Chinchani (Cisco)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-39">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Breakout groups for Scenarios+UX and Key management+Threat model&lt;/li>
&lt;/ul>
&lt;h3 id="notes-39">Notes:&lt;/h3>
&lt;ul>
&lt;li>KubeCon meeting (Steve)
&lt;ul>
&lt;li>Witht the postponement of KubeCon, we moved to an online meeting. I will reschedule to start at 8am Pacific time, to account for Europe folks.&lt;/li>
&lt;li>I&amp;rsquo;ll have other meetings for Artifacts and possibly the Pub/Sub work Joey has been working on that will happen from 10am to possibly noon. With the KubeCon plan confirmed, I&amp;rsquo;ll get these meetings finalized as well.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Breakout groups
&lt;ul>
&lt;li>Use Cases &amp;amp; UX (api/interaction model)
&lt;ul>
&lt;li>(Steve, Omar, Marina, Aaron, Ram, Tue)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Threat Model &amp;amp; Key Management
&lt;ul>
&lt;li>(JustinCr, Justin Cappos, Niaz, Evan, Dave B, Miloslav?, Serge. Tue)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Signature Storage within the OCI spec
&lt;ul>
&lt;li>(JustinCr, Vincent, Derek, Sam, Jon, Daniel J, Serge, Tue)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Reference Implementation
&lt;ul>
&lt;li>Docker Distribution?&lt;/li>
&lt;li>How does it interact with k8s, OPA and SBoMs&lt;/li>
&lt;li>Zot very interested in implementing asap&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Keep the exising Monday meeting for status sync. Reduce to 30 minutes. Will move to the later hour to free up the first 30 minutes for groups to meet prior.&lt;/li>
&lt;li>Naming: Will leave open for now, pending the threat model discussions. (serge asks - where will that discussion happen?)&lt;/li>
&lt;li>Timeline
&lt;ul>
&lt;li>Going to hold to our original April timeline for an initial design.
&lt;ul>
&lt;li>use the 2 hour March 30 meeting for a summary reporting of the groups.&lt;/li>
&lt;li>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank" rel="noopener">KubeCon EU July&lt;/a> Notary v2 First Proposal&lt;/li>
&lt;li>&lt;a href="https://www.cncf.io/events-well-be-at/kubecon-cloudnativecon-north-america-2/" target="_blank" rel="noopener">KubeCon US November 17&lt;/a> a working reference implementation.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>How do we think about Notary v2 and registries? Does success of Notary v2 end with a registry conformance/implemenation? Or, is it assumed Notary v2 stands alone outside registries?
&lt;ul>
&lt;li>The ability to pull an artifact from a registry, validate it outside of a registry is part of our success.&lt;/li>
&lt;li>End-to-end verification implies signing/verification outside registries; OTOH smooth usage ~requires registries natively supporting transport of signed data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="march-2-2020">March 2, 2020&lt;/h2>
&lt;h3 id="attendees-41">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker&lt;/li>
&lt;li>Stuart Hayton (IBM)&lt;/li>
&lt;li>Brandon Lum (IBM)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Joshua Lock (VMware)&lt;/li>
&lt;li>Marina Moore (NYU)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Dave Billing (Cisco)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-40">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Last Weeks On Site Meeting Recap - Steve&lt;/li>
&lt;li>SBoM Integration - Steve&lt;/li>
&lt;li>Divide &amp;amp; Conquer - Steve/Justin&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-40">Notes:&lt;/h3>
&lt;ul>
&lt;li>With the focused conversation last week, we didn&amp;rsquo;t have much new content. We did a quick cover of the naming and CNAB notes from last week. See below.
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/blob/master/definitions-terms.md" target="_blank" rel="noopener">Definition &amp;amp; Terms&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>SBoM conversations to verify alignmnet that there is &lt;em>a&lt;/em> doc that would be put in a registry, which is then signed.&lt;/li>
&lt;li>Divide &amp;amp; Conquer to start focused design meetings. Specific groups TBD.&lt;/li>
&lt;li>Look into setting up irq on the slack channel - Serge&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/" target="_blank" rel="noopener">Notary Project Requirements&lt;/a> for the current state of content, with &lt;a href="https://docs.google.com/document/d/1OeH1-PpERE_9bs12klQstlaf-Omn-1_Rapu0DF7FiVg/edit#heading=h.yx0a8eaabduw" target="_blank" rel="noopener">Justin&amp;rsquo;s Google Doc here&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="february-24-2020">February 24, 2020&lt;/h2>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Omar Paul (AWS)&lt;/li>
&lt;li>Sajay Antony (Microsoft)&lt;/li>
&lt;li>Radu Matei (Microsoft)&lt;/li>
&lt;li>Trishank Karthik Kuppusamy (Datadog)&lt;/li>
&lt;li>Jon Johnson (Google)&lt;/li>
&lt;li>Marina Moore (NYU/TUF)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-41">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>What&amp;rsquo;s in a name?&lt;/li>
&lt;li>Review a quick &lt;a href="https://docs.google.com/document/d/1k0Oe38MjPskYjRH5UveHZzT7ZE-0akrSztHl_YX61o0/edit#" target="_blank" rel="noopener">doc on image/registry mirroring&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hackmd.io/@radu/By3G7Ni7L" target="_blank" rel="noopener">Notary v2 and CNAB&lt;/a>&lt;/li>
&lt;li>Timeline of what is possible by Kubecon EU 2020?&lt;/li>
&lt;/ul>
&lt;h3 id="notes-41">Notes&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Justin/Steve/Sam/Omar&lt;/strong>: Mirroring is not as straightforward in container registries as in package repos. An image is accessed with a location as core part of the image-therefore signing the image also signs where its stored/retrieved, therefore you today sign the image &lt;em>and&lt;/em> where it comes from.&lt;/li>
&lt;li>&lt;strong>&amp;ldquo;Sam Q: What does a signature tell you?&amp;quot;&lt;/strong> &lt;strong>Aaron&lt;/strong> - Gives you a hash over a bag of bits, gives you the publishers identity and lets you validate the publisher at a later time. &lt;strong>Sam&lt;/strong> - specifically, lets you validate a key and only tells you the publisher is trusted and the object is what was signed, not anything inherent about the content outside of what a publisher says it is. &lt;strong>Steve&lt;/strong> - tells me that this content is trusted because I trust the publisher that signed it. The name of that signed object should also be trusted. &lt;strong>Justin&lt;/strong> - I have to be able to know that I signed something with a name, and if I access that later with a name, I should be able to trust that without checking the content hash again.&lt;/li>
&lt;li>&lt;strong>Should we let people change a name:tag and keep the signature valid&lt;/strong> - If we don&amp;rsquo;t allow this, existing container workflows will break.&lt;/li>
&lt;li>&lt;strong>Sajay&lt;/strong> - We need to be able to describe the discoverability and the signature validation seperately.
&lt;ul>
&lt;li>Extending Index to support storing signatures is one option.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Trishank&lt;/strong> - We can support different models of trust at the same time
&lt;ul>
&lt;li>Option 1: trust Docker to give me the keys for an image&lt;/li>
&lt;li>Option 2: trust Docker only to give me the signatures and the images, and I will pin the keys&lt;/li>
&lt;li>Options need not be mutually exclusive: there is no reason why we cannot support both weak and strong signing models; it should be flexible&lt;/li>
&lt;li>Appears that we need mechanisms for transparent key distribution and revocation, as well as pinning your own keys, as well as ways to somehow order keys using some well-defined criteria for trust&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>What are we signing?&lt;/strong> - &lt;strong>Justin&lt;/strong> signing the descriptor is the correct thing, and if the exact same content is pushed, then pulled and pushed into a second location, and the content hash changes - thats a tooling issue. &lt;strong>Radu&lt;/strong> - &lt;em>insert comment here&lt;/em>&lt;/li>
&lt;li>&lt;strong>Min. bar for Notary v2 of OCI needs to be Distribution Spec v1&lt;/strong> - As a carrot/forcing function.&lt;/li>
&lt;li>How much are we willing to change?
&lt;ul>
&lt;li>We&amp;rsquo;re changing the docker content trust workflow. Are we willing to change the workflows, such as other package managers like npm, rpm, nuget?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Diverging from TUF&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>Justin&lt;/strong>: So far, not seeing a use-case for using the &lt;code>snapshot&lt;/code> role to sign a collection of images, since it&amp;rsquo;s ok to change the version/tag and not have the signature be invalid.&lt;/li>
&lt;li>&lt;strong>Marina&lt;/strong>: The &lt;code>snapshot&lt;/code> role does prevent against &lt;a href="https://www.usenix.org/conference/atc17/technical-sessions/presentation/kuppusamy" target="_blank" rel="noopener">rollback attacks&lt;/a> of images.&lt;/li>
&lt;li>&lt;strong>Trishank&lt;/strong>: Also, how does this affect security guarantees the TUF project designed for Docker Hub &lt;a href="https://www.usenix.org/conference/atc17/technical-sessions/presentation/kuppusamy" target="_blank" rel="noopener">hosting images on semi-trusted mirrors&lt;/a>, where the mirrors may be able to switch images?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="notary-v1">Notary v1&lt;/h3>
&lt;p>The entire path is signed
docker pull &lt;strong>org.exmple.com/team-a/mydb:1.0&lt;/strong>&lt;/p>
&lt;h3 id="keeping-the-name-different-path">Keeping the name, different path&lt;/h3>
&lt;p>docker pull org.exmple.com/&lt;strong>team-a&lt;/strong>/mydb:1.0
docker pull org.exmple.com/&lt;strong>staging&lt;/strong>/mydb:1.0
docker pull org.exmple.com/&lt;strong>prod&lt;/strong>/mydb:1.0&lt;/p>
&lt;h3 id="keeping-the-name-different-registries">Keeping the name, different registries&lt;/h3>
&lt;p>docker pull org-&lt;strong>dev&lt;/strong>.exmple.com/team-a/mydb:1.0
docker pull org-&lt;strong>staging&lt;/strong>.exmple.com/team-a/mydb:1.0
docker pull org-&lt;strong>prod&lt;/strong>.exmple.com/team-a/mydb:1.0&lt;/p>
&lt;h3 id="changing-the-tag-representing-the-env">Changing the tag, representing the env&lt;/h3>
&lt;p>docker pull org.exmple.com/team-a/mydb:1.0
docker pull org.exmple.com/team-a/mydb:1.0-&lt;strong>staging&lt;/strong>
docker pull org.exmple.com/team-a/mydb:1.0-&lt;strong>prod&lt;/strong>&lt;/p>
&lt;h3 id="tagging-references">Tagging References&lt;/h3>
&lt;p>&lt;a href="https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/" target="_blank" rel="noopener">Docker Tagging: Best practices for tagging and versioning docker images&lt;/a>
&lt;img src="https://stevelaskerblog.files.wordpress.com/2018/03/stabletagging.gif?w=940&amp;amp;h=252" alt="">&lt;/p>
&lt;ul>
&lt;li>Comments
&lt;ul>
&lt;li>&lt;strong>Trishank&lt;/strong>: I agree with the docker best practices for tagging and versioning docker images&lt;/li>
&lt;li>&lt;strong>Trishank&lt;/strong>: We cannot depend on the registry not changing the contents of the tags (unless you couple with something like immutable history with Transparent Logs, but that is a whole another can of worms by itself)&lt;/li>
&lt;li>&lt;strong>Jon&lt;/strong>: Definitely agree it seems like signing and tag verification can be solved separately&amp;hellip; the go modules transparent log work seems to map pretty well to registry tags&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="proposal-to-implement-the-above-in-notary-v2">Proposal to implement the above in Notary v2&lt;/h3>
&lt;p>Notary v2 will support this use case&lt;/p>
&lt;ul>
&lt;li>com.docker.justin:foo &amp;lt;- canonical image name&lt;/li>
&lt;li>justin:foo &amp;lt;- Docker Hub image name&lt;/li>
&lt;li>registry.example.net/mirror/image:bar &amp;lt;- diff. location where this content is mirrored
Example commands&lt;/li>
&lt;li>docker pull justin:foo &amp;ndash;from registry.example.net/mirror/image:bar&lt;/li>
&lt;li>docker pull &lt;em>Sajay TBD&lt;/em>&lt;/li>
&lt;li>docker build &amp;ndash;tag justin:foo &amp;ndash;canonical-name com.docker.justin:foo &amp;ndash;sign $KEY_ID&lt;/li>
&lt;/ul>
&lt;h3 id="cnab-doc-notes">CNAB doc notes&lt;/h3>
&lt;ul>
&lt;li>Lets see if Notary v2 does not explicitly block what CNAB already does with TUF and Notary v1. Support TUF 1.0 delegation.&lt;/li>
&lt;li>&lt;strong>Radu&lt;/strong> and &lt;strong>Trishank&lt;/strong> will file an issue on the Notary v2 requirements GitHub repository about exactly what we need. A lot of this touches hairy key management issues we will ultimately need to address anyway.&lt;/li>
&lt;/ul>
&lt;h3 id="todos">ToDos&lt;/h3>
&lt;ul>
&lt;li>Steve to merge in Justin Cappos scenarios&lt;/li>
&lt;li>Sam to capture the naming conversation and next steps&lt;/li>
&lt;/ul>
&lt;h3 id="by-kubecon-eu-achieve-what">By Kubecon EU, achieve what?&lt;/h3>
&lt;ul>
&lt;li>Sam: What are our goals and what are not. Do we know what we&amp;rsquo;re signing, and what does this mean for OCI?&lt;/li>
&lt;li>Justin: How modular is this, what are the basic use cases, and what that usability is&lt;/li>
&lt;li>Steve: Define scope of Notary v2, so we can share with others as well (SBoM, etc.) can understand what we will and won&amp;rsquo;t do. What is needed from the OCI spec?&lt;/li>
&lt;li>Sajay: A containerd plugin PoC that shows what Notary v2 can be?&lt;/li>
&lt;li>Niaz: Understand key management requirements, need to make sure its not super easy to do this - ensure we keep some friction here. [Action] Justin (Docker), Niaz (AWS) will start to meet up on this, with Steve (Msft) bringing someone onboard in the coming weeks.&lt;/li>
&lt;/ul>
&lt;h2 id="february-18-2020">February 18, 2020&lt;/h2>
&lt;h3 id="attendees-42">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Lahiru (AWS)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Aaron Lynch (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-42">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/8" target="_blank" rel="noopener">Review Scenarios&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/9" target="_blank" rel="noopener">Review Definitions &amp;amp; Terms&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/6" target="_blank" rel="noopener">Design discussions&lt;/a>
&lt;ul>
&lt;li>What metadata should we include, and what should we defer to other SBOM type projects?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://github.com/theupdateframework/notary/pull/1455" target="_blank" rel="noopener">grpc key store client feature&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/issues/5" target="_blank" rel="noopener">Singularity related background&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.usenix.org/node/194973" target="_blank" rel="noopener">TUF Delegations&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-42">Notes&lt;/h3>
&lt;ul>
&lt;li>Scenarios
&lt;ul>
&lt;li>JustinCappos Another scneario: what happens when things go wrong, and the keys are compromised? Or, what to do when a specific key was compromised.&lt;/li>
&lt;li>Steve - are these the revoking scenarios?&lt;/li>
&lt;li>(Niaz) - we don&amp;rsquo;t revoke keys as much as we revoke trust&lt;/li>
&lt;li>JustinCappos - If we have a man in the middle attack -
&lt;ul>
&lt;li>It matters what was signed with the key, and when. But, how do you go from the bad state, back to a good state.&lt;/li>
&lt;li>Should also incorporate offline/copied artifacts that were copied to another registry.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>How do we want to scope in/out various topics to the scenarios doc.
&lt;ul>
&lt;li>For instance, key managmenet.&lt;/li>
&lt;li>Scenarios should avoid the specific technology, such as HSM. Rather we refer to keys, regardless of how the key is &amp;ldquo;managed&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>New Scenarios
&lt;ul>
&lt;li>(Justin) #1 doesn&amp;rsquo;t mention how the developer would validate the base image is valid&lt;/li>
&lt;li>(Niaz) How to accont for the scenario where the image is validated, then deployed. Between validation and deploy, how do verify the artifact wasn&amp;rsquo;t compromised. Basically, once the image has been unpacked, how do we validate it.&lt;/li>
&lt;li>Should the hosting environemt be in-scope?
&lt;ul>
&lt;li>(JustinCormack) Or, is this more about specific artifact type validations?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>(Raja) Should be careful to not design something that belongs in the artifact specific runtime.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>For the artifact naming/moving, the existing scenarios aren&amp;rsquo;t crisp enough. Might cover the local mirroring for IoT/OnPrem or workflow from dev-prod.
&lt;ul>
&lt;li>What are the minimum set of scenarios, vs. stretch goals?&lt;/li>
&lt;li>What are we signing? What does signing an artifact mean?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Threat Models
&lt;ul>
&lt;li>Agreement to create a separate threat-model.md document. (JustinCormack) - merged&lt;/li>
&lt;li>Cappos - how to identify how the thing was compromised? It&amp;rsquo;s not just a scanning question.&lt;/li>
&lt;li>We should valiate the integrity, not enforce a policy&lt;/li>
&lt;li>(JustinCormack) - how do we account for names being verifiable? If I can&amp;rsquo;t verify by name, I can&amp;rsquo;t trust it, and will revert to @sha256 digest references&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Merging
&lt;ul>
&lt;li>Agreed to merge the existing docuemnts (scenarios, def &amp;amp; terms, and threatmodel), and iterate upon them.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>validation logic
&lt;ul>
&lt;li>What are we validating?
&lt;ul>
&lt;li>Key?&lt;/li>
&lt;li>Name?&lt;/li>
&lt;li>Version?&lt;/li>
&lt;li>Entity?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>What does a validation look like?
&lt;ul>
&lt;li>Produced with a key that I trust&lt;/li>
&lt;li>Producted by any key (it was signed and traceable)&lt;/li>
&lt;li>The signature has an identity (Microsoft vs. micosoft)&lt;/li>
&lt;li>When was it signed&lt;/li>
&lt;li>Does the signature expire&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Open Topics
&lt;ul>
&lt;li>Naming &amp;amp; Signing&lt;/li>
&lt;li>Validate before run&lt;/li>
&lt;li>TOFU vs. Explicit&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Definitions &amp;amp; Terms
&lt;ul>
&lt;li>_&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Key Management
&lt;ul>
&lt;li>Where keys are stored aren&amp;rsquo;t completly in scope.&lt;/li>
&lt;li>The usability for how keys are used are in scope for the usability goals of notary v2.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Design Discussions
&lt;ul>
&lt;li>Where to store the signature info?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Parking Lot
&lt;ul>
&lt;li>Key Management&lt;/li>
&lt;li>Heirarchicy of keys&lt;/li>
&lt;li>grpc key store client feature - will defer to a later conversation.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>
docker pull org.exmple.com/team-a/mydb:1.0
docker pull org.exmple.com/prod/mydb:1.0
docker pull org.exmple.com/prod/gibbly:v1dsdf0 &amp;ndash;name mydb:1.0&lt;/li>
&lt;/ul>
&lt;h2 id="february-3-2020">February 3, 2020&lt;/h2>
&lt;h3 id="attendees-43">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker&lt;/li>
&lt;li>Justin Cormack&lt;/li>
&lt;li>Stuart Hayton (IBM/ICCR)&lt;/li>
&lt;li>Jim Flanagan (AWS)&lt;/li>
&lt;li>Jack Baines (IBM/ICCR)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Brandon Lum (IBM/Research)&lt;/li>
&lt;li>Omar Paul (AWS)&lt;/li>
&lt;li>Joey Schorr (Red Hat)&lt;/li>
&lt;li>Evan Cordell (Red Hat)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>Ian Kaneshiro (Sylabs)&lt;/li>
&lt;li>&lt;em>add yourself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-43">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://docs.google.com/document/d/1u3NSJP5j65cdZHSMFALtvHno4YhbGVK6opYaO-vBOzc/edit?usp=sharing" target="_blank" rel="noopener">Dividing &amp;amp; Conquering with a Separation of Concerns&lt;/a> - How Notary v2, SBOM, Policy Managmenet and Orchestrators can take on specific areas - (Steve)&lt;/li>
&lt;li>What We Sign (Justin) &lt;a href="https://docs.google.com/document/d/1lffOYCDXBoxRumQre32yv1jUN2NfOkWugoDEJ_2DdEk/edit">https://docs.google.com/document/d/1lffOYCDXBoxRumQre32yv1jUN2NfOkWugoDEJ_2DdEk/edit&lt;/a>&lt;/li>
&lt;li>&lt;em>add your topics&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="notes-43">Notes:&lt;/h3>
&lt;ul>
&lt;li>Overview of how to think of Notary signatures, versioning, etc: &lt;a href="https://docs.google.com/document/d/1u3NSJP5j65cdZHSMFALtvHno4YhbGVK6opYaO-vBOzc/edit?usp=sharing" target="_blank" rel="noopener">Dividing &amp;amp; Conquering with a Separation of Concerns&lt;/a>&lt;/li>
&lt;li>Mitr: Concerned about interoperability.&lt;/li>
&lt;li>Justin: Package managers tend to sign a smaller set of metadata. If they uniquely sign the mysql:3.16 image, is that the minimal use case?&lt;/li>
&lt;li>Discussion of what&amp;rsquo;s signed. The manifest, or the &lt;code>artifact:tag&lt;/code> name.&lt;/li>
&lt;li>Signature Lifetime: Should signatures have a lifetime?&lt;/li>
&lt;li>&lt;em>meeting minutes&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="january-27-2020">January 27, 2020&lt;/h2>
&lt;h3 id="attendees-44">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Microsoft)&lt;/li>
&lt;li>Dave Trudgian (Sylabs)&lt;/li>
&lt;li>Stuart Hayton (IBM/ICCR)&lt;/li>
&lt;li>Ian Kaneshiro (Sylabs)&lt;/li>
&lt;li>Omar Paul (AWS)&lt;/li>
&lt;li>Lahiru Dissanayake (AWS)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Niaz Khan (AWS)&lt;/li>
&lt;li>Miloslav Trmač (Red Hat)&lt;/li>
&lt;li>&lt;em>add youself&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-44">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Remind ourselves to post agenda items the Friday before :)&lt;/li>
&lt;li>KubeCon Schedule update - Amye is working with the KubeCon schedule folks&lt;/li>
&lt;li>Repo update &amp;amp; discussion&lt;/li>
&lt;li>Requirement of signing locally&lt;/li>
&lt;li>Break out&lt;/li>
&lt;/ul>
&lt;h3 id="notes-44">Notes:&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://www.docker.com/blog/community-collaboration-on-notary-v2/">https://www.docker.com/blog/community-collaboration-on-notary-v2/&lt;/a>&lt;/li>
&lt;li>Kubecon Amsterdam planning is being looked at. Currently looks like mid-week (Mar 30-Apr 2), Steve is working with Amy to find a location and times.&lt;/li>
&lt;li>Breakout updates:
&lt;ul>
&lt;li>Threat Model (Justin)&lt;/li>
&lt;li>Key Managment (Justin)
&lt;ul>
&lt;li>AWS can help with the key management/crypto org participating&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Integration with OCI &amp;amp; the Spec (Vincent)
&lt;ul>
&lt;li>Some early conversation with between Vincent &amp;amp; Jon. Would like to get Distribtuion 1.0 get out first, and we&amp;rsquo;ll be additive.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Scenarios (Steve)
&lt;ul>
&lt;li>In progress: &lt;a href="https://github.com/notaryproject/requirements/pull/1">https://github.com/notaryproject/requirements/pull/1&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Use Cases&lt;/li>
&lt;li>UX (Omar)
&lt;ul>
&lt;li>Holding pattern for a couple of weeks as the scenarios and use cases flesh out&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Steve - local signing, keys, registries
&lt;ul>
&lt;li>Sam - local signing makes sense&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Glossary of terms is needed. Define terms so we can use them in discussion and everyone knows what they mean. &lt;em>Key&lt;/em>, &lt;em>Signature&lt;/em>, &lt;em>Artifact&lt;/em>, &lt;em>Key Store&lt;/em>, &lt;em>Artifact Store&lt;/em>, &lt;em>Annotation&lt;/em>, &lt;em>Manifest&lt;/em>, &lt;em>Metadata&lt;/em>, &lt;em>Artifact Version&lt;/em>, &lt;em>Tag&lt;/em>, &amp;hellip;&lt;/li>
&lt;li>Air-gapped/disconnected environments is a scenario that should be spec&amp;rsquo;d.&lt;/li>
&lt;li>Artifact names and signature references:&lt;/li>
&lt;li>When you sign a manifest, are we signing all the annotations? If so, then as annotations are added, consider an exampe scenario that vendor annotates, then subsequently some process adds(not change of image) something, that should not invalidate the vendor signature)&lt;/li>
&lt;li>Mixing signed and unsigned annotations is out of scope.&lt;/li>
&lt;li>Spec should refer to orhestrators generically.&lt;/li>
&lt;li>fx:1.0 scenario was too abstract in some areas to articulate which element of the stack would enforce the scenario.&lt;/li>
&lt;/ul>
&lt;h2 id="january-13-2020">January 13, 2020&lt;/h2>
&lt;p>&lt;em>video available&lt;/em>: &lt;a href="https://youtu.be/_cNtDvaU-J8">https://youtu.be/_cNtDvaU-J8&lt;/a>&lt;/p>
&lt;h3 id="attendees-45">Attendees:&lt;/h3>
&lt;ul>
&lt;li>Steve Lasker (Azure)&lt;/li>
&lt;li>Justin Cormack (Docker)&lt;/li>
&lt;li>Omar Paul (AWS)&lt;/li>
&lt;li>Tue Tran (AWS)&lt;/li>
&lt;li>Lahiru (AWS)&lt;/li>
&lt;li>Dave Trudgian (Sylabs)&lt;/li>
&lt;li>Samuel Karp (AWS)&lt;/li>
&lt;li>Stuart Hayton (IBM/ICR)&lt;/li>
&lt;li>Vincent Batts&lt;/li>
&lt;li>Ian Kaneshiro (Sylabs)&lt;/li>
&lt;li>Chad Metcalf&lt;/li>
&lt;li>Jon Johnson (Google)&lt;/li>
&lt;li>Phil Estes (IBM)&lt;/li>
&lt;li>Raja jadeja (AWS)&lt;/li>
&lt;li>Mike Brown (IBM)&lt;/li>
&lt;li>Miloslav Trmac (RH)&lt;/li>
&lt;li>Joseph Schorr (RH/Quay)&lt;/li>
&lt;li>Evan Cordell (RH/Quay)&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-items-45">Agenda Items:&lt;/h3>
&lt;ul>
&lt;li>Holiday Update (Justin)&lt;/li>
&lt;li>&lt;a href="https://github.com/notaryproject/requirements/pull/1" target="_blank" rel="noopener">Scenarios&lt;/a> (Steve)&lt;/li>
&lt;/ul>
&lt;h3 id="notes-45">Notes:&lt;/h3>
&lt;ul>
&lt;li>(Justin) - Org things
&lt;ul>
&lt;li>Justin created a notary project under github &lt;a href="https://github.com/notaryproject/">https://github.com/notaryproject/&lt;/a>&lt;/li>
&lt;li>Requirements repo created at &lt;a href="https://github.com/notaryproject/requirements/">https://github.com/notaryproject/requirements/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>(Justin) How do we account for the UX of how someone signs and/or validates signatures?&lt;/li>
&lt;li>Steve/Justin - how do we account for general signatures? Should a customer have to state which signatures they support before? Or, is there a * like scenario where they require a signature, but not a specific signature? Or, is this up to specific hosts to implement? This has remnants of trust on first use&lt;/li>
&lt;li>Need to account for mirroring scenario (steve)&lt;/li>
&lt;li>Stuart/Justin: How do we account for heirarchy (root of trust) scenarios?&lt;/li>
&lt;li>Need to account for revoking signature scenarios, including mirrored scenarios (steve)&lt;/li>
&lt;li>Steve - have we thought about root signatures being in one-place, while the signed artifacts are in a different registry?
&lt;ul>
&lt;li>Justin - this was part of Notary v1, with the China mirror.&lt;/li>
&lt;li>Miloslav - this is less of signature issue, but more of a content transport redirection scenario&lt;/li>
&lt;li>Justin - we did implement this for things like edge/semi disconnected scenarios.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Miloslav - does scenario #1 imply the artifact can be signed before it&amp;rsquo;s compressed?&lt;/li>
&lt;li>Sam - while the current docker implementation doesn&amp;rsquo;t store the compressed format, containerd does support both.&lt;/li>
&lt;li>Justin - we do really want Docker to work this way (containerd), we just haven&amp;rsquo;t had a chance yet. Mainly a complicated migration scenario. Derek has a PR opened. It&amp;rsquo;s why we have this weird buildx plug-in.&lt;/li>
&lt;li>David - we have signing and validation embedded into the single file. We currently work through the registry through ORAS.&lt;/li>
&lt;li>Steve - we&amp;rsquo;ll account for whatever Notary v2 goes with into ORAS.&lt;/li>
&lt;li>Stuart - mirroring: Justin was talking about the home location problem. Questions on the history of the name.
&lt;ul>
&lt;li>Justin - do you need to know the history of the name? If it&amp;rsquo;s my image docker.io/justincormack/foo, I may use docker.io/justincormack for my signing key/authority. However, other vendors like Microsoft may have it&amp;rsquo;s own key.&lt;/li>
&lt;li>Joey - I agree, the name seems to be unimportant. If docker wants to sign every image, they can with docker.io/centralsignature, or there&amp;rsquo;s a specific signature. It&amp;rsquo;s up the client for which signatures they want to trust&lt;/li>
&lt;li>Justin - we definitley can&amp;rsquo;t have anything change when moved between regsitries&lt;/li>
&lt;li>Steve - we&amp;rsquo;re talkinga about seperating the signature name from the registry it&amp;rsquo;s stored within.&lt;/li>
&lt;li>Mirek - the difference between signed “what the content is” and location is important. If the user asks for a specific version, they should get the specific version they asked for.&lt;/li>
&lt;li>Joey - need to think about keys being tied to versions. I don&amp;rsquo;t want to end up with the tag name being put into the manifest. If one manifest list can refer to a remote manifest, &amp;hellip; then it&amp;rsquo;s up to each user to make a determination on how they sign things. Expect most users will want to trust a general key, not a specific version. But, customers can opt-into the narrowness of what they need. Perhaps a key for major version, with an annotation for a minor version. Want to get away from the tag name being canonicalized into the annotations.&lt;/li>
&lt;li>Steve - the scnearios capture naming can be different as the artifact moves.&lt;/li>
&lt;li>Justin - most people do want to know by tag, and they&amp;rsquo;re running mysql:3.8, they really get something that was tagged mysql:3.8, and not something mysql:3.4&lt;/li>
&lt;li>Steve - how much should we lean into SBOM, vs tied signatures to specific artfiacts. Should we dictate a flow, or enable a flow?&lt;/li>
&lt;li>Justin - we definelty want to be flexible, but we defintiley want some standard policy/framework to apply the kind of policies they want. It&amp;rsquo;s important to know it&amp;rsquo;s mysql, but also what version is also important.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Notes from slack:
From Red Hat NYC to Everyone: 11:01 AM
We need to leave now, unfortunately, but wanted to comment that name resolution is already the job of the registry; it seems weird to have a second system to replace the very purpose of the registry
that’s part of the reason we have a concern with how Notary V1 worked
From Miloslav Trmač to Everyone: 11:01 AM
The registry (or the registries involved, or the backing storage) is by definition untrusted or we, for the most part, don’t need signatures&lt;/p></description></item><item><title>Docs: notation</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation/</guid><description>
&lt;h2 id="notation">notation&lt;/h2>
&lt;p>Notation - a tool to sign and verify artifacts&lt;/p>
&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for notation
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/">notation certificate&lt;/a> - Manage certificates in trust store&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/">notation completion&lt;/a> - Generate the autocompletion script for the specified shell&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_inspect/">notation inspect&lt;/a> - Inspect all signatures associated with the signed artifact&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/">notation key&lt;/a> - Manage keys used for signing&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_list/">notation list&lt;/a> - List signatures of the signed artifact&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_login/">notation login&lt;/a> - Login to registry&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_logout/">notation logout&lt;/a> - Log out from the logged in registries&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin/">notation plugin&lt;/a> - Manage plugins&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_policy/">notation policy&lt;/a> - Manage trust policy configuration&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_sign/">notation sign&lt;/a> - Sign artifacts&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_verify/">notation verify&lt;/a> - Verify OCI artifacts&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_version/">notation version&lt;/a> - Show the notation version information&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation certificate</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/</guid><description>
&lt;h2 id="notation-certificate">notation certificate&lt;/h2>
&lt;p>Manage certificates in trust store&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Manage certificates in trust store for signature verification.&lt;/p>
&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for certificate
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_add/">notation certificate add&lt;/a> - Add certificates to the trust store&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_delete/">notation certificate delete&lt;/a> - Delete certificates from the trust store&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_generate-test/">notation certificate generate-test&lt;/a> - Generate a test RSA key and a corresponding self-signed certificate.&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_list/">notation certificate list&lt;/a> - List certificates in the trust store&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_show/">notation certificate show&lt;/a> - Show certificate details given trust store type, named store, and certificate file name. If the certificate file contains multiple certificates, then all certificates are displayed&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation certificate add</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_add/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_add/</guid><description>
&lt;h2 id="notation-certificate-add">notation certificate add&lt;/h2>
&lt;p>Add certificates to the trust store&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Add certificates to the trust store&lt;/p>
&lt;pre>&lt;code>notation certificate add --type &amp;lt;type&amp;gt; --store &amp;lt;name&amp;gt; [flags] &amp;lt;cert_path&amp;gt;...
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># Add a certificate to the &amp;quot;ca&amp;quot; type of a named store &amp;quot;acme-rockets&amp;quot;:
notation cert add --type ca --store acme-rockets acme-rockets.crt
# Add a certificate to the &amp;quot;signingAuthority&amp;quot; type of a named store &amp;quot;wabbit-networks&amp;quot;:
notation cert add --type signingAuthority --store wabbit-networks wabbit-networks.pem
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for add
-s, --store string specify named store
-t, --type string specify trust store type, options: ca, signingAuthority
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/">notation certificate&lt;/a> - Manage certificates in trust store&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation certificate delete</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_delete/</guid><description>
&lt;h2 id="notation-certificate-delete">notation certificate delete&lt;/h2>
&lt;p>Delete certificates from the trust store&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Delete certificates from the trust store&lt;/p>
&lt;pre>&lt;code>notation certificate delete --type &amp;lt;type&amp;gt; --store &amp;lt;name&amp;gt; [flags] (--all | &amp;lt;cert_fileName&amp;gt;)
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># Delete all certificates with &amp;quot;ca&amp;quot; type from the trust store &amp;quot;acme-rockets&amp;quot;:
notation cert delete --type ca --store acme-rockets --all
# Delete certificate &amp;quot;cert1.pem&amp;quot; with &amp;quot;signingAuthority&amp;quot; type from trust store wabbit-networks:
notation cert delete --type signingAuthority --store wabbit-networks cert1.pem
# Delete all certificates with &amp;quot;ca&amp;quot; type from the trust store &amp;quot;acme-rockets&amp;quot;, without prompt for confirmation:
notation cert delete --type ca --store acme-rockets -y --all
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -a, --all delete all certificates in the named store
-h, --help help for delete
-s, --store string specify named store
-t, --type string specify trust store type, options: ca, signingAuthority
-y, --yes do not prompt for confirmation
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/">notation certificate&lt;/a> - Manage certificates in trust store&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation certificate generate-test</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_generate-test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_generate-test/</guid><description>
&lt;h2 id="notation-certificate-generate-test">notation certificate generate-test&lt;/h2>
&lt;p>Generate a test RSA key and a corresponding self-signed certificate.&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Generate a test RSA key and a corresponding self-signed certificate&lt;/p>
&lt;p>Example - Generate a test RSA key and a corresponding self-signed certificate named &amp;ldquo;wabbit-networks.io&amp;rdquo;:
notation cert generate-test &amp;ldquo;wabbit-networks.io&amp;rdquo;&lt;/p>
&lt;p>Example - Generate a test RSA key and a corresponding self-signed certificate, set RSA key as a default signing key:
notation cert generate-test &amp;ndash;default &amp;ldquo;wabbit-networks.io&amp;rdquo;&lt;/p>
&lt;pre>&lt;code>notation certificate generate-test [flags] &amp;lt;common_name&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -b, --bits int RSA key bits (default 2048)
--default mark as default signing key
-h, --help help for generate-test
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/">notation certificate&lt;/a> - Manage certificates in trust store&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation certificate list</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_list/</guid><description>
&lt;h2 id="notation-certificate-list">notation certificate list&lt;/h2>
&lt;p>List certificates in the trust store&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>List certificates in the trust store&lt;/p>
&lt;pre>&lt;code>notation certificate list [flags]
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># List all certificate files stored in the trust store
notation cert ls
# List all certificate files of trust store &amp;quot;acme-rockets&amp;quot;
notation cert ls --store &amp;quot;acme-rockets&amp;quot;
# List all certificate files from trust store of type &amp;quot;ca&amp;quot;
notation cert ls --type ca
# List all certificate files from trust store &amp;quot;wabbit-networks&amp;quot; of type &amp;quot;signingAuthority&amp;quot;
notation cert ls --type signingAuthority --store &amp;quot;wabbit-networks&amp;quot;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
-h, --help help for list
-s, --store string specify named store
-t, --type string specify trust store type, options: ca, signingAuthority
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/">notation certificate&lt;/a> - Manage certificates in trust store&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation certificate show</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_show/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate_show/</guid><description>
&lt;h2 id="notation-certificate-show">notation certificate show&lt;/h2>
&lt;p>Show certificate details given trust store type, named store, and certificate file name. If the certificate file contains multiple certificates, then all certificates are displayed&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Show certificate details of given trust store name, trust store type, and certificate file name. If the certificate file contains multiple certificates, then all certificates are displayed&lt;/p>
&lt;pre>&lt;code>notation certificate show --type &amp;lt;type&amp;gt; --store &amp;lt;name&amp;gt; [flags] &amp;lt;cert_fileName&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># Show details of certificate &amp;quot;cert1.pem&amp;quot; with type &amp;quot;ca&amp;quot; from trust store &amp;quot;acme-rockets&amp;quot;:
notation cert show --type ca --store acme-rockets cert1.pem
# Show details of certificate &amp;quot;cert2.pem&amp;quot; with type &amp;quot;signingAuthority&amp;quot; from trust store &amp;quot;wabbit-networks&amp;quot;:
notation cert show --type signingAuthority --store wabbit-networks cert2.pem
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
-h, --help help for show
-s, --store string specify named store
-t, --type string specify trust store type, options: ca, signingAuthority
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_certificate/">notation certificate&lt;/a> - Manage certificates in trust store&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation completion</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/</guid><description>
&lt;h2 id="notation-completion">notation completion&lt;/h2>
&lt;p>Generate the autocompletion script for the specified shell&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Generate the autocompletion script for notation for the specified shell.
See each sub-command&amp;rsquo;s help for details on how to use the generated script.&lt;/p>
&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for completion
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_bash/">notation completion bash&lt;/a> - Generate the autocompletion script for bash&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_fish/">notation completion fish&lt;/a> - Generate the autocompletion script for fish&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_powershell/">notation completion powershell&lt;/a> - Generate the autocompletion script for powershell&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_zsh/">notation completion zsh&lt;/a> - Generate the autocompletion script for zsh&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation completion bash</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_bash/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_bash/</guid><description>
&lt;h2 id="notation-completion-bash">notation completion bash&lt;/h2>
&lt;p>Generate the autocompletion script for bash&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Generate the autocompletion script for the bash shell.&lt;/p>
&lt;p>This script depends on the &amp;lsquo;bash-completion&amp;rsquo; package.
If it is not installed already, you can install it via your OS&amp;rsquo;s package manager.&lt;/p>
&lt;p>To load completions in your current shell session:&lt;/p>
&lt;pre>&lt;code>source &amp;lt;(notation completion bash)
&lt;/code>&lt;/pre>
&lt;p>To load completions for every new session, execute once:&lt;/p>
&lt;h4 id="linux">Linux:&lt;/h4>
&lt;pre>&lt;code>notation completion bash &amp;gt; /etc/bash_completion.d/notation
&lt;/code>&lt;/pre>
&lt;h4 id="macos">macOS:&lt;/h4>
&lt;pre>&lt;code>notation completion bash &amp;gt; $(brew --prefix)/etc/bash_completion.d/notation
&lt;/code>&lt;/pre>
&lt;p>You will need to start a new shell for this setup to take effect.&lt;/p>
&lt;pre>&lt;code>notation completion bash
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for bash
--no-descriptions disable completion descriptions
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/">notation completion&lt;/a> - Generate the autocompletion script for the specified shell&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation completion fish</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_fish/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_fish/</guid><description>
&lt;h2 id="notation-completion-fish">notation completion fish&lt;/h2>
&lt;p>Generate the autocompletion script for fish&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Generate the autocompletion script for the fish shell.&lt;/p>
&lt;p>To load completions in your current shell session:&lt;/p>
&lt;pre>&lt;code>notation completion fish | source
&lt;/code>&lt;/pre>
&lt;p>To load completions for every new session, execute once:&lt;/p>
&lt;pre>&lt;code>notation completion fish &amp;gt; ~/.config/fish/completions/notation.fish
&lt;/code>&lt;/pre>
&lt;p>You will need to start a new shell for this setup to take effect.&lt;/p>
&lt;pre>&lt;code>notation completion fish [flags]
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for fish
--no-descriptions disable completion descriptions
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/">notation completion&lt;/a> - Generate the autocompletion script for the specified shell&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation completion powershell</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_powershell/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_powershell/</guid><description>
&lt;h2 id="notation-completion-powershell">notation completion powershell&lt;/h2>
&lt;p>Generate the autocompletion script for powershell&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Generate the autocompletion script for powershell.&lt;/p>
&lt;p>To load completions in your current shell session:&lt;/p>
&lt;pre>&lt;code>notation completion powershell | Out-String | Invoke-Expression
&lt;/code>&lt;/pre>
&lt;p>To load completions for every new session, add the output of the above command
to your powershell profile.&lt;/p>
&lt;pre>&lt;code>notation completion powershell [flags]
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for powershell
--no-descriptions disable completion descriptions
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/">notation completion&lt;/a> - Generate the autocompletion script for the specified shell&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation completion zsh</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_zsh/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion_zsh/</guid><description>
&lt;h2 id="notation-completion-zsh">notation completion zsh&lt;/h2>
&lt;p>Generate the autocompletion script for zsh&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Generate the autocompletion script for the zsh shell.&lt;/p>
&lt;p>If shell completion is not already enabled in your environment you will need
to enable it. You can execute the following once:&lt;/p>
&lt;pre>&lt;code>echo &amp;quot;autoload -U compinit; compinit&amp;quot; &amp;gt;&amp;gt; ~/.zshrc
&lt;/code>&lt;/pre>
&lt;p>To load completions in your current shell session:&lt;/p>
&lt;pre>&lt;code>source &amp;lt;(notation completion zsh)
&lt;/code>&lt;/pre>
&lt;p>To load completions for every new session, execute once:&lt;/p>
&lt;h4 id="linux">Linux:&lt;/h4>
&lt;pre>&lt;code>notation completion zsh &amp;gt; &amp;quot;${fpath[1]}/_notation&amp;quot;
&lt;/code>&lt;/pre>
&lt;h4 id="macos">macOS:&lt;/h4>
&lt;pre>&lt;code>notation completion zsh &amp;gt; $(brew --prefix)/share/zsh/site-functions/_notation
&lt;/code>&lt;/pre>
&lt;p>You will need to start a new shell for this setup to take effect.&lt;/p>
&lt;pre>&lt;code>notation completion zsh [flags]
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for zsh
--no-descriptions disable completion descriptions
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_completion/">notation completion&lt;/a> - Generate the autocompletion script for the specified shell&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation inspect</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_inspect/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_inspect/</guid><description>
&lt;h2 id="notation-inspect">notation inspect&lt;/h2>
&lt;p>Inspect all signatures associated with the signed artifact&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Inspect all signatures associated with the signed artifact&lt;/p>
&lt;pre>&lt;code>notation inspect [reference] [flags]
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># Inspect signatures on an OCI artifact identified by a digest:
notation inspect &amp;lt;registry&amp;gt;/&amp;lt;repository&amp;gt;@&amp;lt;digest&amp;gt;
# Inspect signatures on an OCI artifact identified by a tag (Notation will resolve tag to digest):
notation inspect &amp;lt;registry&amp;gt;/&amp;lt;repository&amp;gt;:&amp;lt;tag&amp;gt;
# Inspect signatures on an OCI artifact identified by a digest and output as json:
notation inspect --output json &amp;lt;registry&amp;gt;/&amp;lt;repository&amp;gt;@&amp;lt;digest&amp;gt;
# [Experimental] Inspect signatures on an OCI artifact identified by a digest using the Referrers API, if not supported (returns 404), fallback to the Referrers tag schema
notation inspect --allow-referrers-api &amp;lt;registry&amp;gt;/&amp;lt;repository&amp;gt;@&amp;lt;digest&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> --allow-referrers-api [Experimental] use the Referrers API to inspect signatures, if not supported (returns 404), fallback to the Referrers tag schema
-d, --debug debug mode
-h, --help help for inspect
--insecure-registry use HTTP protocol while connecting to registries. Should be used only for testing
--max-signatures int maximum number of signatures to evaluate or examine (default 100)
-o, --output string output format, options: 'json', 'text' (default &amp;quot;text&amp;quot;)
-p, --password string password for registry operations (default to $NOTATION_PASSWORD if not specified)
-u, --username string username for registry operations (default to $NOTATION_USERNAME if not specified)
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation key</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/</guid><description>
&lt;h2 id="notation-key">notation key&lt;/h2>
&lt;p>Manage keys used for signing&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Manage keys used for signing&lt;/p>
&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># Add a key to signing key list:
notation key add --plugin &amp;lt;plugin_name&amp;gt; --id &amp;lt;key_id&amp;gt; &amp;lt;key_name&amp;gt;
# List keys used for signing:
notation key ls
# Update the default signing key:
notation key set --default &amp;lt;key_name&amp;gt;
# Delete the key from signing key list:
notation key delete &amp;lt;key_name&amp;gt;...
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for key
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_add/">notation key add&lt;/a> - Add key to Notation signing key list&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_delete/">notation key delete&lt;/a> - Remove key from Notation signing key list&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_list/">notation key list&lt;/a> - List keys used for signing&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_update/">notation key update&lt;/a> - Update key in Notation signing key list&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation key add</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_add/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_add/</guid><description>
&lt;h2 id="notation-key-add">notation key add&lt;/h2>
&lt;p>Add key to Notation signing key list&lt;/p>
&lt;pre>&lt;code>notation key add --plugin &amp;lt;plugin_name&amp;gt; [flags] &amp;lt;key_name&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
--default mark as default
-h, --help help for add
--id string key id (required if --plugin is set)
--plugin string signing plugin name
--plugin-config stringArray {key}={value} pairs that are passed as it is to a plugin, refer plugin's documentation to set appropriate values
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/">notation key&lt;/a> - Manage keys used for signing&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation key delete</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_delete/</guid><description>
&lt;h2 id="notation-key-delete">notation key delete&lt;/h2>
&lt;p>Remove key from Notation signing key list&lt;/p>
&lt;pre>&lt;code>notation key delete [flags] &amp;lt;key_name&amp;gt;...
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
-h, --help help for delete
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/">notation key&lt;/a> - Manage keys used for signing&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation key list</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_list/</guid><description>
&lt;h2 id="notation-key-list">notation key list&lt;/h2>
&lt;p>List keys used for signing&lt;/p>
&lt;pre>&lt;code>notation key list [flags]
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for list
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/">notation key&lt;/a> - Manage keys used for signing&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation key update</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_update/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_key_update/</guid><description>
&lt;h2 id="notation-key-update">notation key update&lt;/h2>
&lt;p>Update key in Notation signing key list&lt;/p>
&lt;pre>&lt;code>notation key update [flags] &amp;lt;key_name&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
--default mark as default
-h, --help help for update
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_key/">notation key&lt;/a> - Manage keys used for signing&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation list</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_list/</guid><description>
&lt;h2 id="notation-list">notation list&lt;/h2>
&lt;p>List signatures of the signed artifact&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>List all the signatures associated with signed artifact&lt;/p>
&lt;pre>&lt;code>notation list [flags] &amp;lt;reference&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> --allow-referrers-api [Experimental] use the Referrers API to list signatures, if not supported (returns 404), fallback to the Referrers tag schema
-d, --debug debug mode
-h, --help help for list
--insecure-registry use HTTP protocol while connecting to registries. Should be used only for testing
--max-signatures int maximum number of signatures to evaluate or examine (default 100)
--oci-layout [Experimental] list signatures stored in OCI image layout
-p, --password string password for registry operations (default to $NOTATION_PASSWORD if not specified)
-u, --username string username for registry operations (default to $NOTATION_USERNAME if not specified)
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation login</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_login/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_login/</guid><description>
&lt;h2 id="notation-login">notation login&lt;/h2>
&lt;p>Login to registry&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>Log in to an OCI registry&lt;/p>
&lt;pre>&lt;code>notation login [flags] &amp;lt;server&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># Login with provided username and password:
notation login -u &amp;lt;user&amp;gt; -p &amp;lt;password&amp;gt; registry.example.com
# Login using $NOTATION_USERNAME $NOTATION_PASSWORD variables:
notation login registry.example.com
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
-h, --help help for login
--insecure-registry use HTTP protocol while connecting to registries. Should be used only for testing
-p, --password string password for registry operations (default to $NOTATION_PASSWORD if not specified)
--password-stdin take the password from stdin
-u, --username string username for registry operations (default to $NOTATION_USERNAME if not specified)
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation logout</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_logout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_logout/</guid><description>
&lt;h2 id="notation-logout">notation logout&lt;/h2>
&lt;p>Log out from the logged in registries&lt;/p>
&lt;pre>&lt;code>notation logout [flags] &amp;lt;server&amp;gt;
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -d, --debug debug mode
-h, --help help for logout
-v, --verbose verbose mode
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation plugin</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin/</guid><description>
&lt;h2 id="notation-plugin">notation plugin&lt;/h2>
&lt;p>Manage plugins&lt;/p>
&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for plugin
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation/">notation&lt;/a> - Notation - a tool to sign and verify artifacts&lt;/li>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin_list/">notation plugin list&lt;/a> - List installed plugins&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item><item><title>Docs: notation plugin list</title><link>https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin_list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin_list/</guid><description>
&lt;h2 id="notation-plugin-list">notation plugin list&lt;/h2>
&lt;p>List installed plugins&lt;/p>
&lt;h3 id="synopsis">Synopsis&lt;/h3>
&lt;p>List installed plugins&lt;/p>
&lt;pre>&lt;code>notation plugin list [flags]
&lt;/code>&lt;/pre>&lt;h3 id="examples">Examples&lt;/h3>
&lt;pre>&lt;code># List installed Notation plugins:
notation plugin ls
&lt;/code>&lt;/pre>&lt;h3 id="options">Options&lt;/h3>
&lt;pre>&lt;code> -h, --help help for list
&lt;/code>&lt;/pre>&lt;h3 id="see-also">SEE ALSO&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://notaryproject.dev/docs/user-guides/cli-reference/notation_plugin/">notation plugin&lt;/a> - Manage plugins&lt;/li>
&lt;/ul>
&lt;h6 id="auto-generated-by-spf13cobra-on-19-sep-2023">Auto generated by spf13/cobra on 19-Sep-2023&lt;/h6></description></item></channel></r