|
1 | | -methods-differences: |
| 1 | +methods-comparison: |
2 | 2 | headers: |
3 | 3 | topic: |
4 | | - cosign: Sigstore Cosign |
| 4 | + notary: Notary (Notation) |
| 5 | + cosign_fulcio: Cosign (with Fulcio) |
| 6 | + cosign_keys: Cosign (Public/Private Keys) |
5 | 7 | dct: Docker Content Trust (DCT) |
| 8 | + gpg: GPG |
6 | 9 | _attributes: |
7 | | - topic: {style: "width: 16%"} |
8 | | - cosign: {style: "width: 42%"} |
9 | | - dct: {style: "width: 42%"} |
| 10 | + topic: { style: "width:15%" } |
| 11 | + notary: { style: "width:17%" } |
| 12 | + cosign_fulcio: { style: "width:17%" } |
| 13 | + cosign_keys: { style: "width:17%" } |
| 14 | + dct: { style: "width:17%" } |
| 15 | + gpg: { style: "width:17%" } |
10 | 16 | body: |
11 | | - - topic: OCI Registry Requirements |
12 | | - cosign: Works with any OCI registry. |
13 | | - dct: Requires [Notary](https://github.com/notaryproject/notary) server and signer (provided by _some_ OCI registries including Docker Hub and Azure Container Registry). |
14 | | - - topic: Validation Support |
15 | | - cosign: | |
16 | | - * Sigstore [Kubernetes Policy Controller](https://docs.sigstore.dev/policy-controller/overview/) |
17 | | - * [Connaisseur Cosign validator](https://sse-secure-systems.github.io/connaisseur/v3.3.2/validators/sigstore_cosign/) (third-party OSS) |
18 | | - dct: | |
19 | | - * [Docker CLI](https://docs.docker.com/engine/security/trust/) |
20 | | - * [Mirantis Kubernetes Engine (MKE)](https://docs.mirantis.com/containers/v3.0/dockeree-products/msr/msr-user/manage-images/sign-images/trust-with-a-remote-mke.html) |
21 | | - * [Connaisseur DCT validator](https://sse-secure-systems.github.io/connaisseur/v3.3.2/validators/notaryv1/) (third-party OSS) |
22 | | - * [trusted-compose](https://github.com/sse-secure-systems/trusted-compose) for Docker Compose (third party OSS) |
23 | | - - topic: Ecosystem |
24 | | - cosign: | |
25 | | - Integrated with other Sigstore components including |
26 | | - * [Fulcio](https://docs.sigstore.dev/certificate_authority/overview/), an OpenID-based certificate authority |
27 | | - * [Rekor](https://docs.sigstore.dev/logging/overview/), a transparency log |
| 17 | + - topic: Recommended for |
| 18 | + notary: Enterprises |
| 19 | + cosign_fulcio: Open source projects |
| 20 | + cosign_keys: |
| 21 | + dct: |
| 22 | + gpg: Podman |
| 23 | + - _header: Overview |
| 24 | + - topic: Advantages |
| 25 | + notary: | |
| 26 | + * Simple setup |
| 27 | + * Uses existing X.509 PKI infrastructure |
| 28 | + * Mature trust model |
| 29 | + * Recommended by Microsoft and Amazon |
| 30 | + cosign_fulcio: | |
| 31 | + * Existing infrastructure for open-source projects |
| 32 | + * Public transparency log (optional) |
| 33 | + * Podman support (public key only) |
| 34 | + cosign_keys: | |
| 35 | + * Public transparency log (optional) |
| 36 | + dct: |
| 37 | + gpg: | |
| 38 | + * Podman support |
| 39 | + - topic: Disadvantages |
| 40 | + notary: |
| 41 | + cosign_fulcio: | |
| 42 | + * Verification only using repository and/or email addresses |
| 43 | + * Signing without the public transparency log is discouraged |
| 44 | + cosign_keys: | |
| 45 | + * Verification only with public keys or special X.509 certificates |
| 46 | + * Signing without the public transparency log is discouraged |
28 | 47 | dct: | |
29 | | - Based on |
30 | | - * [The Update Framework (TUF)](https://theupdateframework.io/), an opinionated framework for code signing |
31 | | - * [Notary](https://github.com/notaryproject/notary), an online implementation of TUF |
32 | | - - topic: Industry Support |
33 | | - cosign: | |
34 | | - * Excellent adoption by OSS projects |
| 48 | + * Security concern: potential history rewrite |
| 49 | + * No stable support in AKS |
| 50 | + * Complex setup |
| 51 | + * Legacy (no active development) |
| 52 | + gpg: | |
| 53 | + * Signature is not transferrable between registries |
| 54 | + * Signature has to be provided out-of-band |
| 55 | + - _header: 'Feature Support' |
| 56 | + - topic: Transfer signatures between registries |
| 57 | + notary: 'Yes' |
| 58 | + cosign_fulcio: 'Yes' |
| 59 | + cosign_keys: 'Yes' |
| 60 | + dct: 'No' |
| 61 | + gpg: 'No' |
| 62 | + - topic: Non-container artifacts |
| 63 | + notary: 'Yes' |
| 64 | + cosign_fulcio: 'Yes' |
| 65 | + cosign_keys: 'Yes' |
| 66 | + dct: 'No' |
| 67 | + gpg: 'No' |
| 68 | + - topic: Timestamping |
| 69 | + notary: Yes (RFC 3161) |
| 70 | + cosign_fulcio: Yes (through Rekor transparency log) |
| 71 | + cosign_keys: Yes (through Rekor transparency log) |
| 72 | + dct: Yes (through Notary "freshness") |
| 73 | + gpg: 'No' |
| 74 | + - topic: Invalidating signatures |
| 75 | + notary: Yes (X.509 certificate revocation) |
| 76 | + cosign_fulcio: Yes (Rekor log update) |
| 77 | + cosign_keys: Yes (Rekor log update) |
| 78 | + dct: Yes (via TUF) |
| 79 | + gpg: 'No' |
| 80 | + - topic: In-House X.509 PKI |
| 81 | + notary: 'Yes' |
| 82 | + cosign_fulcio: No (only with dedicated Fulcio server) |
| 83 | + cosign_keys: 'No' |
| 84 | + dct: 'No' |
| 85 | + gpg: 'No' |
| 86 | + - topic: Air-gapped systems |
| 87 | + notary: 'Yes' |
| 88 | + cosign_fulcio: 'No' |
| 89 | + cosign_keys: 'Yes' |
| 90 | + dct: 'No' |
| 91 | + gpg: 'Yes' |
| 92 | + - _header: Security attributes |
| 93 | + - topic: Trust model |
| 94 | + notary: PKI, X.509 |
| 95 | + cosign_fulcio: Sigstore (Fulcio, Rekor) |
| 96 | + cosign_keys: Public/Private Keys |
| 97 | + dct: Notary v1, TUF |
| 98 | + gpg: GPG Public Keys |
| 99 | + - topic: Root of trust |
| 100 | + notary: Root Certificate (X.509) |
| 101 | + cosign_fulcio: OpenID Connect Issuer via Fulcio |
| 102 | + cosign_keys: Public Key |
| 103 | + dct: Trust on first use |
| 104 | + gpg: GPG Keyring |
| 105 | + - topic: Root key security |
| 106 | + notary: Secure with SignPath |
| 107 | + cosign_fulcio: Sigstore.dev (public Fulcio instance) keeps keys secure via TUF |
| 108 | + cosign_keys: n/a |
| 109 | + dct: Only file-based root key support |
| 110 | + gpg: Via GPG ecosystem |
| 111 | + - topic: Signing key security |
| 112 | + notary: Secure with SignPath |
| 113 | + cosign_fulcio: None (short-lived client side keys) |
| 114 | + cosign_keys: Secure with SignPath |
| 115 | + dct: Secure with SignPath |
| 116 | + gpg: Secure with SignPath |
| 117 | + - _header: Validation support |
| 118 | + - topic: Kubernetes admission controllers |
| 119 | + notary: Ratify for K8s (recommended by AWS and Azure) |
| 120 | + cosign_fulcio: Sigstore, Ratify, Connaisseur (public key only) |
| 121 | + cosign_keys: Sigstore, Ratify, Connaisseur |
| 122 | + dct: Connaisseur |
| 123 | + gpg: Only podman |
| 124 | + - topic: Required infrastructure |
| 125 | + notary: | |
| 126 | + * OCI-compliant container registry |
| 127 | + cosign_fulcio: | |
| 128 | + * Fulcio CA |
| 129 | + * Rekor transparency log (optional) |
| 130 | + * OCI-compliant registry |
| 131 | + cosign_keys: | |
| 132 | + * OCI-compliant Container registry |
35 | 133 | dct: | |
36 | | - * Intially proposed by Docker (but never quite picked up) |
37 | | - * [Notation](https://github.com/notaryproject/specifications) (a.k.a. Notary 2) is supposed to eventually succeed DCT |
| 134 | + * Docker registry |
| 135 | + * Notary server |
| 136 | + gpg: Podman runtime (no aditionl requirements) |
| 137 | + - topic: Verification policy settings |
| 138 | + notary: | |
| 139 | + * Trusted root certificates |
| 140 | + * Trusted timestamping certificates |
| 141 | + * X.509 certificate fields |
| 142 | + cosign_fulcio: | |
| 143 | + * OpenID Connect issuer |
| 144 | + * Subject |
| 145 | + cosign_keys: | |
| 146 | + * Key pinning |
| 147 | + dct: | |
| 148 | + * Key pinning |
| 149 | + gpg: | |
| 150 | + * Key pinning (per repository or registry) |
| 151 | + |
0 commit comments