-
Notifications
You must be signed in to change notification settings - Fork 233
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
Make more VSA fields optional, add verification section #878
Comments
#964 addresses 2 & 3 but omits 1 (making more of the fields optional). Should we pop that into a separate issue? |
I'm inclined to just leave it as part of this issue, even if multiple PRs address separately. |
Describe how to verify VSAs. - Detail verification procedure. - Add verification examples to clarify verification procedure. - Change `vsa.timestamp` from `required` to `optional` because it is not part of the verification procedure. Fixes #878 BREAKING CHANGE: `timeVerified` switch from `required` to `optional`. --------- Signed-off-by: kpk47 <kkris@google.com> Signed-off-by: kpk47 <1079282+kpk47@users.noreply.github.com> Signed-off-by: Mark Lodato <lodato@google.com> Signed-off-by: Joshua Lock <joshua.lock@uk.verizon.com> Signed-off-by: Mend Renovate <bot@renovateapp.com> Signed-off-by: arewm <arewm@users.noreply.github.com> Co-authored-by: Joshua Lock <joshuagloe@gmail.com> Co-authored-by: olivekl <83081275+olivekl@users.noreply.github.com> Co-authored-by: Mark Lodato <lodato@google.com> Co-authored-by: Joshua Lock <joshua.lock@uk.verizon.com> Co-authored-by: Mend Renovate <bot@renovateapp.com> Co-authored-by: Andrew McNamara <arewm@users.noreply.github.com>
Reopened and updated the list of tasks in the top post to list what still needs to be done. Alternatively, if we decide not to do an item, I'll update it to check it off and explain why we decided not to do that. |
Hi @kpk47, do you plan to work on the remaining items in this issue for the v1.1 release or would you like us to find another owner? |
I think I mostly agree with what's there now:
|
Thanks Ramon. Are you suggesting |
Ramon, Can you elaborate on why |
✋ I have some concerns regarding the proposal on these two fields:
To my understanding, VSA is essentially an endorsement statement. Hence it is rather important to declare what attributes the statement endorses; Because without the declaration, a statement is subject to any sorts of misinterpretation, which effectively turns its value to zero. IMO to SLSA's advantage, it has already defined several attribute tracks, i.e. the BUILD track and SOURCE track. So even for organizations who do not want to disclose their internal attributes, maybe they could at least disclose the SLSA track attributes? (If they don't want to disclose anything, even SLSA tracks, then why bother creating the statement? Just use code signing instead. :P)
I think it is generally a good idea to associate a VSA (or any attestation for that matter) with a time reference, because otherwise it becomes a "perpetual statement" -- no one knows when it is issued, no one can define how long it is good for. Or maybe there will be a proposal to make time-stamping a more general feature in the in-toto statement layer, hence removing the redundancy here? If that's the case then I am OK. |
@joshuagl I meant to say that @jeffvaughan-google As far as slsa-verifier's ability to verify policy, it can only be as far as matching that the URI in the VSA is the same as what the user expects, and not concerning the policy's content. It's still going to be up to the user to know the meaning of their policy, and trust the producer's compliance to their policy. With that, @AdamZWu Back to |
@ramonpetgrave64 I don't quite get your concerns about "closed-source producer that consumes from other closed-source producers". To my understanding, the builder requirements are not recursive or transitive. That is, the build level a builder qualifies is not affected by the build level of any of the prebuilt dependencies or their transitive dependencies. A builder can qualify SLSA Build L3 even if it consumes binaries produced by lower level builders (including L0, i.e. builders who did not meet any SLSA requirements). Artifacts produced by such a build could rightfully claim |
Users aren't meant to check the policy URI itself, instead they're meant to check the |
@TomHennen For verification, yes. And that's the current implementation in the pending VSA support in slsa-verifier. But I believe the user should still have the field in lieu for situations where there is a lack of a meaningful @AdamZWu I mean SLSA_BUILD_L1 only in the sense that it says that some type of build provenance must exist. That's a self-certification, if producers are unwilling to share their provenance or share their process for documenting provenances. I agree that SLSA_BUILD_L1 should be standard, but having it be a minimum required level for VSAs is too much if we mean to get VSA adoption. Even a VSA is a kind of provenance, if not a build provenance. |
@ramonpetgrave64 Ah I think we misunderstood each other. :) By requiring at least some SLSA track attributes, I don't mean placing any "minimum bar" on the ladder (e.g. must be at least L1). SLSA_BUILD_L0 is a legitimate attribute. I totally agree having Imagine someone taking a VSA and telling a less SLSA-knowledgeable user: "Look! This is a valid signed SLSA VSA, which certifies it meets all SLSA requirements!" And the user looks at the predicate and cannot find any contrary evidence -- because there is no As to the concern of self-certification, my understanding is that, the entire VSA is just a self-certification, so whether the attribute is The whole point of publishing VSA instead of build provenance is to allow organizations to self-certify their SLSA compliance, without disclosing their internal process or knowledge. |
There had previously been some that didn't want to make any statements about the SLSA level something met, but might have been happy to publish a VSA with an empty verifiedLevels field. It might not seem satisfying but it does allow a 'generic' method of code signing that can be expanded to other things in the future once folks are ready for it. Also, if/when the VSA moves to in-toto it wouldn't make sense to require any SLSA specific things. |
I think that admission is too big of a first step for many potential producers. I wish I could back up my opinion but here's one example. Like @TomHennen says it might be a better signal to require |
Yes, an empty Would you entertain the idea that SLSA introduces an explicit level token of "non-certification"? e.g. for organizations who do not want to endorse artifacts on any SLSA level ladder, they should set a value like |
I would definitely entertain it. Personally, I wouldn't tie the SLSA ladder to VSAs in that way, but I think the decision is up to a committee. |
@ramonpetgrave64 Is the following about
If so, I disagree. I don't think it's the case that |
Similar to #875, I would like to fix a few issues with VSA v1.0 as well for a v1.1 release.
A VSA is a claim by
verifier
thatsubject
was passed the policy forresourceUri
. That's the bare minimum, and those field MUST be specified or else it doesn't make sense. In particular:verifier
is required for the same reason asbuilder.id
(Provenance v1.1+: removebuilder.id
? #622).resourceUri
is required to ensure that an artifact that passed for one resource cannot be applied to a different resource (i.e. a confusion attack). For example, if a particular container image is allowed to be published as name "foo", you should not be able to take a VSA and claim that it can be published as "bar".Actions:
bundle
which is not present in the VSA.All other fields should be OPTIONAL. Specifically:
policy
: While recommended, it should not be required to indicate which policy was verified. You could imagine a situation where a closed source organization does not want to leak the identifier of its own internal policy.policy.uri
: If a policy is specified, I don't see why a URI is required. What if you just want to include a digest?verifiedLevels
: An organization might want to claim that a particular artifact passed its internal policies without making any public claim about what those policies were. The use case here would be something like CompanyX publishes a container image with a VSA saying the image is OK, and clients verify this. They don't need to know the level, just that CompanyX blessed it. (This is akin to a classic code signing case.)timeVerified
: Nice to have, but I don't see why it's strictly required.The text was updated successfully, but these errors were encountered: