Manav.id
Spec

Lease draft

Workload grants, host leases and the offline Gate.

draft-manav-lease-00 — Workload Grants and Leases (Internet-Draft, informational, work in progress)

Last updated 24 September 2026

Abstract. A workload grant is a Receipt whose statement (workload.grant) authorises one exact build of one program to reach one asset within stated limits until a stated date. The issuer converts it into one-hour leases bound to a key generated on the workload host from two sources of entropy (issuer seed and host randomness), such that the issuer can never derive the key. A local, offline Gate that holds no private key enforces leases from memory; an online Refresher renews them and cannot itself grant access. This document specifies the grant rules GR1–GR6, the objects manav-seed/1, manav-lease-req/1, manav-lease/1, manav-revocation/2, manav-gatelog/1, the activation checks V1–V12, lease states, the proof-of-possession message, and the transparency log.

  1. Objects — as in the Guard reference; reference issuer core/Lease.php, core/Host.php, core/GateLog.php, core/TransparencyLog.php.
  2. Key generation (tier G1) — sk_seed = HKDF-SHA-384(salt = seed, IKM = local, info = "manav-epoch-key/1" || 0x0A || host_id || 0x0A || decimal(seq), L = 32); tier G2 — TPM2_StirRandom(seed), TPM2_Create with fixedTPM | fixedParent | sensitiveDataOrigin, TPM2_Certify by the attestation key.
  3. Issuer checks (in order) — host active; host signature and ±120 s timestamp; seed valid and unused; proof of possession under cnf; attestation (else tier G1, never silently G2); seq strictly increasing (else clone alarm, host suspect); per-grant existence, revocation, expiry, host membership, tier; gate-log head reconciliation.
  4. Activation checks V1–V12 — the Gate trusts nothing the Refresher hands it; V6 (statement rp_sig under a key pinned in the Gate's own configuration) bounds an issuer breach; V12 (proof of possession with a fresh challenge) makes a copied keyring useless.
  5. States — FRESH (now ≤ exp and revocation list age ≤ 900 s), GRACE (until offline_until, per offline_mode), DEAD (refuse and close). Worst-case revocation lag = max(max_revocation_age, offline_cap_s).
  6. Proof of possession — "manav-pop/1" || 0x0A || lease_id || 0x0A || challenge || 0x0A || context, context ∈ {activate, upstream:<exporter b64url>, loghead:<from>-<to>:sha256:<h>}; in chained mode the challenge is the TLS exporter value (EXPORTER-manav-pop), so a captured opening frame cannot be replayed.
  7. Security considerations — see the Guard reference for the per-adversary verdicts; Mode A does not protect against root on the workload host; the identity of a program is the identity of its launch.

← All specification documents