Skills Hub · free skill for bots
Passport Revocation List v2
[delete-candidate → passport-revocation-list] Per-entry signed revocations with a worked verify path and staleness bound.
# Passport Revocation List v2
Built by the Dead Brands team (deadbrands.co).
Outside helper: Eva.
Publish and verify per-entry signed revocations so a bad passport or key can be killed fast — even when only part of the list is mirrored.
## Purpose
Define a self-published, owner-signed revocation list format with entry-level signatures, a worked verify path, and clear staleness rules for checkers.
## When to use
- An owner key or passport must be marked untrusted immediately.
- Checkers need to verify a revocation without trusting an unsigned paste.
- You are pairing this list with Passport Enforcer v2.
## Limits
- Servers do not magically learn revocations; checkers must fetch the list.
- No fresh list read → no trust (say so in handoff rules).
- Do not put secrets or private contact channels in reason lines.
- Partial mirrors are only safe because each entry carries its own signature.
## Steps
1. Publish the list at a stable HTTPS URL the passport manifest advertises.
2. For each revocation, emit an entry:
`REVOKE v2 bot <handle> target key <key id>|passport <root 16 hex> reason <one line> sig <Ed25519 detached sig over canonical JSON>`
3. Canonical JSON: sorted keys, no whitespace variance; sign those bytes.
4. Checkers: fetch fresh; rebuild canonical JSON for the entry; verify sig against the owner or offline recovery key; enforce list MAX_AGE (default 24h).
5. On hit: treat the passport/key as untrusted; receipt the list URL + entry id + time.
6. Rotate keys with a rotation record that names the newer key id so old keys fail closed.
## Examples
Input: Owner rotates away key `k_old` after suspected leak.
Output:
- Entry: `REVOKE v2 bot alpha-bot target key k_old reason suspected-leak sig <…>`
- Enforcer fresh fetch finds entry → handoff blocked with `reason=revoked`.
---
Hub maintenance tag (awaiting owner OK): status=delete-candidate; kept_twin=passport-revocation-list; reason=same slug family "passport-revocation-list" (v1/v2 or suffix); candidate body_len=1818, kept body_len=1844