COVENANT LABS · THE KERNEL · SECURITY MODEL
The security model
How NOD3, the execution engine, decides what may register and what may run.
V1.0 · MAY 2026 · NOD3
K.1
Two trust concerns
The engine runs a delegated signing model with two separate concerns: who may add an action to the registry, and who may call a registered action. Registration authority and invocation authenticity are handled by different keys with different exposure.
The current model is not full production isolation. It is a first layer that guarantees four things:
- 01Only holders of the engine root key can register actions.
- 02Only engine-signed requests can invoke actions.
- 03Actions verify invocations with the engine public key alone.
- 04The action surface never holds an engine private key.
K.2
Signed registration
The trust anchor is a single root private key. During early development the trusted SDK runtime holds it. From the root key and an action_id the SDK derives an action-specific private key, and that derived key signs the action's registration claim.
ENGINE_ROOT_PRIVATE_KEY + action_id
↓
derived action private key
↓
signed registration claim
↓
engine re-derives identity · verifies signatureThe engine re-derives the expected identity from the same root key and action_id, then checks the signature over the claim. Derivation is deterministic: the same root and the same action_id always produce the same identity, and a different action_id produces a different one.
{
"claim_version": "engine.action.registration.v1",
"claim": { "...": "action metadata" },
"signature": "...",
"signature_algorithm": "ed25519",
"action_identity_version": "v1"
}The signed claim covers the action's full descriptor: action_id, name, service, version, protocol, base_url, path, method, schemas, timeouts. Change any field after signing and verification fails.
K.3
Signed invocation
Invocation runs the other direction. The engine builds the request and signs it with its own private key. The action holds only the matching public key, verifies the signature, and executes only if it holds.
ENGINE_PRIVATE_KEY signs invocation request
↓
action verifies with ENGINE_PUBLIC_KEY
↓
valid → execute · invalid → rejectThe payload binds the signature to the exact request:
| FIELD | BINDS THE SIGNATURE TO |
|---|---|
| action_id / audience | This action, no other. |
| method + path | The exact endpoint. |
| body_hash | The exact payload, unmodified. |
| timestamp | A fresh request. |
| nonce / request_id | A single use, no replay. |
A verified request is known to come from the engine, to be unmodified, to be addressed to this action, and to be fresh.
K.4
The trust boundary
For registration, any holder of the root key is inside the authority domain. Anyone without it cannot produce a registration the engine will accept. For invocation, the engine's private key signs and the public key verifies. Actions hold verification material only, no signing authority.
The shape is shared-authority delegated registration with public-key verified invocation. The registration secret is powerful and centralized. The invocation path needs no secret at the edge at all.
K.5
What it covers, what it does not
PROTECTED
| External registration | No valid signature exists without the root key, so outside processes cannot write to the registry. |
| Metadata tampering | The signature covers the whole claim. One edited field breaks verification. |
| Identity confusion | Derivation is deterministic. One action_id maps to one identity. |
| Forged invocation | Actions reject any request the engine did not sign. |
| Secret theft at the edge | A compromised action runtime can verify requests but cannot sign new ones as the engine. |
NOT PROTECTED
| Compromised SDK host | A host holding the root key can mint any action identity and register arbitrary actions. |
| Per-action containment | While the root key sits in the runtime, derived keys give structure and attribution, not isolation. |
| Confidentiality | Signatures prove origin and integrity. They hide nothing. Transport security comes from TLS. |
| Replay, by signature alone | Freshness requires timestamp and nonce checks, and the receiver must enforce them. |
| Root key leak | An attacker mints valid identities and valid registrations. This key is the whole registration authority. |
| Invocation key leak | An attacker signs requests actions will accept. The key never leaves engine-controlled infrastructure. |
K.6
The invariants
REGISTRATION
Only a holder of the engine root private key can produce an action registration the engine will accept.
INVOCATION
Only a holder of the engine invocation private key can produce a request an action should accept. The action needs only the public key to check it.
root key proves registration authority derived action key proves action registration engine private key signs invocation engine public key verifies invocation
K.7
What the action runtime holds
| MATERIAL | ROLE |
|---|---|
| ACTION_ID | Identifies the action. |
| ACTION_PRIVATE_KEY | Signs action-owned claims: registration now, result signing later. |
| ENGINE_PUBLIC_KEY | Verifies invocations from the engine. |
Never present at the edge:
ENGINE_ROOT_PRIVATE_KEY ENGINE_PRIVATE_KEY
Both stay in engine-controlled or provisioning infrastructure.
K.8
The hardening path
The known weakness of the current stage is concentration: the SDK runtime holds the root key, so it holds the whole registration authority. That is acceptable only while that host is trusted. The next step moves the root key into provisioning infrastructure and hands each action only its own derived key. A compromised action then costs one identity, not the authority.
| STAGE | STATE |
|---|---|
| 01 · NOW | Shared root key in the trusted SDK runtime. Signed registration, signed invocation, public-key verification at the action. |
| 02 | Root key leaves the runtime. A provisioner mints per-action keys; the runtime receives only ACTION_ID, ACTION_PRIVATE_KEY, ENGINE_PUBLIC_KEY. |
| 03 | Key IDs and rotation for both key families. Replay protection, audience binding, registry policy. |
| 04 | KMS or HSM backed signing and short-lived credentials. Result signing and audit logs. |
| 05 | A certificate or delegation model replaces deterministic derivation. |
Two rules carry through every stage. Verification proves who sent a registration; policy decides whether to accept it: allowed services and domains, approval gates, restricted methods and paths. And enablement is registry state: an action signs its own descriptor, the engine decides whether it runs.

