Equivocation detection has two latent gaps once key rotation is wired live
- Dominant language
- Rust
- Stars
- 3
- Forks
- 0
- Avg merge
- 1d 42m
- Merged PRs (30d)
- 11
Description
Two related, currently-unreachable gaps in the equivocation-evidence check (`rs/cyphr-server/src/receipt.rs`), both worth tracking now since they'd become real the moment a live key-rotation trigger ships (today nothing in the shipped binary invokes rotation — it's a tested library capability with no caller):
1. **Missing historical key-activeness primitive.** The equivocation predicate conceptually needs to check that a signing key was active *at the time each receipt was signed*, but the only shipped check (`is_key_active`) only answers "is this key active at the current tip." If a server rotates a key out, nothing today lets a verifier confirm the key was legitimately active back when an old receipt was signed — which means a server could, in principle, repudiate its own past receipts by rotating away the key that signed them, once rotation is actually wired to run live.
2. **Not general fork detection.** The check keys on the server's own self-asserted `sequence` integer to decide whether two tip reports describe "the same point in history." A forking server that labeled two conflicting tips with different `sequence` values would evade this specific pairwise check. This is a deliberate scope boundary (verifying that a receipt's claimed roots actually descend from the server's published chain is a separate, more expensive check), but the roadmap section of `docs/specs/receipts.md` should say so explicitly, so it isn't mistaken for complete fork detection.
Neither blocks anything shipped today — both are worth a signpost for whoever wires live rotation or extends the equivocation surface.
Part of the server production-readiness effort tracked in #23. Discovered during the work tracked in #88.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in rs/cyphr-server/src/receipt.rs by reading is_key_active and the equivocation-evidence predicate, then review the roadmap section of docs/specs/receipts.md. Done means the historical key-activeness gap and the check’s fork-detection scope are addressed or explicitly documented for the live-rotation work, without implying complete fork detection.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cryptography, documentation, security
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100