-
Notifications
You must be signed in to change notification settings - Fork 56
Include Root Hash verification when verifying a Rekor Inclusion Proof #248
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
I'll tackle this next.
What would it mean for Sigstore clients to store a Rekor state? In other words, is this something we could do? More for my own curiosity; I'm happy to go the other route! |
Note that everything below is just relevant for online verification, not offline with the bundle.
To verify consistency, that the log is append-only and no mutations have occurred between two points in time, you need a previous point from when you've verified consistency. This would be a previous checkpoint (the first verification would have to be TOFU). When you request an inclusion proof from the log, you would:
It'd be nice to support being able to provide a previous checkpoint to optionally verify consistency. We considered this a much lower priority though, since monitors should already be verifying consistency. This would only be for clients that don't want to trust monitors, and can figure out how to store their checkpoints. (Also, just verifying consistency is not sufficient for clients that want no trust in the log, because split-view attacks are possible, where the log presents a different view to different clients. Each view can still be consistent. Mitigation for split-view isn't currently possible, this is what I'm thinking through for a future Rekor). This is why we said that verifying the signed tree head/root hash is sufficient, just verifying that an inclusion proof came from a trusted log. |
Thanks for the detailed explanation! |
Making sure I understand this: given that (I think I'm probably missing something 🙂) |
There's two Rekor verifications that may happen:
That being said, Bundles for offline verification don't include inclusion proofs - since it's an offline verification. |
Makes sense, thank you! I think my confusion was with the SET and its signature: I keep forgetting that the signature is over the entry without the inclusion proof, for the reasons you've mentioned. In terms of storing the root hash state: is this conceivably something that could be done with TUF in the future? Specifically, does it make sense for it to be included in the trusted root target? That's based on me assuming that the root hash only changes when the log is rotated, which might be incorrect 🙂 |
The root hash is updated every time an entry is processed. When you upload an entry to a merkle tree, it changes that node's parent, its parent, etc, all the way up to the root node (log(N) changes). |
Description
Mentioned here:
When verifying inclusion proof, there needs to be a pin on the root hash: this root hash can ideally come from verifying consistency with a stored client state, or verifying the signature on the root hash (e.g. a Signed Root Hash with the rekor public key). Since sigstore clients don't store a rekor state, their best option is the latter.
Otherwise inclusion proofs don't mitigate attacks where you are served a valid inclusion proof on some random log, not Rekor.
cc @haydentherapper
The text was updated successfully, but these errors were encountered: