-
Notifications
You must be signed in to change notification settings - Fork 27
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
Unifying timestamp verification across SETs and TSA signed timestamps #44
Comments
I believe this summarizes everything we discussed @steiza @loosebazooka @woodruffw @kommendorkapten If we go with this approach, there is no need for significant changes to the client spec. This will still be a policy decision by the client, though I would expect most clients to simply set the policy to be 1 trusted timestamp. Also, this is an edge case, as we expect the typical bundle to contain only a signed timestamp or SET, not both. |
We already have this option define: https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_verification.proto#L69 Verbatim copy: message TimestampAuthorityOptions {
// The number of signed timestamps that are expected.
int32 threshold = 1;
// Disable signed timestamp verification.
bool disable = 2;
} How about update the comment to
This way, if a client does not care if RFC3161 or a SET is used, the As the verifier is in control over the trust root, and we perform deduplication of Rekor Entries, I don't see any immediate risk with this. Thoughts? Edit: removed "clarify" as the intent from the beginning was not for the And if we would change that a SET from Rekor is valid as timestamp alone, should that be more visible? Now in the TimestampVerificationData: https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto#L41 |
I need to catch up on this discussion!, but in the meantime I would like to put out I am broadly supportive of this interpretation & we kind of foresaw something like this happening; this is why we ended up calling the set of {Rekor entries, TSA entries} "ObserverTimestamps": sigstore-go/pkg/verify/signed_entity.go Line 423 in fcb55a2
I'd have to think about the interface a bit more - sometimes we want to specify that we do NOT expect a rekor entry - but in principle I'd support folding |
It looks like Thinking out loud, if we were to have as many configurations as possible, it would be:
A benefit to this is if In practice, I would expect the typical verifier would only use How does this sound? Edit: This also is documented in the client spec, separating timestamp extraction from log inclusion verification. |
Working on a PR now for more discussion, I'll post a WIP shortly. |
The proposal is a bit of a deviation from the ArtifactVerificationOptions. |
Could func WithTransparencyLog(threshold int, verifySET bool) VerifierOption { |
See https://github.com/sigstore/protobuf-specs/pull/179/files#diff-84ba96fbb758e3fc5ba115bb8e8d0d43bb721f47b0b389adc885c68080ceda44 for a proposal if verification options |
Good idea! I posted about this in the linked PR, but roughly, if we combine these, we get the following acceptable combos (x,y = some threshold):
I think this should cover all expected states. The only state we're missing is (only SETs, no TSA sigs), but I can't think of a use case for disallowing TSA sigs, simply don't include TSAs in the trust root. Does this look good to everyone? Invalid states:
|
The fourth option:
if
Or is the thinking that if |
This last discussion is highly related to the discussion in this PR sigstore/protobuf-specs#179 (comment) We should probably stick to having the comments in one place, so lets keep them here if that's easier. |
For this example, what I meant as that the SET would not count towards the Rekor threshold, but we would still verify the SET to extract out the timestamp. I wanted some way to distinguish between an SET as a valid proof vs as a valid timestamp. My proposal is that
Yes, that was my thought initially. But good point about the bundle requirements, I forgot that. I agree with your comment on the other PR about this just being about trusting the time. One nit: Revising this... For v0.2+ bundles:
For v0.1 bundles (which is the same as v0.2, except SETs count towards the log threshold):
Separate question: Would we be OK dropping support for v0.1 bundles? It would make this a bit easier to reason about. Edit: Another option is to drop The other thing is that with v0.1 bundles, you cannot distinguish between proofs and promises. Then I'd propose a |
Good summary @haydentherapper, I completely agree with the updated understanding. I would rather keep support for Re: |
My main goal is both secure by default and ease of use. I would like a verifier to get reasonable defaults without much configuration, but have the option to configure it to further restrict verification. Something like I've been thinking that by using How does this sound? |
I think I've found a good approach for the API balancing usability and optionality. By adding an option to set a threshold for integrated timestamps, rather than only trusting them, it makes log timestamps look more like signed timestamps. This also covers an edge case of wanting a different threshold for the number of log proofs and log timestamps. So you can either create a verifier like:
Or even Edit: Implemented in 09ad1f8 |
Description
With the current spec, a client specifies how many SETs and how many timestamps are expected. The current implementation expects that every timestamp that is present is verifiable by material in the trusted root. We propose changing this in two ways: First, ignoring any timestamps that cannot be verified, as long as the threshold is met (noted in the bug below). Two, treating SETs and TSA signed timestamps as equals for fetching verified timestamp.
One approach for this is to expose a policy configuration that states a timestamp can be obtained from either an SET or TSA signed timestamp. This could be via a policy flag that states a threshold must be met for either SETs or signed timestamps. Personally, I like this approach of unifying the two, as SETs no longer are used as a proof of inclusion and instead are just a signed timestamp from the log. This also opens us up to adding timestamp providers, like Roughtime.
Related bug: #43 - Once fixed, as long as some number of timestamps are found that meet the threshold, verification will continue, and any failures will be ignored.
The text was updated successfully, but these errors were encountered: