-
Notifications
You must be signed in to change notification settings - Fork 30
[CEP 27] A simple Sigstore predicate #112
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
beckermr
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given the discussion we've had, I think we need to be a bit more specific on what we mean by "validating" by the receiving server. Does the server reject packages if they do not match? What about mirroring? What happens if a server disappears or is taken down?
The destination server information doesn't seem externally verifiable in this broader context.
|
Where are the attestations stored? |
The attestations can be validated using the public sigstore fulcia server. This is the beauty of an sigstore attestation. As long as the public instance stays available you can always cryptographically verify that the signee signed for the predicate inside the attestation. This is what the server does, it validates the validity of the attestetion, and through trusted publishing it knows to trust the signer. From a client perspective this means you just have to trust the signee to trust the predicate inside the attestation. Not the location where you get the attestation from. So if the signee is github we can attest that in a github workflow there was at least the intend to upload the subject (aka the package) to a specific channel. (Note that we dont dont actually know for certain that the package was actually uploaded! But we can assume the intend was there.) For mirrors this allows anyone to verify that a package was uploaded to the base server at least. This is important because it allows validating that a package that was downloaded from for instance prefix.dev/conda-forge was indeed actually uploaded to anaconda.org and the prefix server didnt have a mallicious package. |
|
If the signature on the attestation is from conda-forge or a github job controlled by conda-forge, then having the target channel in the predicates is duplicate information or simply not useful. From the point of view of mirroring, Seeing that conda-forge signed a package and said "I intended this to be uploaded to blah" is not any different than seeing conda-forge signed a package. The man in the middle attack on a secondary server is not secured by the predicate, but by the initial signature itself. |
It doesnt really matter because attestations can be stored anywhere and be validated from anywhere. Eg the origin of the attestation doesnt matter for verification. For this CEP I dont think it matters where they are stored. But on prefix.dev it is already possible to upload attestations. I think it makes sense to standardize how you can download the attestations associated with a certain package to make it possible for clients to download and verify attestations of packages they install. I think you can expect a followup CEP in the near future. |
|
I think we should make the validation of the predicate within the attestation optional since it is unclear what one does with it. Suppose I get a package with an attestation from prefix that is signed by conda-forge and has a target channel that is not anaconda.org. What do I do with that information? I have verified the signature so the package is actually from conda-forge, but apparently it was intended for upload to another spot. Did conda-forge change its infrastructure or did something else go wrong? There is no way to know a priori without consulting some other source by hand. Verification of the information in the predicates is not possible in general and so should not be required. |
|
True! For reference, the pypi predicate also doesnt include any of this information. Its essentially empty. Its just a predicate to be able to sign the subject. |
|
But perhaps that might also not be true for non condaforge channels where there isnt a infrastructure like conda forges availabe. |
beckermr
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have made some suggestions top clarify the CEP.
cep-sigstore-predicate.md
Outdated
| The `predicateType` field is used to specify the schema of the predicate. The `predicate` field contains the actual predicate data. | ||
| We propose to publish a schema to validate the `predicate` field. The schema will be available at `https://schemas.conda.org/predicate-v1.json`. | ||
|
|
||
| The predicate MUST contain the `targetChannel` field, to indicate where the package is being uploaded to. This field MUST be validated by the receiving server. The channel MUST be in canonical form (full URL, no trailing slashes). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The predicate MUST contain the `targetChannel` field, to indicate where the package is being uploaded to. This field MUST be validated by the receiving server. The channel MUST be in canonical form (full URL, no trailing slashes). | |
| The predicate MUST contain the `targetChannel` field, to indicate where the package is being uploaded to. This field's value MAY be validated by the receiving server, but such validation is not possible in general and thus not required. The `targetChannel` MUST be in canonical form (full URL, no trailing slashes). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@beckermr how would you feel about making it an optional field? I think if the field exists, it should be validated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought the predicate had to be non-empty in order to sign at all?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nope, it can be totally empty (that is what PyPI uses). But PyPI only has a single canonical source (channel). We have more channels, therefore we want to add a single targetChannel.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah ok. Yes. I'm happy to have it be optional, but if it is present it must be validated. I'll change my review.
cep-sigstore-predicate.md
Outdated
| This predicate adds basic verifiable facts about the package. It will tie the producer of the package to the target channel. | ||
| This is similar to what PyPI has implemented with the [PyPI publish attestation](https://docs.pypi.org/attestations/publish/v1/). Since there is no single authoritative index in the Conda world, we add the `targetChannel` field to reach parity. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| This predicate adds basic verifiable facts about the package. It will tie the producer of the package to the target channel. | |
| This is similar to what PyPI has implemented with the [PyPI publish attestation](https://docs.pypi.org/attestations/publish/v1/). Since there is no single authoritative index in the Conda world, we add the `targetChannel` field to reach parity. | |
| This predicate ties the producer of the package to the initial target channel for that package. The initial target channel information may become out of date as channels, their locations, names, etc. evolve. This implementation is similar to the [PyPI publish attestation](https://docs.pypi.org/attestations/publish/v1/), but includes the `targetChannel` since there is no single authoritative `conda` package index. |
cep-sigstore-predicate.md
Outdated
| This predicate adds basic verifiable facts about the package. It will tie the producer of the package to the target channel. | ||
| This is similar to what PyPI has implemented with the [PyPI publish attestation](https://docs.pypi.org/attestations/publish/v1/). Since there is no single authoritative index in the Conda world, we add the `targetChannel` field to reach parity. | ||
|
|
||
| On the server, the certificate should be tested against the Trusted Publisher used to upload the certificate to establish a chain of trust. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| On the server, the certificate should be tested against the Trusted Publisher used to upload the certificate to establish a chain of trust. |
cep-sigstore-predicate.md
Outdated
| # CEP - Standardizing the v1 predicate for sigstore attestations | ||
|
|
||
| <table> | ||
| <tr><td> Title </td><td> Standardizing the v1 predicate for sigstore attestations </td> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not to be overly pedantic, but SigStore itself does not have the concept of "attestations"; it's instead a framework for signing arbitrary artifacts (what it calls "verification materials") using short-lived keys, tying those keys to an identity, and logging the signing event to a transparency log.
One of the verification materials that can be signed using SigStore are attestation, but those attestations need to be defined under some other framework.
cep-sigstore-predicate.md
Outdated
|
|
||
| ## Abstract | ||
|
|
||
| We want to standardize attestations for the conda ecosystem. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This single sentence abstract seems to be too broadly scoped. In particular, "attestations" can mean a lot of things, and a single package artifact could have zero or more attestations for it, depending on the various security/threat models being attested to.
We should be absolutely clear about what the predicate being described in CEP is attesting to. Is it to the integrity of the package during transport between the build system and the hosting server, akin to PyPI Trusted Publishing? Provenenace information about the build process itself, a la SLSA? Both? Or something else entirely?
cep-sigstore-predicate.md
Outdated
| ```json | ||
| { | ||
| "_type": "https://in-toto.io/Statement/v0.1", | ||
| "subject": [{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the subject field constrained to one and only one package? Or are there circumstances in which multiple packages can be covered by a single attestation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still an open question (per the current spec, subject is one-package only), but worth calling out that the comment is un-answered.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, I forgot to answer directly here: this CEP as-drafted proposed only a single package subject at a time, since allowing multiple subjects introduces (IMO) a degree of malleability that makes downstream usage harder.
To be precise: if an attestation is allowed to contain multiple subjects, a malicious party could do something like:
subjects:
authentic-0.0.1-etc.conda
inauthentic-0.0.1-etc.conda
...where the authentic package identity is one they're authorized (via the server) to publish for, while inauthentic is some other package they aren't authorized for. This is turn would make it easy for the server to accidentally accept "mixed" attestations and re-broadcast them as if they're "fully" verified.
This is mentioned under the Verifying section as well:
Servers SHOULD perform the same verification process as clients,
with the qualification that the server's trust in the signing identity
is established latently via the server's publishing and upload mechanism.
For example, if the server supports [Trusted Publishing], then the package's
attestation should be verified against the set of Trusted Publisher identities
for that package.
cep-sigstore-predicate.md
Outdated
| The `predicateType` field is used to specify the schema of the predicate. The `predicate` field contains the actual predicate data. | ||
| We propose to publish a schema to validate the `predicate` field. The schema will be available at `https://schemas.conda.org/predicate-v1.json`. | ||
|
|
||
| The predicate MUST contain the `targetChannel` field, to indicate where the package is being uploaded to. This field MUST be validated by the receiving server. The channel MUST be in canonical form (full URL, no trailing slashes). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does the predicate material attest to? Target channel makes it seem like what we want to attest to is some like PyPI Trusted Publishing, but that is not at all clear from the content of this proposed CEP.
If what we want to attest to are claims about the security of build process (a la SLSA), this predicate specification is definitely not sufficient.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some other notes:
...[channel where the] package is being uploaded to...
We might want to clarify or refine that clause. I might be wrong, but a strict reading of that could mean that channel value for conda-forge should be "cf-staging", not "conda-forge". (Since packages are initially uploaded to "cf-staging" and then copied over to "conda-forge".)
channel MUST be in canonical form
We need some reference defining what "canonical form" means. I'm not sure there's consensus of a "canonical" channel in the conda-verse, since packages are perhaps surprisingly mobile across channels.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wouldn't want to generalize from what conda-forge does. We could very well special case how we validate packages for conda-forge based on the workarounds that are currently applied, but I don't think it's a nice situation that conda-forge is in from which we should spec out how we want to deal with sigstore.
conda-forge could decide to upload to a S3 bucket first, and then upload to the conda-forge channel, with another Github Action that also makes OIDC trusted publishing work, as an example.
As such, I don't think this needs any clarification.
And yes, for the canonical form, I propose to use the FULL URL for the channel without trailing slash, e.g. https://anaconda.org/conda-forge. This has nothing to do with packages being mobile, which is another concern that we could solve in a number of ways (not relevant here).
cep-sigstore-predicate.md
Outdated
| This predicate adds basic verifiable facts about the package. It will tie the producer of the package to the target channel. | ||
| This is similar to what PyPI has implemented with the [PyPI publish attestation](https://docs.pypi.org/attestations/publish/v1/). Since there is no single authoritative index in the Conda world, we add the `targetChannel` field to reach parity. | ||
|
|
||
| On the server, the certificate should be tested against the Trusted Publisher used to upload the certificate to establish a chain of trust. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not clear to me what which server is meant here, nor what chain of trust is being established. (Missing threat model in the CEP.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current CEP still seems to be missing a sense of "what threat will/may this protect against" - It would be great to flesh that out a bit, rather than simply the "what are we specifying in the attestation"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I hope the rewrite clarifies this! LMK if not.
cep-sigstore-predicate.md
Outdated
| ```json | ||
| { | ||
| "_type": "https://in-toto.io/Statement/v0.1", | ||
| "subject": [{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still an open question (per the current spec, subject is one-package only), but worth calling out that the comment is un-answered.
cep-sigstore-predicate.md
Outdated
| could be the machine identity of a GitHub Actions workflow that ran from | ||
| `release.yml` within `example/example` against the `v1.2.3` tag. | ||
|
|
||
| ## Motivation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The motivation still seems mostly catered toward "attestations in general" and makes very little mention that this is "attesting about the publication metadata". I wonder if this could be slightly reworded to emphasize the actual goals of publish/v1
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any suggestions how to reword it?
cep-sigstore-predicate.md
Outdated
| This predicate adds basic verifiable facts about the package. It will tie the producer of the package to the target channel. | ||
| This is similar to what PyPI has implemented with the [PyPI publish attestation](https://docs.pypi.org/attestations/publish/v1/). Since there is no single authoritative index in the Conda world, we add the `targetChannel` field to reach parity. | ||
|
|
||
| On the server, the certificate should be tested against the Trusted Publisher used to upload the certificate to establish a chain of trust. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current CEP still seems to be missing a sense of "what threat will/may this protect against" - It would be great to flesh that out a bit, rather than simply the "what are we specifying in the attestation"
cep-sigstore-predicate.md
Outdated
| This CEP proposes the following attestation statement layout, using the | ||
| [in-toto Statement schema]: | ||
|
|
||
| - `predicateType` **MUST** be `https://schemas.conda.org/attestations/publish/v1` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry if this is an obvious question, but what are the contents of https://schemas.conda.org/attestations/publish/v1? Or is it just a string identifying this attestation format? i.e. is it empty?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The type field should contain this exact string. The other fields of the dictionary should contain the fields as specified in the schema.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah OK, you mean what we would see when clicking that URL. Yes, probably we should provide a real JSON schema that we would have behind that URL already..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, having that URL provide a JSON schema would be reasonable. Another option would be to have it serve an HTML page with a render of the schema or just a description thereof, which is what PyPI does:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's go for the JSON schema as Jannis suggested, and let's open the relevant PR in https://github.com/conda/schemas to provide the file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
draft PR for the schema opened: conda/schemas#76
|
Hello @conda/steering-council. Requesting a vote for this CEP. This vote falls under the "Enhancement Proposal Approval" policy of the conda governance policy, It needs 60% of the Steering Council to vote To vote, please use the following form to vote. If you have questions concerning the proposal, you may also leave a comment or code review. This vote will end on 2025-07-02, End of Day, Anywhere on Earth (AoE). @xhochy (Uwe Korn)
@CJ-Wright (Christopher J. 'CJ' Wright)
@mariusvniekerk (Marius van Niekerk)
@chenghlee (Cheng H. Lee)
@ocefpaf (Filipe Fernandes)
@marcelotrevisani (Marcelo Duarte Trevisani)
@msarahan (Michael Sarahan)
@mbargull (Marcel Bargull)
@jakirkham (John Kirkham)
@jezdez (Jannis Leidel)
@wolfv (Wolf Vollprecht)
@jaimergp (Jaime Rodríguez-Guerra)
@baszalmstra (Bas Zalmstra)
@Hind-M (Hind Montassif)
@trallard (Tania Allard)
@pavelzw (Pavel Zwerschke)
|
jezdez
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A bunch of requests for clarification, nits and typos.
cep-sigstore-predicate.md
Outdated
|
|
||
| - [Sigstore] is a project that enables misuse-resistant software signing | ||
| and verification via short-lived certificates and a tamper-evident log. | ||
| Sigstore composes with attestation frameworks like in-toto to provide |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Sigstore composes with attestation frameworks like in-toto to provide | |
| Sigstore works with attestation frameworks like in-toto to provide |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: I feel like composes is a bit more correct?:
"Sigstore composes with X to provide Y" vs. "Sigstore works with X to provide Y"
alternatively, this could also be "Sigstore uses X to provide Y"
@jezdez wdyt?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed, changed to Sigstore uses attestation frameworks like in-toto...
cep-sigstore-predicate.md
Outdated
| One of Sigstore's major misuse-resistance contributions is | ||
| the use of *ephemeral keys* for signing. Modifying the example above: | ||
|
|
||
| - Instead of maintaining a long-lived signing key, Alice generates an | ||
| *ephemeral key* and binds it to her *identity* | ||
| ("`alice@trustme.example.com`"). | ||
|
|
||
| This binding is done via a certificate issued by [Fulcio], which verifies a | ||
| *proof of possession* (such as from [OpenID Connect]) from Alice for her | ||
| claimant identity. The certificate issued by Fulcio is, in turn auditable | ||
| via [RFC 6962] Certificate Transparency (CT) logs. | ||
|
|
||
| - Alice signs her attestation with her ephemeral key, and distributes a | ||
| "bundle" containing both her attestation and her signing certificate. | ||
|
|
||
| - Instead of establishing trust a long-lived key from Alice, Bob establishes | ||
| trust in Alice's identity. | ||
|
|
||
| - Bob can verify the attestation's signature against Alice's emphemeral key, | ||
| which in turn can be verified as authentically Alice's via the Fulcio- | ||
| issued certificate. | ||
|
|
||
| With this flow, neither Alice nor Bob needs to maintain long-lived signing | ||
| or verifying keyrings, in turn reducing the attacker surface for key | ||
| compromise. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like this section is indented oddly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, I think pre-commit also found something
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
cep-sigstore-predicate.md
Outdated
| Because a valid transparency log inclusion proof is a requirement during | ||
| verification, an attacker who compromises a signing identity *cannot* | ||
| perform a targeted attack without making the attack itself publicly | ||
| discoverable. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Alright, so the targeted attack is publicly discoverable, wouldn't that just reduce the time the attacker has to run the attack, exfiltrate data etc? Can you say something about how this added transparency influences the ability to defend against targeted attacks?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you say something about how this added transparency influences the ability to defend against targeted attacks?
Yeah, can do -- the idea is that in the context of targeted attacks, the victimized party (i.e. the one the attacker is impersonating) can monitor for uses of their identity in real time, meaning that they can respond proactively to the compromise instead of waiting for the first report of compromise from a downstream. I'll fill that in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed, added more about how the transparency log helps detecting and responding to compromises:
Because a valid transparency log inclusion proof is a requirement during
verification, an attacker who compromises a signing identity *cannot*
perform a targeted attack without making the attack itself publicly
discoverable. This means the log can be monitored in real time for
uses of identities, allowing users to proactively detect and respond
to an identity being compromised, rather than having to wait for the
compromise being detected downstream and reported.
cep-sigstore-predicate.md
Outdated
| ## Discussion | ||
|
|
||
| This predicate adds basic verifiable facts about the package. It will tie the | ||
| producer of the package to the target channel, if the attestation's producer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| producer of the package to the target channel, if the attestation's producer | |
| producer of the package to the target channel, if the attestation's producer |
I think it might be good to mention mirrors here again?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed, added mention of how target channels are verified and how mirrors might be handled:
This predicate adds basic verifiable facts about the package. It will tie the
producer of the package to the target channel, if the attestation's producer
chooses to do so. A verifier can then use this information during the
verification process, checking that the target channel matches the channel the
package was retrieved from, or ignoring a mismatch between channels when the
package is retrieved from a mirror.
cep-sigstore-predicate.md
Outdated
| the PyPI and RubyGems ecosystems, e.g. [PyPI's Integrity API]. | ||
|
|
||
| 3. This CEP specifies an single initial in-toto predicate | ||
| (`https://schemas.conda.org/attestations/publish/v1`), which conveys |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| (`https://schemas.conda.org/attestations/publish/v1`), which conveys | |
| (`https://schemas.conda.org/attestations-publish-1.schema.json`), which conveys |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
|
pre-commit is noticing a bunch of markdown related issues, FYI |
|
Is there any ongoing work to integrate this into the conda ecosystem, or is it still in a specification/standardization phase? If the former, maybe refer to it? |
|
@Hind-M indeed, there is ongoing work on the prefix.dev side to implement this. We already have the implementation in our backend: https://beta.prefix.dev/channels/wolf-channel/packages/signed-package |
cep-sigstore-predicate.md
Outdated
| This attestation layout is based on the [in-toto] framework | ||
| and will enable further integration with signing schemes like | ||
| [Sigstore]. | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As a stylistic note, we should add something like this, since it looks like we're using "MUST" in the RFC2119-way:
Specification
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119][RFC2119] when, and only when, they appear in all capitals, as shown here.
More specifically, violations of a MUST or MUST NOT rule MUST result in an error. Violations of the rules specified by any of the other all-capital terms MAY result in a warning, at discretion of the implementation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
|
(Not a discussion to be held here since this proposal concerns package content attestation: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some comments:
- Please let's fix all the pre-commit lint and review all the suggestions made by other reviewers, marking as solved when addressed.
- The schemas.conda.org content must be a JSON schema (not a random HTML), so let's change to that as Jannis proposed. The JSON schema itself needs to be provided in
conda/schemasin a PR.
cep-sigstore-predicate.md
Outdated
| This CEP proposes the following attestation statement layout, using the | ||
| [in-toto Statement schema]: | ||
|
|
||
| - `predicateType` **MUST** be `https://schemas.conda.org/attestations/publish/v1` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, please, let's fix this.
cep-sigstore-predicate.md
Outdated
| This CEP proposes the following attestation statement layout, using the | ||
| [in-toto Statement schema]: | ||
|
|
||
| - `predicateType` **MUST** be `https://schemas.conda.org/attestations/publish/v1` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's go for the JSON schema as Jannis suggested, and let's open the relevant PR in https://github.com/conda/schemas to provide the file.
Signed-off-by: William Woodruff <william@trailofbits.com>
Signed-off-by: William Woodruff <william@trailofbits.com>
Signed-off-by: William Woodruff <william@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
fix last predicateType URL
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Remove redundant code and fix markdown lint warnings
|
draft PR in |
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Address more review comments
Signed-off-by: Facundo Tuesca <facundo.tuesca@trailofbits.com>
Remove duplicate `Specification` section
|
Hi everyone! Thank you for voting, and thanks to Trail-Of-Bits (@woodruffw and @facutuesca) for working so tirelessly to get this over the finish line. The voting results are: Total voters: 16 (valid: 14 = 87.50%) Yes votes (12 / 85.71%):
No votes (0 / 0.00%)): Abstain votes (2 / 14.29%): Not voted (2):
Invalid votes (0): That means we reached quorum and a majority has voted with yes, which means that this CEP is officially accepted! 🎉 |
jaimergp
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Congratulations! We are missing the entry in the README table. Once added, we can (squash-)merge!
|
Fixed, and fixed header table too. |
This is the initial CEP of what we are proposing to use as a predicate in the Conda ecosystem when signing packages.