Repository navigation
Design and implement offline-capable revocation-list distribution for attestations #182
Copy link
Copy link
Closed
Labels
GrantFox OSSGrantFox Open Source Sponsorship program tagGrantFox Open Source Sponsorship program tagMaybe RewardedIssue may qualify for a reward upon successful completion per campaign rulesIssue may qualify for a reward upon successful completion per campaign rulesOfficial Campaign | FWC26Official FWC26 campaign issue — eligible for campaign scoring and rewardsOfficial FWC26 campaign issue — eligible for campaign scoring and rewardsfeatureNew feature, enhancement, or functional additionNew feature, enhancement, or functional additionhelp wantedExtra attention is neededExtra attention is neededpriority: highpriority: highpriority: highsecuritySecurity-related fix, hardening, audit, or vulnerability remediationSecurity-related fix, hardening, audit, or vulnerability remediation
Description
Activity
- addedhelp wantedExtra attention is neededExtra attention is neededMaybe RewardedIssue may qualify for a reward upon successful completion per campaign rulesIssue may qualify for a reward upon successful completion per campaign rulesGrantFox OSSGrantFox Open Source Sponsorship program tagGrantFox Open Source Sponsorship program tagOfficial Campaign | FWC26Official FWC26 campaign issue — eligible for campaign scoring and rewardsOfficial FWC26 campaign issue — eligible for campaign scoring and rewardsfeatureNew feature, enhancement, or functional additionNew feature, enhancement, or functional additionsecuritySecurity-related fix, hardening, audit, or vulnerability remediationSecurity-related fix, hardening, audit, or vulnerability remediationpriority: highpriority: highpriority: high
on Jul 21, 2026 grantfox-oss commented
on Sep 13, 2026 grantfox-ossboton Sep 13, 2026 – with GrantFox OSSMore actions🎉 This issue has been marked as completed on GrantFox!
@abojeEdwin's PR #295 was approved and merged by @Lakes41.
🏆 @abojeEdwin: You earned 35 FoxPoints for this contribution! Your current tier: Explorer (258 total points). Track your full progress on GrantFox.
👏 Great work, @abojeEdwin! Keep contributing to Adamantine-guild.
- added a commit that references this issue
on Sep 14, 2026
Metadata
Metadata
Assignees
Labels
GrantFox OSSGrantFox Open Source Sponsorship program tagGrantFox Open Source Sponsorship program tagMaybe RewardedIssue may qualify for a reward upon successful completion per campaign rulesIssue may qualify for a reward upon successful completion per campaign rulesOfficial Campaign | FWC26Official FWC26 campaign issue — eligible for campaign scoring and rewardsOfficial FWC26 campaign issue — eligible for campaign scoring and rewardsfeatureNew feature, enhancement, or functional additionNew feature, enhancement, or functional additionhelp wantedExtra attention is neededExtra attention is neededpriority: highpriority: highpriority: highsecuritySecurity-related fix, hardening, audit, or vulnerability remediationSecurity-related fix, hardening, audit, or vulnerability remediation
Difficulty: Expert
Type: Security / Architecture (Protocol-level)
Background: Building directly on Issue #21: once revocation checking exists, the app needs a way to actually know which keys are revoked while offline — the entire premise of
docs/ATTESTATION_PROTOCOL.md's design is that attestations remain verifiable "entirely offline once cached (airplane mode compatible)." A revocation check that requires live connectivity to be meaningful would undermine that exact design goal for the specific case (a compromised/revoked key) where checking matters most.Problem: There is currently no mechanism in the codebase for distributing revocation state in a way that's usable offline with any freshness/staleness guarantee — this is a genuine protocol design gap, not just a missing function call: what's the trust model for a locally-cached revocation list (can it itself be tampered with or rolled back to hide a revocation)? How stale can it be before an offline verifier should refuse to trust any attestation from that guild rather than risk accepting one from a since-revoked key? How does revocation data get bundled with an attestation that's being presented to a third-party verifier who has no live connection to GuildPass at all (the "portability" use case
docs/ATTESTATION_PROTOCOL.mdspecifically calls out)?Expected outcome: A formally-designed (RFC-style) and implemented revocation-distribution mechanism: a versioned, monotonically-increasing revocation list per guild issuer, cached locally with a bounded trust window (mirroring the QR flow's
DEFAULT_KEY_REGISTRY_OFFLINE_TRUST_WINDOW_MSpattern), with explicit policy for what happens when the cache is stale/unavailable, and — for the true offline-portability case — a mechanism for bundling a recent revocation-list snapshot alongside a presented attestation so a disconnected third-party verifier has something to check against (even if it's the presenter's own responsibility to have refreshed it recently, which should be transparent and auditable).Suggested implementation: This requires design collaboration with the
@guildpass/sdk/guildpass-coremaintainers, since a versioned revocation list is a protocol-level concept, not purely client-side. Start with a written design document proposing: the revocation-list format (versioned, signed by the guild issuer key itself or a higher-authority key so the list can't be spoofed), the local caching/trust-window strategy (reusingguildIssuerKey.ts's pattern), and the bundling mechanism for the offline-portability case. Implement the local-caching and staleness-policy portions once the format is agreed upon; the third-party-verifier bundling piece may reasonably be scoped as a follow-up given its cross-repo protocol implications.Acceptance criteria:
Likely affected files:
src/features/attestation/issuerKeyRegistry.ts,src/features/attestation/attestationService.ts,docs/ATTESTATION_PROTOCOL.md, new design document, associated tests.Labels:
security,feature,priority: high,help wanted,GrantFox OSS,Maybe Rewarded,Official Campaign | FWC26