MIT LICENSED · SECURITY PATTERN

Credential Blast Radius Isolation

One credential per runtime class. Surgical revocation without collateral damage. The pattern that prevents a compromised MCP server from taking down the rest of the system.

Part of the charleskjohnson.com governance framework

Every action that mutates state carries attribution to a specific identity. Identities are never shared across humans, machines, or agents. Attribution is captured at the time of action, never reconstructed after the fact.

A credential shared across runtimes is not a convenience — it is a shared blast radius. When one runtime gets compromised (and one of them will, eventually), every other runtime that shares that credential is also compromised. Revocation becomes a binary choice: revoke and take everything down, or leave the compromised credential active and bleed.

The architectural answer is per-runtime credentials with surgical revocation boundaries. If the MCP server is compromised, you revoke only the MCP server's credential. The Claude Code session, the scheduled exports, the API gateway — all continue operating.

IDENTITY TAXONOMY
CLASS 1
human:<identifier>
A human operator acting directly. Example: human:owner-clerk-pat, human:owner-session-jwt. One credential per human per credential-type. Never shared with anyone, including future operators on the same machine.
CLASS 2
machine:<identifier>
A specific physical machine executing on behalf of a human or autonomously. Example: machine:laptop-code, machine:desktop-code, machine:api-server, machine:mcp-server. One credential per machine per function.
CLASS 3
agent:<mission>:<session>
A managed agent or routine within a specific mission session. Example: agent:weekly-digest:2026-04-20-s7. Credentials are session-scoped. When the session ends, the credential is retired.
CLASS 4
system:<component>
An infrastructure component performing automated maintenance. Example: system:audit-export, system:pat-expiry-checker. Reserved: system:anonymous for pre-authentication rejection events.

Each credential is scoped to the minimum permissions required for its runtime to function. A credential that "could do more" but only needs to "do less" is a credential that gets exploited beyond its intended use.

Scope is enforced server-side, not by trust. The server validates each request against the credential's scope before executing. A credential that omits a required scope returns 403, not 200-with-side-effect.

Common scoping mistakes

Revocation is the test of isolation. Ask: "If credential X is compromised at noon, what runtimes are affected at 12:01?"

If the answer is "the one runtime that holds X," the isolation is correct. If the answer is "all runtimes that share X," the isolation has already failed and you discovered it by stress test rather than by incident — which is the better order to discover it.

Revocation must be a deliberate, documented, reversible operation. "Rotate the key" without a tracked revocation entry creates the false impression that revocation occurred.

Revocation checklist

  1. Identify the compromised credential's runtime class and identifier.
  2. Verify no other runtime references the same credential.
  3. Generate a successor credential with a versioned identifier (e.g. machine:mcp-server-v2).
  4. Update the runtime to use the successor.
  5. Revoke the original at the credential authority.
  6. Log the revocation event with reason, replacing identifier, and timestamp.

For any system with multiple AI runtimes:

Any system with more than one runtime that touches sensitive state. The cost of implementation is one extra row in a credentials registry per runtime. The cost of not implementing it is total compromise from a single incident.

Anti-pattern: "We'll just rotate the shared token periodically." Rotation without isolation does not prevent the cross-runtime exploit window between incident and rotation.