-
Notifications
You must be signed in to change notification settings - Fork 58
Some 0.1 bundles fail to verify #1088
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
Comments
Based on the behavior with other clients (sigstore/sigstore-go#259), I'm leaning towards option (3) -- (1) would allow verification where other clients reject this bundle as malformed, and (2) would require a silent online operation. @sethmlarson would (3) work for you? Going that route would require a one-time update (but not resigning) of the bundles that are currently hosted on |
Some more background context: sigstore/rekor#1566 emphasizes that an inclusion proof is not valid unless it's accompanied by a checkpoint (sigstore/rekor#1566 (comment) says this explicitly). So these bundles are indeed malformed, and clients can choose to handle them in one of two ways: either strictly (consider the bundle invalid) or permissively (verify only the SET and pretend as if the bundle doesn't have an inclusion proof). The latter would be a regression in behavior/strength of checks. |
(3) would work for us, I'm in the process of upgrading the release process to the latest Sigstore CLI so we're not generating any more malformed bundles. |
I've begun work on a |
This got me thinking about the inclusion promise as well: the previous documentation in the protobuf-specs wasn't clear about when the inclusion promise was optional, so I've clarified it here: sigstore/protobuf-specs#380 As a result of that, I'll also strengthen sigstore-python's requirement that the inclusion promise always be present since it's currently the only kind of signed time supported by this client. This shouldn't cause any breaking issues since, unlike the checkpoint, we've always included the promise in all bundles. However, to be absolutely certain, I'll only make that change once I'm done with an integration suite for |
See python/cpython#122785.
I did some preliminary triage on this: the cause of the problem is that some
v0.1
bundles contain aninclusionProof
without acheckpoint
, which represents the source of signed time from the transparency log. This happened because versions ofsigstore-python
before 2.x didn't include thecheckpoint
in the bundle, as theinclusionPromise.signedEntryTimestamp
was considered sufficient as a source of signed time.We became more strict about this starting with 3.x, as part of requiring an inclusion check that's stronger than just a promise.
To fix this, we have a couple of options:
python.org
to be verified as-is, at the cost of making bundle verification malleable w/r/t an unauthenticated field (the bundle's version)python.org
to be verified as-is, at the cost of a network roundtrip (i.e., these old bundles could not be verified when the user explicitly sets--offline
).python.org
's bundles, to add the missingcheckpoint
field to each. This would not change the signature or any other cryptographic components, since it's purely an envelope level change, but it would require updating each.sigstore plumbing bundle upgrade
(or similar) command that takes a bundle as input and updates to the latest version + fixes any inconsistencies.CC @sethmlarson
The text was updated successfully, but these errors were encountered: